Entendiendo las Tuberías y Redirección para la Línea de Comandos de Linux

Dos características poderosas de la línea de comandos de Linux son la redirección y las tuberías, que permiten que la salida (o incluso la entrada) de un programa se envíe a un archivo u otro programa. Es posible que ya hayas utilizado estas características sin ser consciente de ello. Siempre que hayas utilizado el signo “ > ” en un comando o “ | ”, entonces has utilizado redirección o una tubería, respectivamente.

En todos los sistemas operativos similares a Unix, como Linux y FreeBSD, la salida de un programa de línea de comandos se envía automáticamente a un lugar conocido como salida estándar (stdout). Por defecto, la salida estándar es la pantalla (la consola), pero eso puede cambiarse utilizando tuberías y redirección. Del mismo modo, el teclado se considera la entrada estándar (stdin) y, al igual que con la salida estándar, puede cambiarse.

Tuberías

Las tuberías te permiten canalizar la salida de un comando a otro, donde será utilizada 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 ” pausará después de la primera pantalla llena (página) y esperará a que el usuario presione ESPACIO para ver la siguiente página o RETORNO para ver la siguiente línea.

Aquí hay un ejemplo que enumerará todos los archivos, con detalles ( -la) en el directorio /dev y canalizará la salida a more. El directorio /dev debería tener docenas de archivos y, por lo tanto, asegúrate de que more necesita paginar.

ls-la/dev |more

ls pipe more

Observa el aviso --More-- en la parte inferior de la pantalla. Presiona ESPACIO para ver la siguiente página y sigue presionando ESPACIO hasta que la salida haya terminado.

Aquí hay otro ejemplo de tubería, esta vez utilizando 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 usas el parámetro -l, solo mostrará el número de líneas, lo que es una buena manera de ver cuántos archivos hay en un directorio.

El tutorial de Una Mirada Profunda a los Comandos de Archivado y Compresión de Linux tiene un ejemplo utilizando tar y 7-Zip juntos:

tar cvf - *| 7zr a -si somefiles.tar.7z

En este caso, el guion 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 tar se enviará a través de la tubería a 7zr, que está esperando entrada de la entrada estándar debido a la opción -si.

Redirección

La redirección es similar a las tuberías, excepto que utiliza archivos en lugar de otro programa. La salida estándar de un programa es la pantalla. Usando el símbolo > (mayor que), la salida de un programa puede enviarse a un archivo. Aquí hay una lista de directorios de /dev nuevamente, pero esta vez redirigida a un archivo llamado listing.txt

ls-la> listing.txt

No se mostrará nada en el terminal, ya que todo se envió al archivo. Puedes consultar el archivo usando el comando cat (que puede ser canalizado en more) o por conveniencia, puedes usar solo el comando more:

more 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 utilizando redirección, por ejemplo:

cat> atextfile.txt

Ahora, cualquier texto que escribas se enviará al archivo atextfile.txt hasta que presiones Control-D, momento en el cual el archivo se cerrará y volverás al símbolo del sistema. Si deseas agregar más texto al archivo, usa el mismo comando pero con dos signos de mayor ( >>).

Conclusión

Muchos de los programas de línea de comandos de Linux están diseñados para trabajar con redirección y tuberías, prueba a experimentar con ellos y ver cómo interactúan. Por ejemplo, la salida del comando ps, que enumera los procesos actuales, puede canalizarse en grep. ¡Verifica si puedes descubrir cómo listar los procesos owned por root!