Linux Set Environment Variable Command Tutorial
El shell Bash se utiliza para varios propósitos en Linux. ¿Cómo puedo personalizar la variable de entorno del shell en los sistemas operativos Linux? ¿Cómo puedo establecer y ver la variable de entorno en Linux?
Puede utilizar las variables del shell para almacenar datos, establecer opciones de configuración y personalizar el entorno del shell en Linux. El shell por defecto es Bash en Linux y se puede utilizar para los siguientes propósitos:
- Configurar el aspecto del shell.
- Configurar la configuración del terminal dependiendo del terminal que estés utilizando.
- Configurar la ruta de búsqueda como JAVA_HOME, y ORACLE_HOME.
- Crear variables de entorno según necesiten los programas.
- Ejecutar los comandos que desee ejecutar cada vez que inicie o cierre la sesión.
- Configurar alias y/o función del shell para automatizar tareas y ahorrar tiempo.
- Cambiar el prompt de bash.
- Configurar las opciones del shell.
Dos tipos de variables del shell
- Variables de entorno (GLOBAL): Normalmente, los usuarios finales no deberían meterse con las variables de entorno, ya que están disponibles en todo el sistema, y las subshells y los procesos hijos pueden acceder a ellas. En ciertos escenarios, podemos modificarlas según nuestras necesidades. Por ejemplo, podemos establecer una ruta en todo el sistema para la aplicación JAVA o PATH para buscar binarios. En casi todos los casos, utilizamos el comando export para definir o modificar las variables de entorno.
- Variables de shell y definidas por el usuario (LOCAL) : Como su nombre indica, son definidas por los usuarios y se aplican actualmente a la sesión de shell actual.
- No poner espacio alrededor del símbolo =.
- Al igual que los comandos de Linux, los nombres de las variables de bash distinguen entre mayúsculas y minúsculas. Normalmente definimos las variables de entorno sólo con nombres en MAYÚSCULAS y se considera la mejor práctica, pero no es necesario.
- Por defecto, el ámbito de las variables de Linux es LOCAL. Podemos hacerlas GLOBALES (o variables de entorno) utilizando el comando export.
- Personalizar los entornos de shell bash desde el wiki de scripts de shell de Linux.
- Variable de entorno UNIX Set
Puede utilizar los siguientes comandos para ver y configurar el entorno.
Mostrar las variables de entorno actuales en Linux
El comando printenv muestra todas o las variables de entorno dadas. Abre el prompt de la terminal y luego escribe:printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'
Comando env
El comando env ejecuta un comando de Linux con un entorno modificado. La sintaxis es:
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
Tenga en cuenta que si no se especifica ningún nombre de comando tras las especificaciones del entorno, el entorno resultante se muestra en pantalla. Esto es como especificar el comando printenv como se ha comentado anteriormente. Por ejemplo:
envenv | moreenv | grep 'PS1'
Cómo establecer y listar variables de entorno en Linux usando el comando set
El comando env/printenv muestra sólo las variables de entorno del shell de Linux. Qué pasa si necesitas ver una lista de todas las variables, incluyendo el shell, el entorno, las funciones del shell definidas por el usuario? Pruebe el siguiente comando set para imprimir las variables de entorno:set
set | grep BASH
Esto es lo que vemos:
BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}
El $PATH define la ruta de búsqueda de los comandos. Es una lista separada por dos puntos de directorios en los que el shell busca comandos. El $PS1 define la configuración de su prompt.Consulte la lista de todas las variables del shell de uso común para obtener más información. Puede mostrar el valor de una variable utilizando el comando printf o el comando echo:
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Las salidas del último comando muestran la ubicación de mi directorio de inicio establecido por la variable de entorno $HOME en Linux:/home/vivek
Configuración de variables de entorno en el comando Linux
La sintaxis es bastante sencilla:
# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false
Algunos puntos clave que hay que recordar al crear o configurar variables de entorno en Linux cuando se usa bash:
Imprimamos los valores de nuestras variables VAR_NUM, VAR_NUM, MY_OS, y otras variables definidas anteriormente usando varios comandos:
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
Desconfiguración/eliminación de valores y variables del shell
Podemos desconfigurar valores y atributos de las variables y funciones del shell utilizando el comando unset:
unset var_nameunset MY_OSunset is_backup_failed
Cómo establecer variables de entorno de sólo lectura en Linux al usar bash
Utilizamos el comando readonly de la siguiente manera:
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Configurando una variable de lectura inmodificableonly bash variable on my Ubuntu Linux desktop
Acceder a variables definidas por el usuario en sub-shells y otras instancias
Iniciemos una nueva instancia de bash, entrar y tratar de imprimir los valores de la siguiente manera:
# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Establecimiento y listado de variables LOCALES de entorno en Linux
En el paso # 4, la salida está vacía. Pero, ¿por qué? Significa que las variables que definimos no son de entorno, y son LOCALES. En un sub-shell y otras nuevas instancias del shell, los valores de las variables no se exportan. Por lo tanto, usamos el comando export para hacerlas GLOBALES o variables de entorno. Por ejemplo:
export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
Cómo configurar variables de entorno (GLOBAL) en Linux usando export para la sesión bash del usuario actual y exportada
comando export
Puedes modificar cada variable de entorno o del sistema usando el comando export. Establezca la variable de entorno PATH para incluir el directorio donde instaló el directorio bin con los scripts de perl y shell:
export PATH=${PATH}:/home/vivek/bin
O
export PATH=${PATH}:${HOME}/bin
Para establecer la variable de entorno JAVA_HOME en el directorio donde instaló la aplicación J2SE SDK, introduzca:
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
Puede establecer varias rutas de la siguiente manera:
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
Una nota sobre env y configuración de variables
Primero establece la variable NFS_ROOT a /efs/ec2/wwwdata y ejecuta el script perl llamado check_for_files.plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
En este ejemplo, ejecuta ‘vim’ con el entorno que contenga ‘LOGNAME=nixcraft’,y ‘DISPLAY=desktop2:0’:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Configura FOO a bar y lo imprime con perl:env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
No podemos ver $FOO desde el shell ya que sólo se definió para el código perl:echo "$FOO"
¿Cómo hago que todas las configuraciones de las variables de entorno sean permanentes/persistentes en Linux?
El archivo ~/.bash_profile ($HOME/.bash_profile) o ~/.profile se ejecuta cuando inicias sesión usando la consola o remotamente usando ssh. Escriba el siguiente comando para editar el archivo ~/.bash_profile, introduzca:$ vi ~/.bash_profile
Agregue la configuración de $PATH, introduzca:export PATH=${PATH}:${HOME}/bin
Guarde y cierre el archivo.
Establezca el nombre de la instancia de IBM DB2
Escriba el siguiente comando:
export DB2INSTANCE=prod_sales
Una nota sobre el archivo /etc/profile
/etc/profile o /etc/profile.d/ contiene el entorno del sistema Linux y los programas de inicio. Es utilizado por todos los usuarios con bash, ksh, sh shell. Normalmente se utiliza para establecer la variable PATH, los límites de usuario y otros ajustes para el usuario. Sólo se ejecuta para el shell de inicio de sesión. Si usted quería hacer grandes cambios o cambios específicos de la aplicación utilizar /etc/profile.d/ directorio como se explica aquí y aquí.
Ver los siguientes recursos:
Archivo | Propósito | Ejemplos (usar el cat para ver un archivo) | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/etc/environment | Configurar lasamplio de variables de entorno. |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" /etc/profile |
Fichero .archivo de perfil para el shell Bourne (sh) y los shells compatibles con Bourne como bash, ksh, ash y otros. |
|
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi |
/etc/profile.d/ |
Toda la personalización del entorno específico del usuario y del sitio debe colocarse en este directorio. Esto también es para todo el sistema. |
$ ls -l /etc/profile.d/ |
$ cat /etc/profile.d/gawk.csh gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"} $HOME/.bash_profile |
El archivo de inicialización personal, ejecutado para los shells de login. |
|
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
$HOME~/.bashrc |
El archivo de inicio individual por cada shell interactivo. |
|
PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i' $HOME/.bash_logout |
El archivo de limpieza del shell de inicio de sesión individual, que se ejecuta cuando un shell de inicio de sesión sale |
|
if ; then && /usr/bin/clear_console -qfi |
Resumiendo
Has aprendido a establecer y listar variables de entorno en Linux cuando se utiliza bash:
Comando | Descripción | Ejemplo(s) |
---|---|---|
declarar comando | Declarar variables bash y darles atributos como integer, arrays indexados, arrays asociativos, readonly, etc. Si no se dan variables u opciones para declarar, mostrará los atributos y valores de todas (las variables igual que el conjunto en ejecución) | Ver ‘help declare’
declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096 |
Comando env | Ejecuta un programa en un entorno modificado. Imprime todas las variables de entorno. |
envenv | moreenv | grep SERVER_ROOT |
Comando que establece variables de entorno (GLOBAL) y exporta el entorno a una subshell u otras instancias. | exportar NFS_ROOT=/aws/ec2/efs | Comando printenv | Imprime toda o parte (dada) de las variables de entorno en Linux. |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
readonly | Marcar las variables del shell como inmodificables, es decir de sólo lectura o variable constante del shell |
readonly K_VERSION="1.9.52" |
Comando set | Establezca o desestablezca los valores de las opciones del shell y los parámetros posicionales. Además, muestra todas las variables de entorno. | Ver ‘help set’
set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done |
Comando unset | Elimina las variables del shell y del entorno. No todas las variables pueden ser unset. Por ejemplo, las variables de sólo lectura no se pueden desestablecer. | desestablecer FOO |
🐧 23 comentarios hasta ahora… añadir uno ↓
Categoría | Lista de comandos de Unix y Linux |
---|---|
Gestión de archivos | cat | Firewall | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04 |
Utilidades de red | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
Administrador de paquetes | apk – apt |
Gestión de procesos | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time |
Búsqueda | grep – whereis – which |
Información del usuario | grupos – id – lastcomm – last – lid/libuser-lid – logname – members – users – whoami – who – w | WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |