Cuando se trata de localizar archivos o directorios en su sistema, el comando de búsqueda en Linux no tiene paralelo. Es fácil de usar, pero tiene muchas opciones diferentes que le permiten afinar su búsqueda de archivos.
Siga leyendo para ver ejemplos de cómo puede usar este comando para encontrar cualquier cosa en su sistema. Cada archivo está a solo unas pocas pulsaciones de teclas una vez que sepa cómo usar el comando de búsqueda en Linux.
Buscar un directorio
Puede indicarle al comando de búsqueda que busque específicamente directorios con la opción -type d. Esto hará que el comando de búsqueda solo busque nombres de directorios coincidentes y no nombres de archivos.
$ find /path/to/search -type d -name "name-of-dir"
Buscar archivos ocultos
Dado que los archivos y directorios ocultos en Linux comienzan con un punto, podemos especificar este patrón de búsqueda en nuestra cadena de búsqueda para enumerar recursivamente los archivos y directorios ocultos.
$ find /path/to/search -name ".*"
Buscar archivos de cierto tamaño o mayor que X
La opción -size en find nos permite buscar archivos de un tamaño específico. Se puede usar para buscar archivos de un tamaño exacto, archivos que son más grandes o más pequeños que un tamaño determinado o archivos que se ajustan a un rango de tamaño específico. Estos son algunos ejemplos:
Busque archivos de más de 10 MB de tamaño:
$ find /path/to/search -size +10M
Busque archivos de menos de 10 MB de tamaño:
$ find /path/to/search -size -10M
Busque archivos que tengan exactamente 10 MB de tamaño:
$ find /path/to/search -size 10M
Busque archivos que tengan entre 100 MB y 1 GB de tamaño:
$ find /path/to/search -size +100M -size -1G
Buscar en una lista de archivos
Si tiene una lista de archivos (en un archivo .txt, por ejemplo) que necesita buscar, puede buscar su lista de archivos con una combinación de los comandos find y grep. Para que este comando funcione, solo asegúrese de que cada patrón que desee buscar esté separado por una nueva línea.
$ find /path/to/search | grep -f filelist.txt
La opción -f en grep significa "archivo" y nos permite especificar un archivo de cadenas con las que coincidir. Esto da como resultado que el comando de búsqueda devuelva cualquier nombre de archivo o directorio que coincida con los de la lista.
No encontrar en una lista
Usando la misma lista de archivos que mencionamos en el ejemplo anterior, también puede usar el comando de búsqueda para buscar cualquier archivo que no ajuste los patrones dentro del archivo de texto. Una vez más, usaremos una combinación de los comandos find y grep; solo necesitamos una opción adicional especificada con grep:
$ find /path/to/search | grep -vf filelist.txt
La opción -v en grep significa "coincidencia inversa" y devolverá una lista de archivos que no coinciden con ninguno de los patrones especificados en nuestra lista de archivos.
Establecer la profundidad máxima
El comando de búsqueda buscará recursivamente de forma predeterminada. Esto significa que buscará en el directorio especificado el patrón que especificó, así como en todos y cada uno de los subdirectorios dentro del directorio que le indicó que buscara.
Por ejemplo, si le dice a find que busque en el directorio raíz de Linux (/), buscará en todo el disco duro, sin importar cuántos subdirectorios de subdirectorios existan. Puede eludir este comportamiento con la opción -max depth.
Especifique un número después de -max depth para indicar a find en cuántos subdirectorios debe buscar recursivamente.
Busque archivos solo en el directorio actual y no busque recursivamente:
$ find . -maxdepth 0 -name "myfile.txt"
Busque archivos solo en el directorio actual y un subdirectorio más profundo:
$ find . -maxdepth 1 -name "myfile.txt"
Buscar archivos vacíos (longitud cero)
Para buscar archivos vacíos con find, puede usar el indicador -empty. Buscar todos los archivos vacíos:
$ find /path/to/search -type f -empty
Buscar todos los directorios vacíos:
$ find /path/to/search -type d -empty
También es muy útil combinar este comando con la opción -delete si desea eliminar automáticamente los archivos o directorios vacíos que devuelve find.
Eliminar todos los archivos vacíos en un directorio (y subdirectorios):
$ find /path/to/search -type f -empty -delete
Encuentra el directorio o archivo más grande
Si desea determinar rápidamente qué archivos o directorios en su sistema ocupan la mayor parte del espacio, puede usar find para buscar recursivamente y generar una lista ordenada de archivos y/o directorios por su tamaño.
Cómo mostrar el archivo más grande en un directorio:
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1
Tenga en cuenta que el comando de búsqueda se clasificó en otras dos prácticas utilidades de Linux:sort y tail. El comando Ordenar pondrá la lista de archivos en orden por su tamaño, y el comando cola generará solo el último archivo de la lista, que también es el más grande.
Puede ajustar el comando de cola si desea generar, por ejemplo, los 5 archivos más grandes:
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5
Alternativamente, puede usar el comando head para determinar los archivos más pequeños:
$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5
Si desea buscar directorios en lugar de archivos, simplemente especifique "d" en la opción de tipo. Cómo mostrar el directorio más grande:
$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1
Buscar archivos de conjunto de setuid
Setuid es una abreviatura de "establecer ID de usuario en ejecución", que es un permiso de archivo que permite a un usuario normal ejecutar un programa con privilegios escalados (como root).
Esto puede ser un problema de seguridad por razones obvias, pero estos archivos pueden ser fáciles de aislar con el comando de búsqueda y algunas opciones.
El comando de búsqueda tiene dos opciones para ayudarnos a buscar archivos con ciertos permisos:-usuario y -perm. Para encontrar archivos que un usuario normal pueda ejecutar con privilegios de root, puede usar este comando:
$ find /path/to/search -user root -perm /4000
En la captura de pantalla anterior, incluimos la opción -exec para mostrar un poco más de resultados sobre los archivos con los que encuentran devoluciones. El comando completo se ve así:
$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;
También puede sustituir "root" en este comando por cualquier otro usuario que desee buscar como propietario. O bien, puede buscar todos los archivos con permisos SUID y no especificar ningún usuario:
$ find /path/to/search -perm /4000
Buscar archivos de conjuntos sgid
Buscar archivos con SGID configurado es casi lo mismo que buscar archivos con SUID, excepto que los permisos para 4000 deben cambiarse a 2000:
$ find /path/to/search -perm /2000
También puede buscar archivos que tengan configurados tanto SUID como SGID especificando 6000 en la opción de permisos:
$ find /path/to/search -perm /6000
Lista de archivos sin permiso denegado
Al buscar archivos con el comando de búsqueda, debe tener permisos de lectura en los directorios y subdirectorios en los que está buscando. Si no lo hace, find generará un mensaje de error, pero continúe buscando en los directorios en los que tiene permiso.
Aunque esto podría suceder en muchos directorios diferentes, definitivamente sucederá al buscar en su directorio raíz.
Eso significa que cuando intenta buscar un archivo en todo el disco duro, el comando de búsqueda producirá una tonelada de mensajes de error.
Para evitar ver estos errores, puede redirigir la salida stderr de find a stdout y canalizarla a grep.
$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"
Este comando usa la opción -v (inversa) de grep para mostrar todos los resultados excepto las líneas que dicen "Permiso denegado".
Buscar archivos modificados en los últimos X días
Use la opción -mtime en el comando de búsqueda para buscar archivos o directorios que se modificaron en los últimos X días. También se puede usar para buscar archivos que tengan más de X días o archivos que se modificaron hace exactamente X días.
Estos son algunos ejemplos de cómo usar la opción -mtime en el comando de búsqueda:
Busque todos los archivos que se modificaron en los últimos 30 días:
$ find /path/to/search -type f -mtime -30
Busque todos los archivos que se modificaron hace más de 30 días:
$ find /path/to/search -type f -mtime +30
Busque todos los archivos que se modificaron hace exactamente 30 días:
$ find /path/to/search -type f -mtime 30
Si desea que el comando de búsqueda genere más información sobre los archivos que encuentra, como la fecha de modificación, puede usar la opción -exec e incluir un comando ls:
$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;
Ordenar por tiempo
Para ordenar los resultados de la búsqueda por la hora de modificación de los archivos, puede usar la opción -printf para enumerar las horas de una manera clasificable y canalizar esa salida a la utilidad de clasificación.
$ find /path/to/search -printf "%T+\t%p\n" | sort
Este comando ordenará los archivos más antiguos a los más nuevos. Si desea que los archivos más nuevos aparezcan primero, simplemente pase la opción -r (reversa) para ordenar.
$ find /path/to/search -printf "%T+\t%p\n" | sort -r
Diferencia entre localizar y encontrar
El comando de localización en Linux es otra buena manera de buscar archivos en su sistema. No está repleto de una plétora de opciones de búsqueda como el comando de búsqueda, por lo que es un poco menos flexible, pero sigue siendo útil.
$ locate myfile.txt
El comando de localización funciona buscando en una base de datos que contiene todos los nombres de los archivos en el sistema. El comando updatedb actualiza esta base de datos.
Dado que el comando de localización no tiene que realizar una búsqueda en vivo de todos los archivos en el sistema, es mucho más eficiente que el comando de búsqueda. Pero además de la falta de opciones, existe otro inconveniente:la base de datos de archivos solo se actualiza una vez al día.
Puede actualizar esta base de datos de archivos manualmente ejecutando el comando updatedb:
$ updatedb
El comando de localización es particularmente útil cuando necesita buscar un archivo en todo el disco duro, ya que el comando de búsqueda naturalmente llevará mucho más tiempo, ya que tiene que recorrer todos los directorios en tiempo real.
Si busca en un directorio específico, que se sabe que no contiene una gran cantidad de subdirectorios, es mejor seguir con el comando de búsqueda.
Carga de CPU del comando de búsqueda
Al buscar en muchos directorios, el comando de búsqueda puede consumir muchos recursos. Intrínsecamente debería permitir que los procesos del sistema más importantes tengan prioridad, pero si necesita asegurarse de que el comando de búsqueda consuma menos recursos en un servidor de producción, puede usar el comando ionice o nice.
Supervise el uso de la CPU del comando de búsqueda:
$ top
Reduzca la prioridad de entrada/salida del comando de búsqueda:
$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"
Reduzca la prioridad de la CPU del comando de búsqueda:
$ nice -n 19 find /path/to/search -name "myfile.txt"
O combine ambas utilidades para garantizar realmente una E/S baja y una prioridad de CPU baja:
$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"
Espero que encuentres útil el tutorial. Sigue regresando.