#####################################
## HACKINDEX ##
## http://www.hackindex.org ##
#####################################
Titulo: La pantalla negra III
Autor: Lokutus
Tema: Linux
La información incluída en este documento es expuesta en base a un interés educativo. HackIndex no se hace responsable del uso de dicha información.
El siguiente documento es propiedad de HackIndex y de su autor, pudiendo ser distribuído de forma totalmente libre y sobre cualquier tipo de soporte siempre y cuando se respete el formato original, se cite a A.H.E. como fuente, se incluya un enlace actualizado al documento o a la web del grupo: http://www.hackindex.org ; y se incluya este disclaimer en su totalidad y sin modificación alguna.
Queda extrictamente prohibida su distribución con fines lucrativos, cuando se altere su contenido sin consentimiento o cuando se incumpla cualquier otra condicion citada anteriormente en el presente disclaimer.
#####################################
Y esta semana, con un poco de retraso, Mario bross, no, no vamos a jugar,vamos a tratar los pipes, o tuberías, y los filtros.
| Linux Debian (Potatoe) Login: genaro password: [genaro]$ _ |
Para empezar, necesitamos crear algunos ficheros con datos, para ello podemos utizar un editor de textos, hay varios, el "joe", el "vi", el "jed", y el "emacs" son cuatro de los más populares, el único del que hay garantia de que se puede encontrar en cualquier Unix es el vi, pero es un poco complejo de utilizar, así que vamos a crear un fichero a pelo.
| [genaro]$ echo hola hola [genaro]$ _ |
La órden echo, envía a "salida estandar" un mensaje, ¿Y qué eso de salida estandar? Veamos, cualquier aplicación de Unix/Linux, e incluso las aplicaciones de DOS, tienen tres ficheros abiertos, que utilizan para poder funcionar.
El primer fichero es de sólo lectura y se llama "entrada estandar", representa normalmente al teclado, los programas leen a traves de este fichero todo lo que escribimos. Normalmente se conoce a este fichero como stdin.
El segundo fichero es de sólo escritura, y se llama "salida estandar", y representa la salida de nuestro programa, cuando un programa quiere escribir algo en la pantalla, lo que hace es escribir en este fichero.
El tercer fichero, se llama "error estandar", es también de sólo escritura, es similar al anterior, y se usa para imprimir mensajes de error.
He dicho, que la salida estandar representa la pantalla y la entrada estandar, representa el teclado, pero eso no tiene por que ser siempre así. Podemos cambiar la salida estandar de un programa con el operador ">"
| [genaro]$ echo hola > fichero.txt [genaro]$ _ |
No hemos visto la salida de echo por la pantalla, la salida ha sido redirigida al fichero "fichero.txt".
| [genaro] ls fichero.txt [genaro] _ |
Si queremos ver el contenido de ese fichero usamos la orden "cat"
| [genaro] cat fichero.txt hola [genaro] _ |
¿Y como podemos añadir más líneas al fichero?, vamos a intentarlo.
| [genaro]$ echo linea2 > fichero.txt ; cat fichero.txt linea2 [genaro]$ _ |
Recordemos que se pueden meter dos órdenes en una sóla línea si las separamos con un punto y coma.
¿Qué ha pasado?, se ha machacado el archivo y contiene lo último que hemos escrito. Para que no se sobreescriba utilizamos el símbolo ">>".
| [genaro]$ echo linea1 > fichero.txt [genaro]$ echo linea2 >> fichero.txt [genaro]$ echo linea3 >> fichero.txt [genaro]$ cat fichero.txt linea1 linea2 linea3 [genaro]$ _ |
Cualquier cosa que envíe cosas a pantalla usando la salida estandar puede ser redirigido, por ejemplo la órden "ls", o incluso la orden "cat".
| [genaro]$ cat fichero1.txt >> fichero2.txt [genaro]$ ls fichero1.txt fichero2.txt [genaro]$ _ |
En este caso como fichero2.txt no existía, lo crea nuevo, y en este caso hemos copiado el fichero, ambos tienen el mismo contenido.
TIP 1: Cuidado con el operador ">", puede machacar documentos, pues siempre los crea nuevos.
¿Qué utilidades podemos encontrar redirigiendo la salida estandar?, veamos:
| [genaro]$ ls -l /usr/bin |
Salen un montón de ficheros y no dá tiempo a verlos.
| [genaro]$ ls -l /usr/bin > fichero3.txt [genaro]$ _ |
TIP 2: En lugar de teclear de nuevo "ls -l /usr/bin" podemos recuperar las órdenes anteriores con las flechas de cursor y editarlas a nuestra conveniencia. En este caso con pulsar la flecha arriba una vez, aparece "ls -l /usr/bin" y sólo tenemos que añadir " > fichero3.txt
Si usamos la órden cat, para visualizar fichero3.txt, estamos en las mismas, no nos da tiempo a ver nada, usaremos mejor la órden "more"
| [genaro]$ more fichero3.txt
muchas lineas –more–(12%) |
Vemos como en esta ocasión. cuando se acaba la pantalla, la salida se para, si pulsamos el retorno de carro, avanzamos una línea, si pulsamos la barra espaciadora, avanzamos una página entera. Salimos del paginador "more" cuando se acaba el documento a visualizar, o bién cuando pulsamos la tecla "q". En linux hay otro paginador mejor que "more", se llama "less", permite avanzar y retroceder por el texto usando las tecla del cursor.
Vamos a probarlo un poco.
| [genaro]$ cd /usr/doc/FAQ [FAQ]$ _ |
¿Os acordais de los famosos FAQ y los HowTo de Linux de los que muchos hablan, pues están aqui, en este directorio, …
| [FAQ]$ ls -l drwxr-xr-x 5 root root 1024 Dec 22 01:46 ./ drwxr-xr-x 198 root root 5120 Dec 22 01:46 ../ drwxr-xr-x 2 root root 2084 Dec 22 01:46 html/ drwxr-xr-x 2 root root 1024 Dec 22 01:46 ps/ drwxr-xr-x 2 root root 1024 Dec 22 01:46 txt/ [FAQ]$ _ |
Vemos que hay un directorio para html, (hará falta un navegador web, como el lynx), otro para documentos que están en postscript y otro para ficheros ASCII planos. Un fichero ASCII plano, es un fichero de texto, que no tiene formato, como los que hemos creado hace poco.
| [FAQ]$ cd txt [txt] less Linux-FAQ |
Para volver a nuestro directorio, usamos
| [txt] cd $HOME [genaro] _ |
HOME es una variable de entorno que contiene nuestro directorio de trabajo, se verán en otro capitulo.
Hasta ahora, hemos visto que podemos guardar la salida estandar de un programa en un fichero, y luego, ver cómodamente esa salida estandar con un paginador, como puede ser "less". Pero eso es un poco incómodo, pues podemos llenar el disco duro de ficheros innecesarios, ¿como podemos evitarnos ese paso? Con ayuda de una "tubería", ya era hora que comenzara a hablar de lo que trata este capítulo. Para utilizar una tubería, se utiliza el operador pipe y es este "|", la barra vertical que se consigue pulsando tecla "1" con la tecla "AltGr"
| [genaro]$ ls -l /etc/bin | less |
Ya podemos ver tranquilamente en la pantalla qué ficheros tenemos en el directorio /etc/bin Para hacerlo más divertido, con la órden tree, podemos obtener un listado de los directorios existentes a partir de un directorio en forma de árbol.
| [genaro]$ tree -d /usr | less |
Si lo usamos con la opción -a, muestra todo, incluidos los ficheros. Existen otros filtros que se pueden usar con una tubería, uno de los más conocidos es el filtro "sort", que ordena alfabéticamente la entrada estandar. Cuando redireccionamos la "salida estandar" a un fichero, si se produce un error en el programa, el mensaje de error no se imprime en el fichero, si no que se vuelca a la pantalla. Esto es debido a que los mensajes de error se imprimen usando "error estandar", "stderr". Para redireccionar el error estandar.
| [genaro]$ cc programa.c -o programa 2>errores.txt |
La órden cc, sirve para compilar programas que están escritos en lenguaje "C" y "C++", en el ejemplo, los errores de compilación se enviarán al fichero "errores.txt". Y por último …
| [genaro]$ exit
Linux Debian (Potatoe) |
Hoy hemos visto:
La próxima semana, o sea dentro de pocos días, me extenderé en el tema de los ficheros.
Lokutus, asimilando la red.
No hay posts relacionados.
Etiquetas: curso de linux, hackindex, linux, lokutus, sistemas operativos