Saltar a contenido

Redireccionamiento#

Un programa en ejecución o un proceso, necesita leer o recibir información desde algún lugar para luego escribir la salida, por ejemplo un comando ejecutado en una shell, lee la información de entrada desde el teclado y luego envía el resultado (salida) hacia la ventana de la terminal.

Los procesos usan unos canales numerados que se conocen como file descriptors para obtener su información de entrada y luego enviar la información de salida o resultado.

FILEDESCRIPTORS

Número Nombre del Canal Descripción Conexión por defecto Uso
0 stdin Entrada Estándar Teclado Solo Lectura
1 stdout Salida Estándar Terminal Solo Escritura
2 stderr Error Estándar Terminal Solo Escritura
3+ filename Otros Archivos none lectura y/o escritura

Uso de redireccionamiento#

Uso Descripción
comando > archivo Redirige la salida estándar a un archivo y lo sobrescribe.
comando >> archivo Redirige la salida estándar a un archivo, agregando el contenido al final del archivo.
comando 2>archivo Redirige el error estándar a un archivo y lo sobrescribe.
comando 2>/dev/null Redirige el error estándar a /dev/null para ser descartado.
comando >archivo 2>&1 Redirige la salida estándar y el error estándar a un archivo.
comando >>archivo 2>&1 Redirige la salida estándar y el error estándar a un archivo, agregando el contenido al final del archivo.

Ejemplos#

echo "Nuevo Archivo" > ~/mensajes.txt
echo "Agregando Linea" >> ~/mensajes.txt
ls -la > /tmp/mis_archivos.txt
find /etc -name passwd > /tmp/resultado 2> /tmp/errores
cat file1 file2 file3 file4 > /tmp/all-in-one-file.txt

Tuberías#

Una tubería es una secuencia de comandos separados por un carácter de pipe (|). Un pipe conecta la salida estándar del primer comando con la entrada estándar del siguiente comando.

PIPES

Ejemplos#

ls -l /usr/bin | less
ls | wc -l
ls -t /etc/ | head -n 10 > /tmp/los-10-ultimos-archivos-modificados
ps -ef --sort -%cpu | head

Tuberías, redirección y el comando tee#

Cuando la redirección es combinada con una tubería, la shell configura la tubería primero luego redirige la E/S. Si se usa la redirección de la salida en medio de una tubería, la salida iría hacia el archivo y no llegaría al siguiente comando.

En el siguiente ejemplo la salida del comando ls se envía a un archivo y por lo tanto el comando less no recibe nada.

ls -l /etc > /tmp/etc-files.txt | less

Para evitar lo anterior podemos hacer uso del comando tee, que básicamente nos permite dirigir la salida estándar de un comando hacia un archivo o una terminal, y a su vez hacia la entrada estándar de otro comando.

TEE

Ejemplos#

ls -l /etc | tee /tmp/etc-files.txt | less
ls -t /etc/ | head -n 10 | tee /tmp/los-10-ultimos-archivos-modificados.txt