Explorador
Concepto

PATH y dónde vive cada comando

Cómo averiguar de dónde sale un comando, los cuatro tipos que distingue la shell y cómo funciona la búsqueda en el PATH.

Actualizado el

En esta guía

Localizar un comando

which ls              # /usr/bin/ls, la ruta del ejecutable
which -a python3      # todas las coincidencias en el PATH
type ls               # cómo interpreta la shell ese nombre
type -a echo          # muestra el builtin y el ejecutable
command -v git        # alternativa portable a which
whereis ls            # binario, manual y código fuente
file $(which ls)      # tipo de archivo: un ejecutable ELF
dpkg -S /usr/bin/ls   # qué paquete lo instaló (coreutils)
dpkg -L git | head    # qué archivos instaló un paquete

No todo comando es un archivo

type revela cuatro tipos:

Tipo Ejemplo Dónde vive
Ejecutable externo ls, git Un archivo en el disco
Builtin de la shell cd, echo, export Dentro de bash mismo
Alias ll Un atajo definido en ~/.bashrc
Función las que se definan Memoria de la shell

cd tiene que ser builtin: un programa externo correría en su propio proceso y cambiaría su directorio, no el de la shell.

PATH: la lista de dónde buscar

echo $PATH
echo $PATH | tr ':' '\n'     # una ruta por línea

Al escribir git, la shell recorre esas carpetas en orden y ejecuta la primera coincidencia. Por eso ./hola.sh lleva ./ (ruta explícita): la carpeta actual no está en el PATH.

Agregar una carpeta al PATH

mkdir -p ~/bin && cp hola.sh ~/bin/
export PATH="$HOME/bin:$PATH"    # agrega ~/bin, solo en esta sesión
hola.sh                          # ahora funciona desde cualquier lugar

Para hacerlo permanente, la línea export va al final de ~/.bashrc.