GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo usar las páginas man para aprender a usar los comandos?

Mientras investigaba otro problema, me encontré con un comando,

locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"

sobre el que quería aprender más. Así que ejecuté man xargs y obtenga el siguiente resultado:

XARGS(1)                    General Commands Manual                   XARGS(1)

NAME
       xargs - build and execute command lines from standard input

SYNOPSIS
       xargs  [-0prtx]  [-E  eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
       [-d delimiter] [--delimiter delimiter]  [-I  replace-str]  [-i[replace-
       str]]    [--replace[=replace-str]]   [-l[max-lines]]   [-L   max-lines]
       [--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s  max-
       chars]  [--max-chars=max-chars]  [-P max-procs] [--max-procs=max-procs]
       [--interactive]      [--verbose]      [--exit]      [--no-run-if-empty]
       [--arg-file=file]   [--show-limits]   [--version]   [--help]   [command
       [initial-arguments]]

DESCRIPTION
       This manual page documents the GNU version of xargs...

Estoy tratando de mejorar en el uso de la documentación para aprender sobre los programas de Linux, pero esa sección de "Sinopsis" es intimidante para los nuevos usuarios. Literalmente parece un galimatías en comparación con man locate o man free .

Hasta ahora, entiendo que los corchetes significan opcionales y los corchetes anidados significan opciones en opcionales. Pero, ¿cómo se supone que debo inducir un comando válido con eso?

No estoy pidiendo ayuda con xargs aquí. Estoy buscando ayuda para interpretar una página de manual para comprender comandos complicados. Quiero dejar de hacer que los blogs web indexados por Google y la ayuda personal de otros sean mi primer enfoque para aprender los comandos de Linux.

Respuesta aceptada:

Bueno, esta es mi forma muy personal de leer las páginas de manual:

El buscapersonas

Cuando abre una página de manual usando el man comando, la salida será mostrada/renderizada por less o more comandos, o cualquier otro comando que se establecerá como su buscapersonas (manpager).

Si está utilizando Linux, probablemente tenga su infraestructura man 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 el MANPAGER variable de entorno ya que en su mayoría usarán more y es posible que falten algunas funciones, como la búsqueda y el resaltado de texto.

Hay una buena respuesta a la pregunta de qué diferencias more , less y most tener aquí (nunca he usado most ). La capacidad de desplazarse hacia atrás y hacia adelante por página con Espacio o en ambos sentidos por línea con o (también, usando vi enlaces j y k ) es esencial al navegar por las páginas de manual. Presione h mientras usa less para ver el resumen de los comandos disponibles.

Y es por eso que te sugiero que uses less como su buscapersonas. less tienen algunas funciones esenciales que se utilizarán durante esta respuesta.

¿Cómo se formatea un comando?

Convenciones de utilidades:las especificaciones básicas de Open Group Edición 7:IEEE Std 1003.1, edición de 2013. Debe visitar ese enlace antes de intentar comprender una página de manual. Esta referencia en línea describe la sintaxis de los 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 actualizará indirectamente 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 la utilidad:

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

Ten en cuenta lo que quieres hacer.

Al investigar sobre xargs 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, ¿cuándo no sé qué comando quiero?

Usa man -k o apropos (son equivalentes). Si no sé cómo encontrar un archivo:man -k file | grep search . Lea las descripciones y encuentre uno que se adapte 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 funciona con expresiones regulares por defecto, (man apropos , lea la descripción y descubra qué -r lo hace), y en este ejemplo estoy buscando 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 a xargs como posible opción:

man -k command| grep input
xargs (1)            - build and execute command lines from standard input

Lea siempre la DESCRIPTION antes de empezar

Tómate un tiempo y lee la descripción. Con solo leer la descripción de los xargs comando aprenderemos que:

  • xargs lee de STDIN y ejecuta el comando necesario. Esto también significa que deberá tener algún conocimiento de cómo funciona la entrada estándar y cómo manipularla a través de canalizaciones para encadenar comandos
  • El comportamiento predeterminado es actuar como /bin/echo . Esto le da un pequeño consejo que si necesita encadenar más de un xargs , no necesita usar echo para imprimir.
  • También hemos aprendido que los nombres de archivo de Unix pueden contener espacios en blanco y saltos de línea, que esto podría ser un problema y el argumento -0 es una forma de evitar que las cosas exploten usando separadores de caracteres nulos. La descripción le advierte que el comando que se utiliza como entrada también debe ser compatible con esta característica, y que GNU find apoyarlo Estupendo. Usamos mucho find con xargs .
  • xargs se detendrá si se alcanza el estado de salida 255.
Relacionado:Aprende inglés:¿el significado de dejar a alguien atrás [en inglés americano]?

Algunas descripciones son muy cortas y eso generalmente se debe a que el software funciona de una manera muy simple. Ni se te ocurra 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 miras el SYNOPSIS , te sentirás abrumado por esos. Es solo la punta del iceberg. Excluyendo NAME , SYNOPSIS y DESCRIPTION , tendrás las siguientes secciones:

  • AUTHORS :las personas que crearon o ayudaron en la creación del comando
    .

  • BUGS :enumera los defectos conocidos. Podrían ser solo limitaciones de implementación.

  • ENVIRONMENT :Aspectos de su shell que podrían verse afectados por el comando o las variables que se utilizarán.

  • EXAMPLES o NOTES :Se explica por sí mismo.

  • REPORTING BUGS :A quién deberá contactar si encuentra errores en esta herramienta o en su documentación.

  • COPYRIGHT :Persona que creó y descargos de responsabilidad sobre el software. Todo relacionado con la licencia del propio software.

  • SEE ALSO :Otros comandos, herramientas o aspectos de trabajo que están relacionados con este comando, y que no podrían encajar en ninguna de las otras secciones.

Lo más probable es que encuentre 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 para explicar (un comando busca archivos y el otro trata con stdin y la ejecución canalizada de otra salida de comando). Finjamos que no sabemos nada (o muy poco) sobre este comando.

tengo un problema especifico que es:tengo que buscar cada archivo con el .jpg extensión, y con 500 KiB (KiB =1024 bytes, comúnmente llamado kibibyte), o más de tamaño dentro de una carpeta de servidor ftp.

Primero, abre el manual:man find . La SYNOPSIS es delgado Busquemos cosas dentro del manual:Escriba / más la palabra que quieras (size ). Indexará muchas entradas -size que contará tamaños específicos. Quedó atascado. No sé cómo buscar con "más de" o "menos de" un tamaño determinado, y el hombre no me muestra eso.

Pruébelo y busque la siguiente entrada que encuentre presionando n . ESTÁ BIEN. Encontré algo interesante:find ( -size +100M -fprintf /root/big.txt %-10s %pn ) . Tal vez este ejemplo nos muestra que con -size +100M encontrará archivos con 100 MB o más. ¿Cómo podría confirmar? Ir al encabezado de la página de manual y buscar otras palabras.

De nuevo, probemos con la palabra greater . Presionando g nos llevará al encabezado 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á al tamaño de los archivos. Se aplicará a cualquier n que se puede encontrar en esta página de manual (como decía la frase:"Los argumentos numéricos se pueden especificar como").

Bien. Busquemos una manera de filtrar por nombre:g / insensitive . ¿Por qué? ¿Insensible? ¿Qué? Tenemos un servidor ftp hipotético, donde la gente de "ese 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ás 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.

Estupendo. Ni siquiera necesito leer sobre -name para ver que -iname es la versión insensible a mayúsculas y minúsculas de este argumento. Vamos a ensamblar el comando:

Comando: 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 El parámetro le dará un resumen de este conocimiento.

Consejos que se aplican a todos los comandos

Algunas opciones, mnemónicos y "estilo de sintaxis" viajan a través de todos los comandos, lo que le permite ganar algo de tiempo al no tener que abrir la página de manual. Los que se aprenden con la práctica y los más comunes son:

  • Generalmente, -v significa detallado. -vvv es una variación "muy, muy detallada" en algún software.
  • 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 --help opción.
  • --version muestra la versión de un software.
  • -p , en las utilidades para copiar o mover significa "conservar permisos".
  • -y significa SÍ, o "continuar sin confirmación" en la mayoría de los casos.

Sin embargo, tenga en cuenta que lo anterior no siempre es cierto. Por ejemplo, el -r cambiar puede significar cosas muy diferentes para diferentes programas. Siempre es una buena idea verificar y asegurarse de que un comando pueda ser peligroso, pero estos son valores predeterminados comunes.

Relacionado:Aprenda inglés:¿se usa a menudo "your time is done"?

Valores predeterminados de los comandos.

En la parte del buscapersonas de esta respuesta, vimos que less -is es el localizador de 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 encontrar los valores predeterminados o, si tiene suerte, escribir / pager te llevará a esa información. Esto también requiere que conozca el concepto del buscapersonas (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 desplazamiento y el comportamiento del color mientras lee man(1) en Linux(less -is localizador) o FreeBSD man(1) por ejemplo.

¿Y 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 realizar su trabajo. Resumen de conceptos:

  • Las opciones son los interruptores que dictan el comportamiento de un comando. “Haz esto
    no hagas esto ” o “actúa de esta manera “. A menudo llamados interruptores.
  • Los argumentos de opción se usan en la mayoría de los casos cuando una opción no es
    binaria (activada/desactivada) 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 llamados argumentos.
  • Los operandos son elementos sobre los que desea que actúe el comando. Si 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
    te dicen implícitamente que cat puede actuar en múltiples operandos (archivos) al mismo tiempo. Puede notar que algunos comandos han establecido qué tipo de operando
    utilizará. Ejemplo:cat [OPTION] [FILE]...

Sinopsis relacionadas:

  • Comprender la sinopsis en la página de manual

¿Cuándo dejará de 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 usa palabras clave genéricas como and , to , for dentro de las páginas de manual
  • Páginas de manual que no están instaladas. Parece obvio pero, si no tienes lftp (y sus páginas de manual) instalado, no puede saber que es una opción adecuada como un cliente ftp más sofisticado ejecutando man -k ftp

En algunos casos, los ejemplos serán bastante simples y tendrá que realizar 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 contiene información específica sobre métodos/funciones, variables, comportamiento y otra información importante sobre el módulo que está 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 perl Mail::IMAPClient módulo.

Tendrá que descubrir esas páginas de manual específicas usando man -k o buscando en línea. Ejemplos:

[[email protected] ~]# man -k doc | grep perl
perldoc              (1)  - Look up Perl documentation in Pod format


[[email protected] ~]# 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 pitón:

[[email protected] ~]# 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 help() funcion dentro de python shell si desea leer más detalles de algún objeto:

[email protected]:~$ 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 El comando puede ayudarlo con las siglas y funciona como whatis si no se encuentra ningún acrónimo en su base de datos, pero lo que está buscando es parte de la base de datos man. En Debian, este comando es parte de bsdgames paquete. Ejemplos:

[email protected]:~$ wtf rtfm
RTFM: read the fine/fucking manual
[email protected]:~$ wtf afaik
AFAIK: as far as I know
[email protected]:~$ wtf afak
Gee...  I don't know what afak means...
[email protected]:~$ wtf tcp
tcp: tcp (7)              - TCP protocol.
[email protected]:~$ wtf systemd
systemd: systemd (1)          - systemd system and service manager

Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo usar los comandos Grep en Linux o FreeBSD

  3. Cómo utilizar eficazmente las páginas de manual en Linux

  4. ¿Cómo puedo usar comandos con alias con xargs?

  5. En Linux, ¿cómo obtengo páginas man para funciones C en lugar de comandos bash?

Cómo instalar páginas man faltantes de comandos en Ubuntu

Aprenda a usar las páginas de manual de manera eficiente en Linux

Cómo ver una sección específica en las páginas man en Linux

Cómo instalar páginas man en Alpine Linux

Cómo usar los comandos FTP de Linux

¿Cómo usar el comando xargs en Linux?