GNU binutils 列表

use*_*885 1 command-line binutils

如何从命令行获取这样的列表,包括每个实用程序的版本?默认情况下,它们是否在同一个文件中?

Oli*_*Oli 5

它们[可能]完全相同(gold有一个额外的版本——见本文结尾)。
但请考虑此答案代码高尔夫的其余部分,以获得提取版本的最佳方式。

dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"
Run Code Online (Sandbox Code Playgroud)

与roadmr 所做的差不多。

dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"
Run Code Online (Sandbox Code Playgroud)

尝试运行所有 dpkg -L ...输出。显然只有可执行文件会运行,所以我们只需要重定向错误(并xargs忽略它们)。

dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'
Run Code Online (Sandbox Code Playgroud)

测试我们处理的是可执行文件而不是过滤路径。


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'
Run Code Online (Sandbox Code Playgroud)

这次我们使用 GNUparallel来做同样的方法。parallel让我们跳过某些不便之处xargs(比如它不能跳过任何非零退出代码。man parallel是一本真正好的读物。


话虽如此,虽然较短,但我所有的示例都分叉到了一个新的 shell 中(不可避免地使用xargs,有点像parallel),所以它们都比 roadmr 慢一些。第一个是最快的。

编辑:直到现在...

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

只有两个 fork(有点),它和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
Run Code Online (Sandbox Code Playgroud)