Los tres canales
Todo proceso nace con tres canales abiertos:
| Canal | Número | Por defecto |
|---|---|---|
| stdin (entrada) | 0 | teclado |
| stdout (salida) | 1 | pantalla |
| stderr (errores) | 2 | pantalla |
Operadores
| Operador | Qué hace |
|---|---|
> |
Redirige stdout a un archivo, sobrescribiéndolo |
>> |
Redirige stdout agregando al final |
< |
Toma la entrada desde un archivo |
2> |
Redirige solo los errores |
&> |
Redirige salida y errores al mismo archivo |
2>&1 |
Manda los errores al mismo destino que la salida |
| |
Conecta la salida de un comando con la entrada del siguiente |
Sobrescribir o agregar
echo "línea 1" > notas.txt
echo "línea 2" > notas.txt # sobrescribe
cat notas.txt # solo "línea 2"
echo "línea 3" >> notas.txt # agrega
cat notas.txt # línea 2 y línea 3
Trampa clásica:
>vacía el archivo antes de que corra el comando. Por esosort datos.txt > datos.txtdeja el archivo vacío.
Errores y salida por separado
ls /tmp /noexiste > salida.txt 2> errores.txt
ls /noexiste 2> /dev/null # descarta los errores
ls /tmp /noexiste &> todo.txt # ambos al mismo archivo
/dev/null es el “agujero negro”: lo que se escribe ahí desaparece.
Pipes: encadenar comandos
ls /usr/bin | wc -l # cuántos comandos hay
ps aux | grep bash # filtrar procesos
cut -d: -f1 /etc/passwd | sort # lista de usuarios, ordenada
history | tail -5 # últimos 5 comandos
echo "hola" | tee saludo.txt # muestra y guarda a la vez
La filosofía Unix es que cada herramienta hace una cosa bien y se combinan con |.