Introducción
Hay cinco comandos de búsqueda de archivos en Linux: whereis
, locate
, which
, type
, y find
. Cada uno de ellos tiene sus propias características y está diseñado para escenarios de búsqueda particulares. Esta guía le presentará cada comando y le mostrará ejemplos de usos. Para leer más sobre cualquiera de estos comandos, es mejor revisar la página de manual apropiada.
whereis
El whereis
comando se utiliza para buscar archivos binarios, código fuente y las páginas del manual en línea en varios directorios de instalación estándar para cualquier nombre de programa especificado.
Debido a whereis
que no busca en todas las ubicaciones de su sistema, no se encontrarán archivos de estos directorios específicos. Por la misma razón, obtendrá el resultado de su búsqueda rápidamente, ya sea que se encuentre o no.
Además, no buscará los comandos que están integrados directamente en el shell.
Por ejemplo, si desea encontrar información sobre el ls
comando, ejecute el siguiente comando en su terminal:
whereis ls
Recibirá algunos comentarios como:
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
En el resultado, /bin/ls
es el binario que desea localizar, las otras dos son páginas de manual para el ls
programa, no ls
se encontró ningún código fuente para el programa.
Copie el /bin/ls
archivo a su directorio de inicio y al /usr/bin
directorio, y luego ejecute el whereis
comando nuevamente:
cp /bin/ls ~
cp /bin/ls /usr/bin/ls
whereis ls
Como ves, solo /bin/ls
y /usr/bin/ls
se encontraron en el resultado de búsqueda. El ls
no se encontró el programa en su directorio personal, debido a su directorio principal no es uno de los directorios de instalación estándar.
ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
Si ejecuta el siguiente comando:
whereis cd
Verá una salida similar a la línea a continuación. No se descubrió ningún archivo binario porque cd
es un comando incorporado del shell.
cd: /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
locate
El locate
comando se utiliza para buscar archivos por nombre con la ayuda de una base de datos ( /var/lib/mlocate/mlocate.db
). Esta base de datos es básicamente una instantánea del diseño de su sistema de archivos. Cualquier registro en esta base de datos que coincida con su consulta aparecerá en el resultado de la búsqueda. Por defecto, el locate
comando usará su consulta para que coincida con cualquier parte del nombre completo de cada registro, incluido el nombre de la ruta. Por lo tanto, la cantidad de archivos coincidentes en el resultado de la búsqueda podría ser mayor de lo esperado.
A medida que la base de datos queda desactualizada, el resultado de la búsqueda del locate
comando se vuelve menos preciso. Puede notar archivos que ya no existen, o no verá coincidencias para los archivos recién creados. Por defecto, la mlocate.db
base de datos se actualiza automáticamente una vez al día. Puede usar el updatedb
comando para actualizarlo manualmente.
Debido a que la búsqueda se realiza en la base de datos en lugar del sistema de archivos, la velocidad de búsqueda es muy rápida.
Si ejecuta el siguiente comando:
locate ls
Obtendrá muchos registros en lugar de su resultado esperado.
Para que el resultado de la búsqueda sea más preciso, puede usar el -b
indicador para restringir el rango de búsqueda, usando su consulta para que coincida solo con el nombre base de cada registro:
locate -b "\ls"
Esta vez, obtendrá la ubicación de cada archivo exactamente llamado ls
en su sistema de archivos:
/bin/ls
which
El which
comando buscará el comando que especificó en el valor de la variable de entorno PATH
y devolverá el primer resultado por defecto. Si está consultando un alias, el which
comando determinará el comando real para el alias antes de realizar su búsqueda.
El which
comando también es muy rápido debido a su simplicidad.
El uso del which
comando es simple:
which your_command
Si desea mostrar todos los comandos coincidentes en lugar del primero, use la -a
bandera:
which -a your_command
Aquí hay un ejemplo para buscar un comando que tenga un alias:
which ll
El resultado de la búsqueda sería:
alias ll='ls -l --color=auto'
/bin/ls
type
Por defecto, el type
comando indicará cómo se interpretaría el nombre de un comando. Los posibles resultados incluyen un alias, una palabra clave, una función, un archivo incorporado o un archivo. Al igual que el whereis
comando, el type
comando solo buscará en varios directorios de instalación estándar para responder a su consulta.
Algunos ejemplos para escribir diferentes comandos:
Un comando integrado de shell:
type cd
cd is a shell builtin
Un archivo binario en el sistema de archivos:
type sudo
sudo is /usr/bin/sudo
Un alias:
type ls
ls is aliased to `ls --color=auto'
find
Entre los cinco comandos de búsqueda de archivos presentados en este tutorial, el find
comando es el más poderoso. También es el más lento. A diferencia de los otros cuatro comandos, el find
comando realmente buscará su archivo en todo el sistema de archivos, un nodo i por un nodo i. Con el find
comando, puede utilizar criterios de consulta sofisticados para encontrar cada archivo que necesita, incluso ejecutar acciones adicionales en los archivos que se encontraron.
Los criterios de búsqueda para el find
comando son demasiado sofisticados para explicar en un artículo tan breve, aquí hay algunos ejemplos.
Formato básico del find
comando:
find [path] [option] [action]
Para buscar todos los archivos en el directorio de trabajo y todos sus subdirectorios:
find
Para buscar un archivo llamado aaa
en su directorio de inicio y todos sus subdirectorios:
find ~ -name 'aaa'
Para buscar todos los archivos en el sistema de archivos que se modificaron en las últimas 24 horas:
find / -mtime 0
Para buscar todos los archivos en el directorio web y todos sus subdirectorios que pertenecen al usuario nginx
:
find /usr/share/nginx/html/ -user nginx
Para buscar todos los archivos en el directorio de trabajo cuyos permisos son 0744
:
find -perm -0744
Para buscar un archivo con el nombre aaa
en el directorio de trabajo y enumerar su información detallada:
find -name 'aaa' -exec ls -l {} \;