Contacto

Nos puedes enviar un artículo a publicar (si te fue útil, seguro que a otros también).
Nos puedes sugerir temas/profundidad de interés.
correo-e - perfil

Busquedas

Como redireccionar la entrada y salida en linux

 Redirección en Linux

 Al ejecutar algún comando en el shell de Ubuntu (linux en general), el resultado, por defecto, se muestra en la consola (salida estándar).
 Si se necesita, por ejemplo, guardar el resultado de un comando (como ser la ejecución de grep) en un archivo, es necesario redirigir la salida estándar al archivo, en lugar de a la pantalla.

 Tenemos tres flujos para redireccionar (Salida estandar, Error estandar, Entrada estandar), y varios operadores para la tarea.
 A continuación una descripción de los operadores que vamos a usar en los ejemplos.

Flujo de Datos    Valor
Entrada Estandar    0  
Salida Estandar    1  
Error Estandar    2  

 Nota: "cmd"  representa un comando, como ser grep, find, etc.
Operador Descripción
cmd 

>

nombre_archivo 
Redirecciona la salida estándar al archivo o dispositivo.
Si el archivo no existe lo crea.
Si el archivo existe, sobreescribe el contenido (se poerden los datos actuales del archivo)
cmd 

>>

nombre_archivo  
Redirecciona la salida estándar al archivo o dispositivo.
Si el archivo no existe lo crea.
Si el archivo existe, agrega la salida al final de los datos existentes
cmd

2>

nombre_archivo  
Redirecciona el error estándar al archivo o dispositivo.
Si el archivo no existe lo crea.
Si el archivo existe, sobreescribe el contenido (se pierden los datos actuales del archivo)
cmd 

2>>

nombre_archivo  
Redirecciona el error estándar al archivo o dispositivo.
Si el archivo no existe lo crea.
Si el archivo existe, agrega los datos del error al final de los datos existentes
cmd 

2>&1


  
Redirecciona el error estándar a la salida estándar.
cmd 

>&

nombre_archivo  
Redirecciona el error y salida estándar al archivo o dispositivo.
Si el archivo no existe lo crea.
Si el archivo existe, sobreescribe el contenido (se pierden los datos actuales del archivo)
cmd 

<

nombre_archivo  
Redirecciona la entrada estándar desde el archivo o el dispositivo al comando (por defecto, la entrada estándar es el teclado)

  Ejemplos
     Nota: En el directorio actual tengo 2 archivos ("lecturaParaTodos.txt" y "lecturaSoloRoot.txt"), uno de ellos solo root puede leerlo (para forzar un error).
     "R:" Es la respuesta del sistema mostrado en la pantalla.

   Se busca la palabra "linux" en el directorio actual:
      grep -i linux *
  R:
     lecturaParaTodos.txt: Linux es genial. // resultado salida estandar
     grep: lecturaSoloRoot.txt: Permiso denegado // resultado error estandar

 1) Redirigir la entrada estandar a un archivo

       grep -i linux * > salida.txt
  R:
    grep: lecturaSoloRoot.txt: Permiso denegado

 En la consola solo se muestra el error, los resultados de grep se guardaron en el archivo "salida.txt".

 2) Redirigir el error estandar a un archivo

       grep -i linux * 2> error.txt
  R:
    lecturaParaTodos.txt:Linux es genial.

 En consola se muestra los resultados de grep, pero no se muestra el error, el cual se guardo en el archivo "error.txt".

 3) Redirigir la salida estandar a un archivo y el error estandar a otro archivo.

       grep -i linux *  2>  error.txt  1>  salida.txt

 No muestra resultados en pantalla, podemos ver los resultados con: "cat error.txt" y "cat salida.txt"

 4) Redirigir la salida y entrada a un mismo archivo.

     4.1)  grep -i linux * > salida_error.txt 2>&1
     4.2)  grep -i linux * >& salida_error.txt

 Igual que en el ejemplo anterior, no muestra resultados en pantalla, podemos ver los resultados con: "cat salida_error.txt".

 Redirigir a un archivo y mostrar en pantalla. El comando tee.

 En los ejemplos anteriores, los resultados redirigidos a los archivos no se ven en la pantalla.
 Si es necesario redirigir la salida a un archivo, y también ver el resultado en la pantalla, se usa el comando "tee".
 El comando tee lee desde la entrada estandar, y escribe en la salida estandar y en los archivos indicados.

   tee nombre_archivo o  tee -a nombre_archivo

 Por defecto, tee sobreescribe los datos de "nombre_archivo".
 Con "-a" agrega los datos al final del archivo "nombre_archivo".

 Ejemplos

 1) Redirigir la salida y error estandar a un mismo archivo, y ver el resultado en pantalla.

       grep -i linux * 2>&1 | tee -a ../salida_error.txt
  R:
     lecturaParaTodos.txt:Linux es genial.
     grep: lecturaSoloRoot.txt: Permiso denegado

 Si vemos el archivo generado: cat ../salida_error.txt se ve la misma información que en pantalla

 2) Redirigir la salida y error estandar a diferentes archivos, y ver el resultado en pantalla

     (grep -i linux * | tee ../salida.txt) 3>&1 1>&2 2>&3 | tee ../error.txt
 R:
     lecturaParaTodos.txt:Linux es genial.
     grep: lecturaSoloRoot.txt: Permiso denegado

 Ver los resultados independientes en los archivos: "cat ../error.txt ../salida.txt"

 La explicación de este último ejemplo es interesante, y puede verse en el libro: "Linux Server Hacks" de Rob Flickenger - O'Reilly ( ver: "n>m : Swap STDOUT and STDERR" ).

No hay comentarios: