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.