Bueno, esta es mi forma muy personal de leer páginas de manual:
El manpager
Cuando se abre una página de manual utilizando el man
comando, se mostrará la salida / prestados por el less
o more
los comandos, o cualquier otro comando que se establece como su buscapersonas (manpager).
Si está utilizando Linux, probablemente se le sirva con su infraestructura de hombre ya configurada para usar /usr/bin/less -is
(a menos que haya instalado alguna distribución mínima) como man(1)
, explique en su sección Opciones:
-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable,
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.
En FreeBSD y OpenBSD es solo cuestión de editar la MANPAGER
variable de entorno, ya que se utilizarán principalmente more
, y podrían faltar algunas características como la búsqueda y el resaltado de texto.
Hay una buena respuesta a la pregunta de qué diferencias more
, less
y most
tenemos aquí (nunca utilizada most
). La capacidad de desplazarse hacia atrás y hacia adelante por página con Spaceo en ambos sentidos por línea con ↓o ↑(también, mediante vi
enlaces jy k) es esencial durante la exploración de páginas de manual. Presione hmientras usa less
para ver el resumen de los comandos disponibles.
Y es por eso que te sugiero que uses less
como buscapersonas. less
tiene algunas características esenciales que se utilizarán durante esta respuesta.
¿Cómo se formatea un comando?
Convenciones de utilidad : las especificaciones de Open Group Base Issue 7 - IEEE Std 1003.1, edición 2013. Debe visitar ese enlace antes de intentar comprender una página de manual. Esta referencia en línea describe la sintaxis de argumentos de las utilidades estándar e introduce la terminología utilizada en POSIX.1-2017 para describir los argumentos procesados por las utilidades. Esto también lo mantendrá indirectamente actualizado sobre el significado real de palabras como parámetros, argumentos, opción de argumento ...
El encabezado de cualquier página de manual le parecerá menos críptico después de comprender la notación de las convenciones de utilidad:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
Ten en cuenta lo que quieres hacer.
Cuando investigaste sobre xargs
ti lo hiciste con un propósito, ¿verdad? Tenía una necesidad específica que era leer la salida estándar y ejecutar comandos basados en esa salida.
Pero, cuando no sé qué comando quiero?
Uso man -k
o apropos
(son equivalentes). Si no sé cómo encontrar un archivo: man -k file | grep search
. Lea las descripciones y encuentre una que se ajuste mejor a sus necesidades. Ejemplo:
apropos -r '^report'
bashbug (1) - report a bug in bash
df (1) - report file system disk space usage
e2freefrag (8) - report free space fragmentation information
filefrag (8) - report on file fragmentation
iwgetid (8) - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1) - report or set the keyboard mode
lastlog (8) - reports the most recent login of all users or of a given user
pmap (1) - report memory map of a process
ps (1) - report a snapshot of the current processes.
pwdx (1) - report current working directory of a process
uniq (1) - report or omit repeated lines
vmstat (8) - Report virtual memory statistics
Apropos trabaja con expresiones regulares de forma predeterminada ( man apropos
lea la descripción y descubra lo que -r
hace), y en este ejemplo busco cada página de manual donde la descripción comienza con "informe".
Para buscar información relacionada con la lectura del procesamiento de entrada / salida estándar y llegar xargs
como una opción posible:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
Siempre lea el DESCRIPTION
antes de comenzar
Tómese un tiempo y lea la descripción. Simplemente leyendo la descripción del xargs
comando aprenderemos que:
xargs
lee desde STDIN y ejecuta el comando necesario. Esto también significa que necesitará tener algún conocimiento de cómo funciona la entrada estándar y cómo manipularla a través de tuberías para encadenar comandos
- El comportamiento predeterminado es actuar como
/bin/echo
. Esto le da un pequeño consejo de que si necesita encadenar más de uno xargs
, no necesita usar echo para imprimir.
- También hemos aprendido que los nombres de archivo Unix pueden contener líneas en blanco y nuevas líneas, que esto podría ser un problema y el argumento
-0
es una forma de evitar que las cosas exploten utilizando separadores de caracteres nulos. La descripción le advierte que el comando que se usa como entrada también debe ser compatible con esta característica, y que GNU lo find
es. Excelente. Usamos muchos hallazgos con xargs
.
xargs
se detendrá si se alcanza el estado de salida 255.
Algunas descripciones son muy cortas y generalmente se debe a que el software funciona de una manera muy simple. Ni siquiera pienses en saltarte esta parte de la página de manual ;)
Otras cosas a las que prestar atención ...
Sabes que puedes buscar archivos usando find
. Hay un montón de opciones y si solo mira las SYNOPSIS
, se sentirá abrumado por ellas. Es solo la punta del iceberg. Excluyendo NAME
, SYNOPSIS
y DESCRIPTION
, tendrá las siguientes secciones:
AUTHORS
: las personas que crearon o ayudaron en la creación del comando.
BUGS
: enumera cualquier defecto conocido. Podrían ser solo limitaciones de implementación.
ENVIRONMENT
: Aspectos de su shell que podrían verse afectados por el comando, o variables que se utilizarán.
EXAMPLES
o NOTES
: se explica por sí mismo.
REPORTING BUGS
: Con quién tendrá que contactar si encuentra errores en esta herramienta o en su documentación.
COPYRIGHT
: Persona que creó y renuncia de responsabilidad sobre el software. Todo relacionado con la licencia del software en sí.
SEE ALSO
: Otros comandos, herramientas o aspectos de trabajo que están relacionados con este comando y que no caben en ninguna de las otras secciones.
Probablemente encontrará información interesante sobre los aspectos que desea de una herramienta en la sección de ejemplos / notas.
Ejemplo
En los siguientes pasos tomaré find
como ejemplo, ya que sus conceptos son "más simples" que xargs
explicar (un comando busca archivos y el otro trata con la ejecución estándar y canalizada de la salida de otro comando). Supongamos que no sabemos nada (o muy poco) sobre este comando.
Tengo un problema específico que es: tengo que buscar cada archivo con la .jpg
extensión, y con 500 KB (KiB = 1024 byte, comúnmente llamado kibibyte), o más de tamaño dentro de una carpeta de servidor ftp.
En primer lugar, abrir el manual: man find
. El SYNOPSIS
es delgado. Busquemos cosas dentro del manual: escriba /más la palabra que desee ( size
). Indexará muchas entradas -size
que contarán tamaños específicos. Quedó atascado. No sé cómo buscar con "más que" o "menos que" un tamaño determinado, y el hombre no me lo muestra.
Intentemos y busquemos la siguiente entrada encontrada al presionar n. OKAY. Encontrado algo interesante: find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
. Tal vez este ejemplo nos muestra que con -size +100M
él encontrará archivos con 100 MB o más. ¿Cómo podría confirmarlo? Ir a la cabeza de la página de manual y buscar otras palabras.
De nuevo, intentemos la palabra greater
. Presionar gnos llevará a la cabeza de la página de manual. /greater
, y la primera entrada es:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
Suena genial. Parece que este bloque del manual confirmó lo que sospechábamos. Sin embargo, esto no solo se aplicará a los tamaños de archivo. Se aplicará a cualquiera n
que se encuentre en esta página de manual (como dice la frase: "Los argumentos numéricos se pueden especificar como").
Bueno. Vamos a encontrar una manera de filtrar por nombre: g /insensitive
. ¿Por qué? ¿Insensible? Wtf? Tenemos un servidor ftp hipotética, donde la gente que "Otro sistema operativo" podría dar un nombre de archivo con extensiones como .jpg
, .JPG
, .JpG
. Esto nos llevará a:
-ilname pattern
Like -lname, but the match is case insensitive. If the -L
option or the -follow option is in effect, this test returns
false unless the symbolic link is broken.
Sin embargo, después de buscar lname
, verá que esto solo buscará enlaces simbólicos. Queremos archivos reales. La siguiente entrada:
-iname pattern
Like -name, but the match is case insensitive. For example, the
patterns `fo*' and `F??' match the file names `Foo', `FOO',
`foo', `fOo', etc. In these patterns, unlike filename expan‐
sion by the shell, an initial '.' can be matched by `*'. That
is, find -name *bar will match the file `.foobar'. Please note
that you should quote patterns as a matter of course, otherwise
the shell will expand any wildcard characters in them.
Excelente. Ni siquiera necesito leer -name
para ver si esa -iname
es la versión insensible de este argumento. Vamos a armar el comando:
Mando: find /ftp/dir/ -size +500k -iname "*.jpg"
Lo que está implícito aquí: El conocimiento de que el comodín ?
representa "cualquier carácter en una sola posición" y *
representa "cero o más de cualquier carácter". El -name
parámetro le dará un resumen de este conocimiento.
Consejos que se aplican a todos los comandos
Algunas opciones, mnemotécnicos y "estilo de sintaxis" viajan a través de todos los comandos, lo que le hace ganar algo de tiempo al no tener que abrir la página de manual. Estos se aprenden mediante la práctica y los más comunes son:
- En general,
-v
significa detallado. -vvv
es una variación "muy muy detallada" en algunos programas.
- Siguiendo el estándar POSIX, generalmente se pueden apilar argumentos de un guión. Ejemplo:
tar -xzvf
, cp -Rv
.
- Generalmente
-R
y / o -r
significa recursivo.
- Casi todos los comandos tienen una breve ayuda con la
--help
opción.
--version
muestra la versión de un software.
-p
, en las utilidades de copiar o mover significa "preservar permisos".
-y
significa SÍ, o "proceder sin confirmación" en la mayoría de los casos.
Tenga en cuenta que lo anterior no siempre es cierto. Por ejemplo, el -r
cambio puede significar cosas muy diferentes para un software diferente. Siempre es una buena idea verificar y asegurarse de que un comando pueda ser peligroso, pero estos son valores predeterminados comunes.
Valores predeterminados de los comandos.
En el bloque de buscapersonas de esta respuesta, vimos que less -is
es el buscapersonas man
. El comportamiento predeterminado de los comandos no siempre se muestra en una sección separada en las páginas de manual, o en la sección que está más arriba.
Tendrá que leer las opciones para averiguar los valores predeterminados, o si tiene suerte, escribir /pager
le llevará a esa información. Esto también requiere que conozca el concepto del localizador (software que desplaza la página de manual), y esto es algo que solo adquirirá después de leer muchas páginas de manual.
¿Por qué es eso importante? Esto abrirá su percepción si encuentra diferencias en el comportamiento de desplazamiento y color mientras lee man(1)
en Linux ( less -is
localizador) o FreeBSD, man(1)
por ejemplo.
¿Y qué hay de la SYNOPSIS
sintaxis?
Después de obtener toda la información necesaria para ejecutar el comando, puede combinar opciones, argumentos de opción y operandos en línea para hacer su trabajo. Resumen de conceptos:
- Las opciones son los interruptores que dictan un comportamiento de comando. " Haz esto ", " no hagas esto " o " actúa de esta manera ". A menudo se llama interruptores.
- Los argumentos de opción se usan en la mayoría de los casos cuando una opción no es binaria (activar / desactivar) como
-t
en el montaje, que especifica el tipo de un sistema de archivos ( -t iso9660
, -t ext2
). " Haz esto con los ojos cerrados " o " alimenta a los animales, pero solo a los leones ". También se llama argumentos.
- Los operandos son cosas sobre las que desea que actúe ese comando. Si lo usa
cat file.txt
, el operando es un archivo dentro de su directorio actual, y su contenido se mostrará en STDOUT
. ls
es un comando donde un operando es opcional. Los tres puntos después del operando implícitamente le dicen que cat
puede actuar en múltiples operandos (archivos) al mismo tiempo. Puede notar que algunos comandos han establecido qué tipo de operando usará. Ejemplo:cat [OPTION] [FILE]...
Sinopsis relacionada:
¿Cuándo no funcionará este método?
- Páginas de manual que no tienen ejemplos
- Páginas de manual donde las opciones tienen una breve explicación
- Cuando se utiliza como palabras clave genéricas
and
, to
, for
dentro de las páginas de manual
- Páginas de manual que no están instaladas. Parece obvio, pero si no tiene
lftp
(y sus páginas de manual) instaladas, no puede saber que es una opción adecuada como cliente ftp más sofisticado ejecutandoman -k ftp
En algunos casos, los ejemplos serán bastante simples, y tendrá que hacer algunas ejecuciones de su comando para probar, o en el peor de los casos, buscarlo en Google.
Otros: lenguajes de programación y sus módulos:
Si está programando o simplemente creando scripts, tenga en cuenta que algunos lenguajes tienen sus propios sistemas de páginas de manual, como perl
( perldocs
), python ( pydocs
), etc., que contienen información específica sobre métodos / funciones, variables, comportamiento y otra información importante sobre el módulo Estás tratando de usar y aprender. Esto fue útil para mí cuando estaba creando un script para descargar correos electrónicos IMAP no leídos usando el perl Mail::IMAPClient
módulo.
Tendrá que descubrir esas páginas de manual específicas mediante el uso man -k
o la búsqueda en línea. Ejemplos:
[root@host ~]# man -k doc | grep perl
perldoc (1) - Look up Perl documentation in Pod format
[root@host ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1) User Contributed Perl Documentation IMAPCLIENT(1)
NAME
Mail::IMAPClient - An IMAP Client API
SYNOPSIS
use Mail::IMAPClient;
my $imap = Mail::IMAPClient->new(
Server => ’localhost’,
User => ’username’,
Password => ’password’,
Ssl => 1,
Uid => 1,
);
... toneladas de otras cosas aquí, con secciones como una página de manual normal ...
Con python:
[root@host ~]# pydoc sys
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...
O bien, la función help()
dentro de Python Shell si desea leer más detalles de algún objeto:
nwildner@host:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)
Help on built-in function round in module builtins:
round(...)
round(number[, ndigits]) -> number
Round a number to a given precision in decimal digits (default 0 digits).
This returns an int when called with one argument, otherwise the
same type as the number. ndigits may be negative.
Bonificación: el wtf
comando puede ayudarlo con las siglas y funciona como whatis
si no se encontraran siglas en su base de datos, pero lo que está buscando es parte de la base de datos man. En Debian, este comando es parte del bsdgames
paquete. Ejemplos:
nwildner@host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@host:~$ wtf afaik
AFAIK: as far as I know
nwildner@host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager