Objetivo:
Aprender a manipular la redirección de entrada estándar (<), la entrada de texto hasta delimitador o "Here Document" (<<), la redirección del flujo de error estándar (2>) y el descarte de salidas no deseadas mediante el dispositivo especial /dev/null.
Escenario:
- Herramientas: Terminal de Linux y un sistema Debian o basado en Debian.
- Conceptos clave: Redirección de entrada (
<), delimitadores de entrada (<<), conteo de líneas (wc -l), descriptores de fichero (0, 1, 2), redirección de errores (2>) y el agujero negro del sistema (/dev/null).
Instrucciones:
Fase 1: Redirección de entrada (<) desde un fichero
- Abre la terminal de Linux.
- Crea un archivo llamado
documento1.txtcon dos líneas de texto usando redirecciones de salida: - Comprueba el contenido del archivo:
- Utiliza el comando
trredirigiendo la entrada estándar desde el ficherodocumento1.txtpara sustituir las letras 'e' por 'x': - Observa cómo
trtoma el contenido del archivo como si fuera introducido por teclado, sin modificar el archivo original.
echo "esto es una prueba" > documento1.txt
echo "aquí hay menos pruebas" >> documento1.txt
cat documento1.txt
tr e x < documento1.txt
Fase 2: Conteo de líneas con wc -l y entrada interactiva
- Ejecuta el comando
wc -lsin argumentos para contar las líneas introducidas manualmente por teclado: - Escribe tres líneas de texto en la terminal (pulsando
Entertras cada una) y finaliza la entrada pulsando: - Comprueba el número total de líneas devuelto por el sistema.
- Ahora, redirige el fichero
documento1.txtcomo entrada al comandowc -l:
wc -l
Ctrl + D
wc -l < documento1.txt
Fase 3: Redirección de entrada mediante delimitador (<<)
- Ejecuta
wc -lindicando un delimitador de fin de entrada (por ejemplo, la palabraFINAL): - Escribe varias líneas en la terminal. Observa que el prompt cambia a
>esperando contenido. - Escribe la palabra
FINALy pulsaEnterpara terminar la captura de datos. Comprueba que el recuento no incluye la palabra delimitadora. - Prueba el delimitador con
trpara reemplazar vocales hasta que introduzcas la palabra clave de cierre: - Escribe palabras con la letra 'a', introduce la palabra
ENDy pulsaEnter.
wc -l << FINAL
tr a p << END
Fase 4: Redirección del error estándar (2>)
- Intenta visualizar un archivo que no existe en tu sistema para generar una salida de error (stderr):
- Redirige únicamente la salida de error (descriptor
2) hacia un fichero denominadoerror.txt: - Comprueba que no ha aparecido ningún mensaje por pantalla y verifica el contenido de
error.txt: - Verifica que también puedes indicar de forma explícita la salida estándar (descriptor
1) volcando/etc/passwd:
cat documento50.txt
cat documento50.txt 2> error.txt
cat error.txt
cat /etc/passwd 1> usuarios.txt
Fase 5: Descartes de salida con el dispositivo /dev/null
- Ejecuta una orden que falle y envía el mensaje de error al dispositivo especial
/dev/null: - Comprueba que el mensaje de error se ha descartado completamente, sin mostrarse por pantalla ni almacenarse en disco.
- Limpia la pantalla de la terminal con:
cat documento50.txt 2> /dev/null
clear
Preguntas de reflexión:
- ¿Qué diferencia existe entre utilizar
>y<en una línea de comandos de Linux? - ¿Por qué comandos como
trrequieren redirección de entrada (<) para procesar un fichero directamente? - ¿Qué función cumple el parámetro
-len el comandowc? - ¿Cómo funciona el operador de entrada
<<(Here Document) y para qué sirve la palabra o etiqueta que se le añade a continuación? - ¿Se contabiliza la palabra delimitadora dentro del resultado final de
wc -l << DELIMITADOR? ¿Por qué? - ¿Qué diferencia de comportamiento existe entre
<y<<al procesar la salida en pantalla en comandos comotr? - ¿Por qué debemos anteponer el número
2al símbolo de redirección cuando queremos capturar los mensajes de error? - ¿Qué ocurre si redirigimos con
1>en lugar de>? - ¿Qué es el archivo pseudodispositivo
/dev/nully por qué se le conoce como el "agujero negro" de Linux? - ¿En qué escenarios reales de administración de sistemas es útil desviar la salida de error a
/dev/null?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué diferencia existe entre utilizar > y < en una línea de comandos de Linux?
El operador > redirige la salida estándar (stdout) de un comando hacia un fichero. El operador < redirige la entrada estándar (stdin), haciendo que el comando lea datos desde un fichero en lugar de esperar la entrada por teclado.
2. ¿Por qué comandos como tr requieren redirección de entrada (<) para procesar un fichero directamente?
Porque el comando tr está diseñado para operar únicamente sobre la entrada estándar (stdin). No acepta nombres de archivos directamente como argumentos de lectura, por lo que necesita recibir el contenido mediante < o tuberías.
3. ¿Qué función cumple el parámetro -l en el comando wc?
La opción -l (lines) indica a wc (word count) que cuente únicamente el número total de líneas de texto del flujo o archivo especificado.
4. ¿Cómo funciona el operador de entrada << (Here Document) y para qué sirve la palabra o etiqueta que se le añade a continuación?
Permite enviar un bloque de texto multilímpia a la entrada estándar directamente desde la terminal o un script. La etiqueta añadida (como EOF, FINAL o END) actúa como un centinela o marcador que indica el fin del bloque de entrada.
5. ¿Se contabiliza la palabra delimitadora dentro del resultado final de wc -l << DELIMITADOR? ¿Por qué?
No. La palabra delimitadora solo actúa como señal de control para finalizar la captura de datos y no se procesa como parte del contenido del flujo de entrada.
6. ¿Qué diferencia de comportamiento existe entre < y << al procesar la salida en pantalla en comandos como tr?
Con <, la información viene de un archivo existente y se procesa al instante. Con <<, el sistema espera de manera interactiva a que introduzcamos todo el bloque de texto y no aplica la transformación hasta escribir la etiqueta delimitadora final.
7. ¿Por qué debemos anteponer el número 2 al símbolo de redirección cuando queremos capturar los mensajes de error?
Porque el número 2 representa el descriptor de archivo correspondiente a la salida de error estándar (stderr). Si no se indica, Linux asume por defecto el descriptor 1 (stdout).
8. ¿Qué ocurre si redirigimos con 1> en lugar de >?
Tienen exactamente el mismo efecto. El operador > es un atajo de 1> para redirigir la salida estándar (stdout).
9. ¿Qué es el archivo pseudodispositivo /dev/null y por qué se le conoce como el "agujero negro" de Linux?
Es un dispositivo especial del sistema que descarta inmediatamente todos los datos que se escriben en él. Se conoce como "agujero negro" porque cualquier información redirigida allí se elimina sin ocupar espacio ni generar registros.
10. ¿En qué escenarios reales de administración de sistemas es útil desviar la salida de error a /dev/null?
Es muy común al ejecutar tareas programadas (como en cron jobs) o scripts automatizados donde no interesa guardar mensajes de advertencia/error que ensucien la pantalla o generen correos/alertas innecesarias.
Ficha de Laboratorio: Redirecciones de Entrada (stdin), Delimitadores y Errores (stderr)
Instrucciones de entrega:
- Rellena los campos y responde en este formulario desde tu navegador.
- Pulsa el botón de imprimir al final de la página.
- Selecciona "Guardar como PDF" en el diálogo de impresión.
- Entrega el archivo PDF en el aula virtual.
Alumno/a: Fecha:
Grupo:
Completa la ficha realizando las siguientes actividades:
- Redirige la entrada estándar de un fichero con el operador
<para procesar su texto mediantetr.
Escribe los comandos para creardocumento1.txtcon dos líneas:
Escribe el comando para sustituir las letras 'e' por 'x' leyendo desdedocumento1.txt:
Copia la salida obtenida por pantalla:
Explica qué función cumple el símbolo<en esta orden:
- Cuenta las líneas de un archivo y de una entrada interactiva con
wc -l.
Escribe el comando para contar las líneas dedocumento1.txt:
Copia el resultado devuelto por la terminal:
Explica por qué no es necesario escribir el nombre del archivo si usamos<:
- Utiliza el operador de delimitador de entrada
<<(Here Document).
Escribe el comando para contar líneas hasta encontrar la palabraFINAL:
Copia el texto introducido y el resultado final obtenido:
Explica cómo actúa la palabraFINALen este proceso:
- Captura y redirige la salida de error estándar (stderr) mediante
2>.
Escribe el comando para redirigir el error de leer un archivo inexistente aerror.txt:
Copia el contenido guardado dentro deerror.txtcomprobado concat:
Explica por qué fue necesario escribir un2delante del operador>:
- Descarta los mensajes de error redirigiéndolos al dispositivo
/dev/null.
Escribe el comando utilizado para enviar los errores a/dev/null:
Describe qué se ha mostrado por pantalla tras ejecutarlo:
Explica cuál es la función del archivo/dev/nulldentro del sistema operativo: