Redirección de Entrada y Salida en Linux

CompTIABeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás las técnicas fundamentales para redireccionar la entrada y salida en la terminal de Linux. Explorarás cómo controlar el flujo de datos de los comandos manipulando los tres flujos estándar: salida estándar (stdout), error estándar (stderr) y entrada estándar (stdin). Esta sesión proporciona práctica directa con los operadores de redirección esenciales, lo que te permitirá guardar la salida de los comandos, gestionar mensajes de error y proporcionar entrada a los comandos desde archivos.

A lo largo de los ejercicios, utilizarás el operador > para enviar la salida de un comando a un archivo, sobrescribiendo el contenido existente, y el operador >> para añadir la salida sin perder datos. También aprenderás a redireccionar específicamente los mensajes de error mediante 2> y cómo combinar tanto la salida estándar como el error estándar en un solo archivo. Finalmente, utilizarás el comando tee para mostrar la salida en pantalla y guardarla en un archivo simultáneamente, y practicarás la redirección de la entrada estándar con el operador < para que un comando lea desde un archivo en lugar del teclado.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel intermedio con una tasa de finalización del 78%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Redireccionar la Salida Estándar con el Operador >

En este paso, aprenderás a redireccionar la salida estándar de un comando. En una terminal de Linux, la mayoría de los comandos producen algún tipo de resultado. Por defecto, este resultado, conocido como "Salida Estándar" (o stdout), se muestra en la pantalla de tu terminal. Sin embargo, puedes redireccionar esta salida a un archivo utilizando el operador >. Esto es muy útil para guardar resultados de comandos, crear archivos de registro (logs) o generar informes.

Primero, ejecutemos un comando sencillo y veamos su salida en la terminal.

echo "Hello from LabEx"

Deberías ver el siguiente resultado directamente en tu terminal:

Hello from LabEx

Ahora, vamos a redireccionar esta salida a un archivo en su lugar. Utilizaremos el operador > seguido de un nombre de archivo. Esto le indica a la terminal que envíe la salida del comando echo a un archivo llamado hello.txt en tu directorio actual (~/project).

Ejecuta el siguiente comando:

echo "Hello from LabEx" > hello.txt

Observa que esta vez no ves ninguna salida en la terminal. Esto se debe a que la salida se envió al archivo hello.txt. Puedes verificar el contenido del archivo usando el comando cat:

cat hello.txt

La salida mostrará el texto que fue redireccionado:

Hello from LabEx

El operador > creará el archivo si este no existe. Ten cuidado, si el archivo ya existe, el operador > sobrescribirá todo su contenido sin previo aviso. Veamos esto en acción.

Primero, listemos el contenido del directorio actual y guardémoslo en un nuevo archivo llamado file_list.txt.

ls -l > file_list.txt

Ahora, visualiza el contenido de file_list.txt:

cat file_list.txt

Verás un listado de los archivos en tu directorio de proyecto, que debería verse algo parecido a esto:

total 4
-rw-rw-r-- 1 labex labex  0 Jun 25 14:56 file_list.txt
-rw-rw-r-- 1 labex labex 17 Jun 25 14:56 hello.txt

Ahora, ejecutemos un comando diferente y redireccionemos su salida al mismo archivo, file_list.txt.

echo "This is new content." > file_list.txt

Si revisas el contenido de file_list.txt nuevamente, verás que la lista de archivos original ha sido reemplazada.

cat file_list.txt

La salida ahora es:

This is new content.

Esto demuestra el comportamiento de sobrescritura del operador >. En el siguiente paso, aprenderás cómo añadir salida a un archivo sin sobrescribirlo.

Añadir a la Salida Estándar con el Operador >>

En este paso, aprenderás cómo agregar salida al final de un archivo sin borrar su contenido existente. En el paso anterior, viste que el operador > sobrescribe el archivo de destino. Para evitar esto, puedes usar el operador de anexado, >>. Este operador es extremadamente útil para tareas como mantener un archivo de registro continuo donde deseas agregar nuevas entradas con el tiempo.

Comencemos creando un archivo con un contenido inicial. Lo llamaremos greetings.txt.

echo "Hello, this is the first line." > greetings.txt

Ahora, verifica su contenido:

cat greetings.txt

La salida debería ser:

Hello, this is the first line.

A continuación, en lugar de sobrescribir el archivo, vamos a añadir una nueva línea usando el operador >>.

echo "This is the second line, appended." >> greetings.txt

Revisa el contenido de greetings.txt de nuevo.

cat greetings.txt

Esta vez, verás que la nueva línea se ha agregado después del contenido original:

Hello, this is the first line.
This is the second line, appended.

El operador >> es perfecto para crear archivos de log. Vamos a crear un archivo de registro simple llamado activity.log y añadirle una marca de tiempo usando el comando date.

date > activity.log

Ahora, añadamos otra marca de tiempo al mismo archivo.

date >> activity.log

Visualiza el archivo activity.log final para ver ambas entradas.

cat activity.log

La salida mostrará dos marcas de tiempo, demostrando que el segundo comando añadió su salida en lugar de sobrescribir el archivo. Las horas exactas variarán.

Wed Jun 25 14:56:53 CST 2025
Wed Jun 25 14:56:56 CST 2025

Esto muestra cómo >> preserva los datos existentes y agrega nuevos datos al final de un archivo, convirtiéndolo en una forma segura de actualizar archivos con nueva información.

Redireccionar el Error Estándar con el Operador 2>

En este paso, aprenderás a gestionar los mensajes de error. Además de la salida estándar (stdout), los comandos también producen otro tipo de salida llamada "Error Estándar" (stderr). Este es un flujo separado que se utiliza específicamente para mensajes de error y diagnósticos. Por defecto, tanto stdout como stderr se muestran en tu terminal, pero los operadores de redirección que has aprendido hasta ahora (> y >>) solo afectan a stdout.

Para redireccionar stderr, necesitas especificar su descriptor de archivo, que es el 2. El operador > es en realidad una abreviatura de 1>, donde 1 es el descriptor de archivo para stdout. Por lo tanto, para redireccionar stderr, se utiliza 2>.

Generemos un error para ver esto en acción. Intentaremos listar un archivo que no existe.

ls non_existent_file

Este comando fallará e imprimirá un mensaje de error en tu terminal:

ls: cannot access 'non_existent_file': No such file or directory

Ahora, intentemos redireccionar esto usando el operador estándar >.

ls non_existent_file > output.txt

Observa que el mensaje de error todavía se imprime en la terminal. El operador > no lo capturó. Si revisas el archivo output.txt, verás que está vacío.

cat output.txt

El comando no produce salida porque no se generó ninguna salida estándar, solo un error estándar.

Ahora, redireccionemos correctamente el error estándar a un archivo llamado error.log usando 2>.

ls non_existent_file 2> error.log

Esta vez, no aparece ningún mensaje en la terminal. El error ha sido redireccionado con éxito. Puedes ver el contenido de error.log para ver el mensaje capturado.

cat error.log

La salida será el mensaje de error del comando ls:

ls: cannot access 'non_existent_file': No such file or directory

Al igual que >> añade a la salida estándar, puedes usar 2>> para añadir el error estándar a un archivo. Intentemos listar otro archivo inexistente y añadir el error a nuestro error.log.

ls another_fake_file 2>> error.log

Ahora, revisa el contenido de error.log nuevamente.

cat error.log

Verás que el nuevo mensaje de error se ha agregado al final del archivo.

ls: cannot access 'non_existent_file': No such file or directory
ls: cannot access 'another_fake_file': No such file or directory

Esta técnica es muy útil para separar la salida normal de los mensajes de error, lo que te permite registrar errores para revisarlos más tarde sin ensuciar tus archivos de salida principales.

Redireccionar tanto stdout como stderr a un Solo Archivo

En este paso, aprenderás a capturar toda la salida de un comando —tanto la salida estándar como el error estándar— en un solo archivo. Esto es particularmente útil cuando deseas un registro completo de la ejecución de un script o comando, incluyendo cualquier error que haya ocurrido.

Usemos un comando que produzca tanto stdout como stderr. Intentaremos listar un archivo que existe (/etc/passwd) y uno que no (non_existent_file).

ls -l /etc/passwd non_existent_file

Verás dos tipos de salida en tu terminal. La primera línea es el error estándar y la segunda es la salida estándar.

ls: cannot access 'non_existent_file': No such file or directory
-rw-r--r-- 1 root root 1916 Jul 18  2024 /etc/passwd

Si intentas redireccionar esto usando solo > para stdout, el mensaje de error seguirá apareciendo en la pantalla.

ls -l /etc/passwd non_existent_file > output_only.txt

Salida en la terminal:

ls: cannot access 'non_existent_file': No such file or directory

Y output_only.txt solo contendrá la salida estándar:

cat output_only.txt
-rw-r--r-- 1 root root 1916 Jul 18  2024 /etc/passwd

Para redireccionar ambos flujos a un solo archivo, puedes usar el operador &>. Esta es una abreviatura conveniente que envía tanto stdout (descriptor de archivo 1) como stderr (descriptor de archivo 2) al archivo especificado.

Probémoslo. Redireccionaremos toda la salida a un archivo llamado combined.log.

ls -l /etc/passwd non_existent_file &> combined.log

Esta vez, no se imprime nada en la terminal. Toda la salida ha sido capturada en combined.log. Veamos su contenido:

cat combined.log

Verás que el archivo contiene tanto la salida estándar como el error estándar:

ls: cannot access 'non_existent_file': No such file or directory
-rw-r--r-- 1 root root 1916 Jul 18  2024 /etc/passwd

También existe una sintaxis más tradicional, aunque un poco más compleja, para lograr el mismo resultado: > file 2>&1. Vamos a desglosarla:

  • > file: Esto redirecciona la salida estándar (descriptor de archivo 1) a file.
  • 2>&1: Esto redirecciona el error estándar (descriptor de archivo 2) a la misma ubicación que la salida estándar (descriptor de archivo 1). Dado que stdout ya se está enviando a file, stderr también se envía allí.

Probemos este método, guardando la salida en combined_traditional.log.

ls -l /etc/passwd non_existent_file > combined_traditional.log 2>&1

Nuevamente, no aparece salida en la terminal. Al verificar el contenido del archivo se muestra el mismo resultado:

cat combined_traditional.log
ls: cannot access 'non_existent_file': No such file or directory
-rw-r--r-- 1 root root 1916 Jul 18  2024 /etc/passwd

Aunque &> es más corto y suele preferirse, verás con frecuencia 2>&1 en scripts antiguos, por lo que es importante entender qué hace. Para añadir ambos flujos al final de un archivo, puedes usar &>> o >> file 2>&1.

Usar tee para Duplicar la Salida y Redireccionar la Entrada Estándar con <

En este paso final, explorarás dos conceptos de redirección complementarios: duplicar la salida con el comando tee y proporcionar entrada a un comando desde un archivo usando el operador <.

Duplicar la Salida con tee

A veces, deseas guardar la salida de un comando en un archivo y, al mismo tiempo, verla en la terminal. Los operadores > y >> redireccionan la salida exclusivamente a un archivo, ocultándola de la pantalla. El comando tee soluciona esto duplicando la salida, enviándola tanto a un archivo como a la salida estándar (tu pantalla). Su nombre proviene de una pieza en forma de "T" utilizada en fontanería, que divide un flujo en dos caminos.

Veámoslo en acción. Listaremos el contenido del directorio /etc/ y usaremos tee para mostrar la lista en pantalla y guardarla en un archivo llamado etc_listing.txt.

ls /etc/ | tee etc_listing.txt

Verás el listado completo del directorio impreso en tu terminal. Al mismo tiempo, el comando tee ha escrito exactamente la misma salida en etc_listing.txt. Puedes verificarlo:

cat etc_listing.txt

El contenido del archivo coincidirá con lo que viste en pantalla.

Por defecto, tee sobrescribe el archivo de destino. Para añadir a un archivo en su lugar, utiliza la opción -a. Esto es muy útil para registros. Vamos a crear un archivo de log y añadir dos entradas.

date | tee system_log.txt
echo "User labex performed a system check." | tee -a system_log.txt

El primer comando crea system_log.txt con la fecha actual. El segundo comando, usando tee -a, añade una nueva línea sin borrar la fecha. Revisemos el archivo final:

cat system_log.txt

La salida mostrará ambas líneas:

Wed Jun 25 14:56:53 CST 2025
User labex performed a system check.

Redireccionar la Entrada Estándar con <

Ahora veamos lo opuesto a la redirección de salida: redireccionar la entrada estándar (stdin). Muchos comandos, como sort, wc o cat, pueden leer datos desde stdin (normalmente tu teclado). El operador < te permite indicarle a un comando que obtenga su entrada desde un archivo en su lugar.

Primero, creemos un archivo simple con una lista de elementos. Lo llamaremos items.txt.

echo "banana" > items.txt
echo "apple" >> items.txt
echo "cherry" >> items.txt

Ahora tenemos un archivo items.txt con tres elementos desordenados. El comando sort puede ordenar líneas de texto. Usemos < para alimentar el comando sort con el contenido de items.txt.

sort < items.txt

El comando leerá el contenido de items.txt como su entrada, lo ordenará e imprimirá el resultado en su salida estándar (la terminal):

apple
banana
cherry

Esto es funcionalmente similar a ejecutar sort items.txt, pero demuestra el potente concepto de redireccionar un archivo a la entrada estándar de un comando. Esto se vuelve esencial cuando se trabaja con comandos que solo pueden leer de stdin y no aceptan un nombre de archivo como argumento.

Como ejemplo final, considera cat < items.txt. Esto le indica a cat que lea su entrada desde items.txt y, dado que el trabajo de cat es imprimir su entrada en su salida, muestra el contenido del archivo en la pantalla.

cat < items.txt

Esto concluye nuestro recorrido por la redirección básica de E/S en Linux. Ahora tienes las herramientas para controlar de dónde obtienen tus comandos su entrada y a dónde va su salida.

Resumen

En esta práctica de laboratorio, aprendiste los fundamentos de la redirección de la salida de comandos en Linux. Comenzaste utilizando el operador > para enviar la salida estándar (stdout) de un comando a un archivo, observando que este operador sobrescribirá el archivo de destino si ya existe. Para evitar la sobrescritura, utilizaste el operador >> para añadir la salida al final de un archivo. También practicaste la redirección del error estándar (stderr) a un archivo mediante el operador 2>, lo cual es útil para capturar mensajes de error de forma separada a la salida estándar.

Además, la práctica demostró cómo combinar estos conceptos redireccionando tanto stdout como stderr a un solo archivo para obtener registros completos. Exploraste el comando tee como un método para duplicar la salida, permitiendo que se guarde en un archivo mientras se muestra simultáneamente en la terminal. Finalmente, aprendiste a redireccionar la entrada estándar (stdin) usando el operador <, permitiendo que un comando lea su entrada desde un archivo en lugar del teclado.