
¿Existe una manera fácil de saber qué comando tiene las páginas de manual más largas?
Respuesta1
Puedes calcularlo tú mismo para tu sistema con un simple comando.
$ 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
que regresa a mi caja
(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
donde las columnas representan el número de líneas, palabras y caracteres respectivamente. Las filas (comandos) se ordenan por la última columna.
Podemos hacer algo similar con las páginas de información, pero debemos tener en cuenta que su contenido puede abarcar muchos archivos. Por lo tanto, usemos los beneficios de zsh
mantener la línea anterior en forma compacta:
$ 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
lo que da
(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
Las páginas de información son enormes, principalmente para cosas relacionadas con gnu, lo que es comprensible, pero me parece interesante que, por ejemplo, zsh tenga más líneas y palabras pero menos caracteres que en las páginas de manual. Es interesante porque a primera vista el contenido es el mismo, sólo que el formato es un poco diferente.
Explicación de trucos de zsh en la selección de los archivos para el bucle:for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do
El objetivo es crear una lista de nombres de archivos únicos desde el directorio /usr/share/info y todos los subdirectorios. Los archivos deben eliminarse del nombre de directorio, las extensiones y todos los números. El fragmento anterior se puede reescribir como ${(u)$(echo /usr/share/info/**/*(.)):t:r:r}
, lo que da el mismo resultado pero usa probablemente una sintaxis más decente, a saber:
**/*
: descender a todos los subdirectorios y marcar todo allí(.)
: seleccione solo archivos sin formato:t
: elimina los componentes del nombre de ruta (funciona comobasename
):r
: eliminar extensión (todo lo que está después del último punto, incluido el punto). Se aplica dos veces para eliminar también cadenas y números innecesarios (por ejemplo,.info-6
del archivozsh.info-6.bz2
).(u)
: muestra solo palabras únicas (después de operaciones anteriores, hay muchas palabras iguales: diferentes archivos/capítulos para el mismo comando de información)
Respuesta2
Las páginas de manual se almacenan en /usr/share/man/manX
donde X
está la sección (descrita en man man
). Están comprimidos en formato gzip, así que supongamos que un archivo comprimido más grande significa una página de manual más grande.
Al registrar /usr/share/man/man1
(sección 1: Programas ejecutables o comandos de shell) con el comando gzip -l *.gz | sort -n -k2
, obtengo esto (que probablemente variará de una distribución a otra, esto fue en un sistema Arch Linux con un montón de paquetes) donde la primera columna está comprimida tamaño del archivo y la segunda columna es el tamaño del archivo sin comprimir:
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
Respuesta3
Una alternativa a los métodos proporcionados por @Renan y @jimmij produce wireshark-filter
el gran ganador en mi sistema.
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
En base a eso, abrí cada una de las entradas más grandes man
y verifiqué el número de líneas al final del archivo con a :f
y obtuve:
wireshark-filter = 245016 lines
gcc = 8341 lines
perlfunc = 5132 lines
Respuesta4
El ejemplo de @jimmij es interesante, pero incorrecto porque devuelve resultados de un solo subdirectorio. Al ejecutar ese script (en mi Debian 7), obtengo esto:
/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
Aquí hay una revisión rápida que soluciona ese problema:
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
En mi sistema Debian 7 que da
/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
Por si sirve de algo, hay 10326 archivos /usr/share/man
en esa máquina (ymmv).