¿Cuál es la diferencia básica entre locate
whereis
y which
comando.
La diferencia básica que observé es que locate
localiza todos los nombres de archivos relacionados en todo el sistema de archivos, mientras que whereis
y which
los comandos solo dan la ubicación (sistema/dirección local del archivo) de la aplicación instalada. ¿Qué tan precisa es mi observación?
¿Cómo se implementan estos comandos internamente? ¿Por qué locate
funciona tan rápido en comparación con la búsqueda de guiones, mientras que locate
tiene que buscar un nombre de archivo en particular que coincida con la cadena de destino en toda la jerarquía del sistema de archivos?
Respuesta aceptada:
which
encuentra el ejecutable binario del programa (si está en su RUTA). man which
explica más claramente:
que devuelve los nombres de ruta de los archivos (o enlaces) que se
ejecutarían en el entorno actual, si sus argumentos se hubieran dado como comandos en un shell estrictamente compatible con POSIX. Lo hace buscando en la RUTA archivos ejecutables que coincidan con los nombres de los argumentos. No sigue enlaces simbólicos.
whereis
encuentra los archivos binarios, fuente y de la página del manual para un programa. Por ejemplo
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
Puede obtener detalles adicionales al pasar la salida de estos comandos como argumentos a ls -l
o file
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
de hecho, encuentra todos los archivos que tienen el patrón especificado en cualquier lugar de sus rutas. Puede indicarle que solo busque archivos y directorios cuyos nombres (en lugar de rutas completas) incluya el patrón con -b
opción, que suele ser lo que desea, y ofrece una lista menos difícil de manejar.
locate
es rápido porque utiliza una base de datos binaria que se actualiza periódicamente (una vez al día, por cron
). Puede actualizarlo usted mismo para asegurarse de que se encuentren los archivos agregados recientemente ejecutando sudo updatedb
Una cosa más sobre locate
– No importa si los archivos aún existen o no, así que para evitar encontrar archivos eliminados recientemente, use -e
. A menudo también canalizo a less
ya que la lista puede ser larga. Normalmente hago:
sudo updatedb && locate -b -e gimp | less
Aquí se explica cómo funciona el tablero de Unity:utiliza Zeitgeist para indexar archivos del sistema y aprender de los patrones de uso, y permite que otras aplicaciones utilicen estos datos, por lo que está haciendo mucho más trabajo que locate
.