¿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 ( gold
tiene 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 xargs
ignorarlos).
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 parallel
para hacer los mismos enfoques. parallel
nos permite omitir ciertos inconvenientes xargs
(como no poder omitir ningún código de salida distinto de cero). man parallel
Es una lectura realmente buena.
Dicho todo esto, aunque son más breves, todos mis ejemplos se bifurcan en un nuevo shell (inevitable con xargs
y 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. gold
tiene 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.