which
Muestra qué archivo se ejecutaría si escribes ese comando.
Busca en el PATH, que es la lista de carpetas donde la terminal busca los comandos, y devuelve la ruta exacta del programa que se ejecutaría. Lo usas para saber de dónde viene una herramienta, confirmar que sí está instalada y detectar cuando tienes dos versiones del mismo programa. Es un programa normal, no un comando de la terminal: bash trae dos equivalentes más amplios, type -a y command -v, que además reconocen alias y comandos internos.
which [-as] COMANDO...Despiece
4 ejemplosVer de dónde viene un programa
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | which | Comando | El comando que busca el programa en el PATH. |
| 2 | python3 | Argumento | El comando del que quieres saber la ruta. |
Imprime /usr/bin/python3, que es el archivo exacto que se ejecuta cuando escribes python3. Es la forma rápida de confirmar que una herramienta está instalada y de dónde salió, sin abrir el gestor de paquetes.
Ver todas las copias que hay
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | which | Comando | El comando que busca el programa en el PATH. |
| 2 | -a | Opción | Muestra todas las coincidencias del PATH, no solo la primera. |
| 3 | python3 | Argumento | El comando del que quieres saber todas sus rutas. |
Sale /usr/bin/python3 y /bin/python3. Casi siempre son el mismo archivo dos veces, porque en Debian y Ubuntu /bin es un enlace simbólico a /usr/bin. Lo que importa es la primera línea: esa es la que gana. Si tu PATH tiene /usr/local/bin antes que /usr/bin, y ahí hay otra copia, esa es la que se está ejecutando aunque parezcan la misma versión.
Comprobar si un comando está instalado
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | which | Comando | El comando que busca el programa en el PATH. |
| 2 | -s | Opción | No imprime nada: solo devuelve el código de salida. |
| 3 | htop | Argumento | El comando que quieres comprobar. |
No sale ninguna línea, exista o no exista htop. Lo que hace es dejar el resultado en el código de salida: revísalo con echo $?, donde 0 significa que el comando existe y 1 que no. Por eso el -s es el que se usa en scripts.
Avisar si falta un comando
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | which | Comando | El comando que busca el programa en el PATH. |
| 2 | -s | Opción | No imprime nada: solo devuelve el código de salida. |
| 3 | cowsay | Argumento | El comando que quieres comprobar. |
| 4 | || | Operador | Ejecuta lo que sigue solo si el comando anterior falló. |
| 5 | echo | Comando | Imprime un texto en la pantalla. |
| 6 | "cowsay no está instalado" | Argumento | El mensaje que se imprime si el comando no existe. |
Si cowsay no está instalado, which devuelve 1 y el || hace que se imprima cowsay no está instalado. Si sí está, no se imprime nada. Es el patrón clásico en scripts; con -s la ruta no se cuela en la salida del programa. Sin la s también funcionaría, porque el código de salida es el mismo, pero se vería la ruta encontrada.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -a | Muestra todas las coincidencias del PATH, no solo la primera. La primera línea es la que la terminal ejecutaría de verdad; las de abajo suelen ser versiones viejas que quedaron instaladas. |
| -s | No imprime nada: solo devuelve el código de salida, 0 si el comando existe y 1 si no. Es la opción que se usa en scripts, porque no ensucia la salida. |
Fallas comunes
| Falla | Remedio |
|---|---|
| which cd y no sale nada, aunque cd sí funciona. | cd no es un programa: es un comando interno de bash, igual que source, alias o export. which solo busca archivos ejecutables dentro del PATH, así que jamás va a encontrarlos. Para esos usa type -a cd o command -v cd, que ya vienen en la terminal. |
| which -s no imprime nada y parece que falló. | Eso es justo lo que hace la s: no imprime nada y solo deja el resultado en el código de salida. Compruébalo con echo $?, donde 0 significa que existe y 1 que no. Sin la s, which tampoco imprime nada cuando el comando no está, y eso es lo que confunde. |
| Pensar que si which lo encuentra, el programa funciona. | which solo confirma que hay un archivo ejecutable con ese nombre en el PATH; no lo corre. Puede fallar al ejecutarse por una librería faltante o una configuración rota. Para probarlo de verdad, ejecútalo: htop --version. |
Preguntas frecuentes
- ¿Qué hace el comando which?
- Busca el nombre en el PATH y devuelve la ruta completa del archivo que la terminal ejecutaría. No lo ejecuta, no lo instala y no revisa si funciona. Sirve para saber de dónde viene una herramienta y para detectar si tienes dos versiones del mismo programa.
- ¿Cuál es la diferencia entre which y command -v?
- which es un programa aparte, del paquete debianutils, y solo encuentra archivos ejecutables dentro del PATH. command -v es un comando interno de bash: también reconoce alias, funciones y comandos internos como cd, y no imprime nada extra. Para el día a día, command -v o type -a son más completos.
- ¿Cómo sé si un comando está instalado?
- Con which -s comando y después echo $?. El código 0 quiere decir que sí existe y el 1 que no. También sirve el atajo: which -s htop && echo "sí está".
- ¿Qué es el PATH?
- Es la lista de carpetas donde la terminal busca los comandos, en orden. La ves con echo $PATH y normalmente trae /usr/local/bin, /usr/bin, /bin y algunas más. Como se respeta el orden, una app que instalas a mano en /usr/local/bin gana sobre la de /usr/bin, y por eso pueden convivir dos versiones del mismo programa.