Variables de contorno en Linux
Variables de Entorno en Linux
Trátase dunha característica do shell bash que se emprega para gardar información das sesións do shell e do entorno de traballo.
Existen dous tipos de "variables de entorno":
- Variables Globais.
- Variables Locais.
Hai que ter en conta que as variables de entorno poden variar dunha distribución Linux a outra.
Variables Globais
As variables de entorno globais son visibles dende a sesión de shell, e todos os procesos que se corran dende esta. As variables de entorno Locais veremos que só serán accesibles dende a shell que as creara.
Cando se inicia unha sesión bash o linux aplica unha serie de variables globais. Todas estas variables están definidas en maiúsculas. Para ver estas pódese empregar o comando printenv, vexamos un exemplo:
root@usuario-pc:/home/usuario# printenv
SHELL=/bin/bash
TERM=xterm
XDG_SESSION_COOKIE=1642d1f15b2c8d5e7d5466974911fdb6-1226947630.844144-1851350033
USER=root
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;
33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;
32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;
31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;
31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;
31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;
31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;
35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;
35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;
35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;
35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;
35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;
35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;
36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;
36:*.ra=00;36:*.wav=00;36:
SUDO_USER=usuario
SUDO_UID=1000
USERNAME=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/home/usuario
LANG=es_ES.UTF-8
SHLVL=1
SUDO_COMMAND=/bin/su
HOME=/root
LOGNAME=root
LESSOPEN=| /usr/bin/lesspipe %s
SUDO_GID=1000
DISPLAY=:0.0
LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/home/usuario/.Xauthority
COLORTERM=gnome-terminal
_=/usr/bin/printenv
root@usuario-pc:/home/usuario#
Así vense todas as variables globais configuradas, que como se ve son moitas. A maioría delas son configuradas polo sistema no momento do inicio de sesión. Se queremos ver unha soa das variables pódese empregar o comando echo. Así, para saber cal é o directorio home do usuario do bash:
usuario@usuario-pc:~$ echo $HOME
/home/usuario
usuario@usuario-pc:~$
Variables locais
As variables de entorno locais, como o seu nome indica, só poden ser vistas nos procesos nos que foron definidas. Pero non hai que confundirse, pois as variables de entorno locais son tan importantes como as Globais. De feito, o sistema Linux tamén define variables locais estándar por defecto para os usuarios.
Desafortunadamente non existe un comando que mostre só as variables de entorno locais. O comando set mostra "todas" as variables de entorno. Para ver a axuda de set pon na liña de comandos: help set.
Configurando variables de entorno
Pódense crear variables de entorno directamente dende a bash shell.
Configurar variables de entorno locais
No momento en que se inicia o shell xa se poden crear variables locais que serán visibles dende os procesos lanzados dende o propio shell. Exemplos:
#Definir unha variable local:
$ test=testing
$ echo $test
testing
$
#Se ten espazos:
$ test='testing a long string'
$ echo $test
testing a long string
$
#Nunca poñer espazos:
$ test2 = test
bash: test2: Command not found
$
- Se definimos unha variable nun shell esta non estará definida nunha "shell filla" (nin ao revés...).
- Configurar el prompt de bash:
Configurar variables de entorno globais
As variables de entorno globais son visibles dende calquera "proceso fillo" creado dende a bash que configurou esa variable de entorno. O método a seguir é o seguinte, que emprega o comando export:
$ echo $test
testing a long string
$ export test
$ bash
$ echo $test
$ testing a long string
$
Eliminar variables de entorno
Por suposto, se podemos crear variables de entorno tamén podemos eliminalas. Emprégase para isto o comando [unset http://linux.about.com/library/cmd/blcmdln_unset.htm]:
$ echo $test
testing
$ unset test
$ echo $test
$
Ollo con esta situación: se estamos nun proceso fillo e eliminamos unha varible de entorno, esta só se elimina nese proceso fillo. Esa variable global será accesible dende o proceso pai:
$ test=testing
$ export test
$ bash
$ echo $test
testing
$ unset test
$ echo $test
$ exit
exit
$ echo $test
testing
$
Lista das Variables de Entorno
A continuacion temos a lista de variables reservadas polo interprete de comandos mais comúns. Todas estas teñen un significado especial, algunhas só se poden ler, a outras se lle asignan certos valores automaticamente e algunhas perden o seu significado se lle cambiamos os valores que teñen por defecto.
Variable | Explicación |
---|---|
CDPATH | Una lista de directorios separados por el signo ':' usada como ruta de acceso por el comando cd |
HOME | El directorio principal de usuario |
IFS | Una lista de caracteres para separar campos; usado cuando el interprete de comandos separa palabras como parte de una expansion. |
Si este parametro tiene un fichero definido y la variable | |
MAILPATH | no esta definida, bash informa al usuario de la llegada de correo al fichero especificado. |
MAILPATH | Una lista de ficheros separada por comas, en los cuales el interprete de comandos comprueba periodicamente de la llegada de correo. |
OPTARG | El valor del ultimo argumento procesado por getopts. |
OPTIND | El indice del ultimo argumento procesado por getopts |
PATH | Una lista de directorios, separados por comas, en los cuales el interprete de comandos busca por comandos. |
PS1 | Prompt principal. El valor por defecto es “'\s-\v\$ ' |
PS2 | El prompt secundario. El valor por defecto es '> ' |
auto_resume | Esta variable controla como el interprete de comandos interaciona con el control de usuario y trabajos/procesos |
BASH | La ruta de acceso completa usada para ejecutar la instancia actual de bash |
BASH_ENV | Si esta variable esta definida cuando bash es llamado para ejecutar un script, su valor es expandido y usado como el nombre del fichero leido antes de ejecutar el script. |
BASH_VERSION | El numero de version de bash usada |
BASH_VERSINFO | Una matriz de solo lectura con informacion sobre la version de bash usada. |
COLUMNS | Usada por 'select' para determinar el ancho de la terminal cuando imprime listas de menus. |
COMP_CWORD | Un indice en ${COMP_WORDS} de la palabra conteniendo la posicion del puntero actual |
COMP_LINE | La linea de comando actual |
COMP_POINT | El indice de la posicion relativa del puntero actual con respecto al comienzo del comando actual |
COMP_WORDS | Una matriz con las palabras individuales en la linea de comando actual |
COMPREPLY | Una matriz de donde bash lee las palabras posibles generadas por una funcion del interprete de comandos usada por la utilidad de generacion de terminos posibles. |
DIRSTACK | Una matriz que contiene los contenidos actuales del stack de directorios |
EUID | El identificador numerico de usuario del usuario actual |
FCEDIT | El editor usado por defecto por la opcion -e del comando 'fc' |
FIGNORE | Una lista separada por comas de sufijos a ignorar cuando se efectua la generacion de posibles nombres de ficheros. |
FUNCNAME | El nombre de la funcion que se esta ejecutando actual |
GLOBIGNORE | Una lista separada por comas de los patrones que definen el conjunto de nombres de ficheros a ignorar cuando se efectua la generacion de posibles nombres |
GROUPS | Una matriz que contiene la lista de los grupos a que pertenece el usuario actual |
HISTCMD | El indice del comando actual en la historia de comandos |
HISTCONTROL | Define si un comando es ańadido a la historia de comandos |
HISTFILE | El nombre del fichero en el cual se graba la historia de comandos de comandos. El valor por defecto es ~/.bash_history |
HISTFILESIZE | El numero maximo de lineas contenidas en la historia de comandos, por defecto 500 |
HISTIGNORE | Una lista separada por comas de los patrones usados para definir que comandos deben de grabarse en la historia de comandos |
HISTSIZE | El maximo numero de comandos a recordar en la historia de comandos, por defecto 500 |
HOSTFILE | Contiene el nombre de un fichero en el mismo formato que /etc/hosts que deberia de usarse cuando el interprete de comandos necesita completar un nombre de maquina (hostname) |
HOSTNAME | El nombre de maquina actual |
HOSTTYPE | Cadena describiendo la maquina que esta ejecutando Bash |
IGNOREEOF | Controla la accion a tomar cuando el interprete de comandos recibe un caracter EOF |
INPUTRC | Nombre del fichero de inicializacion de 'Readline', sobreescribiendo el valor por defecto /etc/inputrc. |
LINES | Usada para determinar la anchura de la columna usada para imprimir listas |
MACHTYPE | Cadena describiendo el tipo de sistema que esta ejecutando Bash |
MAILCHECK | Frecuencia de comprobacion (en segundos) del correo electronico en el fichero definido en las variables MAILPATH o MAIL |
OLDPWD | Directorio previo definido por el comando 'cd' |
OSTYPE | Cadena describiendo el sistema operativo que esta ejecutando Bash |
PPID | El numero de proceso del proceso padre del interprete de comandos |
PS3 | El valor de esta variable se usa como 'prompt' |
PWD | Directorio actual definido por el comando 'cd' |
RANDOM | Cuando se llama esta variable un numero entero entre 0 32767 es generado |
SECONDS | Numero de segundos desde que Bash fue arrancado |
SHELLOPTS | Lista con opciones de Bash activadas |
UID | El valor numerico real del usuario actual |