Tutoriel Linux

Whereis en Linux: cómo encontrar un binario y su manual

Débutant6 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

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 amable

Tux utiliza una lupa para encontrar un binario de Linux y su página de manual entre varias rutas.
Whereis busca binarios, código fuente y páginas man en múltiples ubicaciones de Linux.

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á 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
  • -b busca archivos binarios;
  • -metro Búsquedas de páginas de manual y archivos de información;
  • -s 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.

Comprueba el comando que ejecuta realmente el intérprete de comandos.

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.


    echo "miherramienta está disponible"
demás
    echo "No se encuentra mi herramienta" >&2
fi

no usar 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 CD indica que CD es un comando interno del shell;
  • muestra la primera definición utilizada;
  • tipo -a ls Muestra alias, funciones, funciones integradas y ejecutables con ese nombre;
  • tipo -P ls fuerza una búsqueda de un archivo ejecutable en CAMINO.

Allá 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, comando -v es más adecuado. Para entender una colisión de nombres en una sesión interactiva, proporciona más información.

Un ejemplo sencillo ilustra la diferencia:

alias ll='ls -lah'
¿Dónde está?
cual
comando -v ll
tipo II

no se puede encontrar un archivo llamado todos, porque el alias no es binario. comando -v Y amable alias en Linux

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. Muestra las versiones que Bash encuentra en orden de resolución. comando -v confirma la primera opción, entonces 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 en lugar de eliminar un binario aleatorio. La guía sobre RUTA en Linux

Limitar whereis a una carpeta específica

/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 comando -v para averiguar la definición activa;
  • lanzamiento escriba -a para detectar colisiones;
  • resolver los vínculos con enlace de lectura -f
  • Verifique el paquete propietario del archivo;
  • usar para 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.

sudo apt update && sudo apt upgrade