which, whereis y locate en Linux: 3 comandos para ver la ubicación (ruta)

A veces quieres editar httpd.conf y no sabes dónde estÔ el archivo, o hay un comando con el mismo nombre en dos sitios y no sabes cuÔl se ejecuta. El comando which de Linux encuentra el archivo que de verdad se ejecuta, el comando whereis de Linux encuentra el ejecutable junto con las carpetas de configuración y los manuales, y el comando locate encuentra todas las rutas que contienen el nombre. Comparo los tres en una tabla y puedes probarlos en un servidor virtual dentro del navegador.
En AlmaLinux 9.8, which viene en el paquete which 2.21 y whereis en util-linux 2.37.4, asĆ que funcionan desde el principio; locate, en cambio, necesita instalar aparte el paquete mlocate 0.26.
ā Diferencias entre which, whereis y locate
Los tres comandos buscan en sitios distintos. which y whereis recorren carpetas fijas en el momento, mientras que locate busca nombres en una lista de archivos (BD) creada de antemano.
| Comando | Qué encuentra | Dónde busca | Archivos nuevos |
|---|---|---|---|
| which | El Ćŗnico archivo de comando que se ejecuta y los alias | Carpetas incluidas en PATH | Los encuentra al momento |
| whereis | Ejecutable · carpetas de configuración · manuales | Carpetas fijas como /usr/bin · /etc · /usr/share/man | Los encuentra al momento |
| locate | Todos los archivos y carpetas que contienen el nombre | Una BD creada de antemano (/var/lib/mlocate/mlocate.db) | Los encuentra tras updatedb |
Si buscas el mismo httpd con which y con whereis, la diferencia salta a la vista.
~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gzlocate muestra todas las rutas que coinciden aunque sea con parte del nombre, asà que [locate httpd.conf] devuelve, ademÔs del archivo de configuración, el manual (httpd.conf.5.gz) y las copias de seguridad.
En el servidor virtual de abajo, elige which, whereis o locate a la izquierda para cambiar los chips; al pulsar un chip se escribe ese comando. TambiƩn puedes teclearlo.
Para buscar archivos por tamaño o fecha de modificación en lugar de por nombre, se usa el comando find, y la ruta de la carpeta actual se consulta con el comando pwd.
ā Comando which de Linux
which recorre en orden las carpetas de PATH desde el principio y muestra el primer ejecutable que encuentra. Ese es el archivo que se ejecuta de verdad al escribir el comando.
En AlmaLinux, bash pasa la lista de alias a which, asĆ que un comando con alias muestra el alias y el archivo real. Si no estĆ” en ningĆŗn lugar de PATH, aparece [no comando in (PATH)].
~]# which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)En la prÔctica, -a es la única opción. Cuando el mismo nombre estÔ en dos carpetas de PATH muestra ambos, y el de arriba es el que se ejecuta.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingEn AlmaLinux 9.8, /usr/sbin/ping es un enlace a /usr/bin/ping, asĆ que el resultado es el mismo. Un programa que instales tĆŗ en /usr/local/bin se ejecuta antes que el de /usr/bin por el orden de PATH.
[which cd] muestra /usr/bin/cd, pero al escribir cd en el shell se ejecuta el comando interno del shell, no este archivo. Para saber si es interno usa [type cd], que muestra [cd is a shell builtin].
ā Comando whereis de Linux
whereis usa el nombre del comando para encontrar el ejecutable y sus manuales a la vez. No depende de PATH y recorre carpetas fijas como /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, asà que aparece incluso la carpeta de configuración del mismo nombre (/etc/httpd).
| Opción | Descripción | |
|---|---|---|
| -b | Solo ejecutables. Para httpd: /usr/sbin/httpd y /usr/lib64/httpd Ā· /etc/httpd Ā· /usr/share/httpd | |
| -m | Solo manuales (/usr/share/man Ā· /usr/share/info) | |
| -s | Solo fuentes. En una instalación estÔndar de AlmaLinux 9.8 solo sale el nombre, como [httpd:] | |
| -l | Lista de carpetas que recorre whereis |
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gzSi no encuentra nada, solo sale el nombre, como [htop:]. which devuelve el código de salida 1 cuando no encuentra nada y whereis devuelve 0, asà que en un script usa which para comprobar si algo estÔ instalado.
ā Comando locate de Linux
locate no recorre el disco, sino que busca nombres en una BD creada de antemano. Por eso es rƔpido, pero no encuentra archivos creados despuƩs de generar la BD.
~]# dnf -y install mlocate
~]# updatedbSi lo ejecutas justo despuĆ©s de instalarlo, todavĆa no hay BD y aparece [locate: can not stat () `/var/lib/mlocate/mlocate.dbā: No such file or directory]; al ejecutar updatedb una vez se crea. A partir de ahĆ, mlocate-updatedb.timer reconstruye la BD una vez al dĆa.
Un archivo nuevo no aparece hasta que se ejecuta updatedb, y uno borrado sigue apareciendo hasta entonces. Para ver solo los que existen ahora, aƱade -e.
~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txtPRUNEPATHS en /etc/updatedb.conf incluye /tmp Ā· /var/tmp Ā· /mnt Ā· /media, asĆ que los archivos de esas carpetas no aparecen aunque ejecutes updatedb.
š² Opciones del comando locate
| Opción | Descripción | |
|---|---|---|
| -i | Buscar sin distinguir mayĆŗsculas | |
| -c | Solo el nĆŗmero de resultados en lugar de las rutas | |
| -l= -n | Añade un número para limitar los resultados. -l 3 | |
| -b | Buscar solo en el nombre de archivo al final de la ruta | |
| -e | Omitir archivos que estƔn en la BD pero ya no existen | |
| -S | Información de la BD (carpetas · archivos · tamaño) | |
| -r | Buscar con una expresión regular. locate -r āhttpd.conf$ā |
ā¹ļø Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a travĆ©s de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ā)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, asĆ que confĆrmalos con el vendedor antes de comprar. Los productos se eligen y evalĆŗan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseƱas.