La terminal es una caja de herramientas increíble, allí disponemos de cientos de comandos y utilidades que nos ayudan a completar nuestras tareas diarias. Hoy les explicaremos qué son las tuberías y las redirecciones y por qué son tan importantes.

Conceptos básicos

Antes de pasar a la parte divertida debemos manejar tres términos fundamentales en Linux: entrada estándar, salida estándar y error estándar.

La entrada estándar representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.

La salida estándar es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.

El error estándar es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.

Todos estos tipos son representados físicamente como archivos en el sistema, pues como ya deben saber, todo en Linux son archivos.

Entonces, ¿qué es una redirección?

Una redirección consiste en trasladar la información de un tipo a otro, por ejemplo de la salida estándar a la entrada estándar o del error estándar a la salida estándar. Esto lo logramos usando el símbolo >.

Por ejemplo, para redireccionar la salida de un comando y volcarla a un archivo bastaría con ejecutar:

$ ls -la ~ > archivo.txt


Sin embargo, cada vez que ejecutemos ese comando el contenido de archivo.txt será reemplazado por la salida del comando ls. Si queremos agregar la salida del comando al archivo, en lugar de reemplazarla, entonces ejecutamos:

$ ls -la ~ >> archivo.txt


Lo interesante es que, además de la salida estándar, también podemos redireccionar el error estándar y la entrada estándar. Si queremos forzar a que un programa nos imprima en pantalla los errores que consiga durante su ejecución podemos redireccionar el error estándar hacia la salida estándar. Eso lo logramos ejecutando:

$ programa 2>&1


¿Recuerdan que más arriba les explicaba que Linux identifica a cada tipo con un número? Bueno, aquí es donde esos números cobran sentido. El tipo 2 es el error estándar y el tipo 1 es la salida estándar. En los ejemplos previos no tuvimos la necesidad de especificar el tipo 1 porque la terminal lo asume pero pudimos expresarlos explícitamente de la siguiente manera:

$ ls -la ~ 1> archivo.txt
$ ls -la ~ 1>> archivo.txt


Podemos, por ejemplo, contar las líneas que tiene un archivo redireccionando la entrada estándar de wc hacia un archivo de texto. Así:

$ wc < archivo.txt


También podemos hacer algo muy común en la administración de sistemas, descartar el error estándar de un proceso. Para eso ejecutamos:

$ programa 2> /dev/null


O incluso descartar su salida estándar:

$ programa > /dev/null


En Linux, /dev/null es un archivo especial al que se envía cualquier información que quiera ser descartada.

Tuberías

No hay que ser Mario para entender las tuberías en Linux, de hecho luego de haber entendido cómo funcionan las redirecciones, entender las tuberías será tan fácil como aplastar a un Goomba.

Uno de los principios de la filosofía Unix consiste en tener aplicaciones muy pequeñas que hagan tareas muy puntuales y que usadas en conjunto puedan realizar tareas complejas. Entonces, siguiendo este principio debe existir una forma para que varias aplicaciones puedan interactuar entre sí, aquí es donde entran las tuberías.

Una tubería en Linux no es más que una forma práctica de redireccionar la salida estándar de un programa hacia la entrada estándar de otro. Esto se logra usando el símbolo | (pipe).

Por ejemplo, podríamos ver los procesos que están corriendo en el sistema usando ps y le redireccionamos la salida a sort para que los ordene por PID:

$ ps -a | sort


También podemos redireccionar la salida estándar del comando cat y pasarla como entrada estándar del comando wc para contar las líneas y palabras de un archivo:

$ cat archivo.txt | wc

Tanto las redirecciones como las tuberías son conceptos fundamentales que sin duda debes manejar para empezar a sentirte cómodo con la terminal. Verás que al cabo de un tiempo no sabrás cómo pudiste vivir sin ellos.

Cuéntanos ¿Para qué cosas utilizas las redirecciones y las tuberías en la terminal?