370 likes | 541 Views
Clase 4: Comandos de manipulación de Archivos y filtros Nombre unidad de aprendizaje: Introducción al LINUX. Programación Aplicada. Objetivos. Objetivos de la clase
E N D
Clase 4: Comandos de manipulación de Archivos y filtros Nombre unidad de aprendizaje: Introducción al LINUX Programación Aplicada
Objetivos • Objetivos de la clase • Identifica sistemas de archivos y comandos del sistema operativo para inclusión en programas realizados en el ambiente de programación del intérprete de comandos Bash.
Desarrollo Comandos LINUX de manipulación de archivos • GREP - Los comandos de que dispone LINUX para buscar cadenas (o patrones) en archivos son grep, egrep y fgrep. La finalidad de estos comandos es imprimir por la salida estándar las líneas que contengan una cierta cadena. • grep se diseñó para ser el programa de propósito general.
Desarrollo Comandos LINUX de manipulación de archivos • grep puede buscar patrones con similitudes exactas entre los caracteres, o patrones que concuerden con una especificación más general. • grep generalmente ejecuta alguna variante de un algoritmo para búsquedas en “cadenas” denominado algoritmo de Boyer-Moore, utilizando expresiones regulares para definir la consulta.
Desarrollo Comandos LINUX de manipulación de archivos • fgrep se diseñó para ser un programa de búsqueda más veloz. Sin embargo, sólo puede buscar caracteres exactos (una cadena fija), no especificaciones generales. • fgrep no interpreta ningún meta-caracter, pero podemos buscar miles de palabras en paralelo (una vez inicializado, el tiempo de ejecución no depende del número de palabras), de ahí que se use principalmente para búsquedas bibliográficas.
Desarrollo Comandos LINUX de manipulación de archivos • El tamaño típico de los patrones de fgrep rebasa la capacidad de los algoritmos de egrep y grep • egrep se diseñó para ser el programa grep más poderoso. Puede buscar modelos más complejos que grep y, por lo general, es el más veloz de los tres. No obstante, el método que usa en ocasiones requiere más memoria que grep o fgrep.
Desarrollo Comandos LINUX de manipulación de archivos • Una cadena fija es la que contiene sólo el texto que se desea buscar, mientras que una expresión puede contener caracteres especiales. • Los caracteres especiales que se pueden usar son los siguientes: “.”, [ ], ^, $, *, entre otros. • El punto “.” se utiliza para representar cualquier caracter.
Desarrollo Comandos LINUX de manipulación de archivos • Los corchetes [ ] para especificar un caracter en un determinado rango. Por ejemplo, [a-e] representa el rango que incluye las letras a, b, c, d, e. • Si el primer caracter contenido en los corchetes es ^, se representa a cualquier caracter que no esté en el rango especificado.
Desarrollo Comandos LINUX de manipulación de archivos • El signo ^indica que el caracter que sigue a continuación lo hemos de buscar al principio de una línea. • El signo $ representa el caracter de retorno de carro. • La sintaxis más general del comando grep es la siguiente:
Desarrollo Comandos LINUX de manipulación de archivos • Patrón corresponde a la EXPRESIÓN REGULAR que se hará calzar con los datos buscados; una EXPRESION REGULAR es un conjunto de reglas que sirven para especificar uno o más elementos, como palabras de un archivo, empleando una única cadena de caracteres. grep [opciones] patrón [lista_de_archivos]
Desarrollo Comandos LINUX de manipulación de archivos • Veamos algunos ejemplos de uso de grep: • Para buscar todas las líneas que contengan palabra en el archivo llamado datos, se puede usar: grep palabra datos. • Para buscar y numerar (en pantalla) todas las líneas que contengan palabra en el archivo llamado datos, usar: grep -n palabra datos.
Desarrollo Comandos LINUX de manipulación de archivos • Para buscar todas las líneas que empiecen con palabra en el archivo datos, se puede usar: grep ^palabra datos. • Para buscar todas las líneas que terminan con palabra en el archivo datos, se puede usar: grep palabra$ datos.
Desarrollo Comandos LINUX de manipulación de archivos • Para mostrar todas las líneas que no contienen a palabra en el archivo datos, se puede usar: grep –v palabra datos. • grep es muy útil durante la búsqueda en archivos, pero realmente se le aprecia en toda su magnitud dentro de una interconexión entre procesos.
Desarrollo Comandos LINUX de manipulación de archivos • Lo que hace a grep tan útil es que puede reducir una gran cantidad de datos sin procesar, en una pequeña cantidad de información útil. • Por ejemplo, suponga que desea desplegar todos los usuarios que entraron al sistema durante la tarde o la noche. Use la interconexión de procesos: w –h ¦ grep pm.
Desarrollo Comandos LINUX de manipulación de archivos • Suponga que sólo desea desplegar los identificadores de usuario y no a la demás información, use: w –h ¦ grep pm ¦ cut –c1-8. • Entre las opciones de grep se cuentan -i para evitar distinguir entre mayúsculas y minúsculas, -n para mostrar el número de línea y -v para buscar líneas que no contengan la expresión regular indicada.
Desarrollo Comandos LINUX de manipulación de archivos • Veamos algunos otros ejemplos de uso de grep: • Para listar sólo los subdirectorios del directorio /usr (la línea empieza con "d"), se puede usar: ls -l /usr ¦ grep "^d", también sería posible usar: ls -F /usr ¦ grep "/$".
Desarrollo Comandos LINUX de manipulación de archivos • Para listar sólo los archivos que otros usuarios pueden leer y escribir en el directorio principal, usar: ls -l / ¦ grep ".......rw". • Para buscar usuarios sin contraseñas; caracteres al principio de línea que no sean ":", y luego "::" (el segundo lugar, que corresponde a la contraseña, está vacío), se puede usar: grep "^[^:]*::" /etc/passwd.
Desarrollo Comandos LINUX de manipulación de archivos • Recordar que en una expresión regular de grep el “.” representa un solo caracter. • FIND - Se puede utilizar el comando find para buscar en un directorio, y los subdirectorios correspondientes, archivos que cumplan determinados criterios.
Desarrollo Comandos LINUX de manipulación de archivos • find es un comando eficaz y flexible. No obstante, puede ejecutarse lentamente, sobre todo si se realizan búsquedas en muchos directorios. • En su forma más simple el comando find presenta la siguiente sintaxis: find <directorio> -name <archivo>
Desarrollo Comandos LINUX de manipulación de archivos • Directorio especifica la rama de directorio sobre el cual se va a realizar la búsqueda. • Archivo corresponde al nombre del archivo que se desea buscar. • Por ejemplo, supongamos que deseamos mostrar todos los archivos del directorio actual y los subdirectorios pertinentes que empiecen por la letra "d". Usar: find . –name “d*”.
Desarrollo Comandos LINUX de manipulación de archivos • El punto “.” hace que find busque en el directorio actual y sus subdirectorios. La opción -name seguida de un nombre de archivo o un patrón de nombre de archivo (en este caso d*) le indica a find que busque todos los nombres de archivo que coincidan con dicho patrón.
Desarrollo Comandos LINUX de manipulación de archivos • Es posible ejecutar comandos en los archivos encontrados con el comando find. • Por ejemplo, supongamos que se desean eliminar todos los archivos que presenten la extensión .tmp en el directorio actual y los subdirectorios correspondientes. Podemos usar: find . -name "*.tmp" -exec rm {} \;.
Desarrollo Comandos LINUX de manipulación de archivos • La opción -exec hace que el siguiente comando (rm) se ejecute. Las llaves { } indican los archivos encontrados con el comando find. El punto y coma situado al final de la cadena exec está precedido de un carácter de arranque (\;). • La ejecución de un comando sobre los archivos encontrados puede hacerse de manera interactiva con la opción -ok.
Desarrollo Comandos LINUX de manipulación de archivos • Podemos utilizar -ok en el comando anterior: find . -name "*.tmp" -ok rm {} \;. • find permite efectuar búsquedas de archivos por muchos y variados criterios: por nombre, por tamaño de archivo, por propietario, por tipo de archivo, por permisos, etc. [alumno@localhost ~]$ find . -name "*.tmp" -ok rm {} \; <rm ... ~/tarea.tmp>?
Desarrollo Comandos LINUX de manipulación de archivos • Un ejemplo de uso de estas últimas opciones podría ser el listar el contenido de todos los directorios y subdirectorios de la ruta actual, para esto usar: find . -type d -exec ls {} \;. • Podemos buscar archivos vacíos con find a través del uso de la opción -empty, por ejemplo: find . –empty,también puede ser: find . -empty -type f.
Desarrollo Comandos LINUX de manipulación de archivos • Cuando siendo usuarios normales busquemos archivos fuera de nuestro directorio personal, se nos mostrarán algunos mensajes de error porque habrá directorios a los que no tendremos permiso para entrar a buscar, por ejemplo, /root. • Estos mensajes de error nos pueden despistar a la hora de interpretar la salida, así que podemos enviar stderr a /dev/null.
Desarrollo Comandos LINUX de manipulación de archivos • Para esto utilizaremos: find … 2>/dev/null. • LOCATE - Cuando se instala el paquete GNU "find", además del programa de búsqueda find se encuentra un programa de localización locate. Este programa permite encontrar el nombre completo de un archivo. El programa se encuentra en ciertas distribuciones en /usr/lib/locate.
Desarrollo Comandos LINUX de manipulación de archivos • Ejecutar, siendo root, el programa /usr/lib/locate/updatedb. Esto llama a un find / sobre los discos montados y coloca los nombres y ubicaciones de todos los archivos (bajo la forma de hash) en /usr/lib/locate/find.codes. El programa locate permite localizar luego uno de estos archivos a partir de dicha base de datos creada.
Desarrollo Comandos LINUX de manipulación de archivos • En resumen, locate realmente no busca directamente un archivo en el SISTEMA DE ARCHIVOS, busca en una base de datos, la que es creada a través del programa updatedb. Con esto, locate es bastante más rápido (que, por ejemplo, find) pero la base de datos podría estar desactualizada.
Desarrollo Comandos LINUX de manipulación de archivos • Es aconsejable excluir las particiones "HOMES" usuarios. En efecto, estas particiones contienen normalmente numerosos archivos. Pero el problema mayor es seguramente un problema de seguridad, porque todos los usuarios pueden conocer los nombres de los archivos de sus vecinos.
Desarrollo Comandos LINUX de manipulación de archivos • locate lleva a cabo su búsqueda en la base de datos realizando búsquedas de subcadenas en los nombre de archivos almacenados. [alumno@localhost ~]$ locate file ~/file1 ~/job/myfile …
Desarrollo Comandos LINUX de manipulación de archivos • Existe también un comando slocate (secure locate). La diferencia entre slocate y locate es la seguridad: slocate solamente permite al usuario explorar sobre el espacio de búsqueda para el cual tiene permisos, es decir, aunque la base de datos tiene todos los archivos del sistema, el usuario solamente puede "enterarse" de los contenidos a los cuales tendría permiso si quisiera hacer find.
Desarrollo Comandos LINUX de manipulación de archivos • Hay muchas utilidades de búsqueda disponibles para UNIX y LINUX especialmente, aparte de find y locate.
Resumen • Resumen de la clase • Los comandos de que dispone LINUX para buscar cadenas (o patrones) en archivos son grep, egrep y fgrep. La finalidad de estos comandos es imprimir por la salida estándar las líneas que contengan una cierta cadena. • grep puede buscar patrones que calcen de manera exacta entre los caracteres, por ejemplo, de un archivo, o patrones que concuerden con una especificación más genérica. • Los patrones de una búsqueda con grep se pueden especificar como expresiones regulares, las que pueden utilizar algunos caracteres especiales. • Los caracteres especiales que se pueden usar en una expresión regular son los siguientes: “.”, [ ], ^, $, *, entre otros.
Resumen • Resumen de la clase • En LINUX se utiliza el comando find para buscar en un directorio, y los subdirectorios correspondientes, archivos que cumplan con determinados criterios. • Es posible procesar los archivos encontrados con el comando find, por medio de la ejecución de algún comando LINUX sobre el o los archivos encontrados, a través de las opciones -exec y -ok.