Variables de contorno en Linux

De Manuais Informática - IES San Clemente.
Revisión del 01:00 1 oct 2015 de Vieites (discusión | contribs.) (→‎Lista das Variables de Entorno)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

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:
- Enlace interesante.

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.
MAIL 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