Lista de binutils de GNU

Lista de binutils de GNU

¿Cómo puedo obtener dicha lista desde la línea de comando, incluida la versión de cada utilidad? ¿Están por casualidad en el mismo archivo por defecto?

Respuesta1

Ellos son [probablemente] de todos modos ( goldtiene una versión adicional; consulte el final de esta publicación).
Pero considere el resto de este código de respuesta para conocer la mejor manera de extraer las versiones.

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

Hace más o menos lo que hace roadmr.

dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"

intenta corrertodo dpkg -L ...salidas. Obviamente, solo se ejecutarán los ejecutables, por lo que solo necesitamos redirigir el error (e xargsignorarlos).

dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'

Pruebe que estamos tratando con un archivo ejecutable en lugar de una ruta de filtrado.


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'

Esta vez usamos GNU parallelpara hacer los mismos enfoques. parallelnos permite omitir ciertos inconvenientes xargs(como no poder omitir ningún código de salida distinto de cero). man parallelEs una lectura realmente buena.


Dicho todo esto, aunque son más breves, todos mis ejemplos se bifurcan en un nuevo shell (inevitable con xargsy algo así como el punto de parallel), por lo que todos son algo más lentos que los de roadmr. El primero es el más rápido.

Editar:Hasta ahora...

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

Sólo dos tenedores (más o menos) y escomorápido como el bucle for (aunque mucho más corto).


Editar: En realidad no son exactamente iguales. goldtiene una versión secundaria (1.11) que los otros comandos no tienen.

$ 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

Respuesta2

Prueba esto:

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

Esto obtiene todos los binarios en los paquetes binutils y consulta cada uno con su parámetro --version. Hago eco de una cadena vacía para aquellos que esperan entrada en la terminal.

información relacionada