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 参数查询每个文件。我为那些希望在终端中输入的文件回显一个空字符串。

相关内容