GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué significa el símbolo de la tubería de Linux? ¿hacer?

Si se siente cómodo con la redirección de entrada y salida, la explicación es bastante sencilla.

Command1 | Command2

hace lo mismo que

Command1 > tempfile
Command2 < tempfile

pero sin tempfile . La salida de Command1 está conectado directamente a la entrada de Command2 y la transferencia ocurre en la memoria.


Lo siguiente se simplifica un poco para ayudar a los nuevos usuarios.

Bueno, primero, es necesario comprender el concepto de entrada estándar y salida estándar.

En Linux y otros sistemas operativos similares a UNIX, cada proceso tiene una entrada estándar (stdin ) y una salida estándar (stdout ). La situación habitual es que stdin es tu teclado y stdout es tu pantalla o ventana de terminal.

Así que cuando ejecutas ls , arrojará su salida a stdout . Si no hace nada más, irá a su pantalla o ventana de terminal y lo verá.

Ahora, algunos comandos de Linux interactúan con el usuario y usan stdin para hacer eso, su editor de texto es uno de esos. Se lee desde stdin para aceptar tus pulsaciones de teclas, hacer cosas y luego escribir cosas en stdout .

Sin embargo, también hay comandos no interactivos o de "filtro" que NO funcionan de forma interactiva, pero necesitan un montón de datos. Estos comandos tomarán todo stdin tiene, hágale algo y luego tírelo a stdout

Veamos otro comando llamado du - representa el uso del disco. du /usr , por ejemplo, se imprimirá (a stdout como cualquier otro comando de Linux) una lista de todos los archivos en ese directorio y su tamaño:

# du /usr
2312    /usr/games
124     /usr/lib/tc
692     /usr/lib/rygel-1.0
400     /usr/lib/apt/methods
40      /usr/lib/apt/solvers
444     /usr/lib/apt
6772    /usr/lib/gnash

Como puede ver desde el principio, no está ordenado, y probablemente quiera ordenarlo por tamaño.

sort es uno de esos comandos de "filtro" que tomará un montón de cosas de stdin y ordénalo.

Entonces, si hacemos esto:

# du /usr | sort -nr

obtenemos esto, que es un poco mejor:

4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668  /usr/lib/vmware
501700  /usr/share/locale
366476  /usr/lib/x86_64-linux-gnu
318660  /usr/lib/libreoffice
295388  /usr/lib/vmware/modules
290376  /usr/lib/vmware/modules/binary
279056  /usr/lib/libreoffice/program
216980  /usr/share/icons

Y ahora puede ver que la "tubería" conecta el stdout de un comando al stdin de otro. Por lo general, lo usará en situaciones como esta en las que desea filtrar, ordenar o manipular la salida de un comando. Se pueden conectar en cascada si desea procesar la salida a través de varios comandos de tipo filtro.

Si escribe sort por sí mismo, aún intentará leer desde stdin . Desde stdin está conectado a su teclado, estará esperando que escriba y procese las cosas hasta que presione Control-D. No le preguntará, ya que en realidad no está destinado a ser utilizado de forma interactiva.

Es posible que un programa diga si stdin es interactivo o no, por lo que algunos programas pueden actuar de manera diferente si los ejecuta solos o al final de una canalización.

Además, canalizar un programa que solo funciona de forma interactiva, como vi , hará que lo pases mal.

Las canalizaciones se diferencian de la redirección en que los datos se mezclan de un comando al siguiente sin almacenarse en ningún lugar. Entonces, en el ejemplo anterior, du La salida de no se almacena en ninguna parte. La mayoría de las veces no desea esto con tuberías porque la razón para usar tuberías es procesar la salida de un comando de alguna manera, pero hay un comando tee que te permite tener tu pastel y comértelo también, copiará lo que recibe de stdin a ambos stdout y un archivo de su elección. Es probable que también puedas hacer esto desde bash con alguna sintaxis arcana que involucra signos y corchetes que no conozco.


Realmente, si quiere saber qué hacen las canalizaciones y la diferencia entre> y |, vaya a un directorio con muchos archivos y

desde una terminal ls contra ls | more (o hacerlo desde Windows con DIR y DIR | MÁS)

Si usó> más, verá que crea un archivo llamado 'más' en lugar de enviar la salida de ls al comando 'más'. Entonces, si alguien hiciera>más, probablemente sería un error, uno no haría>más, harías>archivo1. Más es un comando bien conocido.

El también sirve para vincular un comando y un archivo, en lugar de un comando a un comando. Pero mientras> envía la salida de un comando a un archivo,

$ grep a

$ gato archivo1 | grep aabc

grep con 2 parámetros tiene la forma de archivo de patrón grep. grep con un parámetro es patrón grep. Y puede enviarle el archivo canalizando el contenido del archivo o usando <. Si usa <, primero escribe el nombre del comando, luego el nombre del archivo después del comando

Además, muchos comandos toman un archivo como entrada de todos modos, por lo que grep a file1 funcionará, al igual que cat file1 | grep a, y grep a

Estaba haciendo tuberías (|) y> en DOS incluso hace 15 años.

Para resumir cómo | difiere de - La tubería se encuentra entre 2 comandos. Los se encuentran entre un comando y un archivo. El> se envía a un archivo. El


Linux
  1. Domina el comando ls de Linux

  2. ¿Qué significa en la salida de Ps?

  3. ¿Qué significa &al final de un comando de Linux?

  4. ¿Qué se supone que debe hacer el comando de exportación en Linux?

  5. ¿Qué significa el sufijo .d en Linux?

ExpliqueShell:encuentre lo que hace cada parte de un comando de Linux

Conchas marinas:canalice la salida de su comando de Linux a la web en tiempo real

¿Qué significa el comando Cat en Linux?

El comando del temporizador en Linux

¿Qué son las tuberías en Linux? ¿Cómo funciona la redirección de tuberías?

¿Qué es el comando matar en Linux?