-->

PATH

La variable de entorno PATH es una configuración del sistema operativo que contiene una lista de directorios ordenados donde el sistema busca los archivos ejecutables cuando un usuario o programa introduce un comando en la consola o terminal sin especificar su ruta absoluta.

Cuando escribes un comando como python, git o ls en la línea de comandos, la shell o intérprete de comandos no sabe de forma innata dónde está instalado ese programa. Consulta la variable PATH de izquierda a derecha y revisa cada carpeta listada hasta encontrar el binario ejecutable correspondiente. Si recorre toda la lista sin éxito, el sistema devuelve un error del tipo "command not found" (en Linux/macOS) o "no se reconoce como un comando interno o externo" (en Windows).

¿Cómo funciona la búsqueda en PATH?

El proceso de localización de ejecutables mediante la variable PATH sigue una secuencia lógica muy concreta:

  • Entrada del usuario: Escribes el comando (por ejemplo, gcc).
  • Evaluación secuencial: El sistema operativo lee los directorios incluidos en PATH en el orden exacto en el que están definidos (separados por ; en Windows o por : en Linux/macOS).
  • Coincidencia de primer hallazgo: En la primera ruta donde encuentra un ejecutable con ese nombre (como /usr/bin/gcc o C:\MinGW\bin\gcc.exe), detiene la búsqueda y lo ejecuta.
  • Sombra de ejecutables (Path Shadowing): Si existen dos versiones instaladas del mismo programa en diferentes rutas del PATH, siempre se ejecutará la que aparezca antes en la lista.

Comparativa según el sistema operativo

Característica Windows (CMD / PowerShell) Linux / macOS (Bash / Zsh)
Separador de rutas Punto y coma (;) Dos puntos (:)
Comando para ver PATH echo %PATH% o $env:Path echo $PATH
Rutas típicas por defecto C:\Windows\system32
C:\Windows
/usr/bin
/bin
/usr/local/bin
Directorio actual (.) Incluido o buscado por defecto implícitamente. Excluido por defecto por motivos de seguridad. Se requiere usar ./comando.

Formas de modificar el PATH

Ámbito Sintaxis en Linux (Bash) Sintaxis en Windows (PowerShell / CMD)
Temporal (Solo sesión actual) export PATH=$PATH:/nueva/ruta $env:Path += ";C:\nueva\ruta" (PS)
set PATH=%PATH%;C:\nueva\ruta (CMD)
Persistente (Usuario/Sistema) Añadir la línea al archivo ~/.bashrc o ~/.zshrc Variables de entorno del sistema en Panel de Control o mediante setx PATH "%PATH%;C:\nueva\ruta"

Características principales:

  • Permite ejecutar herramientas CLI desde cualquier ubicación del sistema de archivos sin escribir la ruta completa.
  • Es una variable de entorno heredada por todos los procesos hijos que se lanzan desde la shell.
  • El orden de los directorios determina la prioridad de ejecución ante herramientas duplicadas.
  • La mala configuración del PATH (por ejemplo, añadir el directorio actual . al principio) puede suponer un grave riesgo de seguridad por inyección de ejecutables maliciosos.
  • Fundamental para configurar entornos de desarrollo informático (Python, Node.js, Java, GCC, etc.).

Analogía: Imagina que necesitas usar una herramienta específica (como un destornillador). El PATH es la lista de cajones de tu taller que vas a revisar y el orden en que lo harás (Cajón 1: Herramientas manuales, Cajón 2: Electricidad, Cajón 3: Cajón de desastre). Tan pronto como encuentras un destornillador en el primer cajón, dejas de buscar en los demás y usas ese.

Actividad práctica

Objetivo:

Inspeccionar la variable PATH en tu sistema, añadir una ruta temporalmente y comprobar el comportamiento del sistema al buscar ejecutables.

Tareas:

  1. Abre la terminal de tu sistema operativo (Terminal en Linux/macOS o CMD/PowerShell en Windows).
  2. Visualiza el contenido actual de tu variable PATH ejecutando echo $PATH (Linux) o echo %PATH% (Windows CMD). Identifica los separadores de ruta.
  3. Utiliza un comando de localización para saber exactamente en qué directorio del PATH se encuentra el programa Python o Git:
    • which python3 o which git (en Linux/macOS)
    • where python o where git (en Windows CMD)
  4. Crea una carpeta de prueba en tu directorio de usuario llamada mis_scripts y dentro crea un archivo ejecutable o script sencillo (por ejemplo, hola.sh o hola.bat).
  5. Intenta ejecutar hola directamente desde cualquier otro directorio. Observa el error del sistema.
  6. Añade la ruta de mis_scripts a la variable PATH de tu sesión actual y vuelve a probar la ejecución de hola sin indicar la ruta completa.

Preguntas de reflexión:

  1. Si tienes dos versiones distintas de Python instaladas en /usr/bin/python y /usr/local/bin/python, ¿cuál ejecutará el sistema al escribir python en la consola?
  2. ¿Por qué se considera un riesgo de seguridad incluir el directorio actual (.) al principio de la variable PATH en sistemas multiusuario como Linux?
  3. ¿Qué ocurre con las modificaciones hechas a la variable PATH mediante el comando export o set cuando cierras la ventana de la terminal?
  4. ¿Cuál es la diferencia técnica entre escribir /usr/bin/git y escribir simplemente git en la línea de comandos?
  5. ¿Por qué tras instalar un nuevo software de desarrollo (como Node.js o Java) a veces es necesario reiniciar la terminal o reiniciar el equipo para poder usar sus comandos?
Haz clic aquí para ver las soluciones y explicaciones

1. Si tienes dos versiones distintas de Python instaladas en /usr/bin/python y /usr/local/bin/python, ¿cuál ejecutará el sistema al escribir python en la consola?

Ejecutará la versión situada en el directorio que aparezca primero en la lista de la variable PATH. Por defecto en la mayoría de distribuciones Linux, /usr/local/bin precede a /usr/bin, por lo que se ejecutaría la versión de /usr/local/bin.


2. ¿Por qué se considera un riesgo de seguridad incluir el directorio actual (.) al principio de la variable PATH en sistemas multiusuario como Linux?

Porque un atacante podría crear un ejecutable malicioso llamado igual que un comando del sistema (por ejemplo, ls o cd) en un directorio público como /tmp. Si un administrador navega a esa carpeta y escribe ls, el sistema ejecutará el script malicioso de la carpeta actual antes que el comando real del sistema ubicado en /bin/ls.


3. ¿Qué ocurre con las modificaciones hechas a la variable PATH mediante el comando export o set cuando cierras la ventana de la terminal?

Se pierden. Los cambios realizados directamente en la consola mediante export o set son temporales y solo afectan al proceso del shell actual y a sus subprocesos. Para hacerlos permanentes hay que editarlos en archivos de configuración del shell (.bashrc, .zshrc) o en las variables de entorno del sistema operativo.


4. ¿Cuál es la diferencia técnica entre escribir /usr/bin/git y escribir simplemente git en la línea de comandos?

Al escribir /usr/bin/git estás indicando una ruta absoluta, por lo que el sistema va directamente a ejecutar ese archivo sin consultar nada más. Al escribir únicamente git, estás usando un nombre relativo que obliga al shell a buscar dentro de cada uno de los directorios definidos en el PATH hasta dar con él.


5. ¿Por qué tras instalar un nuevo software de desarrollo (como Node.js o Java) a veces es necesario reiniciar la terminal o reiniciar el equipo para poder usar sus comandos?

Porque el programa instalador añade la nueva ruta al PATH del sistema, pero las instancias de la terminal que ya estaban abiertas mantienen en memoria una copia de las variables de entorno cargadas al inicio del proceso. Abrir una nueva terminal fuerza al sistema a volver a leer el PATH actualizado.