En los sistemas basados en Linux, puede establecer valores dinámicos con nombre como variables de entorno. Estos valores se almacenan dentro del sistema y son utilizados por aplicaciones de línea de comandos. En pocas palabras, una variable de entorno es una variable con un nombre y un valor asociado. Una variable es un símbolo, una letra o una palabra como “x” o “y” que representa un valor.
La variable de entorno puede almacenar información sobre el editor de texto o navegador predeterminado, la ruta a los archivos ejecutables, etc.
Una variable de entorno está disponible globalmente, en un programa y sus programas secundarios. Una variable de shell solo está disponible en el shell actual.
En este tutorial, explicaremos cómo enumerar y configurar el entorno y las variables de shell.
Variables de entorno
Las variables de entorno son variables que están disponibles en todo el sistema y son heredadas por todos los procesos secundarios y shells generados.
Las variables de entorno se implementan como cadenas que representan pares clave-valor. Si se pasan varios valores, normalmente están separados por dos puntos (:) caracteres. Cada par generalmente se verá así:
KEY=value1:value2:value3
Los nombres de las variables distinguen entre mayúsculas y minúsculas y normalmente se utilizan en formato de mayúsculas (MYVAR1, MYVAR2 …)
Si el valor contiene espacios en blanco, se utilizan citas:
KEY="value with spaces"
Variables de Shell
Las variables de shell son variables que están contenidas exclusivamente dentro del shell en el que se establecieron o definieron. Cada shell como zsh y bash, tiene su propio conjunto de variables de shell internas. Por lo general, se utilizan para realizar un seguimiento de datos efímeros, como el directorio de trabajo actual. El uso es el mismo que con las variables de entorno global.
Para hacer que una variable de shell esté disponible como variable de entorno, use export MYVAR:
$ export MYVAR=linoxide.com
$ echo $MYVAR
linoxide.com
$ env | grep MYVAR
MYVAR=linoxide.com
Variables ambientales y de la carcasa comunes
Algunas variables de entorno y de shell son muy útiles y se hace referencia a ellas con bastante frecuencia. Aquí hay algunas variables ambientales comunes con las que se encontrará:
TÉRMINO | Esto especifica el tipo de terminal a emular cuando se ejecuta el shell. Se pueden emular diferentes terminales de hardware para diferentes requisitos operativos. Sin embargo, por lo general, no tendrá que preocuparse por esto. |
USUARIO | El usuario que ha iniciado sesión actualmente. |
PWD | El directorio de trabajo actual. |
OLDPWD | El directorio de trabajo anterior. Esto lo mantiene el shell para volver a su directorio anterior ejecutando cd -. |
LS_COLORS | Esto define códigos de color que se utilizan para agregar opcionalmente salida de color al comando ls. Se utiliza para distinguir diferentes tipos de archivos y proporcionar más información al usuario de un vistazo. |
CORREO | La ruta al buzón del usuario actual. |
SENDERO | Una lista de directorios que el sistema comprobará cuando busque comandos. Cuando un usuario escribe un comando, el sistema verificará los directorios en este orden para el ejecutable. |
LANG | La configuración actual de idioma y localización, incluida la codificación de caracteres. |
CASA | El directorio de inicio del usuario actual. |
_ | El comando más reciente ejecutado anteriormente. |
Además de estas variables ambientales, algunas variables de shell que verá a menudo son:
BASHOPTS | La lista de opciones que se utilizaron cuando bash Fue ejecutado. Esto puede resultar útil para averiguar si el entorno de shell funcionará de la forma que usted desea. |
BASH_VERSION | La versión de bash siendo ejecutado, en forma legible por humanos. |
BASH_VERSINFO | La versión de bash, en salida legible por máquina. |
COLUMNAS | El número de columnas de ancho que se utilizan para dibujar la salida en la pantalla. |
DIRSTACK | La pila de directorios que están disponibles con los comandos pushd y popd. |
HISTFILESIZE | Número de líneas del historial de comandos almacenadas en un archivo. |
HISTSIZE | Número de líneas de historial de comandos permitidas en la memoria. |
NOMBRE DE ANFITRIÓN | El nombre de host de la computadora en este momento. |
IFS | El separador de campo interno para separar la entrada en la línea de comando. Por defecto, este es un espacio. |
PS1 | La definición del símbolo del sistema principal. Esto se usa para definir cómo se ve su mensaje cuando inicia una sesión de shell. La PS2 se utiliza para declarar avisos secundarios cuando un comando abarca varias líneas. |
COMPRAS | Opciones de shell que se pueden configurar con la opción set. |
UID | El UID del usuario actual. |
Lista de variables de entorno y shell
Hay varios comandos disponibles que le permiten enumerar las variables de entorno en Linux:
env: el comando le permite ejecutar otro programa en un entorno personalizado sin modificar el actual. Cuando se usa sin un argumento, imprimirá una lista de las variables de entorno actuales.
printenv: el comando imprime todas o las variables de entorno especificadas.
set: el comando establece o desarma las variables de shell. Cuando se usa sin un argumento, imprimirá una lista de todas las variables, incluidas las variables de entorno y de shell, y las funciones de shell.
En su estado predeterminado, env y printenv deberían funcionar exactamente igual:
$ printenv
SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
XDG_SESSION_ID=5
USER=vagrant
MYVAR=linoxide.com
PWD=/home/vagrant
HOME=/home/vagrant
SSH_CLIENT=10.0.2.2 37182 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/vagrant
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=vagrant
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=/usr/bin/printenv
La diferencia entre los comandos env y ‘printenv’ solo es aparente en su funcionalidad más específica. Por ejemplo, con ‘printenv’, puede solicitar los valores de variables individuales:
$ printenv SHELL
/bin/bash
$ printenv HOME
/home/vagrant
$ printenv MYVAR
linoxide.com
El comando env le permite modificar el entorno en el que se ejecutan los programas, pasando un conjunto de variables a un comando:
env MYVAR=linoxide.com command_to_run command_options
Los comandos printenv y env imprimen solo las variables de entorno. Si desea obtener una lista de todas las variables, incluidas las variables de entorno y de shell, y las funciones de shell, puede usar el comando set:
$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="8")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.4.20(1)-release'
COLUMNS=140
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoreboth
HISTFILE=/home/vagrant/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000
HOME=/home/vagrant
HOSTNAME=ubuntu-bionic
HOSTTYPE=x86_64
IFS=
El comando mostrará una lista grande de todas las variables, por lo que probablemente desee canalizar la salida al comando less.
set | less
Establecer variables de entorno y shell
Los comandos disponibles para establecer variables de entorno en Linux son:
set: el comando establece o desarma las variables de shell. Cuando se usa sin un argumento, imprimirá una lista de todas las variables, incluidas las variables de entorno y de shell, y las funciones de shell.
unset: el comando elimina las variables de entorno y de shell.
exportar: el comando establece las variables de entorno.
Para comprender mejor la diferencia entre las variables de shell y ambientales, comenzaremos con la configuración de las variables de shell y luego pasaremos a las variables de entorno.
Comenzaremos definiendo una variable de shell dentro de nuestra sesión actual. Puede verificar que la variable está configurada usando echo $ MYVAR
$ MYVAR=Linoxide
$ echo $MYVAR
Linoxide
Use el comando printenv para verificar si esta variable es una variable de entorno o no:
$ printenv MYVAR
No se debe devolver ningún resultado. Esto significa que la variable MYVAR no es una variable de entorno.
El comando de exportación se utiliza para establecer variables de entorno.
Para crear una variable de entorno, simplemente exporte la variable de shell como una variable de entorno:
$ export MYVAR
Puede verificar esto ejecutando:
$ printenv MYVAR
Linoxide
También puede establecer variables de entorno en una sola línea:
$ export MYNEWVAR="My New Variable"
Las variables de entorno creadas de esta manera solo están disponibles para la sesión actual. Si abre un nuevo shell o si cierra la sesión, se perderán todas las variables.
También podemos revertir una variable de entorno a una variable de shell, o incluso eliminarla por completo (desarmarla):
Nuestra variable MYVAR se define como una variable ambiental. Podemos volver a convertirlo en una variable de shell escribiendo:
$ export -n MYVAR
Ya no es una variable de entorno, sin embargo, sigue siendo una variable de shell.
Si queremos desarmar completamente una variable, ya sea de shell o ambiental, podemos hacerlo con el comando unset:
$ unset MYVAR
Podemos verificar que ya no está configurado:
$ echo $MYVAR
No se devuelve nada porque la variable no se ha establecido.
Variables de entorno persistentes
Ya hemos mencionado que muchos programas usan variables ambientales para decidir los detalles de cómo operar. No queremos tener que configurar variables importantes cada vez que iniciamos una nueva sesión de shell,
El bash shell lee diferentes archivos de configuración dependiendo de cómo se inicie la sesión.
Una sesión de shell interactiva es una sesión de shell que se adjunta a un terminal. Una sesión de shell no interactiva es aquella que no está conectada a una sesión de terminal.
Una distinción entre las diferentes sesiones es si el shell se genera como una sesión de “inicio de sesión” o “sin inicio de sesión”.
En la mayoría de las distribuciones de Linux, cuando inicia una nueva sesión, las variables de entorno se leen de los siguientes archivos:
/ etc / environment – Utilice este archivo para configurar las variables de entorno de todo el sistema.
/ etc / profile – Las variables establecidas en este archivo se cargan siempre que un bash se ingresa el shell de inicio de sesión.
~ / .bashrc – Archivos de configuración específicos de shell por usuario. Para example, si está utilizando Bash, puede declarar las variables allí.
Para cargar las nuevas variables de entorno en la sesión de shell actual, use el comando de origen:
$ source ~/.bashrc
Si necesita establecer variables para todo el sistema, es posible que desee pensar en agregarlas a / etc / profile, / etc /bash.bashrc, o / etc / environment.
Conclusión
En este tutorial, hemos aprendido a configurar y enumerar las variables de entorno y shell. Estas variables siempre están presentes en sus sesiones de shell y pueden ser muy útiles para muchos programas. Hay muchos otros escenarios más mundanos, pero más comunes, en los que necesitará leer o alterar el entorno de su sistema. Si tiene alguna pregunta, no dude en dejarla en los comentarios a continuación.
tn' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=vagrant .....
El comando mostrará una lista grande de todas las variables, por lo que probablemente desee canalizar la salida al comando less.
Establecer variables de entorno y shell
Los comandos disponibles para establecer variables de entorno en Linux son:
set: el comando establece o desarma las variables de shell. Cuando se usa sin un argumento, imprimirá una lista de todas las variables, incluidas las variables de entorno y de shell, y las funciones de shell.
unset: el comando elimina las variables de entorno y de shell.
exportar: el comando establece las variables de entorno.
Para comprender mejor la diferencia entre las variables de shell y ambientales, comenzaremos con la configuración de las variables de shell y luego pasaremos a las variables de entorno.
Comenzaremos definiendo una variable de shell dentro de nuestra sesión actual. Puede verificar que la variable está configurada usando echo $ MYVAR
Use el comando printenv para verificar si esta variable es una variable de entorno o no:
No se debe devolver ningún resultado. Esto significa que la variable MYVAR no es una variable de entorno.
El comando de exportación se utiliza para establecer variables de entorno.
Para crear una variable de entorno, simplemente exporte la variable de shell como una variable de entorno:
Puede verificar esto ejecutando:
También puede establecer variables de entorno en una sola línea:
Las variables de entorno creadas de esta manera solo están disponibles para la sesión actual. Si abre un nuevo shell o si cierra la sesión, se perderán todas las variables.
También podemos revertir una variable de entorno a una variable de shell, o incluso eliminarla por completo (desarmarla):
Nuestra variable MYVAR se define como una variable ambiental. Podemos volver a convertirlo en una variable de shell escribiendo:
Ya no es una variable de entorno, sin embargo, sigue siendo una variable de shell.
Si queremos desarmar completamente una variable, ya sea de shell o ambiental, podemos hacerlo con el comando unset:
Podemos verificar que ya no está configurado:
No se devuelve nada porque la variable no se ha establecido.
Variables de entorno persistentes
Ya hemos mencionado que muchos programas usan variables ambientales para decidir los detalles de cómo operar. No queremos tener que configurar variables importantes cada vez que iniciamos una nueva sesión de shell,
El bash shell lee diferentes archivos de configuración dependiendo de cómo se inicie la sesión.
Una sesión de shell interactiva es una sesión de shell que se adjunta a un terminal. Una sesión de shell no interactiva es aquella que no está conectada a una sesión de terminal.
Una distinción entre las diferentes sesiones es si el shell se genera como una sesión de “inicio de sesión” o “sin inicio de sesión”.
En la mayoría de las distribuciones de Linux, cuando inicia una nueva sesión, las variables de entorno se leen de los siguientes archivos:
/ etc / environment – Utilice este archivo para configurar las variables de entorno de todo el sistema.
/ etc / profile – Las variables establecidas en este archivo se cargan siempre que un bash se ingresa el shell de inicio de sesión.
~ / .bashrc – Archivos de configuración específicos de shell por usuario. Para example, si está utilizando Bash, puede declarar las variables allí.
Para cargar las nuevas variables de entorno en la sesión de shell actual, use el comando de origen:
Si necesita establecer variables para todo el sistema, es posible que desee pensar en agregarlas a / etc / profile, / etc /bash.bashrc, o / etc / environment.
Conclusión
En este tutorial, hemos aprendido a configurar y enumerar las variables de entorno y shell. Estas variables siempre están presentes en sus sesiones de shell y pueden ser muy útiles para muchos programas. Hay muchos otros escenarios más mundanos, pero más comunes, en los que necesitará leer o alterar el entorno de su sistema. Si tiene alguna pregunta, no dude en dejarla en los comentarios a continuación.