clase 4: comandos de manipulación de archivos y filtros

35
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 4: Comandos de manipulación de Archivos y filtros Nombre unidad de aprendizaje: Introducción al LINUX Programación Aplicada

Upload: krista

Post on 14-Jan-2016

35 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Clase 4: Comandos de manipulación de Archivos y filtros

2008 Escuela de Informática y Telecomunicaciones, DuocUC

Escuela deInformática y Telecomunicaciones

Clase 4: Comandos de manipulación de Archivos y filtros

Nombre unidad de aprendizaje: Introducción al LINUX

Programación Aplicada

Page 2: Clase 4: Comandos de manipulación de Archivos y filtros

2© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 3: Clase 4: Comandos de manipulación de Archivos y filtros

3© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 4: Clase 4: Comandos de manipulación de Archivos y filtros

4© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 5: Clase 4: Comandos de manipulación de Archivos y filtros

5© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 6: Clase 4: Comandos de manipulación de Archivos y filtros

6© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 7: Clase 4: Comandos de manipulación de Archivos y filtros

7© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 8: Clase 4: Comandos de manipulación de Archivos y filtros

8© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 9: Clase 4: Comandos de manipulación de Archivos y filtros

9© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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:

Page 10: Clase 4: Comandos de manipulación de Archivos y filtros

10© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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]

Page 11: Clase 4: Comandos de manipulación de Archivos y filtros

11© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 12: Clase 4: Comandos de manipulación de Archivos y filtros

12© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 13: Clase 4: Comandos de manipulación de Archivos y filtros

13© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 14: Clase 4: Comandos de manipulación de Archivos y filtros

14© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 15: Clase 4: Comandos de manipulación de Archivos y filtros

15© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 16: Clase 4: Comandos de manipulación de Archivos y filtros

16© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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 "/$".

Page 17: Clase 4: Comandos de manipulación de Archivos y filtros

17© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 18: Clase 4: Comandos de manipulación de Archivos y filtros

18© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 19: Clase 4: Comandos de manipulación de Archivos y filtros

19© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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>

Page 20: Clase 4: Comandos de manipulación de Archivos y filtros

20© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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*”.

Page 21: Clase 4: Comandos de manipulación de Archivos y filtros

21© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 22: Clase 4: Comandos de manipulación de Archivos y filtros

22© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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 {} \;.

Page 23: Clase 4: Comandos de manipulación de Archivos y filtros

23© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 24: Clase 4: Comandos de manipulación de Archivos y filtros

24© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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>?

Page 25: Clase 4: Comandos de manipulación de Archivos y filtros

25© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 26: Clase 4: Comandos de manipulación de Archivos y filtros

26© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 27: Clase 4: Comandos de manipulación de Archivos y filtros

27© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 28: Clase 4: Comandos de manipulación de Archivos y filtros

28© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 29: Clase 4: Comandos de manipulación de Archivos y filtros

29© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 30: Clase 4: Comandos de manipulación de Archivos y filtros

30© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 31: Clase 4: Comandos de manipulación de Archivos y filtros

31© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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…

Page 32: Clase 4: Comandos de manipulación de Archivos y filtros

32© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 33: Clase 4: Comandos de manipulación de Archivos y filtros

33© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 34: Clase 4: Comandos de manipulación de Archivos y filtros

34© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.

Page 35: Clase 4: Comandos de manipulación de Archivos y filtros

35© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public

Escuela de Informática y Telecomunicaciones

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.