El verdadero poder del terminal viene de la composición. ls, grep y wc por separado son útiles. Pero encadenados con un pipe, resuelven problemas que en otro entorno necesitarían una pequeña app.
stdin, stdout, stderr
Cada comando tiene tres "flujos" implícitos:
- stdin (entrada estándar): lo que lee como entrada.
- stdout (salida estándar): lo que escribe normalmente.
- stderr (salida de error): lo que escribe cuando algo falla.
Por defecto, stdout y stderr aparecen en el terminal. Las redirecciones permiten enviarlos a otro sitio.
Redirigir hacia un archivo
> envía stdout a un archivo. Atención: sobreescribe el archivo si ya existe.
>> añade al final del archivo en lugar de sobreescribir. Imprescindible para los logs.
Redirigir los errores
2>redirige stderr (los errores) a un archivo.&>redirige stdout y stderr juntos. Útil cuando quieres capturar todo lo que produce un comando.
El pipe: encadenar comandos
El pipe | envía stdout de un comando a stdin del siguiente:
ls | grep README: lista los archivos y conserva solo los que contienen "README".cat acceso.log | grep ERROR | wc -l: cuenta cuántas líneas "ERROR" hay en el archivo de log.ps aux | grep node: busca los procesos Node.js en ejecución.
Ejemplo práctico completo
Encontrar cuántos archivos .js hay en la carpeta actual:
Extraer las líneas de error de un archivo de log y guardarlas:
Redirecciones (manual GNU Bash)