Introducción
En las lecciones anteriores aprendiste a navegar el sistema de archivos, manipular archivos, leer su contenido y buscar información. Cada comando hace una cosa bien, pero los has usado de forma aislada. En esta lección vas a aprender a conectar comandos entre sí, de modo que la salida de uno se convierta en la entrada de otro.
Esto es lo que hace que la terminal sea más poderosa que una interfaz gráfica: la capacidad de combinar herramientas simples en operaciones complejas. Dos mecanismos lo hacen posible: la redirección y los pipes.
¿Por qué conectar comandos?
Hasta ahora, cada resultado aparece en la pantalla y desaparece. Si ejecutas grep y encuentras algo importante, no queda guardado en ningún sitio. Si quieres filtrar la salida de find, tienes que leer toda la lista manualmente. La redirección y los pipes resuelven exactamente estos problemas:
- Redirección te permite guardar la salida de un comando en un archivo, para revisarla después, compartirla o usarla como entrada para otra herramienta.
- Pipes te permiten pasar la salida de un comando directamente como entrada de otro, sin archivos intermedios.
Entrada, salida y error
Cada comando en Linux tiene tres canales de comunicación:
- Entrada estándar (stdin): de donde el comando lee datos. Por defecto, es el teclado.
- Salida estándar (stdout): donde el comando escribe sus resultados. Por defecto, es la pantalla.
- Error estándar (stderr): donde el comando escribe mensajes de error. También va a la pantalla por defecto, pero es un canal separado.
La redirección y los pipes funcionan redirigiendo estos canales. Cuando escribes >, estás diciendo "envía stdout a un archivo en lugar de a la pantalla". Cuando escribes |, estás diciendo "envía stdout de este comando al stdin del siguiente".
Redirección y pipes en la práctica
Vamos a trabajar paso a paso. Asegúrate de estar en un directorio de práctica:
1$ cd ~
2$ mkdir -p practica
3$ cd practica
4Redirigir salida a un archivo: >
El operador > envía la salida de un comando a un archivo en lugar de a la pantalla:
1$ ls /etc > listado.txt
2$ cat listado.txt
3adduser.conf
4alternatives
5apt
6bash.bashrc
7...
8El comando ls /etc no mostró nada en pantalla: toda su salida fue al archivo listado.txt. Si el archivo no existe, > lo crea. Si ya existe, lo sobrescribe sin avisar.
Añadir al final: >>
Si quieres agregar contenido al final de un archivo sin borrar lo que ya tiene, usa >>:
1$ echo "--- Fin del listado ---" >> listado.txt
2$ tail -n 3 listado.txt
3xdg
4xml
5--- Fin del listado ---
6>> añade al final; > reemplaza todo. La diferencia es importante: confundirlos puede borrar datos.
Conectar comandos con pipes: |
El pipe | toma la salida de un comando y la pasa como entrada al siguiente. Esto te permite construir cadenas de procesamiento:
1$ ls /etc | grep "conf"
2adduser.conf
3debconf.conf
4logrotate.conf
5sysctl.conf
6Aquí ls /etc produce una lista de archivos. En lugar de mostrarla en pantalla, el pipe envía esa lista a grep, que filtra solo las líneas que contienen "conf". El resultado es una lista filtrada, sin crear ningún archivo intermedio.
Puedes encadenar varios pipes. Por ejemplo, para contar cuántos archivos de configuración hay:
1$ ls /etc | grep "conf" | wc -l
24
3wc -l (*word count, lines*) cuenta las líneas que recibe. La cadena completa hace: listar → filtrar → contar. Tres comandos simples que juntos responden una pregunta específica.
Combinar pipes y redirección
Puedes usar pipes y redirección en el mismo comando. Para buscar algo y guardar los resultados:
1$ find /home -name "*.txt" 2>/dev/null | grep "notas"
2/home/user/practica/notas.txt
3Aquí find busca archivos .txt, 2>/dev/null descarta los errores de permisos, y grep filtra solo los resultados que contienen "notas". Si quisieras guardar la salida final en un archivo, añades > al final:
1$ find /home -name "*.txt" 2>/dev/null | grep "notas" > resultados.txt
2Comandos como piezas de un sistema
La filosofía de Linux es construir herramientas pequeñas que hacen una cosa bien y se combinan entre sí. ls lista. grep filtra. wc cuenta. Ninguno intenta hacer todo, pero conectados con pipes, resuelven problemas que ninguno podría resolver solo.
Este patrón (producir → filtrar → transformar → guardar) es el flujo de trabajo fundamental de la terminal. Conforme avances en el curso, los comandos serán más específicos y los pipelines más largos, pero la mecánica siempre es la misma: un comando produce datos, el siguiente los procesa, el siguiente los refina.
Errores comunes
Advertencia
`>` sobrescribe sin preguntar. Si ejecutas ls > archivo.txt y archivo.txt ya contenía datos, esos datos desaparecen. Cuando quieras preservar el contenido existente, usa >>. Antes de redirigir a un archivo importante, verifica si ya tiene contenido con cat o ls -l.
Advertencia
No redirigir un archivo a sí mismo. Un comando como grep "algo" archivo.txt > archivo.txt vacía el archivo antes de que grep pueda leerlo. Si necesitas filtrar el contenido de un archivo, guarda primero en un archivo temporal y luego renómbralo.
Consejo
Construye pipelines paso a paso. Empieza ejecutando el primer comando solo para ver su salida. Luego añade un pipe y el siguiente comando. Verificar cada paso evita errores en cadenas largas.
Conclusión
Con > y >> puedes guardar la salida de cualquier comando en un archivo. Con | puedes encadenar comandos para filtrar, transformar y contar datos sin crear archivos intermedios. Combinados con los comandos que ya conoces (ls, cat, grep, find), tienes un vocabulario completo para trabajar con un sistema Linux desde la terminal. En el siguiente módulo aprenderás cómo Linux organiza usuarios, permisos y procesos, el modelo de control que decide quién puede hacer qué en el sistema.