GNU binutils のリスト

GNU binutils のリスト

各ユーティリティのバージョンを含むこのようなリストをコマンド ラインから取得するにはどうすればよいでしょうか。それらはデフォルトで同じファイルにあるのでしょうか。

答え1

彼らは[おそらく] すべて同じです (gold追加バージョンがあります - この投稿の最後を参照してください)。
ただし、バージョンを抽出する最良の方法については、この回答のコード ゴルフの残りの部分を検討してください。

dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"

roadmr の機能とほぼ同じです。

dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"

走ろうとするすべて dpkg -L ...出力。当然、実行可能ファイルのみが実行されるので、エラーをリダイレクトする(そしてそれらを無視する)必要がありますxargs

dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'

フィルタリング パスではなく実行可能ファイルを処理していることをテストします。


sudo apt-get install parallel
dpkg -L binutils | grep /usr/bin/ | parallel {} --version
dpkg -L binutils | parallel {} --version 2>/dev/null
dpkg -L binutils | parallel '[[ -x "{}" && -f "{}" ]] && {} --version'

今回は、GNU を使用してparallel同じアプローチを実行します。 では、(ゼロ以外の終了コードをスキップできないなど)parallelの特定の不便さをスキップできます。これは本当に読みやすい本です。xargsman parallel


そうは言っても、私の例はすべて短くなっていますが、新しいシェルに分岐します ( では避けられずxargs、 のポイントの 1 つですparallel)。そのため、roadmr の例よりもやや遅くなります。最初の例が最も高速です。

編集:今まで...

sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}')

フォークは2本だけ(みたいな)で、としてfor ループと同じくらい高速です (ただし、はるかに短くなります)。


編集: 実際にはまったく同じではありません。gold他のコマンドにはないセカンダリ バージョン (1.11) があります。

$ sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}') | \
    grep Binutils | sort -u | column -t
GNU  addr2line  (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ar         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  assembler  (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  c++filt    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  dwp        (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  elfedit    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  gold       (GNU  Binutils  for  Ubuntu   2.23.52.20130913)  1.11
GNU  gprof      (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ld         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  nm         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  objcopy    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  objdump    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ranlib     (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  readelf    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  size       (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  strings    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  strip      (GNU  Binutils  for  Ubuntu)  2.23.52.20130913

答え2

これを試して:

for util in `dpkg --listfiles binutils |grep "\/usr\/bin\/"`; do
    echo -n "$util -> "; echo "" | $util --version
done

これは、binutils パッケージ内のすべてのバイナリを取得し、それぞれの --version パラメータを使用してクエリを実行します。ターミナルでの入力を期待するものには、空の文字列をエコーし​​ます。

関連情報