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.
Índice
Quando você abre uma janela de terminal e o shell 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 de 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 existentes 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.
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 é lançado 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 será inicializado 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.
Por convenção, as variáveis de ambiente recebem nomes em letras maiúsculas. Aqui estão algumas das variáveis de ambiente globais e quais são os valores que elas contêm:
ls
destacar os diferentes tipos de arquivo .mail
sistema foi configurado em seu computador Linux (por padrão, não é), isso manterá o caminho para a caixa de correio do usuário atual ._
variável de ambiente underscore ( ) contém o último comando que foi digitado.Podemos ver o que alguns deles estão configurados para usar nada mais sofisticado do que echo
, que gravará 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 interessante é que você pode usar o preenchimento de tabulação 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 /etc/environment
arquivo. 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 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 e, em seguida, efetue logout e login novamente. Use echo
para testar se existe uma nova variável e mantém o valor que você definiu:
echo $ WEBSITE
Por ser uma variável de ambiente global e disponível para todos, o usuário mary
pode fazer referência à variável de ambiente na próxima vez que fizer login:
echo $ WEBSITE
Para ver todas as variáveis de ambiente de uma vez, digite printenv
. Há muita saída, então faz sentido canalizá-la sort
para less
:
printenv | classificar | Menos
A lista classificada de variáveis de ambiente é exibida para nós em less
.
Podemos canalizar a saída grep
para procurar variáveis de ambiente relacionadas a um determinado tópico .
printenv | grep GNOME
Essas são algumas das variáveis de ambiente do shell usadas bash
para ditar ou registrar seu comportamento e funcionalidade. Alguns dos valores são atualizados conforme você usa o terminal. Por exemplo, a COLUMNS
variável de ambiente será atualizada para refletir as alterações que você pode fazer na largura da janela do terminal:
bash
foi lançado.bash
número da versão como uma sequência de palavras e números.bash
versão como um dígito.pushd
comando.history
arquivo.history
permitidas na memória.PS1
variável de ambiente contém a definição do prompt de comando principal, padrão e. Um conjunto de tokens chamado 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
variável de ambiente contém a definição desse prompt secundário, que, por padrão, é maior que o sinal ( >
).set
opção.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:
history
lista.$
) para um usuário normal 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 PS1
variável de ambiente em seu .bashrc
arquivo.
Para criar variáveis de ambiente para seu próprio uso, adicione-as ao final do .bashrc
arquivo. Se quiser que as variáveis de ambiente estejam disponíveis para sessões remotas, como conexões SSH, você também precisará adicioná-las ao .bash_profile
arquivo.
O formato da definição da variável de ambiente é o mesmo para os dois arquivos. Para adicionar uma definição ao seu .bash_profile
arquivo, digite o seguinte no 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 .bash_profile
arquivo usando o comando dot ( .
) como este:
. .bashrc
Agora, vamos criar uma variável de ambiente na linha de comando:
LOCAL_VAR = "Apenas esta sessão"
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 INHERITED_VAR
variável de ambiente tem a palavra “exportar” no início da linha. Isso significa que a variável de ambiente será herdada por processos filhos do shell atual. Se lançarmos outro usando o bash
comando, 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 está. 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 bash
sessão infantil , usamos exit
:
Saída
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
Isso 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 WEBSITE
variável de ambiente global e a INHERITED_VAR
variável de ambiente exportada. Ele não pode acessar LOCAL_VAR
, embora o script esteja sendo executado no mesmo shell em que a variável foi criada.
Se precisarmos, podemos exportar uma variável de ambiente da linha de comando. Faremos isso no nosso LOCAL_VAR
e, em seguida, executaremos o script novamente:
exportar 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.
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 adicioná-las ao seu .bash_profile
arquivo. 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 .profile
arquivo. Ele também pode conter definições de variáveis de ambiente. No entanto, o .profile
arquivo não é lido se o .bash_profile
arquivo estiver presente. Portanto, a coisa mais segura a fazer – e da bash
maneira compatível – é para usar o .bash_profile
arquivo.)
Para editar o .bash_profile
arquivo, usaremos 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 gedit
.
Em outro computador, faremos uma SSH
conexão com o computador de teste .
ssh dave@howtogeek.local
Assim que estivermos conectados, executaremos o script mais uma vez:
./envtest.sh
O .bash_profile
arquivo foi lido como parte da inicialização do login remoto e a INHERITED_VAR
variável de ambiente está acessível para nós e para o script.
Para remover a definição de uma variável de ambiente, use o unset
comando . Se removermos a definição da variável de ambiente global WEBSITE
, e a variável de ambiente exportada,, INHERITED_VAR
elas não estarão mais disponíveis na linha de comando, nem em processos filho:
cancelar WEBSITE
não definido 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 /etc/environment
arquivo durante seu processo de login e é independente da cópia de qualquer outra pessoa da variável.
Por exemplo, o usuário mary
ainda pode acessar a WEBSITE
variável de ambiente e ler seu valor, mesmo que o usuário a dave
tenha unset
em sua sessão:
echo $ WEBSITE
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 precisar gravá-los em um arquivo.
Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…