Revista Tecnología

Administración Linux VIII – Pipes y redirecciones

Publicado el 03 marzo 2015 por Instintobinario

Seguimos con la serie de Administración Linux. Hoy voy a hablaros de dos elementos que serán básicos en el futuro cuando vayáis a ejecutar comandos más avanzados, ya sea por que os interese dejar un log de lo que ejecutéis en un comando, o por que necesitéis que un comando tome como argumentos de entrada la salida del anterior: los pipes y redirecciones de comandos. Por éstos motivos, la comprensión de éste artículo es básica para poder comprender futuros artículos y guías, además de para poder hacer cosas avanzadas en vuestro día a día.

Sin embargo no debéis coger miedo, ya que, como siempre digo, es fácil entender el funcionamiento de éste sistema si lo abordamos despacio y por partes. Vamos a ello

Pipes o tuberías

Un pipe o tubería es simplemente una comunicación entre un programa y otro. Debemos comprender que cada comando representa un proceso o programa que tiene una entrada en forma de argumentos (aunque algunos no tengan entrada) y una salida en forma de streams o cadenas de bytes que nos da información, generalmente, en la pantalla.

Cuando utilizamos un pipe, lo que hacemos es pasar los streams de salida de un comando o programa como streams de entrada del siguiente, de forma que dos comandos se puedan comunicar e interactuar entre sí.

Para crear un pipe entre dos comandos se utiliza el operador: | (la barra vertical pulsando AltGr + 2), y escribiendo un comando a continuación del otro. Uno de los comandos que más lo utilizan es el more. More es un lector de ficheros de texto paginados. Esto quiere decir que more recibe un archivo de texto como entrada y lo muestra por pantalla de forma que se vea una pantalla de texto por vez. La utilidad de esto radica en que, para ficheros muy largos, podemos verlos parte a parte, avanzando por el texto bajo demanda del usuario. Hoy en día more es muy poco utilizado, ya que se dispone de versiones más avanzadas como less, que aporta la funcionalidad de more y algunas mejoras extra, como, por ejemplo, la posibilidad de volver atrás sobre el texto ya leído. Veamos un ejemplo de uso:

ls -la | more

Mostrará un listado del contenido de un directorio página a página, útil cuando un directorio contiene muchos elementos y no caben en una pantalla.

Otro posible ejemplo, un poco más complicado:

ls -la | sort | more

En éste caso, la salida del comando ls se ordena alfabéticamente (podéis consultar el manual de sort) y, a continuación, se muestra en pantalla paginada. Más adelante iremos viendo comandos que utilicen pipes para realizar labores complejas. Por ahora esto es todo lo que hay que explicar sobre los pipes. Por otra parte, más adelante comenzaré una serie sobre shell scripts, en las cuales aprenderemos a desarrollar scripts para realizar labores repetitivas y rutinarias de forma automática. En ésta serie también nos será útil esta “lección”.

Redireccionando la entrada/salida

Todos los programas de Unix/Linux (entendiendo los comandos como programas también) tiene una entrada estándar (por defecto el teclado) y una salida estándar (por defecto la consola). Pero también existe una salida de errores estándar (que por defecto es la consola también).

Los operadores de redirección permiten cambiar la entrada y salidas estándar por otras que nosotros le indiquemos, por ejemplo un fichero. Vamos a ver qué operadores de redirección tenemos disponibles y algunos ejemplos de funcionamiento:

Operador

Descripción

> fich

Redirige la salida estándar al fichero fich y lo crea si no existe.

>> fich

Redirige la salida estándar al fichero fich añadiendo ésta al al final del mismo si existe.

< fich

Redirige el contenido del fichero fich a la entrada estándar.

<> fich

Utiliza el fichero fich como entrada y como salida estándar.

&> fich

Redirige tanto la salida estándar como la salida de error estándar al fichero fich.

2> fich

Redirige la salida de error al fichero fich.

>| fich

Redirige la salida estándar al fichero fich forzando a sobre escribir.

Ejemplos:

cat > fichero.txt

El comando cat concatena una entrada y lo redirige por la salida estándar. Así, al hacer esto que vemos, en lugar el imprimirlo en la consola los guardará en el fichero.txt.

cat < fichero.txt

En éste caso cat recoge la entrada del fichero.txt y lo muestra en consola. El comando cat también acepta como parámetro un fichero que tomará como entrada, por lo que nos podemos ahorrar el operador <. Esto no sucede así en otros comando, como el grep, que veremos más adelante.

cat >> fichero.txt

El comando cat añadirá la salida estándar al final del contenido del fichero.txt.

ls -l <> fichero.txt

Supongamos que el fichero.txt contiene una o más rutas válidas de nuestro sistema. El comando ls -l la tomará como entrada y redirigirá la salida al mismo fichero.txt. Si queremos utilizar diferentes ficheros podemos hacerlo del siguiente modo: ls -l < entrada.txt > salida.txt.

ls -l 2>fichero.txt

En éste caso, ls -l devolverá la salida estándar por la consola, pero si hay mensajes de error los escribirá en fichero.txt, en lugar de por al consola.

ls -l &> fichero.txt

Escribirá tanto la salida estándar como la de error de ls -l en el fichero.txt.

ls -l > salida.txt 2> errores.txt

Escribe el resultado de ls -l en salida.txt. Si hubiera errores los escribe en errores.txt.

Otros artículos de la serie: Administración Linux

El artículo Administración Linux VIII – Pipes y redirecciones apareció por primera vez en Instinto Binario.


Volver a la Portada de Logo Paperblog

Revista