-->

Redirecciones de Entrada (stdin), Delimitadores y Errores (stderr)

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.txt con dos líneas de texto usando redirecciones de salida:
  • echo "esto es una prueba" > documento1.txt
    echo "aquí hay menos pruebas" >> documento1.txt
  • Comprueba el contenido del archivo:
  • cat documento1.txt
  • Utiliza el comando tr redirigiendo la entrada estándar desde el fichero documento1.txt para sustituir las letras 'e' por 'x':
  • tr e x < documento1.txt
  • Observa cómo tr toma el contenido del archivo como si fuera introducido por teclado, sin modificar el archivo original.

Fase 2: Conteo de líneas con wc -l y entrada interactiva

  • Ejecuta el comando wc -l sin argumentos para contar las líneas introducidas manualmente por teclado:
  • wc -l
  • Escribe tres líneas de texto en la terminal (pulsando Enter tras cada una) y finaliza la entrada pulsando:
  • Ctrl + D
  • Comprueba el número total de líneas devuelto por el sistema.
  • Ahora, redirige el fichero documento1.txt como entrada al comando wc -l:
  • wc -l < documento1.txt

Fase 3: Redirección de entrada mediante delimitador (<<)

  • Ejecuta wc -l indicando un delimitador de fin de entrada (por ejemplo, la palabra FINAL):
  • wc -l << FINAL
  • Escribe varias líneas en la terminal. Observa que el prompt cambia a > esperando contenido.
  • Escribe la palabra FINAL y pulsa Enter para terminar la captura de datos. Comprueba que el recuento no incluye la palabra delimitadora.
  • Prueba el delimitador con tr para reemplazar vocales hasta que introduzcas la palabra clave de cierre:
  • tr a p << END
  • Escribe palabras con la letra 'a', introduce la palabra END y pulsa Enter.

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):
  • cat documento50.txt
  • Redirige únicamente la salida de error (descriptor 2) hacia un fichero denominado error.txt:
  • cat documento50.txt 2> error.txt
  • Comprueba que no ha aparecido ningún mensaje por pantalla y verifica el contenido de error.txt:
  • cat error.txt
  • Verifica que también puedes indicar de forma explícita la salida estándar (descriptor 1) volcando /etc/passwd:
  • 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:
  • cat documento50.txt 2> /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:
  • clear

Preguntas de reflexión:

  1. ¿Qué diferencia existe entre utilizar > y < en una línea de comandos de Linux?
  2. ¿Por qué comandos como tr requieren redirección de entrada (<) para procesar un fichero directamente?
  3. ¿Qué función cumple el parámetro -l en el comando wc?
  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?
  5. ¿Se contabiliza la palabra delimitadora dentro del resultado final de wc -l << DELIMITADOR? ¿Por qué?
  6. ¿Qué diferencia de comportamiento existe entre < y << al procesar la salida en pantalla en comandos como tr?
  7. ¿Por qué debemos anteponer el número 2 al símbolo de redirección cuando queremos capturar los mensajes de error?
  8. ¿Qué ocurre si redirigimos con 1> en lugar de >?
  9. ¿Qué es el archivo pseudodispositivo /dev/null y por qué se le conoce como el "agujero negro" de Linux?
  10. ¿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:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Redirige la entrada estándar de un fichero con el operador < para procesar su texto mediante tr.
    Escribe los comandos para crear documento1.txt con dos líneas:

    Escribe el comando para sustituir las letras 'e' por 'x' leyendo desde documento1.txt:

    Copia la salida obtenida por pantalla:

    Explica qué función cumple el símbolo < en esta orden:
  2. Cuenta las líneas de un archivo y de una entrada interactiva con wc -l.
    Escribe el comando para contar las líneas de documento1.txt:

    Copia el resultado devuelto por la terminal:

    Explica por qué no es necesario escribir el nombre del archivo si usamos <:
  3. Utiliza el operador de delimitador de entrada << (Here Document).
    Escribe el comando para contar líneas hasta encontrar la palabra FINAL:

    Copia el texto introducido y el resultado final obtenido:

    Explica cómo actúa la palabra FINAL en este proceso:
  4. Captura y redirige la salida de error estándar (stderr) mediante 2>.
    Escribe el comando para redirigir el error de leer un archivo inexistente a error.txt:

    Copia el contenido guardado dentro de error.txt comprobado con cat:

    Explica por qué fue necesario escribir un 2 delante del operador >:
  5. 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/null dentro del sistema operativo: