Linux / Comando which: localizar ejecutables en PATH y conocer sus límites
En su uso habitual, which busca ejecutables en los directorios de PATH, la variable que define esas rutas de búsqueda. Para saber cómo el shell interpreta un nombre con alias, funciones o comandos internos, consulte type o la guía de command -v. El resultado depende también de la implementación instalada.
La implementación instalada determina las opciones disponibles. Puede comparar su función con otras herramientas en la Lista de comandos de uso frecuente en Linux.
¿Qué es el comando which?
Generalmente, revisa los directorios de PATH desde el principio y muestra el primer archivo ejecutable encontrado. which puede ser un programa externo o un envoltorio específico de la shell, por lo que su funcionamiento y opciones varían según el sistema. No suponga que el comando que la shell selecciona y su resultado siempre serán los mismos.
Sintaxis básica
which [OPCIONES] COMANDO ...
Las opciones y el comportamiento detallado pueden variar según la implementación y la versión. En el sistema actual, consulte la descripción de los comandos instalados como which --help y man which.
Uso básico de which
Verificar la ruta de un archivo ejecutable
Muestra la ruta del primer archivo ejecutable encontrado en PATH.
which python3
Verificar varios comandos
Especifique varios nombres de comandos para comprobar al mismo tiempo si son visibles en PATH y cuáles son sus rutas.
which sh awk sed
Ver todas las rutas coincidentes
En las implementaciones compatibles, -a muestra todas las coincidencias en el PATH.
which -a python3
Limitaciones de la salida de la ruta del ejecutable
which muestra la ruta del ejecutable encontrada en PATH. Según el sistema y el shell, el mismo comando puede tener ubicaciones diferentes.
which ls
Ejemplo de salida:
/usr/bin/ls
Los alias o funciones del shell pueden hacer que la interpretación de which difiera del comando realmente ingresado. Verifique qué se ejecutará en el shell actual con type ls o command -V ls.
Opciones principales
| Opciones | Descripción |
|---|---|
-a, --all |
Se muestran todas las rutas coincidentes en el PATH, no solo el primer resultado. |
--skip-alias |
En GNU which, ignora --read-alias y no lee alias desde la entrada estándar. |
--skip-functions |
En GNU which, ignora --read-functions y no lee funciones desde la entrada estándar. |
--version |
Compruebe la implementación y la versión de which instalada. |
Ejemplos de uso práctico
Verificar la prioridad del mismo comando
Al comparar el orden de los resultados de -a con el orden de PATH, puede saber qué archivo ejecutable externo se selecciona primero.
which -a python3
printf '%s\n' "$PATH"
Comprobar el tipo de comando que interpreta el shell
Para incluir alias, funciones y comandos internos, utilice la función integrada del shell.
type -a ls
command -V ls
command -v ls
Comprobar la existencia desde un script
Si la portabilidad del shell POSIX es importante, utilice el estado de salida de command -v en lugar de analizar la salida de which.
if command -v curl >/dev/null 2>&1; then
printf '%s\n' 'curl está disponible'
fi
Comparar which con comandos relacionados
| Comando | Rol principal | Situaciones adecuadas |
|---|---|---|
which |
Búsqueda de archivos ejecutables externos en PATH | Comprobación de ruta simple |
command -v |
Resultado de la interpretación de comandos del shell | Comprobación de scripts portátiles |
type |
Distinción de alias, funciones, incorporados y archivos | Diagnóstico interactivo |
whereis |
Búsqueda de archivos relacionados en ubicaciones estándar | Ubicaciones de binarios, fuentes y manuales |
Precauciones al usar
Puede que se pierdan alias y funciones
El shell puede ejecutar un alias o función antes que un archivo externo, así que verifíquelo con type.
La implementación varía según el sistema
Revise la ayuda de which instalada antes de usar las opciones en el script.
No es una herramienta de verificación de seguridad
Que se encuentre la ruta no significa que la propiedad, permisos o integridad del archivo sean seguros.
FAQ
¿Significa que si which no muestra nada no está instalado?
Significa que no se encontró el ejecutable en PATH. Verifique si es un comando integrado, función o alias con type o command -v.
¿Cómo ver todas las rutas del mismo comando?
En las implementaciones compatibles, use which -a COMANDO.
¿Se puede usar 'which' en un script?
Es posible, pero para portabilidad y consistencia del intérprete de comandos, generalmente se recomienda command -v.
¿Cuál es la diferencia entre 'which' y 'whereis'?
'which' busca ejecutables en PATH, mientras que 'whereis' busca binarios, fuentes y manuales en ubicaciones de búsqueda predeterminadas.




