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'

這次我們使用 GNUparallel來做同樣的事情。parallel讓我們跳過某些不便之處xargs(例如它無法跳過任何非零退出程式碼。man parallel確實是一本很好的讀物。


話雖如此,雖然較短,但我的所有範例都分叉到一個新的 shell 中(不可避免地使用xargs,並且有點parallel),因此它們都比 roadmr 慢一些。第一個是最快的。

編輯:到目前為止...

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

只有兩把叉子(有點)作為與 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 參數查詢每個二進位。對於那些期望在終端機中輸入的人,我回顯一個空字串。

相關內容