¿Cuál es la diferencia entre localizar / whereis / which

13

¿Cuál es la diferencia básica entre locate whereisy whichcomando?

La diferencia básica que he observado es que locatelocaliza todos los nombres de archivos relacionados en todo el sistema de archivos, mientras que whereisy whichcomandos sólo dan la ubicación (sistema / dirección local del archivo) de aplicación instalada. ¿Qué tan precisa es mi observación?

¿Cómo se implementan estos comandos internamente? ¿Por qué locatefunciona tan rápido en comparación con la búsqueda de guiones, mientras que locatetiene que buscar un nombre de archivo en particular que coincida con la cadena de destino en toda la jerarquía del sistema de archivos?

Chinmaya B
fuente
2
y ¿qué pasa type? : P
jamesmstone
@jamesmstone ¿qué es lo que quiere decir con type, por favor elaborar
Chinmaya B
2
Lo siento, solo estaba intentando agregar a tu pregunta. typees otro comando que parece (a mis ojos) hacer algo similar a los que mencionaste.
jamesmstone
@jamesmstone No creo que haya ningún comando de tipo que funcione en mi sistema. No puedo encontrar ningún manual o página de información para el typecomando. Lo intenté man typey info type.
Chinmaya B
Hmm, me pregunto por qué ... ¿Estás usando bash?
jamesmstone

Respuestas:

17

whichencuentra el ejecutable binario del programa (si está en su RUTA). man whichexplica 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.

whereisencuentra los archivos binarios, de origen y de página de 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 ls -laofile

$ 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

locatede hecho, encuentra todos los archivos que tienen el patrón especificado en cualquier parte de sus rutas. Puede indicarle que solo busque archivos y directorios cuyos nombres (en lugar de rutas completas) incluyan el patrón con la -bopción, que generalmente es lo que desea, y proporciona una lista menos difícil de manejar.

locatees rápido porque usa una base de datos binaria que se actualiza periódicamente (una vez al día, por cron). Puede actualizarlo usted mismo para asegurarse de encontrar los archivos agregados recientemente ejecutandosudo updatedb

Una cosa más sobre locate: no le importa si los archivos aún existen o no, así que para evitar encontrar archivos eliminados recientemente, úselo -e. A menudo también me canalizo lessya 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.

Zanna
fuente
¿Puedes comparar el guión y localizar el rendimiento del comando y los detalles de implementación? La actualización de la base de datos binaria debe hacerse después de la creación de cualquier archivo nuevo en el sistema, ¿no es así, ese período sería indefinidamente correcto o es administrado por procesos del sistema?
Chinmaya B
2
@Creator actualiza la base de datos automáticamente por cron, una vez al día. Puede verificar cuando instala algo con lo que no puede encontrar inmediatamente los archivos locate. El guión usa un índice completamente diferente, más lento porque hace más cosas (edité mi respuesta)
Zanna
1
En resumen, localizar es útil y más poderoso que cuál o dónde, pero es tonto mientras que el tablero es más poderoso e implementa el aprendizaje automático. y gracias por sudo updatedbsu comando es muy útil no sabía que aunque yo usaba -e regularmente.
Chinmaya B
@Creator sí, lo expresaste mejor :) feliz de que haya ayudado
Zanna
0

Simplemente

$ which samba

qué comando busca en la lista de programas enumerados a través de la configuración de RUTA

$ whereis samba

El comando whereis también busca programas que no están presentes en la configuración RUTA

$locate samba

También busca archivos por nombre de archivo, pero no busca en la estructura del directorio en sí, sino solo en una base de datos preparada por updatedb. Debido a eso, localizar es más rápido que encontrar pero menos preciso. Ejemplos:

Puntero nulo
fuente