各ユーティリティのバージョンを含むこのようなリストをコマンド ラインから取得するにはどうすればよいでしょうか。それらはデフォルトで同じファイルにあるのでしょうか。
答え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
の特定の不便さをスキップできます。これは本当に読みやすい本です。xargs
man 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 パラメータを使用してクエリを実行します。ターミナルでの入力を期待するものには、空の文字列をエコーします。