Arch Linuxを使用しています。
インストールされているすべてのパッケージのオプションの依存関係を一覧表示する方法はありますか?はいの場合、このリストをフィルタリングして、不足している(インストールされていない)パッケージのみを表示できますか?
expac を使用して、pacman
databaseを照会できます。
何かのようなもの:
awk 'NF>=2' <(expac "%n %O") > optdeps
マシンにインストールされているすべてのパッケージのリストと、各パッケージのoptdepends
(%O
)を出力します1optdeps
というファイルに。次に、インストールされたoptdependsパッケージのリストに対してこれをソートできます。
オプションの完全なリストについては、man expac
を参照してください。
1.それは大文字のOであり、ゼロではありません。 2つのフォントを区別することはできません ...
AURリポジトリ(aur/pacdep)には素敵なユーティリティがあります。
pacdepには多くのオプションがあります-ほんの一例-「thunar-archive-plugin」のオプションパッケージを見つけます:
> 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
[...]
上記の出力は、オプションパッケージがインストールされていないことを意味します。 「xarchiver」をインストールすると、出力は次のようになります。
[...]
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
[...]
私はこの答え(の最初の部分)を見つけました
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies
これは正確には効率的ではありませんが、(COLORで)必要なものが見つかります:
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
これでうまくいくはずです:
comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)
comm
への最初の入力はすべてのオプションの依存関係をリストし、2番目の入力はすべてのインストール済みパッケージとその「提供」属性を入力します。両方のリストは並べ替えられ、sort -u
により各要素が1回だけ含まれます。次に、最初のリストには含まれているが2番目のリストには含まれていない行のみが表示されます。
(@Archemarの提案を組み込むように編集)
@DarkHeartのソリューションは実際には機能しないことに気づかなければなりませんでしたが、それが機能するソリューションを作成するように促しました。 (ただし、色なし)
私はそれをすでにインストールしているため(yaourtの依存関係です)、@ jasonwryanによって提案されたexpacの代わりに同様のツール package-query を使用しています。代わりにexpacを使用するようにこれを変更するのは簡単です。
すべてのオプションの依存関係のリストは、主にpackage-queryの呼び出しによって行われます。最初のforループは説明を削除するため、オプションの依存関係のパッケージ名だけが残ります。 2番目のforループは、最初の行に既にインストールされている依存関係を削除してから、2番目のforループに結果を出力します。
#!/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;
}
時には逆方向に作業する必要があります...最初にオプションではない依存関係をすべて見つけ、次に完全なリストと相互参照し、次にuniqを使用します。これにより、インストールされているオプション依存のリストが生成されます。
インストールされているすべてを検索
pacman -Q
オプション以外のすべてを検索:
pacman -Qent
したがって、一意のエントリはオプションである必要があります。
(pacman -Q; pacman -Qent) | sort | uniq -u
欠落しているオプションのリストを生成することは、かなりきれいではなく説明に依存しますが、機能します。
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'
GNU sedでのみ試しましたが、
yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'
これはうまくいきました(好きなようにsort/uniqを使用してください)。