Entorno de linux
Que es el entorno?
Es un conjunto de informacion que de carga en memorai ram cuando nos autenticamos en el sistema o abrimos una shell.
Que informacion encontramos en el entorno?
Encontramos variables estas variables se definen en dos tipos:
- Variables de entorno.
- Variables de shell.
Tambien tendremos funciones bash y alias
Los programas que usamos toman informacion ademas de las configuraciones normales de este entorno.
Como ver las variables de entorno definidas?
printenv
PWD=/home/akerman
XDG_BACKEND=wayland
LC_TELEPHONE=es_AR.UTF-8
XCURSOR_PATH=/home/akerman/.icons:/home/akerman/.local/share/icons:/home/akerman/.nix-profile/share/icons:/home/akerman/.nix-profile/share/pixmaps:/nix/profile/share/icons:/nix/profile/share/pixmaps:/home/akerman/.local/state/nix/profile/share/icons:/home/akerman/.local/state/nix/profile/share/pixmaps:/etc/profiles/per-user/akerman/share/icons:/etc/profiles/per-user/akerman/share/pixmaps:/nix/var/nix/profiles/default/share/icons:/nix/var/nix/profiles/default/share/pixmaps:/run/current-system/sw/share/icons:/run/current-system/sw/share/pixmaps
LOCALE_ARCHIVE_2_27=/nix/store/j15nlixvk5f6wviz93vn4lscn1pkiki4-glibc-locales-2.39-52/lib/locale/locale-archive
LC_MONETARY=es_AR.UTF-8
LC_PAPER=es_AR.UTF-8
KITTY_PID=5526
...
Dentro de los resultados podriamos llegar a ver que SHELL usa el usuario logeado por default, el logname,username, PATH.
Por ejemplo cuando hacemos cat fichero.txt
el sistema es capaz de ejecutar cat
pero cat se encuentra en /usr/bin/cat
, podes verlo con type cat
, yo no tengo la
necesidad de hacer /usr/bin/cat fichero.txt
eso es porque esa informacion
ya se encuentra en el entorno, mas precisamente en PATH.
Funciones bash
Podemos verlas con set
pero sera dificil de leer por lo que te
recomiendo que lo hagas con set | less
, veremos funciones
que son bash script
Podemos ver los alias con
alias
estos no aparence enprintenv
Como imprimir una variable de entorno?
echo $VARIABLE_DESEADA
echo $PATH
Como se establece el entorno?
cómo se han definido estas variables, estas funciones y cómo podríamos nosotros definir nuestras propias variables y modificar las existentes?
Primero tenemos que entender que cuando nos logeamos lo que ocurre es que se van a ejecutar una serie de scripts de arranque que se suelen denominar start up scripts que lo que hacen es componer nuestro entorno. Es decir van a crear y definir toda las variables de entornoque hemos visto que vienen por defecto.
Donde se encuentran estos scripts?
Primero hay que saber que hay dos tipos de scripts.
- Scripts que van a afectar a todo el sistema y a todos los usuarios definidos en el sistema. (globales)
- Scripts que solo van a afectar sesiones concretas o usuarios concretos.
Comencemos por los scripts que van a definir variables que van a afectar a todo el sistema.
Para eso podemos ver el fichero vim /etc/environment
aca se definen variables de
entorno para todo el sistema y todos los usuarios.
La variable por defecto que encontraremos dentro es $PATH. En este fichero no podemos agrgar codigo bash script, sino que aca podemos agrgar asignaciones a variables. Estas no solo afectaran el enterno de la shell sino tambien del escritorio , todo el resto del sistema y usuarios.
Otro fichero muy popular aunque no es apropiado modificarlo es /etc/profile
si lo abrimos
veremos que tienen codigo bash script Esto no son solo asignaciones como vimos en el
fichero de etc/environment lo que hace concretamente es aplicar una serie de
configuraciones en la shell de bash.
Si prestamos atencion a la parte superior del fichero veremos que dice #system wide esto quiere decir que afectara a todo el sistema.
Como mensionamos antes, este fichero no hay que tocarlo directamente, para extender funcionalidad
tenemos que crear el fichero dentro de /etc/profile.d/
alli guardaremos todos los ficheros.sh
que se ejecutaran al iniciar la session.
Esto no siempre se va a ejecutar, sino que va a hacerce cuando tengamos una session con logging.
Es decir, por ejemplo, si yo me estoy autenticado utilizando SSH, que me va a pedir usuario y contraseña, tendré una shell interactiva en la que yo me he tenido que loguear.
En ese caso se va a ejecutar concretamente los scripts que tenemos en profile.
Sin embargo, si yo simplemente abro una terminal. Cuando se ha abierto esa shell no se ejecutan esos scripts porque no se requiere login.
Hasta aca ya conocemos los ficheros:
/etc/profile
/etc/profile.d
/etc/environment
Pero todavia nos queda uno que aplica a todo el sistema y es el fichero
/etc/bash.bashrc
.
En el se definien variables de entorno que van a estar disponibles para programas que se ejecuten en la shell.
Entonces, las variables que se definen en este fichero no van a estar disponibles para otros programas que se inicien, por ejemplo, desde la interfaz gráfica.
Si yo quisiese definir realmente una variable de entorno que pudiese consumir cualquier programa, debería
hacerlo en el fichero /etc/environment
.
Si quisiese definirla para una sesión interactiva con login, probablemente tendría que hacerlo en /etc/profile
o /etc/profile.d
.
Si quiero que al abrir una nueva shell, tener listas las variables de entorno entonces las defino en /etc/bash.bashrc
Ficheros que afectan a un usuario concreto.
El primero de ellos es $HOME/.profile
Tal como pasaba con /etc/profile
las variables de este
entorno estaran disponibles si nos conectamos via ssh o cualquier otro medio que requiera
login.
.profile
importa dentro de el a .bashrc
el cual veremos luego.
Otros ficheros de script son .bash_profile
y .bash_login
estos dos estaran en el contexto
de aplicaciones que ejecutemos desde la terminal mientras que .profile
abarcara el contexto
tanto de la shell como del entorno grafico.
.bashrc
.bashrc
se ejecuta en la shell independientemente de que hagamos login o no.
Las app que se ejcuten desde la interfaz grafica no se veran afectadas por el entorno.
.bashrc
soporta variables de entorno como funciones bash script
Resumen
Ficheros con aplicación a todo el sistema (todos los usuarios del sistema)
-
/etc/environment
- Fichero específico para la definición de variables de entorno. No puede contener scripts.
- Se ejecuta al iniciar el sistema.
-
/etc/profile
- Permite definir variables de entorno y scripts.
- No es recomendable modificar este fichero directamente; se deben crear nuevos ficheros en
/etc/profile.d
. - Se ejecuta en shells con login.
-
/etc/profile.d
- Contiene scripts que se ejecutan en shells con login.
-
/etc/bash.bashrc
- Permite definir variables de entorno y scripts para programas iniciados desde la shell bash.
- Las variables definidas aquí no estarán disponibles para programas iniciados desde la interfaz gráfica.
- No se ejecuta en shells con login.
Ficheros con aplicación a un usuario específico
-
~/.profile
- Permite definir variables de entorno y scripts.
- Se ejecuta al iniciar la sesión de Escritorio o en una shell con login.
- Las variables afectan a todos los programas ejecutados desde el escritorio gráfico o desde la shell.
-
~/.bashrc
- Permite definir variables de entorno y scripts.
- Se ejecuta cuando se abre una shell sin necesidad de login.
- Es específico de la shell bash, por lo que las variables definidas solo afectarán a los programas ejecutados desde bash.
-
~/.bash_profile y ~/.bash_login
- Permiten definir variables de entorno y scripts.
- Se ejecutan cuando se utiliza una shell con login.
- Son específicos de bash, por lo que las variables definidas solo afectarán a los programas ejecutados desde bash.
Modificando el entorno.
Una de las maneras para modificar las varibles de enterno es desde la shell.
Por ejemplo si hacemos echo $HOME
veremos algo como /home/tu-user/
, en este
caso desde la misma shell hacemos HOME=home/tu-user/desktop
, ahora al hacer
echo $HOME
veremos HOME=home/tu-user/desktop
.
En el caso de asiganrle un valor a una variable que no exista previamente como
EDITOR=vim
lo que pasara es que sera una variable de shell , pero no una
de entorno. Que significa esto? que la varible de shell no podra ser accedida
por ninguna app que no sea la misma shell.
Para convertir una variable de shell a una variable de entorno hacemos lo siguiente:
export EDITOR
Si ahora hacemos un printenv | grep EDITOR
podremos ver que nos revuelve la respueta EDITOR=vim
Si usamos los metodos anteriores para definir variables de entorno, al momento de cerrar la shell y volverla a abrir, volveran al estado inicial o desapareceran depende lo que hayamos hecho. Son solo modificaciones temporales.
Las variables que definamos a nivel sistema como
/etc/environment
tomaran efecto la siguiente vez que nos logeemos. Si lo que definimos es a nivel shell de usuario específico como.bashrc
podemos forzar la recarga consource .bashrc

-
SHELL
El nombre de la shell por defecto del usuario. -
HOME
El nombre de la ruta de tu directorio personal. -
LANG / LANGUAGE
Define el conjunto de caracteres y el orden de cotejo de su idioma. -
PATH
Una lista separada por dos puntos de los directorios que se buscan cuando introducimos el nombre de un programa ejecutable. -
PWD
El directorio de trabajo actual. -
_
Una referencia al programa/usr/bin/printenv
(prueba a ejecutar el comando$_
). -
USER
Tu nombre de usuario.