Comando de búsqueda de Linux
El comando de búsqueda de Linux es un comando muy útil y práctico para buscar archivos desde la línea de comandos. Se puede usar para buscar archivos según varios criterios de búsqueda, como permisos, propiedad del usuario, fecha/hora de modificación, tamaño, etc. En esta publicación, aprenderemos a usar el comando de búsqueda junto con varias opciones que admite.
El comando de búsqueda está disponible en la mayoría de las distribuciones de Linux de forma predeterminada, por lo que no tiene que instalar ningún paquete. El comando de búsqueda es esencial para aprender, si desea ser súper productivo con la línea de comandos en Linux.
La sintaxis básica del comando de búsqueda se ve así
$ find location comparison-criteria search-term
1. Listar todos los archivos en los directorios actuales y secundarios
Este comando enumera todos los archivos en el directorio actual, así como los subdirectorios en el directorio actual.
$ find . ./abc.txt ./subdir ./subdir/how.php ./cool.php
El comando es el mismo que el siguiente
$ find . $ find . -print
2. Buscar directorio o ruta específica
El siguiente comando buscará archivos en el directorio de prueba en el directorio actual. Enumera todos los archivos de forma predeterminada.
$ find ./test ./test ./test/abc.txt ./test/subdir ./test/subdir/how.php ./test/cool.php
El siguiente comando busca archivos por su nombre.
$ find ./test -name "abc.txt" ./test/abc.txt
También podemos usar comodines
$ find ./test -name "*.php" ./test/subdir/how.php ./test/cool.php
Tenga en cuenta que todos los subdirectorios se buscan recursivamente. Así que esta es una forma muy poderosa de encontrar todos los archivos de una extensión dada.
Intentar buscar en el directorio "/", que es la raíz, buscaría en todo el sistema de archivos, incluidos los dispositivos montados y los dispositivos de almacenamiento en red. Así que ten cuidado. Por supuesto, puede presionar Ctrl + c en cualquier momento para detener el comando.
When specifying the directory ("./test" in this example), its fine to omit the trailing slash. However, if the directory is actually a symlink to some other location then you MUST specify the trailing slash for it to work properly (find ./test/ ...)
Ignorar el caso
A menudo es útil ignorar las mayúsculas y minúsculas al buscar nombres de archivo. Para ignorar el caso, simplemente use la opción "iname" en lugar de la opción "nombre".
$ find ./test -iname "*.Php" ./test/subdir/how.php ./test/cool.php
Its always better to wrap the search term (name parameter) in double or single quotes. Not doing so will seem to work sometimes and give strange results at other times.
3. Limite la profundidad del recorrido del directorio
De forma predeterminada, el comando de búsqueda recorre todo el árbol de directorios de forma recursiva, lo que consume tiempo y recursos. Sin embargo, se puede especificar la profundidad del recorrido del directorio. Por ejemplo, no queremos bajar más de 2 o 3 niveles en los subdirectorios. Esto se hace usando la opción de profundidad máxima.
$ find ./test -maxdepth 2 -name "*.php" ./test/subdir/how.php ./test/cool.php $ find ./test -maxdepth 1 -name *.php ./test/cool.php
El segundo ejemplo usa una profundidad máxima de 1, lo que significa que no irá por debajo de 1 nivel de profundidad, ya sea solo en el directorio actual.
Esto es muy útil cuando queremos hacer una búsqueda limitada solo en el directorio actual o en subdirectorios de un máximo de 1 nivel de profundidad y no en todo el árbol de directorios, lo que llevaría más tiempo.
Al igual que la profundidad máxima, hay una opción llamada profundidad mínima que hace lo que sugiere el nombre, es decir, irá al menos a un nivel N de profundidad antes de buscar los archivos.
4. Invertir partido
También es posible buscar archivos que no coincidan con un nombre o patrón determinado. Esto es útil cuando sabemos qué archivos excluir de la búsqueda.
$ find ./test -not -name "*.php" ./test ./test/abc.txt ./test/subdir
Entonces, en el ejemplo anterior, encontramos todos los archivos que no tienen la extensión de php, ya sea archivos que no son de php. El comando de búsqueda también admite el signo de exclamación en lugar de no.
find ./test ! -name "*.php"
5. Combina múltiples criterios de búsqueda
Es posible utilizar varios criterios al especificar el nombre y la inversión. Por ejemplo
$ find ./test -name 'abc*' ! -name '*.php' ./test/abc.txt ./test/abc
El comando de búsqueda anterior busca archivos que comienzan con abc en sus nombres y no tienen una extensión php. Este es un ejemplo de cómo se pueden crear poderosas expresiones de búsqueda con el comando de búsqueda.
Operador
Cuando se utilizan varios criterios de nombre, el comando de búsqueda los combinará con el operador AND, lo que significa que solo se compararán los archivos que satisfagan todos los criterios. Sin embargo, si necesitamos realizar una coincidencia basada en OR, el comando de búsqueda tiene el interruptor "o".
$ find -name '*.php' -o -name '*.txt' ./abc.txt ./subdir/how.php ./abc.php ./cool.php
El comando anterior busca archivos que terminen en la extensión php o en la extensión txt.
6. Buscar solo archivos o solo directorios
A veces queremos encontrar solo archivos o solo directorios con un nombre dado. Find también puede hacer esto fácilmente.
$ find ./test -name abc* ./test/abc.txt ./test/abc Only files $ find ./test -type f -name "abc*" ./test/abc.txt Only directories $ find ./test -type d -name "abc*" ./test/abc
¡Muy útil y práctico!
7. Buscar varios directorios juntos
Entonces, digamos que desea buscar dentro de 2 directorios separados. Nuevamente, el comando es muy simple
$ find ./test ./dir2 -type f -name "abc*" ./test/abc.txt ./dir2/abcdefg.txt
Verifique que enumeró archivos de 2 directorios separados.
8. Encuentra archivos ocultos
Los archivos ocultos en Linux comienzan con un punto. Por lo tanto, es fácil mencionarlo en los criterios de nombre y enumerar todos los archivos ocultos.
$ find ~ -type f -name ".*"
9. Encuentra archivos con ciertos permisos
El comando de búsqueda se puede usar para buscar archivos con un permiso específico usando la opción "perm". El siguiente comando busca archivos con el permiso 0664
$ find . -type f -perm 0664 ./abc.txt ./subdir/how.php ./abc.php ./cool.php
Esto puede ser útil para encontrar archivos con permisos incorrectos que pueden generar problemas de seguridad. La inversión también se puede aplicar a la verificación de permisos.
$ find . -type f ! -perm 0777 ./abc.txt ./subdir/how.php ./abc.php ./cool.php
10. Buscar archivos con bits sgid/suid configurados
La opción "perm" del comando de búsqueda acepta la misma cadena de modo que chmod. El siguiente comando encuentra todos los archivos con el permiso 644 y el conjunto de bits sgid.
# find / -perm 2644
Del mismo modo, use 1664 para la punta adhesiva. La opción permanente también admite el uso de una sintaxis alternativa en lugar de números octales.
$ find / -maxdepth 2 -perm /u=s 2>/dev/null /bin/mount /bin/su /bin/ping6 /bin/fusermount /bin/ping /bin/umount /sbin/mount.ecryptfs_private
Tenga en cuenta que "2>/dev/null" elimina aquellas entradas que tienen un error de "Permiso denegado"
11. Encuentra archivos de solo lectura
Encuentra todos los archivos de solo lectura.
$ find /etc -maxdepth 1 -perm /u=r /etc /etc/thunderbird /etc/brltty /etc/dkms /etc/phpmyadmin ... output truncated ...
12. Encuentra archivos ejecutables
El siguiente comando encontrará archivos ejecutables
$ find /bin -maxdepth 2 -perm /a=x /bin /bin/preseed_command /bin/mount /bin/zfgrep /bin/tempfile ... output truncated ...
13. Encuentra archivos propiedad de un usuario en particular
Para encontrar todo o un solo archivo llamado tecmint.txt en el directorio /root de la raíz del propietario.
$ find . -user bob . ./abc.txt ./abc ./subdir ./subdir/how.php ./abc.php
También podríamos especificar el nombre del archivo o cualquier criterio relacionado con el nombre junto con el criterio del usuario
$ find . -user bob -name '*.php'
Es muy fácil ver cómo podemos crear criterios tras criterios para reducir nuestra búsqueda de archivos coincidentes.
14. Buscar archivos pertenecientes al grupo
Encuentra todos los archivos que pertenecen a un grupo en particular.
# find /var/www -group developer
¿Sabías que puedes buscar en tu directorio de inicio usando el símbolo ~?
$ find ~ -name "hidden.php"
¡¡Fácil!!
Buscar archivos y directorios según la fecha y hora de modificación
Otro gran criterio de búsqueda que admite el comando de búsqueda es la modificación y la fecha/hora de acceso. Esto es muy útil cuando queremos averiguar qué archivos se modificaron en un determinado intervalo de tiempo o fecha. Tomemos algunos ejemplos
15. Encuentra archivos modificados hace N días
Para encontrar todos los archivos que se modificaron hace 50 días.
# find / -mtime 50
16. Buscar archivos a los que se accedió en los últimos N días
Encuentra todos los archivos a los que se accedió en los últimos 50 días.
# find / -atime 50
17. Encuentra archivos modificados en un rango de días
Encuentra todos los archivos que se modificaron hace entre 50 y 100 días.
# find / -mtime +50 –mtime -100
18. Encuentra archivos modificados en los últimos N minutos.
Encuentra archivos modificados en la última hora.
$ find /home/bob -cmin -60
19. Archivos modificados en la última hora
Para encontrar todos los archivos que se modificaron en la última hora.
# find / -mmin -60
20. Buscar archivos accedidos en la última hora
Para encontrar todos los archivos a los que se accedió en la última hora.
# find / -amin -60
21. Encuentra archivos de un tamaño dado
Buscar archivos y directorios según el tamaño. Para encontrar todos los archivos de 50 MB, use.
# find / -size 50M
22. Encuentra archivos en un rango de tamaño
Para encontrar todos los archivos que tienen más de 50 MB y menos de 100 MB.
$ find / -size +50M -size -100M
23. Encuentra los archivos más grandes y más pequeños
El comando de búsqueda, cuando se usa en combinación con el comando ls y ordenar, se puede usar para listar los archivos más grandes.
El siguiente comando mostrará los 5 archivos más grandes en el directorio actual y su subdirectorio. Esto puede tardar un tiempo en ejecutarse dependiendo de la cantidad total de archivos que el comando tenga que procesar.
$ find . -type f -exec ls -s {} \; | sort -n -r | head -5
De manera similar, cuando se ordena en orden ascendente, mostraría primero los archivos más pequeños
$ find . -type f -exec ls -s {} \; | sort -n | head -5
24. Encuentra archivos y directorios vacíos
El siguiente comando usa la opción "vacío" del comando de búsqueda, que encuentra todos los archivos que están vacíos.
# find /tmp -type f -empty
Para archivar todos los directorios vacíos utilice el tipo "d".
$ find ~/ -type d -empty
Realmente muy simple y fácil
Algunas operaciones avanzadas
El comando de búsqueda no solo encuentra archivos en función de ciertos criterios, sino que también puede actuar sobre esos archivos utilizando cualquier comando de Linux. Por ejemplo, podríamos querer eliminar algunos archivos.
Aquí hay algunos ejemplos rápidos
25. Enumere los archivos encontrados
Digamos que encontramos archivos usando el comando find, y ahora queremos enumerarlos como lo hubiera hecho el comando ls. Esto es muy fácil.
$ find . -exec ls -ld {} \; drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 . -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php -rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php
26. Eliminar todos los archivos o directorios coincidentes
El siguiente comando eliminará todos los archivos de texto en el directorio tmp.
$ find /tmp -type f -name "*.txt" -exec rm -f {} \;
La misma operación se puede realizar con directorios, basta con poner tipo d, en lugar de tipo f.
Tomemos otro ejemplo en el que queremos eliminar archivos de más de 100 MB
$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;
Resumen
Ese fue un tutorial rápido sobre el comando de búsqueda de Linux . El comando de búsqueda es uno de los comandos más esenciales en la terminal de Linux, que permite buscar archivos muy fácilmente. Es imprescindible para todos los administradores de sistemas. Así que apréndelo. Tiene alguna pregunta ? Deja un comentario a continuación.