sábado, 27 de mayo de 2017

19. Búsqueda de archivos mediante el comando Find en Linux


Uno de los desafíos que enfrentan los usuarios al trabajar con el sistema de archivos, es tratar de recordar la ubicación donde se almacenan los archivos. Hay miles de archivos y cientos de directorios en un sistema de archivos Linux típico, por lo que recordar dónde se encuentran estos archivos puede plantear desafíos.

El comando find es una herramienta muy potente que puedes usar para buscar archivos en el sistema de archivos. Este comando puede buscar archivos por nombre, incluyendo el uso de caracteres comodín para cuando no esté seguro del nombre de archivo exacto. Además, puede buscar archivos basados en metadatos de archivo, como el tipo de archivo, el tamaño del archivo y la propiedad del archivo.

La sintaxis del comando find es:
find [starting directory] [search option] [search criteria] [result option]

Una descripción de todos estos componentes:

  • [Directorio inicial]: Aquí es donde el usuario especifica dónde comenzar la búsqueda. El comando find buscará este directorio y todos sus subdirectorios. Si no se proporciona ningún directorio de inicio, se utiliza el directorio actual para el punto de inicio.

  • [Opción de búsqueda]: Aquí es donde el usuario especifica una opción para determinar qué tipo de metadatos buscar; Hay opciones para el nombre de archivo, tamaño de archivo y muchos otros atributos de archivo.

  • [Criterio de búsqueda]: Este es un argumento que complementa la opción de búsqueda. Por ejemplo, si el usuario utiliza la opción para buscar un nombre de archivo, el criterio de búsqueda sería el nombre de archivo.

  • [Opción de resultado]: Esta opción se utiliza para especificar qué acción debe tomarse una vez que se encuentra el archivo. Si no se proporciona ninguna opción, el nombre del archivo se imprimirá en STDOUT.

Buscar por nombre de archivo

Para buscar un archivo por nombre, use la opción -name del comando find:

sysadmin@localhost:~$ find /etc -name hosts                           
find: `/etc/dhcp': Permission denied
find: `/etc/cups/ssl': Permission denied  
find: `/etc/pki/CA/private': Permission denied  
find: `/etc/pki/rsyslog': Permission denied
find: `/etc/audisp': Permission denied 
find: `/etc/named': Permission denied
find: `/etc/lvm/cache': Permission denied 
find: `/etc/lvm/backup': Permission denied
find: `/etc/lvm/archive': Permission denied                           
/etc/hosts
find: `/etc/ntp/crypto': Permission denied
find: `/etc/polkit-l/localauthority': Permission denied   
find: `/etc/sudoers.d': Permission denied  
find: `/etc/sssd': Permission denied 
/etc/avahi/hosts
find: `/etc/selinux/targeted/modules/active': Permission denied  
find: `/etc/audit': Permission denied                                
sysadmin@localhost:~$
Tenga en cuenta que se encontraron dos archivos: /etc/hosts y /etc/avahi/hosts. El resto de la salida eran mensajes STDERR porque el usuario que ejecutó el comando no tenía permiso para acceder a determinados subdirectorios.

Recuerde que puede redirigir STDERR a un archivo para que no necesite ver estos mensajes de error en la pantalla:

sysadmin@localhost:~$ find /etc -name hosts 2> errors.txt             
/etc/hosts 
/etc/avahi.hosts                                                      
sysadmin@localhost:~$
Mientras que la salida es más fácil de leer, realmente no hay ningún propósito para almacenar los mensajes de error en el archivo error.txt. Los desarrolladores de Linux se dieron cuenta de que sería bueno tener un "archivo basura" para enviar datos innecesarios; Cualquier archivo que envíe al archivo /dev/null se descarta:

sysadmin@localhost:~$ find /etc -name hosts 2> /dev/null              
/etc/hosts
/etc/avahi/hosts                                                      
sysadmin@localhost:~$

Visualización del detalle del archivo

Puede ser útil obtener detalles de archivo cuando se utiliza el comando find, porque sólo el nombre del archivo en sí puede no ser suficiente información para que pueda encontrar el archivo correcto.

Para ver estos detalles de archivo, utilice la opción -ls en el comando find:

sysadmin@localhost:~$ find /etc -name hosts -ls 2> /dev/null
    41   4 -rw-r--r--   1 root     root      158 Jan 12 2010 /etc/hosts
  6549   4 -rw-r--r--   1 root     root      1130 Jul 19 2011 /etc/avahi/hosts 
sysadmin@localhost:~$

Búsqueda de archivos por tamaño

Una de las muchas opciones de búsqueda útiles es la opción que le permite buscar archivos por tamaño. La opción -size le permite buscar archivos que sean más grandes o más pequeños que un tamaño especificado, así como buscar un tamaño de archivo exacto.

Cuando especifica un tamaño de archivo, puede dar el tamaño en bytes (c), kilobytes (k), megabytes (M) o gigabytes (G). Por ejemplo, lo siguiente buscará archivos en la estructura de directorios /etc que son exactamente 10 bytes de gran tamaño:

sysadmin@localhost:~$ find /etc -size 10c -ls 2>/dev/null    
   432    4 -rw-r--r--   1 root     root           10 Jan 28  2015 /etc/adjtime
 8814    0 drwxr-xr-x   1 root     root           10 Jan 29  2015 /etc/ppp/ip-d
own.d                                                           
8816    0 drwxr-xr-x   1 root     root           10 Jan 29  2015 /etc/ppp/ip-u
p.d                                                            
 8921    0 lrwxrwxrwx   1 root     root           10 Jan 29  2015 /etc/ssl/cert
s/349f2832.0 -> EC-ACC.pem                                    
  9234    0 lrwxrwxrwx   1 root     root           10 Jan 29  2015 /etc/ssl/cert
s/aeb67534.0 -> EC-ACC.pem                                     
 73468    4 -rw-r--r--   1 root     root           10 Nov 16 20:42 /etc/hostname
sysadmin@localhost:~$

Si desea buscar archivos que sean mayores que un tamaño especificado, coloque un carácter + antes del tamaño. Por ejemplo, lo siguiente buscará todos los archivos en la estructura de directorios /usr que tengan más de 100 megabytes de tamaño:

sysadmin@localhost:~$ find /usr -size +100M -ls 2> /dev/null
574683 104652 -rw-r--r--   1 root      root      107158256 Aug  7 11:06 /usr/share/icons/oxygen/icon-theme.cache                    
sysadmin@localhost:~$









No hay comentarios.:

Publicar un comentario