En todos los sistemas operativos tipo Unix, como Linux y FreeBSD, la salida de un programa de línea de comandos va automáticamente a un lugar conocido como salida estándar (stdout). Por defecto, la salida estándar es la pantalla (la consola), pero se puede cambiar usando tuberías y redireccionamiento. Del mismo modo, el teclado se considera la entrada estándar (stdin) y, al igual que en el caso de la salida estándar, se puede cambiar.
Tubos
Las tuberías le permiten canalizar la salida de un comando a otro, donde se utilizará como entrada. En otras palabras, la salida estándar de un programa se convierte en la entrada estándar de otro.
El comando «more» toma la entrada estándar y la pagina en la salida estándar (la pantalla). Esto significa que si un comando muestra más información de la que se puede mostrar en una pantalla, el programa «more» hará una pausa después de la primera pantalla llena (página) y esperará a que el usuario pulse SPACE para ver la siguiente página o RETURN para ver la siguiente línea.
Aquí hay un ejemplo que listará todos los archivos, con detalles (-la) en el directorio /dev y canalizará la salida a más. El directorio /dev debería tener docenas de archivos y por lo tanto asegurar que más necesita paginar.
ls -la /dev | más
Observe la indicación –Más- en la parte inferior de la pantalla. Presione SPACE para ver la página siguiente y mantenga presionada la tecla SPACE hasta que la salida esté terminada.
Aquí hay otro ejemplo de tubería, esta vez usando la herramienta «wc» (conteo de palabras).
ls -1 /dev | wc
wc cuenta el número de líneas, palabras y caracteres en la entrada estándar. Si utiliza el parámetro -l sólo mostrará el número de líneas, lo que es una buena manera de ver cuántos archivos hay en un directorio.
El tutorial Analizar en profundidad los comandos de compresión y archivo de Linux tiene un ejemplo de cómo usar tar y 7-Zip juntos:
tar cvf - * | 7zr a -si somefiles.tar.7z
En este caso, el guión después de la opción f indica a tar que envíe su salida a la salida estándar y no a un archivo. La salida de alquitrán será alimentada a través de la tubería a 7zr, que está esperando la entrada del estándar debido a la opción -si.
Redirección
La redirección es similar a la de las tuberías, excepto que se utilizan archivos en lugar de otro programa. La salida estándar de un programa es la pantalla. Con el símbolo> (mayor que) se puede enviar la salida de un programa a un archivo. Aquí hay una lista de directorios de /dev otra vez pero esta vez redirigida a un archivo llamado listing.txt
ls -la> listado.txt
No se mostrará nada en la terminal ya que todo se envió al archivo. Puede echar un vistazo al archivo usando el comando cat (que puede ser insertado en más) o por conveniencia puede usar el comando more por su cuenta:
más listing.txt
Si listing.txt ya existía, se sobrescribirá. Pero puedes añadir a un archivo existente usando>>> así:
ls -la /home> listing.txt ls -la /dev>> listing.txt
La primera redirección sobrescribirá el archivo listing.txt mientras que la segunda lo añadirá.
El comando cat puede usarse para crear un archivo usando redirección, por ejemplo:
cat> atextfile.txt
Ahora, el texto que escriba se enviará al archivo atextfile.txt hasta que pulse Control-D, momento en el que se cerrará el archivo y se le devolverá a la línea de comandos. Si desea agregar más texto al archivo, use el mismo comando pero con dos signos mayores que (>>).
Conclusión
Muchos de los programas de línea de comandos de Linux están diseñados para trabajar con redirecciones y tuberías, intente experimentar con ellos y vea cómo interactúan. Por ejemplo, la salida del comando ps, que enumera los procesos actuales, puede ser canalizada a grep. Vea si puede averiguar cómo listar los procesos que pertenecen a root.