fundamentos GNU/Linux
[Actualizado: añadido al final cómo agregar una ruta al PATH.]
Cuando abres un terminal en linux, por defecto estás en tu home /home/pepito/
podemos verlo así:
$ pwd
/home/pepito
(pwd= print work directory)
y si tecleo un comando, lo cual llama a un programa ejecutable (un binario), como por ejemplo «ls» que lista los directorios y archivos que hay en ese directorio, ¿cómo sabe el sistema operativo dónde está ese binario para ejecutarlo?. La respuesta es, gracias al PATH.
El PATH (el camino, la ruta) es una variable de entorno. Las variables de entorno contienen información a la que se accede a través del nombre de la variable (al igual que ocurre en los lenguajes de programación).
Por ejemplo, PWD es una variable de entorno. Algo que puedo comprobar así:
$ echo $PWD
/home/pepito
(lo que significa que el comando «pwd» es una llamada a «echo $PWD»
Para consultar todas mis variables de entorno puedo hacer:
$ env
me listará todas las variables definidas en el sistema.
Algunas variables importantes:
SHELL=/bin/bash (el tipo de shell en uso)
TERM=xterm (el programa de terminal por defecto)
USER=pepito (el nombre de usuario)
PWD=/home/pepito (la ruta por defecto del usuario)
LANG=es_ES.utf8 (el juego de caracteres de idioma)
DESKTOP_SESSION=xfce (el entorno de escritorio)
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin (el PATH)
puedo consultar el valor de cualquier variable definida mediante el comando echo y el nombre (normalmente en mayúscula) de la variable con el signo dólar «$» delante, así:
$ echo $USER
pepito
El PATH, es tal vez la variable de entorno más importante.
El PATH informa al shell (en la mayoría de los casos BASH) dónde se encuentran los programas binarios que puedo ejecutar en el sistema, sin tener que llamarlos por su ruta absoluta).
por ejemplo, el programa «ls» está en /usr/bin/ls
algo que puedo saber gracias la comando whereis:
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1/ls.1p.gz
(me informa de dónde reside el binario «ls» así como sus páginas man)
esto significa que puedo llamar al comando «ls» de manera absoluta así:
$ /usr/bin/ls (responderá de manera adecuada)
pero si llamo a «ls» directamente:
$ ls
responderá igual, gracias a que tengo definida su ruta en el PATH, como puedo ver así:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
vemos que separados por dos puntos, están las rutas donde buscar binarios (en ese orden). He aquí la respuesta a porqué el sistema operativo sabe donde está el binario de un comando. Eureka!
¿Dónde están los archivos de configuración del PATH?
los archivos globales del sistema están en:
etc/profile
etc/profile.d/
etc/bashrc o etc/bash.bashrc
(estos se aplican para todos los usuarios si no definen los propios en ~/)
y los archivos del espacio de usuario:
~/.bashrc
~/.bash_profile
¿Cómo añado una ruta al PATH?
Pues lo más cómodo, si tengo un binario que no está en el PATH y lo quiero añadir, es hacerlo en mi espacio de usuario, en mi home. Lo primero miramos cómo está el PATH ahora:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
imaginemos que nuestro binario que no está en el PATH está aquí:
/opt/tacata/
pues sólo hay que añadir esa ruta de directorio al PATH. Editamos
nano /home/pepito/.bashrc
y le añadimos estas dos líneas:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/tacata/"
export PATH
que como vemos es el PATH anterior más la nueva ruta (se separan con dos puntos) y al final la orden «export PATH» que vale para que se use ese PATH.
Y ya está, ya podremos llamar al ejecutable que hay dentro de /opt/tacata/
desde cualquier consola o terminal sin tener que llamar a la ruta absoluta.
Pues ya sabes; caminante no hay camino, se hace camino al andar.
y si quiero agregar un archivo en la path que comandos uso?
Muy bueno tu bloc, explicas de una manera espectacular, felicitaciones, voy a visitar mas seguido tu bloc, espero que aportes un poco sobre redes, o de centos, de todas maneras felicitaciones
Muchas gracias me sirvió mucho tu buena explicación
¡Muy bueno! Post muy útil.
Como info adicional:
Si la distribución de Linux lo permite, es decir, existe el fichero: /etc/environment, podemos configurar variables de entorno permanentes en el interior del mismo.
El único problema de /etc/environment es que no es posible utilizar variables dentro del mismo, solo se podrán definir variables literales.
En el caso de la variable de entorno path, las rutas que definamos serán sobreescritas.
Info extraída de: http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html
Muchas gracias por tu aportación.
Un saludo.
Thanks a lot
De nadas a lot
🙂
Gracias!!
Mil gracias, ahora me queda mas claro el tema de variables de entorno