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 corrí man xargs
y obtuve 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 el uso de la documentación para aprender sobre los programas de Linux, pero esa sección "Sinopsis" es intimidante para los nuevos usuarios. Literalmente parece 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 de los blogs web indexados por Google y la ayuda personal de otros mi primer enfoque para aprender los comandos de Linux.
man man
man man
leerman intro
.Respuestas:
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 elless
omore
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) comoman(1)
, explique en su sección Opciones:En FreeBSD y OpenBSD es solo cuestión de editar la
MANPAGER
variable de entorno, ya que se utilizarán principalmentemore
, 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
ymost
tenemos aquí (nunca utilizadamost
). 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, mediantevi
enlaces jy k) es esencial durante la exploración de páginas de manual. Presione hmientras usaless
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:
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
oapropos
(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 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:Siempre lea el
DESCRIPTION
antes de comenzarTó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/bin/echo
. Esto le da un pequeño consejo de que si necesita encadenar más de unoxargs
, no necesita usar echo para imprimir.-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 lofind
es. Excelente. Usamos muchos hallazgos conxargs
.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 lasSYNOPSIS
, se sentirá abrumado por ellas. Es solo la punta del iceberg. ExcluyendoNAME
,SYNOPSIS
yDESCRIPTION
, 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
oNOTES
: 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" quexargs
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
. ElSYNOPSIS
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: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:Sin embargo, después de buscar
lname
, verá que esto solo buscará enlaces simbólicos. Queremos archivos reales. La siguiente entrada: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:
-v
significa detallado.-vvv
es una variación "muy muy detallada" en algunos programas.tar -xzvf
,cp -Rv
.-R
y / o-r
significa recursivo.--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 buscapersonasman
. 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:
-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.cat file.txt
, el operando es un archivo dentro de su directorio actual, y su contenido se mostrará enSTDOUT
.ls
es un comando donde un operando es opcional. Los tres puntos después del operando implícitamente le dicen quecat
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?
and
,to
,for
dentro de las páginas de manuallftp
(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 elperl 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:... toneladas de otras cosas aquí, con secciones como una página de manual normal ...
Con python:
O bien, la función
help()
dentro de Python Shell si desea leer más detalles de algún objeto:Bonificación: el
wtf
comando puede ayudarlo con las siglas y funciona comowhatis
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 delbsdgames
paquete. Ejemplos:fuente
man find | grep ...
. Me gustaman command | sed -n '/^[[:space:]]*-/,/^$/p'
man
?" Gracias y bien hecho.man
página por supuesto.Esto se explica muy bien en
man man
:En cuanto a cómo se supone que debes escribir un comando válido a partir de eso, bueno, no lo eres. La sinopsis es útil una vez que sabes cómo funciona un comando. Puede ayudarte a refrescar tu memoria. Para entender cómo funciona el comando, debe leer la página del manual. Especialmente las descripciones de las opciones y la sección de ejemplos.
A veces la sinopsis es suficiente. Por ejemplo, en
man ls
:Otras veces, es inútil a menos que ya sepa cómo usar el comando en cuestión. Por ejemplo
man dd
:En conclusión, no se preocupe si no obtiene la sinopsis. Eso es normal. Lea la página del manual en sí.
fuente
Algunos conceptos básicos para comprender la sinopsis.
[foo]
representa un argumento o parámetro opcional.[foo [ bar ] ]
se usa la sintaxis, puede usar foo, y puede agregar barra.[ -S size ]
, lo que indica que el argumento -S está esperando un tamaño obligatorio.Por ejemplo :
foo [-S size ] filename ...
medio
foo
-S
se puede usar el parámetro opcional , tienes que decirlosize
(el nombre te da una pista)filename
(esto también le da una pista, verman mkdir
)...
te dice que puedes usar múltiples archivos.Todavía tiene que ir en profundidad a la página del manual para comprender la opción (en mi caso de muestra anterior, de qué
-S size
se trata)fuente
man
páginas normalmente se muestran conless
hoy en día. Eso hace posible buscar a través de ellos. No me molestaría con la sinopsis, especialmente no porque tengas una línea de comando particular que quieras entender.Presiona /y comienza a escribir
-I
y luego Enter. El primer golpe estará en la sinopsis, el segundo (uso npara el siguiente) le proporciona la explicación detallada-I
.fuente
Una cosa clave para recordar es que no solo puede mirar el manual para un comando, en el caso de comandos que ejecutan otros comandos.
Para su comando de ejemplo
Necesita información no solo
xargs
sino tambiénbash
y[
(esto puede estar en la página detest
manual). También puede necesitar información en su shell (probablemente también bash) para las reglas de comillas, ya que su comando incluye una cadena de comillas compleja. Ya puedo decirle que el argumento citado es incorrecto (y erróneo de una manera que solo aparecerá cuando encuentre un archivo con espacios en el nombre); lo interno"{}"
probablemente debería ser'{}'
.Entonces, primero debe consultar la página de manual de xargs y ver
[-I replace-str]
qué-I {}
significa, y[command [initial-arguments]]
québash
y todo lo que significa después. Luego, se referirá a la página debash
manual para saber qué-c
hace, etc.fuente
Agregando a las excelentes respuestas ya dadas:
1) Si está interesado en una utilidad gnu, especialmente las que le gustan
sed
ygrep
, a veces, usar elinfo
comando le mostrará una versión muy ampliada de la información del comando.sed
, por ejemplo, tiene una sección detallada sobre cómo escribir expresiones regulares y otra sección con algunos ejemplos de uso muy complejos.2) Es un "manual". Un manual está diseñado principalmente para ayudarlo a recordar los detalles de algo que ya comprende. Está diseñado para que pueda obtener los detalles que necesita rápidamente y salir. (Y demasiados no tienen ejemplos de uso o solo triviales).
Cuando tengo que aprender algo nuevo, incluso una pequeña función de un comando que no está claro para mí, voy a la web y búsqueda usando las mejores palabras clave que se me ocurre (por ejemplo
Linux
xargs
) y añadir la palabrahowto
,examples
otutorial
. Esto a menudo es bastante productivo.Usualmente uso duckduckgo porque mantiene mi privacidad, pero si necesito un mayor control de mis búsquedas, uso Google porque puedo decirle que solo busque dentro de un sitio web o que solo devuelva resultados del último año. (Tiene muchas otras opciones de Búsqueda avanzada. Puedes buscarlas en Google.))
Otro consejo:
Para los comandos a los que hago referencia a menudo, guardo la página de manual en un archivo de texto
y cargar ese archivo en otra ventana en mi editor de texto para que pueda voltear hacia adelante y hacia atrás, copiar y pegar, etc. Por lo general, hago que el archivo sea de solo lectura, por lo que no termino destrozándolo por accidente, pero como es mi copia personal, podría editarlo de la forma que desee, agregando etiquetas para poder encontrar una sección más fácilmente o incluso agregar mis propias notas o ejemplos.
El único inconveniente de esto es que la página de manual original puede actualizarse y mi copia es estática.
fuente
Para obtener una ayuda rápida con su comando específico, puede usar Explain Shell . Por ejemplo, tu orden . Después de obtener la primera comprensión de alto nivel de cómo funciona esto, debe continuar con las páginas de manual como recomiendan otras respuestas.
fuente
Hay herramientas útiles para aprender más sobre los comandos de Linux:
cheat
mostrará la opción de uso frecuente para una línea de comando. También puede agregar el suyocommand + option
para mostrarlo mediantecheat
un comando específico.bropages
la herramienta proporciona algún ejemplo para una línea de comando, es posible agregar su propio ejemplo o votar a favor o en contra el ejemplo dado después de obtener el código de verificaciónbro thanks
. El comando debe votarse aparecerá en la parte superior de labro
página.fuente
Sugiero
tldr
una herramienta integral similar al hombre. Páginas man simplificadas y dirigidas por la comunidad. En Ubuntu puedes instalarlo a través de snap, pero también tiene versiones para otras distribuciones. También le proporciona varios usos de ejemplo comunes. 100% recomendadofuente
> Estoy buscando ayuda para interpretar una página de manual para comprender comandos complicados.
Creo que ese es el malentendido aquí. Lo que hace que Linux / UNIX sea tan poderoso es que puede construir comandos muy largos y efectivos, por ejemplo, redirigiendo el stdout de un comando (aquí
locate
) al stdin de otro (aquí,xargs
) a través de una tubería (|
). Por lo tanto, como Random832 dijo correctamente, no encontrará una sola página de manual que explique lo que hace su comando de ejemplo.Le recomiendo que lea una guía de scripts de shell de Linux; La Guía avanzada de secuencias de comandos Bash es un documento excelente. Por favor, no te dejes intimidar por ello; dominar Linux requiere años y es un proceso interminable, pero puedes aprender los conceptos básicos en un tiempo razonable.
Luego, consulte las páginas de manual cuando necesite conocer los detalles de un comando específico.
Una vez que hayas entendido, vale la pena leer Commandlinefu y Bash One-Liners para obtener buenos ejemplos.
fuente
Para buscar algo en particular en los comandos de una página de manual, puede usar:
Pero para buscar interruptores (por ejemplo
-n
), debe usarlo de esta manera:fuente