miércoles, 3 de noviembre de 2010

FIND Command.

FIND se utiliza para encontrar archivos en un determinado directorio a partir de diversas reglas de búsqueda, tales como nombre exacto de archivo, fecha de creación, tamaño, permisos, etc. llegando a ser muy flexible y una de las herramientas más útiles en la administración de sistemas cuando se sabe utilizar.

Su sintaxis es la siguiente:

find [directorio...] | [command..] 'Archivo...'

Por ejemplo si queremos buscar un archivo y no tenemos ni pajolera idea de donde esta ni como se llama pero sabemos que es de texto:

$ find ./ -name "*.txt"

./ es el directorio por donde empieza a buscar
-name es la opcion para buscar por nombre
"*.txt" cualquier archivo con la extensión txt

Aparentemente este comando es secillo pero puede complicarse y dar mucho de si, desde buscar archivos de un determinado peso hasta ejecutar algo cuando lo encuentra. Profundicemos pues en el comando FIND.

OPCIONES


-name Busca dicho archivo, en el directorio actual o en cualquier subdirectorio.
-atime n Verdadero si se accedió al archivo hace n días. El tiempo de acceso de los directorios en la ruta se cambia por el find mismo.
-ctime n Verdadero si el estado del archivo se cambió hace n días.
-group gname Verdadero si el archivo pertenece al grupo gname. Si gname es numérico y no aparece en el archivo /etc/group, se toma como identificador de grupo.
-mtime n Verdadero si la información del archivo fue modificada hace n días.
-size n[c]

Verdadero si el archivo tiene n bloques de largo (512 octetos por bloque). Si n va seguida de una c, el tamaño es en octetos.


Ejemplos:

Ej.1
enrique@enrique-desktop:~$ find /etc -name passwd -print
find: «/etc/chatscripts»: Permiso denegado
/etc/pam.d/passwd
find: «/etc/ppp/peers»: Permiso denegado
find: «/etc/cups/ssl»: Permiso denegado
find: «/etc/firestarter/outbound»: Permiso denegado
find: «/etc/firestarter/inbound»: Permiso denegado
find: «/etc/ssl/private»: Permiso denegado
/etc/passwd


Como podéis ver empezando por /etc busca los archivos cuyo nombre es passwd, y le decimos que los muestre "-print", esta opción no es necesaria en la mayoria de diribuciones actuales de linux. Como podeis ver a encontrado 2 archivos y ha dado 6 errores pues no tenemos autorización para mirar en esos directorios. (prueba esto mismo con sudo y veras que no aparece el mensaje "permiso denegado".

Otra opcion sería redireccionando los errores a /dev/null con el operador>2.

$ find /etc -name passwd -print 2> /dev/null


Ej. 2

$ find /etc -name "*wd" -exec cat {} \;

Se buscan todos los archivos cuyo nombre termina con *wd en el directorio /etc y muestra el contenido de cada uno de ellos.

Ej. 3 : Ejemplos por opción.

-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


Ej. 4:
Como ya imaginaras puedes usar comodines. Por ejemplo si buscas un archivo de cuyo nombre no logras acordarte y pero sabes alguna cadena intermedia, por ejemplo contiene la "ab".

$ find / -name "*ab*"

para parar pulsa ctrl+c. (hay muchos que contienen esa cadena).

Ej 5:

Si quieres ser mas exigente en la busqueda puedes indicar a find que tipo de fichero buscas, aqui te dejo una lista de los posibles tipos de ficheros.

b bloque especial
c carácter especial
d directorio
p tubería (pipe)
f fichero regular
l vínculo simbólico (léete el man page para que veas unas cuantas especificaciones)
s socket
D Puerta (Solaris)

$ find / -type f -name "*.log"

buscar todos los ficheros regulares con la extensión .log

Nota: Tenia esta entrada en el tintero desde hace tiempo. Estaba pendiente de completar pero por falta de tiempo no he podido asi que cualquier comentario o rectificación sera bienvenido.

No hay comentarios:

Publicar un comentario