Inicio > Entorno y utilidades > pipe(|)

Dominando la tubería (|): Herramienta clave para encadenar comandos

La tubería (pipe) es un mecanismo en el shell de Linux/Unix que conecta dos o más comandos, pasando la salida estándar de un comando a la entrada estándar del siguiente. Es una de las funciones centrales del shell, utilizada para dividir tareas complejas en comandos más simples y procesarlas secuencialmente. Funciona como una tubería de agua, donde los datos fluyen en una dirección.

Visión general de la tubería

La tubería se refiere al símbolo '|' utilizado en el shell de Linux/Unix, que transfiere la salida del comando de la izquierda como entrada al comando de la derecha. Esto permite a los usuarios combinar múltiples comandos para construir potentes y flexibles "pipelines" de procesamiento de datos.

Cómo funciona la tubería

La salida estándar (stdout) del primer comando se guarda en un búfer temporal creado por el shell, y el contenido de este búfer se pasa como entrada estándar (stdin) al segundo comando. Este proceso puede conectar múltiples comandos para formar una "pipeline".

Características de la tubería

  • Flujo unidireccional: Los datos siempre fluyen de izquierda a derecha, en una sola dirección.
  • Reutilización de datos: Los resultados del comando anterior se pueden usar inmediatamente como entrada para el siguiente comando.
  • Modularidad: Permite descomponer tareas grandes y complejas en comandos pequeños y simples para su procesamiento.
  • Eficiencia: Es eficiente ya que procesa los datos en la memoria sin necesidad de crear archivos temporales.

Ejemplos de uso de la tubería

Experimente el poder de la tubería a través de ejemplos prácticos que combinan varios comandos.

Buscar un patrón específico en la lista de archivos

ls -l | grep json

Muestra la lista de archivos del directorio actual con `ls -l` y luego usa `grep` para buscar solo las líneas que contienen la cadena 'json'. Esta tubería pasa la salida de `ls -l` como entrada a `grep`.

Encontrar un proceso específico en la lista de procesos

ps aux | grep nginx | grep -v grep

Verifica la lista de todos los procesos con `ps aux` y luego usa `grep` para filtrar solo los procesos 'nginx'. En este caso, el propio `grep` es un proceso, por lo que el proceso `grep nginx` debe ser excluido.

Encontrar los 5 archivos más grandes

ls -lh | sort -rh | head -5

Muestra detalladamente la lista de archivos con `ls -lh`, luego los ordena inversamente (`-r`) por tamaño (gracias a la opción `-h` para un formato legible por humanos) con `sort -rh`. Finalmente, muestra solo los 5 primeros resultados con `head -5`.

Contar el número de archivos .txt en el directorio actual

ls | grep '.txt' | wc -l

Muestra la lista de archivos con `ls`, luego filtra solo los archivos con extensión '.txt' con `grep`. Finalmente, cuenta el número de líneas filtradas (opción `-l`) con `wc -l` para obtener el número total de archivos.

Eliminar archivos combinando tubería y xargs

find . -name '*.log' | xargs rm

Encuentra archivos con un patrón específico usando `find` y luego pasa la lista de archivos encontrados como argumentos al comando `rm` a través de `xargs` para eliminarlos. Es difícil pasar argumentos a `rm` solo con la tubería, por lo que se usa junto con `xargs`.

Diferencia con la redirección

La redirección, que se usa a menudo junto con la tubería, es similar en el control del flujo de datos, pero tiene diferencias importantes en su funcionamiento.

Tubería vs. Redirección

  • Tubería (`|`): Conecta la **salida** de un comando con la **entrada** de otro comando.
  • Redirección (`>`, `>>`): Envía la **salida** de un comando a un archivo, o el contenido de un archivo a la **entrada** de un comando.

Ejemplo de redirección

ls -l > file_list.txt

Guarda el resultado de `ls -l` en el archivo `file_list.txt`. Esto no se usa como entrada para otro comando, sino que se escribe directamente en el archivo.


comandos relacionados

Son comandos que son funcionalmente similares o que se usan juntos con frecuencia.


Comandos de la misma categoría