Acabas de instalar una herramienta, pero ya no sabes si está ubicada en /usr/bin, /usr/local/bin o en otro lugar. El pedido dónde es Puede recuperar su binario, su código fuente y sus páginas de manual. Sin embargo, no responde a la pregunta más importante antes de cualquier intervención: ¿qué archivo ejecutará realmente su intérprete de comandos?
Para evitar tener que modificar la instalación defectuosa, cruzo los dedos. dónde es con comando -v Y amableEstos comandos no buscan lo mismo. Esta diferencia resulta útil rápidamente cuando varias versiones de un programa, un alias o una función de Bash tienen el mismo nombre.

Lo que Whereis realmente está buscando
El caso de uso más sencillo consiste en proporcionar el nombre de un comando, sin ninguna opción:
¿Dónde está bash?
donde está ssh
donde está nginx
La salida puede contener múltiples rutas en la misma línea. dónde es Busca tres tipos de archivos: el binario, el código fuente y la documentación del manual. Examina ubicaciones conocidas de Linux y también tiene en cuenta CAMINO y de MANPATHPor lo tanto, no se limita a escanear los archivos ejecutables que su intérprete de comandos puede iniciar.
Puedes limitar la búsqueda al tipo que te interese:
donde -b bash
donde -m bash
donde -s bash
-bbusca archivos binarios;-metroBúsquedas de páginas de manual y archivos de información;buscar fuentes.
Una búsqueda de código fuente vacía no indica necesariamente que el programa esté instalado incorrectamente. Las distribuciones suelen instalar el binario y el manual sin incluir el código fuente. /usr/srcPara ver los archivos que se inspeccionan realmente en su máquina, utilice:
donde esta -l
Allá ¿Dónde está la página del manual? detalla estas rutas y las opciones disponibles. Este comando no es una búsqueda recursiva de archivos. Para encontrar un archivo arbitrario en un árbol de directorios, utilice la guía en encontrar en Linux
Si tu objetivo es saber qué aparecerá cuando escribas Python 3, nginx O montool, empieza con comando -v :
comando -v python3
comando -v nginx
comando -v miherramienta
Este comando sigue la resolución del intérprete de comandos. Según el nombre proporcionado, puede mostrar la ruta a un ejecutable, un comando integrado, una función o la definición de un alias. Su código de retorno también permite comprobar correctamente la presencia de un comando en un script.
Si el comando -v mytool >/dev/null 2>&1; entonces
demás
echo "No se encuentra mi herramienta" >&2
no usar dónde es Para esta prueba, si no se encuentra ningún archivo coincidente, simplemente puede mostrar el nombre seguido de dos puntos y finalizar con un código de retorno nulo. El script concluiría erróneamente que el comando existe.
amable Va más allá al explicar cómo Bash interpreta el nombre:
tipo de CD
tipo ls
tipo -a ls
tipo -P ls
tipo de CDindica queCDes un comando interno del shell;tipo lsmuestra la primera definición utilizada;tipo -a lsMuestra alias, funciones, funciones integradas y ejecutables con ese nombre;tipo -P lsfuerza una búsqueda de un archivo ejecutable enCAMINO.
Documentación de tipo GNU Bash Esto describe con precisión estos resultados. Si utiliza Zsh, Fish u otro intérprete de comandos, consulte su propia documentación: la resolución de alias y funciones no es la misma en todas partes.
Comprender por qué “cuál” no cuenta toda la historia.
cual sigue siendo común en los tutoriales:
¿Cuál es Python 3?
¿Qué nginx?
Normalmente busca un ejecutable en CAMINOEl problema es que a menudo se trata de un programa externo que no conoce el estado exacto del shell actual. Dependiendo de la implementación y la distribución, podría ignorar un alias, una función o una función integrada. Para una prueba en un script de shell, es más adecuado. Para entender una colisión de nombres en una sesión interactiva, escriba -a proporciona más información.
Un ejemplo sencillo ilustra la diferencia:
alias ll='ls -lah'
¿Dónde está?
cual
comando -v ll
tipo II
dónde es no se puede encontrar un archivo llamado todos, porque el alias no es binario. comando -v Y amable alias en Linux Explica cómo comprobarlos y omitirlos sin borrar la configuración.
Identificar múltiples instalaciones del mismo programa.
Las colisiones suelen ocurrir después de la instalación manual en /usr/local/bin, la adición de $INICIO/.local/bin o el despliegue de una versión en /optarComience comparando los resultados:
donde está Python 3
tipo -a python3
comando -v python3
tipo -P python3
readlink -f "$(type -P python3)"
dónde es Puede mostrar varios archivos binarios y manuales. escriba -a comando -v enlace de lectura -f Resuelve cualquier posible enlace simbólico. Finalmente, comprueba el propietario del paquete del archivo:
dpkg -S "$(type -P python3)"
rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"
Ejecute únicamente el comando apropiado para su distribución. Si ningún paquete contiene el archivo, es posible que provenga de una instalación manual. Antes de reemplazarlo, averigüe su versión, su destino real y los servicios que lo utilizan. El tutorial sobre Archivos tar.gz en Linux muestra por qué una copia en /usr/local/bin Debe seguir siendo rastreable.
Bash también recuerda ciertas rutas que ya se han resuelto. Después de mover o reemplazar un ejecutable, borre esta caché y vuelva a comprobarlo:
hash -l
hash -r
comando -v python3
tipo -a python3
Si se carga primero el archivo incorrecto, corrija el orden de CAMINO RUTA en Linux
Limitar whereis a una carpeta específica
Para controlar el software instalado en /optarPuede reemplazar las rutas de búsqueda para binarios o manuales. La opción -F marca el final de la lista de carpetas y el comienzo de los nombres que se deben buscar:
donde -b -B /opt/mytool/bin /usr/local/bin -f mytool
donde -m -M /opt/mytool/share/man -f mytool
Esta búsqueda dirigida le permite comprobar el contenido de una instalación sin escanear todo el disco. Tampoco cambia nada. CAMINOni el comando ejecutado por el intérprete de comandos. Por lo tanto, tenga en cuenta el siguiente orden antes de eliminar o reemplazar un programa:
- usar
para averiguar la definición activa; - lanzamiento
escriba -apara detectar colisiones; - resolver los vínculos con
enlace de lectura -f; - usar
dónde espara encontrar los archivos binarios y la documentación asociada.
Con estas comprobaciones, sabrá qué archivo se ejecutará, de dónde proviene y dónde encontrar su manual. A continuación, podrá corregir una instalación o… CAMINO sin borrar accidentalmente la versión correcta.