Bash - La variable de entorno PATH

Julio 2017


I. Preámbulo


En los sistemas GNU/Linux queramos o no, nos convertimos en los administradores de nuestro sistema. Cada vez más vemos en entornos GNU/Linux la aparición de utilitarios gráficos que permiten ejecutar tareas de administración.

Sin embargo la oscura línea de comandos conocida bajo diferentes apelaciones (shell, terminal, consola, etc.) sigue siendo un utilitario muy poderoso y de fácil utilización.

Una vez que haya aprendido los conceptos básicos; se sorprenderá de lo sencillo que es usar la línea de comandos.

<paréntesis>
El empleo de la línea de comandos sigue siendo mucho más rápido que el uso de un utilitario gráfico. Si toma en cuenta el tiempo de carga de la interfaz, la búsqueda (física) con el ratón en el escritorio, sin contar el hecho de que generalmente debe ingresar datos por el teclado, privándose así de algunas ventajas que le ofrece la "línea de comandos", por ejemplo no aprovechará ni de tecla tab para completar el comando, ni del historial que le permite repetir un comando, ni del uso de los alias para comandos largos, etc.

El inconveniente con el shell es que no podrá agarrar su taza de café o cigarrillo con una mano mientras la otra esté ingresando datos por el teclado.
Con el ratón es posible, hasta el momento en que deba rellenar las zonas propuestas por su querido utilitario gráfico.

Pero quizás con el shell deje de fumar...
¡El shell es más barato que Niquitin!

Pero usted sigue en un entorno GNU/Linux y su decisión es respetable.
</paréntesis>

Como la libertad tiene un precio, pues, hay que pagarla.
En el caso de los sistemas GNU/Linux el precio a pagar es la libertad de leer la documentación disponible en su sistema, vea las páginas "man" y el comando "info", para que explote mejor su sistema.

También puede ver a las páginas "man" con el navegador Konqueror utilizando el URL man:/
En Internet se encuentran traducciones en español de las páginas "man".
http://ditec.um.es/~piernas/manpages-es/descarga.html
http://www.gentoo.org/doc/es/man-guide.xml
http://es.tldp.org/Paginas-manual/man-pages-es-1.28/

II. ¿Qué es el shell?


Es un software, el cual es 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, consulte el archivo /etc/shells
cat /etc/shells

Un usuario bajo linux tiene por defecto un shell de conexión.

Consulte el archivo /etc/passwd y verá que el último campo es algo como /bin/<algomás>. Este es su shell de conexión.

Para ver los shells de los usuarios se puede utilizar el comando
cat /etc/passwd | cut -d: -f1,7

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 puede abrir un Terminal (xterm,gterm,konsole,...) 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 puede 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 presione ALT+F7.

En un shell se le solicitará ingresar un comando (prompt) del tipo:
usuario@debian: ~$

Si en lugar de $ ve un # entonces está conectado como root, a menos que haya modificado su 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.

III. Definición


Comencemos primero con el término genérico de variable.

Una variable es un contenedor de memoria que almacena un dato que podrá variar durante la ejecución de un programa.

Una variable tiene un nombre y un contenido. No entraremos en el detalle de la programación para explicar el tipo de variable y su contenido.

Por el instante nos contentaremos con saber que la variable de la que hablamos se llama PATH y que su contenido es una cadena que contiene rutas de directorios separadas por dos puntos:

Para mostrar el contenido de una variable en el shell debe escribir
echo $variable

En el caso de la variable PATH debe escribir
echo $PATH


¡IMPORTANTE! GNU/Linux diferencia las MAJUSCULAS de las minúsculas.

Para una presentación más agradable puede utilizar el comando
echo $PATH | tr : \\n

Aquí otras maneras para mostrar el contenido de PATH (a título informativo, sólo para hacerle ver que casi siempre existen varias alternativas para llegar al objetivo...).
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'

Por supuesto que la más corta es preferible.

IV. Sección de análisis


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 uno escribe desde el teclado.
La búsqueda no se hace en el orden en 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, luego en /usr/bin/X11, luego 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:
- su nombre
- la ruta absoluta (/bin/cat /etc/passwd )
- la ruta relativa (utilizando "." o ".." en general para los programas o scripts que no se encuentran en PATH)

. es el directorio actual
.. es el directorio padre

Al escribir un comando podemos encontrarnos 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

1. En el primer caso no hay mucho problema.
Si hay un error al momento de la ejecución probablemente sea a causa de la sintaxis.
Solución: consultar el manual del comando

2. En el segundo caso las cosas tampoco son tan 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.

Si llamamos al comando por su nombre ¿qué pasará?

El shell mira el PATH comenzando por el primer directorio encontrado.
En nuestro caso encuentra el comando /usr/local/bin entonces éste será /usr/local/bin/prog el que se ejecutará.

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

3. El 3er caso comprende 2 situaciones

- el comando existe pero no se encuentra en ningún directorio de nuestro PATH
- el comando no existe

En los 2 casos el mensaje de error será 'command not found'

Pero la interpretación no será la misma.

Hay comandos que sólo root puede utilizar.
Solución: conéctese con root invocando su o su -
linux utilizar el comando su

Hay comandos que se encuentran en un directorio que no se encuentra en la variable PATH.
Solución: - utilizar la ruta absoluta
- añadir el directorio a su variable PATH

¿Creó un script y no logra ejecutarlo cualquiera sea la ruta especificada?

Solución: - verifique los privilegios de ejecución en el script (ls -l script )

El comando no existe, en este caso supongo que sabe lo que hay que hacer. Si no lo sabe, aquí la solución.
Pida al administrador que instale el programa.

Se puede buscar la existencia de un comando utilizando whereis o which
whereis comando
which -a comando

En el caso de which la opción -a nos permite ver todas las rutas correspondientes.
Sin la opción -a sólo el 1er directorio que contiene el comando será mostrado, lo que no querremos si el comando se encuentra en varios directorios.

V. Añadir un directorio a la variable PATH


-solamente para la sesión activa

Si desea añadir por ejemplo /home/user/mes_prog a la variable PATH, en el shell escriba
export PATH=$PATH:/home/user/mis_prog

para tener el directorio al final del PATH.

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

para tener el directorio al inicio del PATH.

Ahora puede utilizar su programa escribiendo simplemente su nombre.

Al desconectarse PATH retomará su valor por defecto, entonces /home/user/mis_prog no existirá más en PATH.

- de manera permanente

Si desea configurar PATH de forma permanente debe editar el archivo de configuración de su shell de conexión.
Como por lo general el shell BASH es el más utilizado, debe editar su archivo /home/user/.bashrc.

Para esto utilizará un editor de texto o simplemente un comando para facilitarse la tarea.
Y si, generalmente la utilización de la línea de comandos hace las cosas bastante más fáciles que la utilización del ratón, sobre todo para las tareas de administración (opinión personal).

Aquí el comando
echo 'export PATH=$PATH:/home/user/mis_prog' >> /home/user/.bashrc

Así a cada conexión su PATH contendrá su directorio /home/user/prog

Esta operación puede ser ejecutada por el usuario user dado que se trata de su entorno.

VI. Y luego...


La variable PATH sólo es una variable entre las varias decenas que contiene el shell.

Puede mostrar las variables de su entorno sin preocuparse de sus nombres (que talvez ni las conozca).

Para ello tiene a su disposición varios comandos
printenv
env
set
export

Consulta también

Publicado por Carlos-vialfa. Última actualización: 12 de agosto de 2008 a las 18:54 por Carlos-vialfa.
El documento «Bash - La variable de entorno PATH» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.