İsteğe bağlı bağımlılıkları arch linux'ta pacman ile listeleyin


23

Arch Linux kullanıyorum.

Tüm kurulu paketlerin isteğe bağlı bağımlılıklarını listelemenin bir yolu var mı? Evet ise, yalnızca eksik (kurulmamış) paketleri görmek için bu listeyi filtreleyebilir miyim?


1
Arch'ı kullanmadım, ancak "bağımlılık" isteğe bağlı görünmüyor (diğer dağıtımlarda değil).
jordanm

AFAIK, bunu hemen pacman ile yapabileceğini sanmıyorum. Ancak bunu yapmak için küçük bir senaryo yazmak çok mümkün. Yüklü paketlerin listesi için sorgu pacman. Yaourt'un PKGBUILD'larını getirmesini ve optdeps listesini okumasını sağlayın. Pacman-git'in en son sürümü, optdeps'in önceden kurulmuş olup olmadığını belirten bir taahhüt içeriyor.
lanet

@ jordanm: gibi bağımlılıklar ve isteğe bağlı bağımlılıklar inşa etti. Optdeps, yalnızca bir paketin belirli özellikleri için gereklidir. Dolayısıyla, bu özelliği kullanmıyorsanız, sisteminizi bir çok bağımlılıkla şişirmenize gerek yoktur.
lanet

Ben kullandımpacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

Yanıtlar:


5

Veritabanını sorgulamak için expac kullanabilirsiniz pacman.

Gibi bir şey:

awk 'NF>=2' <(expac "%n %O") > optdeps

Makinenizdeki yüklü paketlerin bir listesini ve optdependsher biri için ( %O) 1'i bir dosyaya yazdıracaktır optdeps. Bunu daha sonra kurulu optdepends paketlerinin listesine göre sıralayabilirsiniz.

man expacSeçeneklerin tam listesi için bakınız .


1. Bu büyük bir O, sıfır değil. Çünkü ikisi arasında ayırt edici bir fontu olamaz .


[dürtme] Şimdi böyle bir yazı tipimiz var. :)
muru

4

AUR-Repository'de (aur / pacdep) hoş bir yardımcı program var.

pacdep'in çok fazla seçeneği var - sadece bir örnek - "thunar-archive plugin" için isteğe bağlı paketleri bulun:

> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB
[...]

Yukarıdaki çıktı, isteğe bağlı paketlerden hiçbirinin yüklenmediği anlamına gelir. "Xarchiver" kurulduktan sonra çıkış benziyor

[...]
Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB
[...]

Bu cevabı buldum (ilk kısmı)
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies


3

Bu tam olarak verimli değildir, ancak ne istediğinizi bulacaktır (COLOR'da!):

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
   done 
   echo
done 

Tam olarak emin değilim, ama ||bunun &&peşinden değil, sonra grepçizginin geri kalanında parantez kullanılmamalı mı?
Rörd

Ve daha önemlisi, bu muhtemelen pacman çıktısının "Bağımlılar" bölümü yerine "İsteğe Bağlı Bölümler" bölümünü kullanmalıdır.
Rörd,

Örneğin, xmms2 ile :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_

2

@ DarkHeart'ın çözümünün gerçekten işe yaramadığını fark etmeme rağmen, çalışan bir tane yapmam için bana ilham verdi. (renk olmasa da)

Kullandığım paket sorgu I (yaourt'u bir bağımlılık var) zaten yüklü yaşadım çünkü, @jasonwryan tarafından önerildi yerine EXPAC benzer bir alet. Expac kullanmak için bunu değiştirmek önemsiz olmalıdır.

Tüm isteğe bağlı bağımlılıkların listesi çoğunlukla paket sorgulama çağrısı ile yapılır. İlk for-loop açıklamaları kaldırır, bu yüzden sadece isteğe bağlı bağımlılıkların paket isimleri kalır; ikinci for-loop, sonuçları ikinciye basmadan önce, halihazırda kurulu olan bağımlılıkları ilk satırında siler.

#!/usr/bin/perl
use strict;
use warnings;

my %deps;
for (`package-query -Q -f'%n %O'`) {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
}

2

Bu hile yapmak gerekir:

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

commTüm isteğe bağlı bağımlılıkları listeleyen ilk girdi , ikincisi yüklü tüm paketleri ve bunların 'sağlama' özelliklerini girin. Her iki liste de sıralanır ve her öğe nedeniyle yalnızca bir kez içerir sort -u. Daha sonra sadece birinci listede bulunan ancak ikinci listede bulunmayan çizgiler gösterilir.

(@ Archemar'ın önerisini içerecek şekilde düzenlendi)


0

Bazen geriye doğru çalışmak zorundasınız ... önce isteğe bağlı olmayan tüm bağımlıları bulun, sonra tam listeyle çapraz referans alın, sonra uniq kullanın. Bu yüklü isteğe bağlı bağlı bir listesini oluşturur.

Kurulu olanları bul

pacman -Q

İsteğe bağlı olmayanları bul:

pacman -Qent

Bu nedenle, benzersiz girişler isteğe bağlı olmalıdır:

(pacman -Q; pacman -Qent) | sort | uniq -u 

Eksik isteğe bağlı bir liste oluşturun, açıklamalara bağlıdır, hoş değil ama çalışır.

pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done

for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'

0

Sadece GNU sed'de denedim ama

yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'

bu çalıştı (İstediğiniz gibi sort / uniq kullanın).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.