Liste der GNU-Binutils

Liste der GNU-Binutils

Wie kann ich eine solche Liste über die Befehlszeile abrufen, einschließlich der Version jedes Dienstprogramms? Befinden sie sich standardmäßig zufällig in derselben Datei?

Antwort1

Sie sind [wahrscheinlich] trotzdem ( goldhat eine zusätzliche Version – siehe das Ende dieses Beitrags).
Aber beachten Sie den Rest dieser Antwort Code-Golf, um die beste Möglichkeit zum Extrahieren der Versionen zu finden.

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

Macht so ziemlich das Gleiche wie roadmr.

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

Versucht zu rennenalles dpkg -L ...Ausgaben. Offensichtlich werden nur die ausführbaren Dateien ausgeführt, also müssen wir nur Fehler umleiten (und xargssie ignorieren).

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

Testen Sie, ob es sich um eine ausführbare Datei und nicht um einen Filterpfad handelt.


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'

Dieses Mal verwenden wir GNU, parallelum dieselben Ansätze zu verfolgen. parallelErmöglicht uns, bestimmte Unannehmlichkeiten zu überspringen xargs(z. B. die Unfähigkeit, einen Exitcode ungleich Null zu überspringen. man parallelIst eine wirklich interessante Lektüre.


Abgesehen davon sind alle meine Beispiele zwar kürzer, werden aber in eine neue Shell verzweigt (was bei unvermeidlich ist xargsund auch der Sinn von ist parallel), sodass sie alle etwas langsamer sind als die von roadmr. Das erste ist das schnellste.

Bearbeiten:Bis jetzt...

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

Nur zwei Gabeln (sozusagen) und es istalsschnell wie die For-Schleife (und trotzdem viel kürzer).


Bearbeiten: Sie sind eigentlich nicht ganz gleich. goldhat eine sekundäre Version (1.11), die bei den anderen Befehlen nicht vorhanden ist.

$ 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

Antwort2

Versuche dies:

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

Dadurch werden alle Binärdateien in den Binutils-Paketen abgerufen und jede mit ihrem Parameter --version abgefragt. Für diejenigen, die eine Eingabe im Terminal erwarten, gebe ich eine leere Zeichenfolge aus.

verwandte Informationen