Как я могу получить такой список из командной строки, включая версию каждой утилиты? По умолчанию они находятся в одном файле?
Они являются [вероятно], всеми одинаковыми (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
Попробуйте это:
for util in `dpkg --listfiles binutils |grep "\/usr\/bin\/"`; do
echo -n "$util -> "; echo "" | $util --version
done
Это получает все двоичные файлы в пакетах binutils и запрашивает каждый со своим параметром --version. Я отображаю пустую строку для тех, кто ожидает ввода в терминале.