Hay más de un tipo de variable de entorno en Linux. Aprenda a verlos, crearlos para inicios de sesión locales y remotos, y hacer que sobrevivan a los reinicios.
¿De qué vamos a hablar?
Cómo funcionan las variables de entorno
Al iniciar una ventana de terminal y la cáscara dentro de ella, se hace referencia a una colección de variables para garantizar que el shell esté configurado correctamente. Estas variables también garantizan que cualquier información a la que la ventana de terminal y el shell puedan necesitar hacer referencia esté disponible. En conjunto, estas variables contienen configuraciones que definen el entorno que encuentra dentro de la ventana de su terminal, hasta el aspecto del símbolo del sistema. Entonces, naturalmente, se les conoce como variables de entorno.
Algunas variables de entorno son globales o de todo el sistema. Otros son de toda la sesión y solo pueden ser vistos por usted. Otros no pueden hacer referencia a las variables de entorno de sesión. Hay un tercer conjunto de variables de entorno definidas dentro del shell. La configuración regional, la zona horaria y el teclado, el conjunto de directorios buscados cuando el shell intenta encontrar un comando y el editor predeterminado se almacenan en variables de entorno de shell.
Le mostraremos cómo ver las variables de entorno que existen en su sistema y describiremos cómo crear las suyas propias. También le mostraremos cómo ponerlos a disposición de los procesos secundarios y ser persistentes en los reinicios.
Entornos y herencia
Cuando se inicia un shell, pasa por una fase de inicialización. Es en este punto que lee las variables de entorno que definen el entorno del shell.
Cuando se inicia un programa o comando desde ese shell, conocido como proceso secundario, hereda el entorno del proceso padre, ¡pero ten cuidado! Como veremos, puede crear variables que no se agreguen a su entorno, por lo que no serán heredadas por un proceso secundario.
Si el proceso secundario es un shell, ese shell se inicializará a partir de su propio conjunto de variables frescas. Por lo tanto, si modifica el símbolo del sistema en el shell actual y, a continuación, inicia un shell secundario, el shell secundario no heredará el símbolo del sistema modificado del elemento primario.
Variables del entorno global
Por convención, las variables de entorno reciben nombres en mayúsculas. Estas son algunas de las variables de entorno global y lo que representan los valores que contienen:
- CÁSCARA: Nombre del shell que se iniciará al abrir una ventana de terminal. En la mayoría de las distribuciones de Linux, esto será bash a menos que lo haya cambiado del valor predeterminado.
- TÉRMINO: Las ventanas de terminal son en realidad emulaciones de un terminal de hardware. Esto contiene el tipo de terminal de hardware que se emulará.
- USUARIO: El nombre de usuario de la persona actual que utiliza el sistema.
- PWD: Ruta de acceso al directorio de trabajo actual.
- OLDPWD: El directorio en el que se encontraba antes de pasar al directorio de trabajo actual.
- LS_COLORS: La lista de códigos de color utilizados por el
ls
resaltar diferentes tipos de archivos. - CORREO: Si el
mail
El sistema se ha configurado en su computadora Linux (de forma predeterminada, no lo es), esto mantendrá el ruta de acceso al buzón del usuario actual. - CAMINO: Una lista de directorios que el shell buscará para encontrar ejecutables de comandos.
- LANG: La configuración de idioma, localización y codificación de caracteres.
- HOGAR: El directorio principal del usuario actual.
- _: El guión bajo (
_
) variable de entorno contiene el último comando que se escribió.
Podemos ver lo que algunos de estos están configurados para usar nada más sofisticado que echo
, que Escriba los valores en la ventana terminal. Para ver el valor mantenido por una variable de entorno, debe agregar un signo de dólar (€
) al principio de su nombre.
Un buen toque es que puedes usar finalización de la ficha para rellenar el nombre de la variable de entorno por usted. Escriba algunas letras del nombre y presione Tab. El nombre de la variable lo completa el shell. Si eso no sucede, deberá escribir algunas letras más para distinguir la variable de entorno de otros comandos con nombres que comiencen con esas mismas letras:
echo €SHELL
echo €LANG
echo €HOME
echo €PWD
Para crear el tuyo propio global variables de entorno, agréguelas a la /etc/environment
archivo. Tendrás que usar sudo
para editar este archivo:
sudo gedit /etc/environment
Para agregar una variable de entorno, escriba su nombre, un signo igual (=
), y el valor que desea que contenga la variable de entorno. No espacies antes o después del signo igual (=
). El nombre de la variable de entorno puede contener letras, un guión bajo (_
), o números. Sin embargo, el primer carácter de un nombre no puede ser un número.
Si hay espacios en el valor, asegúrese de adjuntar todo el valor entre comillas ("
).
Guarde el archivo y, a continuación, cierre la sesión y vuelva a entrar. Uso echo
para comprobar que existe una nueva variable y contiene el valor establecido:
echo €WEBSITE
Porque es una variable ambiental global, y está disponible para todos, usuario mary
puede hacer referencia a la variable de entorno la próxima vez que inicie sesión:
echo €WEBSITE
Para ver todas las variables de entorno a la vez, escriba printenv
. Hay mucha salida, por lo que tiene sentido canalizarla a través de ella. sort
, y luego en less
:
printenv | sort | less
La lista ordenada de variables de entorno se muestra para nosotros en less
.
Podemos canalizar la salida a través de grep
para buscar variables de entorno relacionado con un tema en particular.
printenv | grep GNOME
Variables de entorno de shell
Estas son algunas de las variables de entorno de shell utilizadas en bash
para dictar o registrar su comportamiento y funcionalidad. Algunos de los valores se actualizan a medida que se utiliza el terminal. Por ejemplo, el COLUMNS
La variable de entorno se actualizará para reflejar los cambios que pueda realizar en el ancho de la ventana del terminal:
- BASHOPTS: Las opciones de línea de comandos que se utilizaron cuando
bash
se lanzó. - BASH_VERSION: El
bash
número de versión como una cadena de palabras y números. - BASH_VERSINFO: El
bash
versión como un dígito. - COLUMNAS: El ancho actual de la ventana del terminal.
- DIRSTACK: Los directorios que han sido agregado a la pila de directorios por el
pushd
mandar. - HISTFILESIZE: Número máximo de líneas permitidas en el
history
archivo. - HISTSIZE: Número de líneas de
history
permitido en la memoria. - NOMBRE DE HOST: El nombre de host del equipo.
- IFS: El Separador de campo interno se utiliza para separar la entrada en la línea de comandos. De forma predeterminada, este es un espacio.
- PS1: El
PS1
La variable de entorno contiene la definición para el símbolo del sistema principal, predeterminado y del sistema. Se puede incluir un conjunto de tokens llamados secuencias de escape en la definición del símbolo del sistema. Representan cosas como el host y el nombre de usuario, el directorio de trabajo actual y la hora. - PS2: Cuando un comando abarca más de una línea y se espera más entrada, se muestra el símbolo del sistema secundario. El
PS2
La variable de entorno contiene la definición de este indicador secundario, que, de forma predeterminada, es el signo mayor que (>
). - SHELLOPTS: Opciones de shell que puede establecer mediante el
set
opción. - UID: El Identificador de usuario del usuario actual.
Veamos algunas de estas variables de shell:
echo €BASH_VERSION
echo €HOSTNAME
echo €COLUMNS
echo €HISTFILESIZE
echo €UID
En aras de la integridad, estos son los tokens que puede usar en las definiciones del símbolo del sistema:
- /t: La hora actual, con formato HH:MM:SS.
- /d: La fecha actual, expresada como día de la semana, mes, fecha.
- /n: Un carácter de nueva línea.
- /s: El nombre de su shell.
- /W: Nombre del directorio de trabajo actual.
- /w: Ruta de acceso al directorio de trabajo actual.
- /u: El nombre de usuario de la persona que ha iniciado sesión.
- /h: El nombre de host del equipo.
- /#: Cada comando dentro de un shell está numerado. Esto le permite ver el número del comando en el símbolo del sistema. Esto no es lo mismo que el número que tendrá el comando en el
history
lista. - /€: Establece el carácter final del mensaje en un signo de dólar (
€
) para un usuario normal y un símbolo hash (#
) para el usuario raíz. Esto funciona comprobando el UID del usuario. Si es cero, el usuario es root.
Encontrarás la definición de tu PS1
variable de entorno en su .bashrc
archivo.
Creación del entorno de sesión Variables
Para crear variables de entorno para su propio uso, agréguelas a la parte inferior de su .bashrc
archivo. Si desea tener las variables de entorno disponibles para las sesiones remotas, como las conexiones SSH, deberá agregarlas a su .bash_profile
archivo, también.
El formato de la definición de la variable de entorno es el mismo para ambos archivos. Para agregar una definición a su .bash_profile
, escriba esto en su directorio de inicio:
gedit .bashrc
Hemos añadido una variable de entorno llamada INHERITED_VAR
. Tenga en cuenta la palabra “exportar” al principio de la línea.
Guarde y cierre el archivo después de terminar de editarlo. Puede cerrar sesión y volver a entrar, o puede hacer que el shell vuelva a leer el .bash_profile
mediante el comando dot (.
) así:
. .bashrc
Ahora, vamos a crear una variable de entorno en la línea de comandos:
LOCAL_VAR="This session only"
Si usamos echo
, podemos ver que ambas variables de entorno son accesibles para nosotros:
echo €LOCAL_VAR
echo €INHERITED_VAR
Notarás la definición de la INHERITED_VAR
la variable de entorno tenía la palabra “exportar” al principio de la línea. Esto significa que la variable de entorno será heredada por los procesos secundarios del shell actual. Si lanzamos otro usando el bash
comando, podemos comprobar las dos variables de nuevo, desde el interior del shell hijo:
bash
echo €LOCAL_VAR
echo €INHERITED_VAR
Como puede ver, el INHERITED_VAR
es accesible en el shell secundario, pero LOCAL_VAR
no lo es. Simplemente obtenemos una línea en blanco.
Aunque “exportar” agrega la parte de la variable de entorno al entorno que heredan los procesos secundarios, INHERITED_VAR
no es una variable de entorno global. Por ejemplo, usuario mary
no puede hacer referencia a él:
echo €INHERITED_VAR
Para cerrar a nuestro hijo bash
sesión, usamos exit
:
exit
Los entornos heredados también afectan a los scripts. Aquí hay un script simple que escribe los valores de nuestras tres variables de entorno en la ventana del terminal:
#!/bin/bash echo "WEBSITE" €WEBSITE echo "LOCAL_VAR" €LOCAL_VAR echo "INHERITED_VAR" €INHERITED_VAR
Esto se guardó en un archivo llamado envtest.sh
y, a continuación, se hizo ejecutable con lo siguiente:
chmod +x envtest.sh
Cuando ejecutamos el script, puede acceder a dos de cada tres variables de entorno:
./envtest.sh
El script puede ver el WEBSITE
variable de entorno global y el INHERITED_VAR
variable de entorno exportada. No puede acceder LOCAL_VAR
, aunque el script se ejecute en el mismo shell donde se creó la variable.
Si lo necesitamos, podemos exportar una variable de entorno desde la línea de comandos. Lo haremos a nuestro LOCAL_VAR
y, a continuación, vuelva a ejecutar el script:
export LOCAL_VAR
./envtest.sh
La variable de entorno se ha agregado al entorno del shell actual, por lo que aparece en el entorno heredado por el script. El script también puede hacer referencia a esa variable de entorno.
Conexiones remotas
Las variables de entorno global son accesibles para las sesiones de inicio de sesión remotas, pero si desea que las variables de entorno definidas localmente estén disponibles para usted de forma remota, debe agregarlas a su .bash_profile
archivo. Puede establecer la misma variable de entorno en el .bashrc
y .bash_profile
archivos, con diferentes valores. Esto podría ser recogido por un script, por ejemplo, para modificar su comportamiento para las personas que usan el sistema local o remotamente.
(A riesgo de confundir las cosas, también hay un .profile
archivo. También puede contener definiciones de variables de entorno. Sin embargo, el .profile
El archivo no se lee si el archivo .bash_profile
el archivo está presente. Por lo tanto, lo más seguro que se puede hacer, y el bash
-compliant way—es utilizar el .bash_profile
archivo.)
Para editar el .bash_profile
, usaremos gedit
otra vez:
gedit .bash_profile
Vamos a agregar la misma variable de entorno con el mismo valor que usamos antes.
Guarde los cambios y cierre gedit
.
En otro ordenador, haremos un SSH
conexión al equipo de prueba.
ssh dave@howtogeek.local
Una vez que estemos conectados, ejecutaremos el script una vez más:
./envtest.sh
El .bash_profile
se ha leído como parte de la inicialización del inicio de sesión remoto y el archivo INHERITED_VAR
la variable de entorno es accesible para nosotros y para el script.
Restablecimiento de una variable de entorno
Para desestablecer una variable de entorno, utilice el unset
mandar. Si desconfiguramos la variable de entorno global, WEBSITE
, y la variable de entorno exportada, INHERITED_VAR
, ya no estarán disponibles en la línea de comandos, ni en los procesos secundarios:
unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo €WEBSITE
Un punto a tener en cuenta es que esto solo cambia la disponibilidad de las variables de entorno global para usted en esta sesión. Otra persona que haya iniciado sesión simultáneamente aún podrá acceder a su instancia de esa variable de entorno global. Su instancia fue inicializada y leída desde el /etc/environment
durante su proceso de inicio de sesión, y es independiente de la copia de la variable de cualquier otra persona.
A título de ejemplo, usuario mary
aún puede acceder al WEBSITE
variable de entorno y leer su valor, aunque el usuario dave
tiene unset
en su sesión:
echo €WEBSITE
Control Ambiental
Las variables de entorno se pueden usar para que los scripts y las aplicaciones sepan cómo deben comportarse. Se pueden usar para almacenar configuraciones o pequeñas cantidades de datos. Por ejemplo, un script puede rellenar un entorno con un valor al que pueden hacer referencia otros scripts sin tener que escribirlos en un archivo.