Autor: @jantoniorobledo
Algo realmente útil que tienen
los comandos, no todos, de Linux/Unix es la posibilidad de redirigir su salida
como entrada de otro comando.
stdout, standard output o salida
estándar es la más fácil de entender: se refiere a la información que devuelve
un comando cuando es ejecutado, si no indicamos otra cosa, a la pantalla o
terminal.
stdin, standard input o entrada
estándar: aquí la cosa se complica más. Hay que ver cada comando si tiene
alguna de sus parámetros habilitados para ser indicados como entrada estándar.
Vamos a ver por ejemplo que nos
dice la ayuda del comando cat, para
lo cual hacemos man cat en la
consola:
En la descripción vemos que
concatena el fichero o ficheros indicados en el parámetro FILE o el contenido
de la entrada estándar hacia la salida estándar.
Vemos ahora las instrucciones del comando grep:
Nos dice en la descripción que
buscará el patrón indicado en el/los ficheros indicados en FILE o en la entrada
estándar si no indicamos ningún fichero o indicamos – (guión) como nombre de
fichero.
Caso práctico
Supongamos que queremos hacer lo
siguiente: visualizar la lista de ficheros modificados en febrero en el directorio
/etc.
Para hacer esto necesitamos:
- Listar el directorio con el comando ls
- Filtrar la lista con los ficheros que fueron modificados en febrero con el comando grep
- Visualizar la lista de forma paginada para verla con comodidad con el comando less
Primero vamos a ver cómo no debe
de hacerse, pero creo que os ayudará a entender cómo funciona cuando lo hagamos
correctamente usando la redirección.
Como funciona, pero NO debe de
hacerse
Primer paso: listamos el
contenido del directorio y volcamos su stdout a un fichero llamado lista.txt:
ls -l /etc
>lista.txt
El comando no devuelve nada, pero
si miramos con ls (o ll, o la, etc) el directorio actual veremos lo siguiente:
Se ha generado un fichero con el
nombre lista.txt que si miramos con cat, por ejemplo, contendrá la lista de
todos los ficheros del directorio /etc
Segundo paso: filtramos el
contenido del fichero lista.txt y generamos uno filtrado llamado filtrado.txt:
grep “ feb “
lista.txt > filtrado.txt
Igual que con el comando anterior
no veremos nada en la salida del comando pero con ls comprobaremos que se ha
generado otro fichero llamado filtrado.txt:
Tercer paso: visualizar el
fichero filtrado.txt de una forma cómoda que nos permita paginar y movernos
arriba y abajo en su contenido:
less filtrado.txt
Facil, no?...pues no señor@s!:
tres pasos, dos ficheros que luego tendremos que borrar porque no nos sirven
para nada…
¿Cómo SI debe de hacerse usando
redirecciones?
Ahora vamos a hacer lo mismo
usando redirecciones. Para redirigir la salida de un comando a otro se usa el carácter
pipeline “|” (con Alt Gr+1).
Primer y único paso: Ejecutamos
el listado del directorio, redirigimos al filtro y la salida de este la
redirigimos nuevamente al visor:
ls -l /etc|grep “
feb “|less
Resultado, el mismo, pero mucho más elegante y sencillo.
Redirección de stdout a fichero
Aunque lo hemos usado en el
ejemplo voy a aclarar cómo se redirige la salida estándar de un comando a un
fichero. En este caso no se usa el pipeline, sino el símbolo de mayor que
“>”. Hay, llamémoslo, dos formas de usarlo:
- Si se pone una sola vez, por ejemplo: ls -l > fichero.txt, la salida del comando ls generará un fichero llamado fichero.txt, pero si este fichero ya existía previamente se perderá la información que contenía, es decir, que la nueva información sustituirá a la anterior.
- Podemos ponerlo dos veces, por ejemplo: ls -l /etc >>fichero.txt. En este caso la salida del comando ls se añadirá al final del fichero, no perdiéndose la información contenida en él previamente y en el caso de que no exista se creará.
En las próximas semanas seguiremos publicando más artículos relacionados con los Básicos de Linux, dado que queremos generar información para los socios que están haciendo los talleres de introducción.
Gracias y nos vemos ...
No hay comentarios:
Publicar un comentario