
Gibt es eine einfache Möglichkeit herauszufinden, welcher Befehl die längsten Handbuchseiten hat?
Antwort1
Sie können es für Ihr System mit einem einfachen Befehl selbst berechnen
$ find /usr/share/man/ -type f -exec ls -S {} + 2>/dev/null | head | while \
read -r file; do printf "%-40s" "$file"; \
man "$file" 2>/dev/null | wc -lwm; done | sort -nrk 4
die auf meiner Box zurückkehrt
(file) (lines) (words) (chars)
/usr/share/man/man1/zshall.1.bz2 27017 186394 1688174
/usr/share/man/man1/cmake.1.bz2 22477 106148 1004288
/usr/share/man/man1/cmake-gui.1.bz2 21362 100055 951110
/usr/share/man/man1/perltoc.1.bz2 18179 59783 780134
/usr/share/man/man1/cpack.1.bz2 9694 48264 458528
/usr/share/man/man1/cmakemodules.1.bz2 10637 42022 419127
/usr/share/man/man5/smb.conf.5.bz2 8306 49991 404190
/usr/share/man/man1/perlapi.1.bz2 8548 43873 387237
/usr/share/man/man1/perldiag.1.bz2 5662 37910 276778
/usr/share/man/e 1518 5919 58630
Dabei stellen die Spalten jeweils die Anzahl der Zeilen, Wörter und Zeichen dar. Zeilen (Befehle) werden nach der letzten Spalte sortiert.
Wir können etwas Ähnliches für Infoseiten tun, müssen aber bedenken, dass sich deren Inhalt über mehrere Dateien erstrecken kann. Nutzen wir also die Vorteile von, zsh
um die oben genannten Einzeiler in kompakter Form zu halten:
$ for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do \
printf "%-40s" "$inf"; \
info "$inf" 2>/dev/null | wc -lwm; done | sort -nrk 4
was gibt
(info title) (lines) (words) (chars)
elisp 72925 457537 3379403
libc 69813 411216 3066817
lispref 62753 374938 2806412
emacs 47507 322194 2291425
calc 33716 244394 1680763
internals 32221 219772 1549305
zsh 34932 206851 1544909
gsl-ref 32493 179954 1518248
gnus 31723 180613 1405064
gawk 27150 167135 1203395
xemacs 25734 170403 1184250
Infoseiten sind vor allem für GNU-bezogene Dinge sehr umfangreich, was verständlich ist, aber ich finde es interessant, dass zsh beispielsweise mehr Zeilen und Wörter, aber weniger Zeichen hat als Manpages. Das ist interessant, weil der Inhalt auf den ersten Blick derselbe ist, nur die Formatierung ist ein wenig anders.
Erklärung der zsh Tricks bei der Auswahl der Dateien für die Schleife:for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do
Das Ziel besteht darin, eine Liste eindeutiger Dateinamen aus dem Verzeichnis /usr/share/info und allen Unterverzeichnissen zu erstellen. Aus den Dateien sollten Verzeichnisnamen, Erweiterungen und alle Nummern entfernt werden. Der obige Codeausschnitt kann wie folgt umgeschrieben werden: ${(u)$(echo /usr/share/info/**/*(.)):t:r:r}
, was dasselbe Ergebnis liefert, aber wahrscheinlich eine anständigere Syntax verwendet, nämlich:
**/*
: in alle Unterverzeichnisse absteigen und dort alles markieren(.)
: nur einfache Dateien auswählen:t
: Pfadnamenkomponenten entfernen (funktioniert wiebasename
):r
: Erweiterung entfernen (alles nach dem letzten Punkt, einschließlich Punkt). Wird zweimal angewendet, um auch unnötige Zeichenfolgen und Zahlen zu entfernen (z. B..info-6
aus einer Dateizsh.info-6.bz2
).(u)
: nur eindeutige Wörter anzeigen (nach vorherigen Operationen gibt es viele gleiche Wörter – unterschiedliche Dateien/Kapitel für denselben Info-Befehl)
Antwort2
Manpages werden dort gespeichert, /usr/share/man/manX
wo X
sich der Abschnitt befindet (beschrieben in man man
). Sie sind im gzip-Format komprimiert, daher gehen wir davon aus, dass eine größere komprimierte Datei eine größere Manpage bedeutet.
Durch Einchecken /usr/share/man/man1
(Abschnitt 1: Ausführbare Programme oder Shell-Befehle) mit dem Befehl gzip -l *.gz | sort -n -k2
erhalte ich Folgendes (was wahrscheinlich von Distribution zu Distribution unterschiedlich ist, dies geschah auf einem Arch Linux-System mit einer Reihe von Paketen), wobei die erste Spalte die Größe der komprimierten Datei und die zweite Spalte die Größe der unkomprimierten Datei angibt:
161077 607106 73.5% ffprobe-all.1
198943 757155 73.7% ffserver-all.1
217339 792577 72.6% msp430-g++.1
217339 792577 72.6% msp430-gcc.1
209129 794118 73.7% ffmpeg-all.1
261778 972719 73.1% avr-g++.1
261778 972719 73.1% avr-gcc.1
262154 975423 73.1% g++.1
262154 975423 73.1% gcc.1
227830 1123043 79.7% perltoc.1perl
Antwort3
Eine Alternative zu den von @Renan und @jimmij bereitgestellten Methoden bringt wireshark-filter
auf meinem System den großen Gewinner.
for i in {1..9}; do du -sh man"$i"/*.gz | grep -v "^..0K" | grep -v "^0\|^12K\|^16K\|^[0-9][0-9]K" ; done
Darauf aufbauend habe ich die jeweils größten Einträge mit einem geöffnet man
und die Zeilenanzahl am Ende der Datei mit einem überprüft :f
und kam zu folgendem Ergebnis:
wireshark-filter = 245016 lines
gcc = 8341 lines
perlfunc = 5132 lines
Antwort4
Das Beispiel von @jimmij ist interessant, aber falsch, da es Ergebnisse aus nur einem Unterverzeichnis zurückgibt. Wenn ich dieses Skript ausführe (auf meinem Debian 7), erhalte ich Folgendes:
/usr/share/man/man3/DBI.3pm.gz 6182 35812 271206
/usr/share/man/man8/openvpn.8.gz 4021 24702 202032
/usr/share/man/pt/man1/nmap.1.gz 2563 21214 159284
/usr/share/man/man8/lsof.8.gz 2714 18670 142698
/usr/share/man/man3/pcrepattern.3.gz 2579 18631 131204
/usr/share/man/man3/pcreapi.3.gz 2382 16966 123349
/usr/share/man/man8/iptables.8.gz 2631 14844 114354
/usr/share/man/man8/ip6tables.8.gz 2465 13619 105283
/usr/share/man/man3/CPAN.3perl.gz 2142 12346 98823
/usr/share/man/man8/mount.8.gz 2136 12059 97407
Hier ist eine kurze Überarbeitung, die dieses Problem behebt:
find /usr/share/man/ -type f -ls | \
awk '{ printf "%s %s\n", $7, $11; }' | \
sort -r -n 2>/dev/null | \
awk '{ printf "%s\n", $2; }' 2>/dev/null | head -n 20 |
while \
read -r file; do printf "%-40s" "$file"; \
man "$file" 2>/dev/null | wc -lwm; done | sort -nrk 4
Auf meinem Debian 7-System gibt das
/usr/share/man/man1/cmake.1.gz 19264 86499 803021
/usr/share/man/man1/perltoc.1.gz 18755 62738 657990
/usr/share/man/man1/fvwm2.1.gz 8942 57060 462861
/usr/share/man/man1/cmakemodules.1.gz 9843 37965 376314
/usr/share/man/man1/perlfunc.1.gz 7535 47684 370246
/usr/share/man/man5/smb.conf.5.gz 8303 49962 359329
/usr/share/man/man1/cpack.1.gz 8037 38214 342264
/usr/share/man/man1/bash.1.gz 5465 42031 320015
/usr/share/man/man1/perlapi.1.gz 7074 36791 309196
/usr/share/man/man1/xterm-dev.1.gz 6242 34747 297639
/usr/share/man/man3/DBI.3pm.gz 6182 35812 271206
/usr/share/man/man1/xterm.1.gz 5238 29434 253526
/usr/share/man/man1/zshcompsys.1.gz 4502 31336 244115
/usr/share/man/man1/perldiag.1.gz 4939 33200 237882
/usr/share/man/man1/tcsh.1.gz 4355 29640 226498
/usr/share/man/ru/man1/nmap.1.gz 3048 21396 187181
/usr/share/man/hu/man1/nmap.1.gz 3020 21519 186431
/usr/share/man/de/man1/nmap.1.gz 2965 21384 182926
/usr/share/man/man1/nmap.1.gz 3005 24785 179485
/usr/share/man/ru/man1/mc.1.gz 3571 19200 173292
Auf dieser Maschine befinden sich 10326 Dateien (Ihre Wahrscheinlichkeit ist /usr/share/man
unterschiedlich).