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 stdines su teclado y stdoutes su pantalla o ventana de terminal.
Entonces, cuando corres 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 lo stdinhacen, siendo su editor de texto uno de esos. Se lee stdinpara aceptar las pulsaciones del teclado, hacer cosas y luego escribe cosas stdout.
Sin embargo, también hay comandos no interactivos o de "filtro" que NO funcionan de manera interactiva, pero quieren un montón de datos. Estos comandos tomarán todo lo que stdintenga, le harán algo y luego lo lanzarán astdout
Veamos otro comando llamado du: representa el uso del disco. du /usr, por ejemplo, imprimirá (para stdoutgustarle cualquier otro comando de Linux) una lista de cada archivo 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 se puede ver de inmediato, no está ordenado, y probablemente desee ordenarlo por orden de tamaño.
sortes uno de esos comandos de "filtro" que tomará un montón de cosas stdiny las ordenará.
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 stdoutcomando de uno al stdinotro. 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 múltiples comandos de tipo filtro.
Si escribe sortsolo, aún intentará leer stdin. Como stdinestá conectado a su teclado, esperará a que escriba y procese las cosas hasta que presione Control-D. No le avisará, ya que no está destinado a ser utilizado de forma interactiva.
Es posible que un programa sepa si stdines interactivo o no, por lo que algunos programas pueden actuar de manera diferente si los emite por sí mismos o al final de una tubería.
Además, canalizar un programa que solo funciona de forma interactiva, por ejemplo vi, te hará pasar un mal momento.
Las canalizaciones son diferentes de la redirección en que los datos se barajan de un comando a otro sin almacenarse en ningún lado. Entonces, en el ejemplo anterior, dula salida de 'no se almacena en ningún lado. La mayoría de las veces no quiere 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 teeque le permite tener su pastel y comérselo también, lo hará copie lo que recibe de stdinambos stdouty un archivo de su elección. También es probable que pueda hacer esto bashcon alguna sintaxis arcana que implique símbolos y corchetes que no conozco.
|es que no utiliza un nombre, la salida del comando l-hand se pasa directamente a la entrada para el comando en el lado de la mano derecha de la tubería.