Список GNU binutils

Как я могу получить такой список из командной строки, включая версию каждой утилиты? По умолчанию они находятся в одном файле?

1
задан 4 January 2015 в 17:54

2 ответа

Они являются [вероятно], всеми одинаковыми (gold имеет дополнительную версию - посмотрите конец этого сообщения).
Но рассмотрите остальную часть этого гольфа кода ответа для лучшего способа извлечь версии.

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

Делает в значительной степени, что делает roadmr's.

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, и вид точки parallel) таким образом, они все несколько медленнее, чем roadmr's. Первое является самым быстрым.

Править: До сих пор...

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

Только два ветвления (вид) и это с такой скоростью, как для цикла (в то время как намного короче).


Править: Они - на самом деле не совсем то же. 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
5
ответ дан 4 January 2015 в 17:54

Попробуйте это:

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

Это получает все двоичные файлы в пакетах binutils и запрашивает каждый со своим параметром --version. Я отображаю пустую строку для тех, кто ожидает ввода в терминале.

0
ответ дан 4 January 2015 в 17:54

Другие вопросы по тегам:

Похожие вопросы: