Como posso obter essa lista na linha de comando, incluindo a versão de cada utilitário? Eles estão por padrão no mesmo arquivo por acaso?
Responder1
Eles estão [provavelmente] mesmo assim ( gold
tem uma versão extra - veja o final deste post).
Mas considere o restante desta resposta como código de golfe para obter a melhor maneira de extrair as versões.
dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"
Faz praticamente o que o roadmr faz.
dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"
Tenta corrertudo dpkg -L ...
saídas. Obviamente, apenas os executáveis serão executados, então só precisamos redirecionar o erro (e ignorá xargs
-los).
dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'
Teste se estamos lidando com um arquivo executável em vez de filtrar o caminho.
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'
Desta vez usamos GNU parallel
para fazer as mesmas abordagens. parallel
nos permite ignorar certos inconvenientes em xargs
(como não ser capaz de ignorar qualquer código de saída diferente de zero. man parallel
é uma leitura genuinamente boa.
Com tudo isso dito, embora mais curtos, todos os meus exemplos se dividem em um novo shell (inevitável com xargs
, e mais ou menos com o objetivo de parallel
), então eles são todos um pouco mais lentos que os do roadmr. O primeiro é o mais rápido.
Editar:Até agora...
sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}')
Apenas dois garfos (mais ou menos) e écomorápido quanto o loop for (embora muito mais curto).
Editar: Na verdade, eles não são exatamente iguais. gold
possui uma versão secundária (1.11) que os outros comandos não possuem.
$ 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
Responder2
Experimente isto:
for util in `dpkg --listfiles binutils |grep "\/usr\/bin\/"`; do
echo -n "$util -> "; echo "" | $util --version
done
Isso obtém todos os binários nos pacotes binutils e consulta cada um com seu parâmetro --version. Eu ecoo uma string vazia para aqueles que esperam entrada no terminal.