que / donde hay diferencias

112

¿Cuál es la diferencia entre whichy whereis?

mk12
fuente
Lo siento, pero en mi sistema OS X 10.5.8 que y donde siempre dan los mismos resultados. Tal vez esta es una pregunta muy específica de OS X, ya que estoy de acuerdo, se espera un resultado diferente. Quizás whereis no cumple con lo que debería hacer. Al menos los dos ejemplos (ver más abajo) no funcionan: whereis ls y whereis php siempre dan el mismo resultado que ... ¿Alguien puede confirmar esto? ¿Snow Leopard se comporta igual?
Wolf
Sí, lo sé, por eso hice esta pregunta.
mk12
@Wolf aquí hay un ejemplo whichy whereisuna salida diferente (en macOS Sierra) apple.stackexchange.com/questions/259047/…
Matthew
@ mk12 Siento que typees superior. También sabe acerca de alias definidos, funciones, etc.
phil294

Respuestas:

121

¿Qué hay de aprender whereisy whichusar whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Básicamente, whereisbusca archivos "posiblemente útiles", mientras que whichsolo busca ejecutables.

Raramente uso whereis. Por otro lado, whiches muy útil, especialmente en scripts. whiches la respuesta a la siguiente pregunta: ¿de dónde viene este comando?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2
Denilson Sá Maia
fuente
34
No sabía sobre whatis, gracias.
mk12
1
Por cierto, eliminaría la etiqueta "osx", ya que esta pregunta se aplica a todas las variantes de Unix (incluidos Linux, BSD, Mac OS X, ...)
Denilson Sá Maia
cambiado a unix
mk12
1
Hay más que eso. En mi sistema, whereis y que devuelven diferentes rutas ejecutables. Solo puedo obtener el camino hacia el que realmente se ejecuta whereis, no para el which.
Jordan Reiter
1
@JordanReiter: ¡No puede ser! whichMuestra el camino real. ¿Estás seguro de que la ruta señalada whichno es solo un enlace simbólico a la ruta señalada whereis? Tal vez es un alias de shell. En bash, intenta correr type your_cmd_here.
Denilson Sá Maia
23

whereis busca en las ubicaciones estándar * nix un comando específico.

whichbusca en su RUTA específica del usuario (que puede incluir algunas de las ubicaciones en las que realiza búsquedas, y puede que no incluya otras; también puede incluir algunos lugares que whereisno buscan si hubiera agregado a su RUTA)

Ámbar
fuente
¿Qué es * nix?
mk12
2
Unix, Linux, etc. (Mac OS X perteneciente a la etc.)
8
Ohhh, jaja, siempre pensé que desbordamiento de pila estaba censurando la U en UNIX cuando veía que por alguna razón ..
MK12
No. Solo una convención bastante común del uso de comodines creativos para referirse a una familia de sistemas operativos similares. ;)
6

Citando sus páginas de manual:

whereis :

whereis localiza secciones fuente / binarias y manuales para archivos específicos.

Por ejemplo :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

es decir, el ejecutable "php" y algunas otras cosas (como páginas de manual).


y cual :

que devuelve los nombres de ruta de los archivos que se ejecutarían en el entorno actual

Por ejemplo :

$ which php
/usr/bin/php

es decir, solo el ejecutable "php".

Pascal MARTIN
fuente
1

que buscan ejecutables en los directorios especificados por la variable de entorno PATH. Y si se descubre, se imprimirá la ruta completa de este ejecutable.

$ which ls
/ bin / ls
$ which ifconfig
$ # Sin salida, porque ifconfig solo existe en la RUTA de la raíz.

donde busca ejecutables, archivos de origen y páginas de manual utilizando una base de datos creada por el sistema automáticamente.

$ whereis less
less: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Pero parece que whereis y localizar no usan la misma base de datos. Cuando instalé un software y luego usé whereis y localizar inmediatamente para buscar este software. El resultado es que whereis podría encontrar algunos archivos relacionados con este software, mientras que localizar no pudo. ¿Realmente usan bases de datos diferentes? ¿Cómo funciona la base de datos? --Bueno, ¿qué tal si te niegas a ser pedante? :)

usuario192505
fuente
ejecutaste el comando updatedb? localizar confía en eso hasta donde recuerdo
Oliver M Grech