Universidad autónoma de baja california
facultad de ingeniería
Taller de UNIX
Practica #20 Comando find
Objetivo:
Utilizar el comando find de UNIX realizar operaciones sobre archivos.
Desarrollo:
El comando find tiene como proposito buscar archivos. Pero además
de buscar archivos tiene la posibilidad de realizar operaciones con o
sobre los archivos que encuentra.
Su sintaxis básica es la siguiente:
find camino expresión
Donde el parametro camino indica la ruta o subdirectorio desde donde se
deberá iniciar la búsqueda. Mientras que el parametro expresión
indica distintas cosas como la especificación del archivo que se
busca así como la operación que se deberá realicer con el
archivo una vez encontrado.
Aunque la sintaxis de find se ve sencilla, en realidad se pueden utilizar
una gran variedad de opciones como se puede constatar en la página
de ayuda en línea correspondiente.
A continuación veremos una serie de ejemplos sencillos que nos facilitarán
la comprensión de find.
Ejemplo 1:
[curlango@mylap curlango]$ find /etc -name passwd -print
find: /etc/skel/tmp: Permission denied
/etc/passwd
find: /etc/default: Permission denied
/etc/pam.d/passwd
find: /etc/cups/certs: Permission denied
find: /etc/cups/ssl: Permission denied
find: /etc/webmin: Permission denied
find: /etc/shorewall: Permission denied
[curlango@mylap curlango]$
En este caso, el parametro /etc es el camino or ruta desde
la cual se iniciará la búsqueda. Mientras que el siguiente parametro,
que consiste de varias partes indica primeramente que la búsqueda se realizará
por nombre de archivo (-name passwd) y que el archivo deseado
se llama passwd. Por último se indica lo que se debe hacer al encontrar el archivo
que es mostrar su nombre (-print).
El listado resultante indica que encontró dos archivos con este nombre. Tambien se
ven 6 mensajes de error que marcó el sistema operativo debido a que no se tiene
permiso para visualizar el contenido de dichos directorios o archivos.
Ejemplo 2:
[curlango@mylap curlango]$ find /etc -name passwd -print 2> /dev/null
/etc/passwd
/etc/pam.d/passwd
[curlango@mylap curlango]$
En este segundo caso, se suprimen los mensajes de error redireccionando éstos
al dispositivo /dev/null por medio del operador 2>. De esta forma
se imprimen solo los nombre de los archivos encontrados y no los errores que
se van generando durante la búsqueda.
Como se mencionó, find tiene muchas opciones en cuanto a sus parametros y
se debe consultar la ayuda para obtener información sobre todos ellos. Sin embargo
vale la pena mencionar algunos de ellos tanto para conocer su funcionamiento como
para comprender la forma en que se especifican sus parametros. La siguiente tabla muestra
algunas de los parametros que pueden usarse:
| Opción
| Funcionamiento
|
| -user nombre
| Se buscarán los archivos cuyo usuario sea nombre. Ejemplo:
find / -name unix100 -print 2> /dev/null
|
| -group grupo
| Se buscarán los archivos cuyo grupo sea grupo. Ejemplo:
find / -group unix100 -print 2> /dev/null
|
-size tamaño
-size -tamaño
-size +tamaño
|
Selecciona archivos cuyo tamaño es exactamente el número especificado. Se
puede agregar una de las letras [bckw] para indicar que el número representa
bloques, bytes, kilobytes, o palabras de 2 bytes, respectivamente. Ejemplo:
find /bin -size 20c -print 2> /dev/null
Selecciona archivos cuyo tamaño es menor que el número especificado. Ejemplo:
find /bin -size -20c -print 2> /dev/null
Selecciona archivos cuyo tamaño es mayor que el número especificado. Ejemplo:
find /bin -size +20c -print 2> /dev/null
|
| -type tipo
| Se buscarán los archivos cuyo tipo sea tipo, donde algunos de los valores
para este pueden
ser d para directorios, f para archivos normales, o l para enlaces. Ejemplo:
find /bin -type d -print 2> /dev/null
|
Como se mencionó anteriormente, find nos permite no solo encontrar archivos sino realizar
operaciones con ellos. Para esto, se debe seguir exactamente la notación que se
indica a continuació:
Se utiliza el parametro -exec seguido de un espacio y el comando a realizar sobre cada
archivo que se encuentre y después {} \;.
Ejemplo 3:
[curlango@yaqui curlango]$ find /etc -name "*wd" -exec cat {} \;
En este ejemplo se buscan todos los archivos cuyo nombre termina con
*wd en el directorio /etc y muestra el contenido de cada uno de ellos.
Ejercicios:
Para cada ejercicio, escribir el o los comandos y los parámetros
que requiere éste para realizar la tarea descrita.
-
Qué archivos hay en el directorio /tmp en el servidor yaqui que pertenezcan
a miembros del grupo maestros?
-
Cuantos fueron los archivos que se encontraron el la pregunta anterior? Utiliza
redireccionamiento para mostrar este número en la pantalla.
-
Cuales archivos en tu cuenta son de tamaño igual a 300 bytes?
-
Cuales archivos en tu cuenta son de tamaño menor a 300 bytes?
-
Cuales archivos en tu cuenta son de tamaño mayor a 300 bytes?
-
Consulta el manual de find para determinar como mostrar los nombres
de los archivos que tienes en tu cuenta que se modificaron en los últimos
30 dias.
-
Consulta el manual de find para determinar como mostrar los nombres
de los archivos que tienes en tu cuenta que se modificaron hace mas de
15 dias.
-
Consulta el manual de find para determinar como mostrar los nombres
de los archivos que tienes en tu cuenta que se modificaron hace de
5 dias.
-
Muestra el contenido de los archivos que tengas en cuyo tamaño sea
mayor a 30 bytes.
-
Muestra el nombre de todos los archivos que tienes en tu cuenta cuyo nombre termine con
el símbolo ~. Si no tienes ninguno, crea 4 y vuelve a hacer el ejercicio.
(Nota: Los archivos de respaldo que crea vi tienen esta terminación.)
-
Muestra el contenido de los archivos que encontraste en el paso anterior mostrando una
pantalla de información a la vez.
-
Crea un directorio que se llame para_borrar y copia los archivos que se mostraron
en el paso anterior.
-
Utiliza find para borrar los archivos del directorio que se creo en el paso anterior.
-
Explica para que sirven los parametros -amin y -used .
-
Da un ejemplo del uso de los parametros del ejercicio anterior.
Práctica Elaborada por:
M.C. Cecilia Curlango Rosas
Fecha:
06/05/03