Existe mais de um tipo de variável de ambiente no Linux. Aprenda como vê-los, criá-los para logins locais e remotos e fazer com que sobrevivam a reinicializações.
últimas postagens
Como funcionam as variáveis de ambiente
Quando você abre uma janela de terminal e a casca dentro dela, uma coleção de variáveis é referenciada para garantir que o shell esteja configurado corretamente. Essas variáveis também garantem que todas as informações às quais a janela do terminal e o shell possam se referir estejam disponíveis. Coletivamente, essas variáveis contêm configurações que definem o ambiente que você encontra dentro da janela do terminal, até a aparência do prompt de comando. Então, naturalmente, eles são chamados de variáveis de ambiente.
Algumas variáveis de ambiente são de todo o sistema ou globais. Outros são para toda a sessão e só podem ser vistos por você. Outros não podem fazer referência às variáveis de ambiente de sua sessão. Há um terceiro conjunto de variáveis de ambiente definidas no shell. Sua localidade, fuso horário e configurações de teclado, o conjunto de diretórios pesquisados quando o shell tenta encontrar um comando e seu editor padrão são armazenados em variáveis de ambiente do shell.
Mostraremos como ver as variáveis de ambiente que existem em seu sistema e descreveremos como criar as suas próprias. Também mostraremos como disponibilizá-los para processos filho e ser persistentes durante as reinicializações.
Ambientes e herança
Quando um shell é iniciado, ele passa por uma fase de inicialização. É neste ponto que ele lê as variáveis de ambiente que definem o ambiente do shell.
Quando um programa ou comando é iniciado a partir desse shell – conhecido como processo filho – ele herda o ambiente do processo pai – mas cuidado! Como veremos, você pode criar variáveis que não são adicionadas ao seu ambiente, portanto, não serão herdadas por um processo filho.
Se o processo filho for um shell, esse shell inicializará a partir de seu próprio conjunto de variáveis novo. Portanto, se você alterar o prompt de comando no shell atual e, em seguida, lançar um shell filho, o shell filho não herdará o prompt de comando modificado do pai.
Variáveis de ambiente global
Por convenção, as variáveis de ambiente recebem nomes em maiúsculas. Aqui estão algumas das variáveis de ambiente globais e quais são os valores que elas contêm:
SHELL: O nome do shell que será iniciado quando você abrir uma janela de terminal. Na maioria das distribuições Linux, isso vai ser bash a menos que você altere o padrão.
PRAZO: As janelas de terminal são, na verdade, emulações de um terminal de hardware. Isso contém o tipo de terminal de hardware que será emulado.
USUÁRIO: O nome de usuário da pessoa atual usando o sistema.
PWD: O caminho para o diretório de trabalho atual.
OLDPWD: O diretório em que você estava antes de mover para o diretório de trabalho atual.
LS_COLORS: A lista de códigos de cores usados pelo ls destacar diferentes tipos de arquivo.
CORREIO: Se o sistema de e-mail foi configurado em seu computador Linux (por padrão, não é), isso irá segurar o caminho para a caixa de correio do usuário atual.
PATH: Uma lista de diretórios que o shell pesquisará para encontrar executáveis de comando.
LANG: As configurações de idioma, localização e codificação de caracteres.
HOME: o diretório inicial do usuário atual.
_: A variável de ambiente sublinhado (_) contém o último comando que foi digitado.
Podemos ver o que alguns deles estão configurados para usar nada mais sofisticado do que o eco, que irá escreva os valores na janela do terminal. Para ver o valor mantido por uma variável de ambiente, você precisa adicionar um cifrão ($) ao início de seu nome.
Um toque legal é que você pode usar conclusão da guia para preencher o nome da variável de ambiente para você. Digite algumas letras do nome e pressione Tab. O nome da variável é completado pelo shell. Se isso não acontecer, você precisará digitar mais algumas letras para distinguir a variável de ambiente de outros comandos com nomes que começam com essas mesmas letras:
echo $SHELL
echo $LANG
echo $HOME
echo $PWD
Para criar suas próprias variáveis de ambiente globais, adicione-as ao arquivo / etc / environment. Você precisará usar sudo para editar este arquivo:
sudo gedit /etc/environment
Para adicionar uma variável de ambiente, digite seu nome, um sinal de igual (=) e o valor que você deseja que a variável de ambiente contenha. Não coloque espaço antes ou depois do sinal de igual (=). O nome da variável de ambiente pode conter letras, um sublinhado (_) ou números. No entanto, o primeiro caractere de um nome não pode ser um número.
Se houver espaços no valor, certifique-se de colocar todo o valor entre aspas (“).
Salve o arquivo, faça logout e login novamente. Use echo para testar se uma nova variável existe e mantém o valor que você definiu:
echo $WEBSITE
Por ser uma variável de ambiente global e disponível para todos, a usuária mary pode fazer referência à variável de ambiente na próxima vez que fizer login:
echo $WEBSITE
Para veja todas as variáveis de ambiente imediatamente, digite printenv. Há muita saída, então faz sentido canalizá-la por meio de classificação e depois em menos:
printenv | sort | less
A lista classificada de variáveis de ambiente é exibida para nós em menos.
Podemos canalizar a saída por meio de grep para procurar variáveis de ambiente relacionado a um tópico particular.
printenv | grep GNOME
Variáveis de Ambiente Shell
Essas são algumas das variáveis de ambiente do shell usadas no bash para ditar ou registrar seu comportamento e funcionalidade. Alguns dos valores são atualizados conforme você usa o terminal. Por exemplo, a variável de ambiente COLUMNS será atualizada para refletir as alterações que você pode fazer na largura da janela do terminal:
BASHOPTS: As opções de linha de comando que foram usadas quando o bash foi lançado.
BASH_VERSION: o número da versão do bash como uma sequência de palavras e números.
BASH_VERSINFO: A versão do bash como um dígito.
COLUNAS: A largura atual da janela do terminal.
DIRSTACK: Os diretórios que foram adicionado à pilha de diretórios pelo comando pushd.
HISTFILESIZE: Número máximo de linhas permitidas no arquivo de histórico.
HISTSIZE: Número de linhas de história permitidas na memória.
HOSTNAME: o nome do host do computador.
IFS: o Separador de campo interno usado para separar a entrada na linha de comando. Por padrão, este é um espaço.
PS1: A variável de ambiente PS1 contém a definição do prompt de comando principal, padrão e. Um conjunto de tokens denominado sequências de escape pode ser incluído na definição de seu prompt de comando. Eles representam coisas como o host e o nome de usuário, o diretório de trabalho atual e a hora.
PS2: Quando um comando se estende por mais de uma linha e mais entradas são esperadas, o prompt de comando secundário é mostrado. A variável de ambiente PS2 contém a definição deste prompt secundário, que, por padrão, é maior que o sinal (>).
SHELLOPTS: opções de shell que você pode definir usando a opção set.
UID: o Identificador de usuário do usuário atual.
Vamos verificar algumas dessas variáveis de shell:
echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID
Para fins de integridade, aqui estão os tokens que você pode usar nas definições do prompt de comando:
t: A hora atual, formatada como HH: MM: SS.
d: A data atual, expressa como dia da semana, mês, data.
n: um caractere de nova linha.
s: o nome do seu shell.
W: O nome do seu diretório de trabalho atual.
w: o caminho para seu diretório de trabalho atual.
u: O nome de usuário da pessoa que está logado.
h: O nome do host do computador.
#: Cada comando dentro de um shell é numerado. Isso permite que você veja o número do comando em seu prompt de comando. Este não é o mesmo que o número que o comando terá na lista de histórico.
$: Define o caractere final do prompt como um cifrão ($) para um usuário comum e um símbolo de hash (#) para o usuário root. Isso funciona verificando o UID do usuário. Se for zero, o usuário é root.
Você encontrará a definição de sua variável de ambiente PS1 em seu arquivo .bashrc.
Criação de variáveis de ambiente de sessão
Para criar variáveis de ambiente para seu próprio uso, inclua-as na parte inferior do arquivo .bashrc. Se você quiser ter as variáveis de ambiente disponíveis para sessões remotas, como conexões SSH, também precisará adicioná-las ao arquivo .bash_profile.
O formato da definição da variável de ambiente é o mesmo para os dois arquivos. Para adicionar uma definição ao seu arquivo .bash_profile, digite isto em seu diretório inicial:
gedit .bashrc
Adicionamos uma variável de ambiente chamada INHERITED_VAR. Observe a palavra “exportar” no início da linha.
Salve e feche seu arquivo após terminar de editar. Você pode fazer logout e login novamente, ou pode fazer com que o shell releia o arquivo .bash_profile usando o comando dot (.) Como este:
. .bashrc
Agora, vamos criar uma variável de ambiente na linha de comando:
LOCAL_VAR="This session only"
Se usarmos echo, podemos ver que ambas as variáveis de ambiente são acessíveis para nós:
echo $LOCAL_VAR
echo $INHERITED_VAR
Você notará que a definição da variável de ambiente INHERITED_VAR tem a palavra “exportar” no início da linha. Isso significa que a variável de ambiente será herdada por processos filho do shell atual. Se lançarmos outro usando o comando bash, podemos verificar as duas variáveis novamente, de dentro do shell filho:
bash
echo $LOCAL_VAR
echo $INHERITED_VAR
Como você pode ver, o INHERITED_VAR está acessível no shell filho, mas LOCAL_VAR não. Simplesmente obtemos uma linha em branco.
Embora “exportar” adicione a parte da variável de ambiente ao ambiente que os processos filhos herdam, INHERITED_VAR não é uma variável de ambiente global. Por exemplo, o usuário mary não pode fazer referência a ele:
echo $INHERITED_VAR
Para fechar nossa sessão bash filha, usamos exit:
exit
Os ambientes herdados também afetam os scripts. Aqui está um script simples que grava os valores de nossas três variáveis de ambiente na janela do terminal:
#!/bin/bash echo "WEBSITE" $WEBSITE echo "LOCAL_VAR" $LOCAL_VAR echo "INHERITED_VAR" $INHERITED_VAR
Ele foi salvo em um arquivo chamado envtest.sh e, em seguida, tornado executável com o seguinte:
chmod +x envtest.sh
Quando executamos o script, ele pode acessar duas das três variáveis de ambiente:
./envtest.sh
O script pode ver a variável de ambiente global WEBSITE e a variável de ambiente exportada INHERITED_VAR. Não pode acessar LOCAL_VAR, embora o script esteja rodando no mesmo shell onde a variável foi criada.
Se necessário, podemos exportar uma variável de ambiente da linha de comando. Faremos isso em nosso LOCAL_VAR e, em seguida, executaremos o script novamente:
export LOCAL_VAR
./envtest.sh
A variável de ambiente foi adicionada ao ambiente do shell atual e, portanto, aparece no ambiente herdado pelo script. O script também pode fazer referência a essa variável de ambiente.
Conexões Remotas
Variáveis de ambiente globais são acessíveis para sessões de login remotas, mas se você deseja que suas variáveis de ambiente definidas localmente estejam disponíveis para você remotamente, você deve incluí-las em seu arquivo .bash_profile. Você pode definir a mesma variável de ambiente nos arquivos .bashrc e .bash_profile, com valores diferentes. Isso poderia ser captado por um script, digamos, para modificar seu comportamento para pessoas que usam o sistema local ou remotamente.
(Correndo o risco de confundir as coisas, há também um arquivo .profile. Ele também pode conter definições de variáveis de ambiente. No entanto, o arquivo .profile não é lido se o arquivo .bash_profile estiver presente. Portanto, a coisa mais segura a fazer – e a maneira compatível com bash – é usar o arquivo .bash_profile.)
Para editar o arquivo .bash_profile, usaremos o gedit novamente:
gedit .bash_profile
Vamos adicionar a mesma variável de ambiente com o mesmo valor que usamos antes.
Salve suas alterações e feche o gedit.
Em outro computador, faremos um SSH conexão com o computador de teste.
ssh [email protected]
Assim que estivermos conectados, executaremos o script mais uma vez:
./envtest.sh
O arquivo .bash_profile foi lido como parte da inicialização do login remoto e a variável de ambiente INHERITED_VAR está acessível para nós e para o script.
Desconfigurando uma Variável de Ambiente
Para remover a definição de uma variável de ambiente, use o comando desarmado. Se removermos a definição da variável de ambiente global, WEBSITE, e da variável de ambiente exportada, INHERITED_VAR, elas não estarão mais disponíveis na linha de comando, nem em processos filho:
unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE
Um ponto a ser observado é que isso apenas altera a disponibilidade de variáveis de ambiente globais para você nesta sessão. Outra pessoa que efetuou login simultaneamente ainda poderá acessar sua instância dessa variável de ambiente global. Sua instância foi inicializada e lida do arquivo / etc / environment durante seu processo de login e é independente da cópia de qualquer outra pessoa da variável.
Por exemplo, a usuária mary ainda pode acessar a variável de ambiente WEBSITE e ler seu valor, mesmo que o usuário dave a tenha cancelado em sua sessão:
echo $WEBSITE
Controle ambiental
Variáveis de ambiente podem ser usadas para permitir que scripts e aplicativos saibam como devem se comportar. Eles podem ser usados para armazenar configurações ou pequenas quantidades de dados. Por exemplo, um script pode preencher um ambiente com um valor que pode ser referenciado por outros scripts sem a necessidade de gravá-los em um arquivo.