私はArch Linuxを使用しています。
インストールされているすべてのパッケージのオプションの依存関係をリストする方法はありますか?はいの場合、このリストをフィルタリングして、欠落している(インストールされていない)パッケージのみを表示できますか?
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
私はArch Linuxを使用しています。
インストールされているすべてのパッケージのオプションの依存関係をリストする方法はありますか?はいの場合、このリストをフィルタリングして、欠落している(インストールされていない)パッケージのみを表示できますか?
pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
回答:
expacを使用して、pacman
データベースを照会できます。
何かのようなもの:
awk 'NF>=2' <(expac "%n %O") > optdeps
お使いのマシンにインストールされているすべてのパッケージのリストを印刷しますoptdepends
各1(のために%O
)1と呼ばれるファイルにoptdeps
。次に、インストール済みの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でこの答えを見つけました(最初の部分)
これは正確には効率的ではありませんが、必要なものを見つけることができます(色で!):
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
||
、の&&
後にではなくgrep
、残りの行を括弧で囲む必要がありますか?
pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
@DarkHeartのソリューションは実際には機能しないことに気づかなければなりませんでしたが、実際に機能するようになりました。(ただし、色なし)
@acsonwryanによって提案されたexpacの代わりに似たツールであるpackage-queryを使用しています。既にインストールされているためです(yaourtの依存関係です)。代わりにexpacを使用するように変更するのは簡単です。
すべてのオプションの依存関係のリストは、ほとんどがpackage-queryの呼び出しによって行われます。最初のforループは説明を削除するため、オプションの依存関係のパッケージ名のみが残ります。2番目のforループは、2行目の結果を出力する前に、1行目のインストール済みの依存関係を削除します。
#!/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'