Lista de binutils GNU

Lista de binutils GNU

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 ( goldtem 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 parallelpara fazer as mesmas abordagens. parallelnos 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. goldpossui 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.

informação relacionada