Para qué sirve la variable de entorno PATH en Bash (Linux)

Para qué sirve la variable de entorno PATH en Bash (Linux)

Queramos o no, en los sistemas GNU/Linux nos convertimos en los administradores de nuestro sistema. Cada vez vemos más la aparición de utilitarios gráficos que permiten ejecutar tareas de administración. Sin embargo, la línea de comandos (Bash shell, terminal, consola, etc.) sigue siendo una herramienta muy poderosa y de uso sencillo.

¿Cuáles son las ventajas y desventajas del Terminal?

  1. El empleo de la línea de comandos sigue siendo mucho más rápido que el uso del entorno gráfico, si se tiene en cuenta el tiempo de carga de la interfaz y la búsqueda con el ratón en el escritorio.
  2. Utilizando el entorno gráfico no aprovecharás el uso de la tecla tab para completar el comando, ni el historial que te permite repetir un comando, ni el uso de los alias para comandos largos, etc.
  3. El inconveniente con el Bash shell es que tendrá que utilizar las dos manos para escribir en el teclado. Con el ratón es posible hacerlo con una, pero sólo hasta el momento en el que debe rellenar las zonas propuestas por su querido utilitario gráfico.
  4. En Linux tenemos acceso a la documentación de cada comando y a la exploración del sistema si utilizamos los comandos “man” e “info”. En internet podemos encontrar distintas traducciones de dichas páginas.

¿Qué es el shell?

  • Es un software que forma parte del sistema cuya función es tratar los comandos o líneas de comandos ingresadas desde el teclado. Para ver la lista de shells disponibles en su sistema, consulta el archivo "/etc/shells":
cat /etc/shells
  • En Linux, el usuario tiene por defecto un shell de conexión. Consulta el archivo "/etc/passwd" y verás que el último campo es algo como /bin/”<algomás>”. Pues este es tu shell de conexión. Para ver el shell de los usuarios se puede utilizar el comando:
cat /etc/passwd | cut -d: -f1,7
  • Y para un usuario en particular se puede completar el comando de la siguiente manera:
cat /etc/passwd | cut -d: -f1,7 | grep usuario
  • Si está en modo gráfico puedes abrir un terminal y enseguida escribir la línea de comandos.
  • En GNU/Linux disponemos de 6 consolas virtuales, cuyos accesos desde la interfaz gráfica se hacen con las combinaciones de teclas siguientes: Ctrl+ALT+Fn donde: n es una cifra del 1 al 6.
  • Desde una consola virtual puedes pasar a otra con la combinación: ALT+Fn, (con n del 1 al 6).
  • Para regresar al modo gráfico desde una consola virtual presiona: ALT+F7.
  • En un shell se te solicitará ingresar un comando (prompt) del tipo: usuario@debian: ~$
  • Si en lugar de $ ves un #, entonces estás conectado como root (a menos que hayas modificado la configuración).
  • La solicitud para ingresar un comando varía en función del sistema operativo y puede ser modificada gracias a otra variable de entorno: PS1.

¿Para qué sirve la variable de entorno PATH?

Una variable es un contenedor de memoria que almacena un dato que podrá variar durante la ejecución de un programa. Esta tiene un nombre y un contenido. La variable de la que vamos a hablar en este artículo se llama PATH y su contenido es una cadena que contiene rutas de directorios separadas por dos puntos. 

  • Para mostrar el contenido de una variable en el shell debes escribir:
echo $variable
  • En el caso de la variable PATH debes escribir:
echo $PATH
  • Para una presentación más agradable puedes utilizar el comando:
echo $PATH | tr : \\n
  • A continuación otras alternativas que permiten mostrar el contenido de PATH:
printenv PATH
env | grep -i PATH | cut -d= -f2
perl -e 'print $ENV{PATH},"\n"'
perl -e '$,="\n" and print split(":",$ENV{PATH}),""'
perl -e '($_=$ENV{PATH})=~s/:|$/\n/g and print'

Hemos visto que la variable PATH contiene una lista de directorios separados por dos puntos. Estos son los directorios en los que el shell busca el comando que el usuario escribe desde el teclado. La búsqueda no se realiza en el orden en el que están los directorios en la variable PATH. 

  • Ejemplo:
carlos-vialfa@debian: ~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/carlos-vialfa/bin

Cuando se escribe un comando el shell buscará primero en /usr/local/bin, luego en /usr/bin, después en /usr/bin/X11, a continuación en /usr/games y finalmente en /home/carlos-vialfa/bin. Desde el momento en que el shell encuentra el comando detiene la búsqueda y ejecuta el comando encontrado. Podemos escribir un comando utilizando:

  1. Su nombre .
  2. La ruta absoluta (/bin/cat /etc/passwd ).
  3. La ruta relativa (utilizando "." o ".." en general para los programas o scripts que no se encuentran en PATH).
  • Hay que tener en cuenta que:
  1. . es el directorio actual
  2. .. es el directorio padre
  • Al escribir un comando nos podemos encontrar con varias situaciones:
  1. El comando es único y se encuentra en uno de los directorios.
  2. El comando no es único y se encuentra en varios directorios.
  3. El comando no se encuentra en ningún directorio.

En el primer caso no hay mucho problema. Si hay un error en el momento o de la ejecución probablemente es debido a la sintaxis. Una posible solución puede ser consultar el manual del comando con “man”. En el segundo caso las cosas tampoco son complicadas. Supongamos que disponemos de un comando que se encuentra en /usr/bin y que hemos instalado desde las fuentes una versión más reciente del comando cuyo ejecutable se encuentra en /usr/local/bin. ¿Qué ocurre si llamamos al comando por su nombre? El shell mira el PATH comenzando por el primer directorio encontrado. En nuestro caso, encuentra el comando /usr/local/bin y este será el que se ejecutará: /usr/local/bin/prog . En cambio, si deseamos de todas maneras ejecutar el comando prog (que se encuentra en /usr/bin),  entonces tendremos que utilizar la ruta absoluta /usr/bin/prog. Por último, el tercer caso comprende dos situaciones:

  1. El comando existe pero no se encuentra en ningún directorio de nuestro PATH.
  2. El comando no existe.

En los dos casos el mensaje de error será 'command not found' debido a que hay comandos que solo root puede utilizar. La solución sería conectarse como root invocando su o su -. Para más información visita: Cómo utilizar el comando "su". Por otro lado, hay comandos que se encuentran en un directorio y que no se encuentran en la variable PATH. Para ello, hay dos posibles soluciones: utilizar la ruta absoluta o añadir el directorio a su variable PATH. Si creas un script y no logras ejecutarlo independientemente de la ruta especificada, verifica los privilegios de ejecución en el script (ls -l script). Sin embargo, si el comando no existe instala el programa en modo administrador.

¿Cómo añadir un directorio a la variable PATH?

  • Únicamente para la sesión activa:

Si deseas añadir por ejemplo: /home/user/mes_prog a la variable PATH, escribe en el shell lo siguiente según el caso.

- Para tener el directorio al final del PATH:

export PATH=$PATH:/home/user/mis_prog

- Para tener el directorio al inicio del PATH

export PATH=/home/user/mis_prog/:$PATH

Ahora puedes utilizar el programa escribiendo simplemente su nombre. Al desconectarse, PATH retomará a su valor por defecto, entonces /home/user/mis_prog no existirá más.

  • De manera permanente:

Si deseas configurar PATH de forma permanente debes editar el archivo de configuración de su shell de conexión. Como por lo general el shell BASH es el más utilizado, debes editar el archivo: /home/user/.bashrc. El comando entonces sería: 

echo 'export PATH=$PATH:/home/user/mis_prog' >> /home/user/.bashrc

Después de esto, en cada conexión la variable PATH contendrá el directorio /home/user/prog. Esta operación puede ser ejecutada por el usuario user.

¿Cómo mostrar las demás variables de entorno?

La variable PATH se trata sólo de una variable entre las varias decenas que contiene el shell. Puedes mostrar las variables de entorno aun si desconoces sus nombres con los siguientes comandos:

printenv
env
set
export

Linux