|
Redireccionamiento y tuberias en Linux
Publicado el: 06-29-2006 @ 05:51 pm
INTRODUCCIÓN En los sistemas GNU/LINUX y UNIX los dispositivos como los discos duros y sus particiones, el terminal de pantalla, el teclado, el ratón o incluso la tarjeta de audio están mapeados en el sistema de archivos. Esta característica permite a los programas interactuar con los dispositivos de la misma manera que los archivos, simplificando su interfase de acceso. Los dispositivos que mapean las operaciones de entrada y salida hacia un archivo poseen un archivo de dispositivo (device file) que es un objeto especial del sistema de archivos que proporciona la interfase con el dispositivo. Por ejemplo, un programa que lea el archivo de dispositivo del terminal, leerá los caracteres introducidos mediante el teclado. ENTRADA/SALIDA ESTÁNDAR Y LOS DESCRIPTORES DE ARCHIVO La entrada y salida estándar es la capacidad del intérprete de comandos o shell para controlar y dirigir la entrada de datos de los programas, la salida de información útil y la información de errores. Cuando un programa se ejecuta, automáticamente se le proporcionan tres descriptores de archivo; ENTRADA ESTÁNDAR (STDIN) o DESCRIPTOR DE ARCHIVO 0 El descriptor de archivo STDIN está asociado a la entrada de texto. Por defecto está asociado al teclado. SALIDA ESTÁNDAR (STDOUT) o DESCRIPTOR DE ARCHIVO 1 El descriptor de archivo STDOUT se corresponde con la salida de texto normal de los programas. Por defecto está asociado al terminal de pantalla. ERROR ESTÁNDAR (STDERR) o DESCRIPTOR DE ARCHIVO 2 El descriptor de archivo STDERR también es una salida de texto, pero se usa exclusivamente para mostrar los errores generados por los programas. Por defecto también está asociado al terminal de pantalla. TUBERÍAS Desde el punto de vista de un programa no hay diferencia entre leer texto guardado en un archivo o introducido mediante el teclado. Igualmente, escribir un texto en un archivo o en la pantalla del terminal son operaciones equivalentes. Extendiendo esta idea es también posible enlazar la salida de un programa con la entrada de otro. Esta operación se puede realizar mediante una tubería (pipe) que une dos comandos en uno solo. Por ejemplo: $ls –l | less La tubería redirecciona la salida del comando ls –l hacia el paginador more, que permite visualizar la información pantalla a pantalla. REDIRECCIONAMIENTO El descriptor stdout de los programas está asociado por defecto a la pantalla del terminal. Pero de la misma manera que es posible redireccionar la salida de un comando a la entrada de otro, también es posible redireccionar cualquiera de los tres descriptores a un archivo. operador descripción cmd < file El contenido de file se utilizará como entrada de la orden cmd cmd 1> file1 cmd > file1 La salida estándar de la orden cmd se guardará en file. Si el archivo file existe se sobrescribirá. cmd 1>> file1 cmd >> file1 La salida estándar de la orden cmd se guardará en file. La información se escribirá al final del archivo. cmd 2> file2 Los errores de la orden cmd se guardarán en file. Si el archivo file existe se sobrescribirá. cmd 2>> file2 Los errores de la orden cmd se guardarán en file. La información se escribirá al final del archivo. cmd > file 2>&1 La salida estándar y la de errores de la orden cmd se guardarán en file. Si el archivo file existe se sobrescribirá. cmd >> file 2>&1 La salida estándar y la de errores de la orden cmd se guardarán en file. La información se escribirá al final del archivo. cmd1 | cmd2 Redirecciona la salida del comando cmd1 hacia la entrada del comando cmd2. EJEMPLOS $ls –lR > file La salida estándar de la orden ls –lR (la lista de los archivos y subdirectorios que contiene el directorio actual) se guarda en el archive file. $mkdir directory 2> error Si al crear el directorio directory se produce algún error (por ejemplo el directorio ya existe o el usuario no tiene permisos de escritura) el mensaje del error se guardará en el archivo error. $cp –vf /root /home/alumno > file 2> error La lista de todos los archivos copiados (atención a la opción –v de la orden cp) se guardará en el archivo file. Los errores que se produzcan en la ejecución de la orden se almacenarán en el archivo error. $cp –vf /root /home/alumno >> file La lista de todos los archivos copiados se escribirá en el archivo file. Si el archivo file ya existe la lista se escribirá al final del archivo, manteniendo la información previa. $wc –l < file Cuenta el número de líneas del archivo file. $cd /root/setup 2> null Redirecciona la salida de error hacia el dispositivo nulo. El mensaje de error no se escribirá en ninguna parte. $ls –l | grep vmlinux Redirecciona la salida de la orden ls hacia la orden grep, que mostrará únicamente las líneas que contienen la palabra vmlinux. more Sintaxis: more file El comando more es un paginador de archivos que permite ver el contenido del archivo file pantalla a pantalla. Al mostrar una pantalla completa la visualización del documento se detiene hasta que el usuario indica que quiere ver otra pantalla más con la tecla SPACE. La tecla Q/q permite salir del programa. less Sintaxis: less file El comando less es un paginador de ficheros más potente que la orden more. Permite desplazarse hacia delante y atrás en los archivos. Órdenes: teclas función B ó b Desplaza una pantalla hacia atrás el contenido del archivo. RETURN Desplaza una línea hacia delante el contenido del archivo. SPACE Desplaza una pantalla hacia delante el contenido del archivo. /pattern Busca hacia delante el pattern dentro del archivo file. H ó h Muestra un texto de ayuda. Q ó q Sale del programa. grep Sintaxis: grep [options] regex files Busca en los archivos especificados las líneas que contienen una coincidencia con la expresión proporcionada en regex. Por defecto mostrará las líneas que contienen una coincidencia y ocultará las que no tengan ninguna coincidencia. Opciones: -c Muestra el número de líneas que contienen la expresión, no muestra el contenido de las líneas. -i No hace diferencias entre mayúsculas y minúsculas al comparar la expresión. -v Muestra todas las líneas que NO tienen ninguna coincidencia y oculta las que contienen alguna coincidencia. Ejemplos: $ls –AlR /* | grep –ic .gif La tubería redirecciona la salida del comando ls –AlR /* (listar en formato largo todos los archivos del sistema incluido los ocultos) al comando grep. El comando grep mostrará el número de coincidencias con la expresión .gif independientemente si este escrito en minúsculas o mayúsculas. $ls –AlR /root/* | grep –iv root El comando grep mostrará todos los archivos del directorio /root que no pertenecen al usuario o grupo root.
Ultima actualización el 06-29-2006 @ 05:51 pm
|