Aprende GNU/Linux 10

Linea de comandos de Linux : Entrada y salida estándar

Linea de comandos de LinuxCuando ejecutamos comandos en la shell de Linux, normalmente los introducimos con nuestro teclado y recibimos el resultado a través de nuestra pantalla, sin embargo, es posible modificar esto y hacer que tanto la entrada como la salida reciban y emitan la información por otra fuente. Este proceso se denomina redireccionamiento, pero antes de empezar a hablar sobre esto, es mejor explicar unos conceptos básicos para entender bien como funciona la entrada y salida estándar en la shell de Linux.

La entrada y salida estándar

Por defecto, toda instrucción en Linux tiene tres canales básicos por donde se trasmite la información, a estos canales se les denomina como los canales de entrada, de salida y de error. 

Nombre Descriptor de fichero Destino por defecto
entrada estándar (stdin) 0 teclado
salida estándar (stdout) 1 pantalla
error estándar (stderr) 2 pantalla

La mejor forma de entender estos tres canales es mediante una breve explicación y unos sencillos ejemplos, para los ejemplos vamos a utilizar los comandos echo y wc.

El comando echo de Unix imprime por la salida estándar lo que la entrada estándar le entrega.

El comando wc sirve simplemente para contar líneas, palabras y caracteres que contiene un archivo.

Comando echo y comando wc
La entrada estándar

La Entrada Estándar, en inglés standard input (stdin) es el canal por el cual un usuario le indica a los programas la información que estos deben procesar. Por defecto, como ya he mencionado, es el teclado.

Cuando ejecutamos el comando echo le pasamos un argumento, este argumento tiene que proporcionarlo la entrada estándar, que por defecto es el teclado. En el siguiente ejemplo este argumento es ovtoaster.

echo ovtoaster
La salida estándar

La Salida Estándar, en inglés standard output (stdout) es el método por el cual el programa transmite la información al usuario. Por defecto, la salida estándar es la pantalla.

En el caso de utilizar el comando echo anterior, el resultado obtenido seria :

ovtoaster

Este resultado lo obtenemos mediante el canal de salida estándar.

Canal de error estándar

El tercer y ultimo canal es el de error en inglés standard error output (stderr), que sirve para emitir los posibles errores que se den al ejecutar una instrucción. Por defecto se emiten mediante la pantalla.

El redireccionamiento

Como hemos dicho, la entrada y salida estándar por defecto son el teclado y la pantalla, sin embargo es posible redireccionar ambas a un fichero, de forma que una instrucción reciba la información mediante un fichero y/o la información de salida de la instrucción sea almacenada en un fichero.

Redirecionar la salida

Existen dos métodos para redireccionar la salida a un fichero:

  • Mediante  > se redirecciona el resultado de una instrucción a un fichero. Es necesario tener derechos de escritura, si el archivo no existe, éste es creado, si ya existe, los contenidos existentes generalmente se pierden sin previo aviso. Ejemplo :
echo ovtoaster > prueba1.txt

En esta instrucción el resultado de echo ovtoaster, que es ovtoaster sera almacenado en el fichero prueba1.txt ( en la posición actual en el sistema de ficheros )

  • Mediante >>  se añade el resultado de una instrucción a un fichero, si no existe lo crea y si existe, lo añade al final.

Ejemplo :

echo ovtoaster >> prueba1.txt

Con esta instrucción guardamos el resultado de echo ovtoaster en el final del fichero prueba1.txt.

Redireccionar la entrada

Para redireccionar la entrada estándar utilizamos el carácter <, de forma que la instrucción :

wc < prueba1.txt

Imprimirá por la salida estándar el resultado de la instrucción wc del fichero prueba1.txt  ( 2 2 20 ).

Redireccion de la salida de error
Se puede redirigir el error estándar utilizando el operador 2> o 2>>, dependiendo si se desea crear un nuevo fichero o añadir datos a un fichero existente. Esta notación se debe a que los canales de E/S estándar son números asignados ( los descriptores ).

Tuberías o pipelines

Las tuberías (en ingles pipelines) son una herramienta con la que vamos a poder redireccionar la salida de un comando a la entrada de otro, de forma que creamos una tubería de instrucciones en la que cada una va pasando el resultado a la siguiente para terminar dando el ultimo resultado por la salida estándar. Lo mejor para entenderlo es utilizar un ejemplo :

ls -l | sort -k5

Con este comando estamos tomando el resultado de ls -l ( listado de ficheros de la ubicación actual en formato largo ) y lo pasamos al comando sort -k5 que va a ordenador la información en función de la 5 tabla ( tamaño ) y después se va a imprimir en la salida estándar, que en este caso es la pantalla.

Resumen en imagen

Para resumir todos los redireccionamientos y las tuberías de forma mas sencilla os dejo la siguiente imagen que creo que explica bastante visualmente como funciona y en que caso utilizar cada uno.

Redirecciones en Linux

Espero que haya quedado claro este tutorial sobre la entrada/salida estándar y los redireccionamientos en Linux. Si quieres saber mas sobre la linea de comandos de Linux estate atento a ovtoaster, nuestra intención es ir profundizando en la shell y en sus secretos mas oscuros .

Lista de artículos escritos sobre el tema :

 

Sobre el autor / 

AsierPH

Entusiasta de las tecnologías libres y fundador de OvToaster.com | “Las obras de conocimiento deben ser libres, no hay excusas para que no sea así“

Articulos relacionados

10 comentarios

  1. Antonio Durán 23 Noviembre, 2016 at 6:09 pm -  Responder

    Gracias por hacerlo fácil. Me ha gustado.
    Saludos.

    • AsierPH 12 Enero, 2017 at 10:03 am -  Responder

      Me alegro que te sea útil Antonio, gracias por comentar 😀

  2. Agustin Andrade 23 Marzo, 2016 at 5:01 pm -  Responder

    Me encanto la explicación. Saludos y Suertr !!!

    • AsierPH 26 Abril, 2016 at 11:48 am -  Responder

      Gracias de nuevo por el comentario Agustin!
      Un abrazo!

  3. José 9 Mayo, 2014 at 3:41 am -  Responder

    excelente, una imagen vale mas q mil palabras muy buena.

    • AsierPH 9 Mayo, 2014 at 10:08 am -  Responder

      Toda la razón :), Muchas gracias por el comentario José

  4. Mauro 12 Abril, 2014 at 7:12 pm -  Responder

    Buenísimo el artículo pero porqué con el comando < no sucede nada? Gracias!

    • AsierPH 12 Abril, 2014 at 8:12 pm -  Responder

      Buenas Mauro, me alegra que te sea útil y te guste 🙂
      < es un carácter que se utiliza para cambiar la entrada estándar, de forma que cambiamos la que esta por defecto ( el teclado ) por un archivo. Después de este carácter tienes que especificar la ruta completa, parcial o el nombre del fichero si estas en su misma ubicación.

  5. txuspe 8 Abril, 2014 at 10:41 am -  Responder

    La redirección >> no es para enviar tanto a la salida estándar como a un fichero, sino para enviar al fichero sin sobrescribir su contenido. En su lugar, se añade la salida al final del contenido actual del fichero.

    • AsierPH 8 Abril, 2014 at 11:12 am -  Responder

      Muchas gracias por la corrección, normalmente no uso ese tipo de redireccion y no se porqué tenia en mi cabeza que redireccionaba manteniendo ambas salidas :).
      Un saludo

Deja tu comentario

Tu correo no sera publicado. Los campos requeridos están marcados *