-
Definição de Variáveis
-
Acessando variáveis de ambiente
-
Criando suas próprias variáveis locais
-
Removendo variáveis
-
Explorando variáveis de ambiente padrão do Shell
-
Definir uma variável de ambiente no PATH
-
Localizando variáveis de ambiente
-
Usando arrays de variáveis
Definição
de Variável
Local
com um nome dentro da memória do computador, criado em um
algoritmo/bash/script para se armazenar um determinado dado.
Variáveis
de ambiente Linux ajudam na experiência com o shell. Muitos
programas e scripts usam variáveis de ambiente para obter
informações do sistema e armazenar dados temporários e informações
de configuração. As variáveis de ambiente são definidas em muitos
lugares no sistema Linux, e você deve saber onde são esses lugares.
Explorando
Variáveis de Ambiente
O
shell usa um recurso chamado variáveis de ambiente para armazenar
informações sobre a sessão de shell e o ambiente de trabalho
(assim, o nome de variáveis de ambiente). Esse recurso também
permite armazenar dados na memória que podem ser facilmente
acessados por qualquer programa ou script em execução a partir do
shell. É uma maneira útil para armazenar dados persistentes
necessários.
Existem
dois tipos de variáveis de ambiente
*
Variáveis Globais
*
Variáveis Locais
Observação
Mesmo
que o Shell use variáveis de ambiente específicas que
são consistentes podemos encontrar diferenças nas diversas
distribuições GNU/Linux, nas quais adicionam suas próprias
variáveis de ambiente .
Entendendo
as variáveis de ambiente global
Variáveis
de ambiente globais são visíveis a partir da sessão de shell e de
quaisquer subshells filhos gerados. Variáveis locais estão
disponíveis apenas no shell que os cria. Isto faz variáveis de
ambiente global, úteis em aplicações que criam subshells filhos,
que exigem informações shell pai.
O
sistema Linux define várias variáveis de ambiente global, quando
você começar a sua sessão bash.
As
variáveis de ambiente do sistema quase sempre usam todas as letras
maiúsculas para diferenciá-las das variáveis locais de ambiente de
usuário.
Para
visualizar as variáveis globais use os comandos:
env
ou printenv
Figura 1: Visualizando as variáveis globais
Para
exibir somente uma variável utilize o comando printenv:
Figura
2: Exibindo uma variável especifica
Caso
você utilize o comando env para exibir uma variável
específica o resultado será um erro como na Figura 3:
Figura
3: Erro ao tentar exibir uma variável específica com o comando env
Podemos
usar o comando echo para exibir um valor da variável. Para
isto deve usar um ($) antes do nome da variável de ambiente
como na Figura 4:
Figura 4: Exibindo o valor de uma variável com o comando echo
Usando
o sinal de ($) dólar, acompanhado do nome da variável faz mais do
que apenas exibir sua definição atual quando usada com o comando
echo. O sinal de dólar antes de um nome de variável permite
que a variável a ser passado como um parâmetro de comando Figura 5:
Figura 5: Utilizando $ + Variável como parâmetro de comando
Figura 6: Comando ls com o caminho completo
Como
mencionado anteriormente, as variáveis de ambiente global também
estão disponíveis para qualquer processo de subshells como podemos
observar na Figura 7:
Figura 7: Exibindo as variáveis de Ambiente Global em um shell filho
Na
Figura 7, após descermos um subnível usando o comando bash,
o valor atual variável de ambiente HOME é exibido. Ele é definido
para com mesmo valor exato, /home/suporte, como era no shell
pai.
Entendendo
as variáveis de ambiente local
Variáveis
de ambiente locais, como o nome sugere, podem ser vistas apenas no
processo local no qual elas são definidas. Mesmo que elas sejam
locais, são tão importantes como variáveis de ambiente global.
Na
verdade, o sistema Linux também define para você variáveis de
ambiente locais padrões p. No entanto, você também pode definir
suas próprias variáveis locais.
Tentar
ver a lista de variáveis locais é um pouco complicado no CLI.
Infelizmente, não é um comando que exibe somente essas variáveis.
O comando set apresenta todas as variáveis definidas para um
processo específico, incluindo as variáveis de ambiente locais e
globais e variáveis definidas pelo usuário:
Figura 8: Comando set exibindo variáveis locais definidas pelo sistema e usuário , globais.
Todas
as variáveis de ambiente globais exibidos usando o env ou
comando printenv aparecem na saída do comando set. As
variáveis de ambiente adicionais são de ambiente local e variáveis
definidas pelo usuário.
As
diferenças entre os comandos env, printenv, e set
são sutis. O comando set exibe ambas as variáveis globais e
locais de ambiente e variáveis definidas pelo usuário. Também
classifica a exibição em ordem alfabética. O env e printenv
são diferentes em definir eles não classificam as variáveis, nem
incluem as de ambiente local ou variáveis definidas pelo usuário
local. Usando este contexto, env e printenv produzem
listagens duplicadas. No entanto, o comando env tem
funcionalidade adicional que printenv não tem, tornando-se o
comando ligeiramente mais poderoso.
Definindo
Variáveis de Usuário
Podemos
definir variáveis diretamente no shell.
Depois
de iniciar um shell ou gerar um script shell, você está autorizado
a criar variáveis definidas pelo usuário local que são visíveis
dentro de seu processo shell. Você pode atribuir qualquer numérico
ou um valor de string a uma variável de ambiente, para atribuir um
valor a uma variável um nome para a variável seguido do sinal de =
:
Figura 9: Criando uma variável de ambiente local
Veja
na Figura 9 que com o comando echo $primeiravariavel não foi
exibido nenhum valor já que não tínhamos criando a variável.
Após
criarmos a variável primeiravariavel=Olá e utilizamos o
comando echo $primeiravariavel foi apresentado o valor
atribuído que neste caso foi a palavra Olá.
Figura 13: Acessando um subshell criando uma varável filho e tentando acessar no shell pai
Configurando
Variáveis de Ambiente Global
Variáveis
de ambiente global são visíveis de qualquer processo filho
(subshell) criada pelo processo pai.
Para
criar um variável de ambiente global:
1ª
Cria uma variável de ambiente local;
2ª
Depois exporta como variável global;
Para
exporta uma variável de local para global utiliza-se o comando
export, sem
o sinal de $.
Figura 14: Exportando variáveis locais para globais
Como podemos verificar na Figura 17.
Figura 17: Removendo variável subshell (filho)
Conhecendo
Variáveis Padrão do Shell
O shell bash usa variáveis de
ambientes específicas de ambiente padrões.
Podemos utilizar essas variáveis
criadas no sistema GNU/Linux. Porque o shell bash é um derivado do
Unix shell Bourne original, ele também inclui variáveis de ambiente
originalmente definidos no shell.
Na imagem abaixo exibimos as
variáveis de ambiente que o shell utiliza que são compatíveis com
o shell Unix Bourne.
Tabela 1: Variáveis do Shell Bourne
Além das variáveis de ambiente
padrão Bourne, o shell bash também fornece algumas variáveis
Própria, como mostrado na Tabela 2:
Variáveis
de Ambiente Shell Bash
Definindo
o caminho de uma variável de ambiente
Quando digitamos comandos externos
na interface de linha de comando shell (CLI), o shell deve procurar
no sistema para achar o programa. A variável de ambiente PATH define
os diretórios que deve ele procurar os comandos e programas.
Figura 18: Variável PATH e os diretórios de comandos e programas
Na Figura 18. Podemos observar 10
diretórios onde o shell procura por comandos ou programas.
Caso a localização de um comando
ou programa não esteja incluído na variável PATH, o shell não
pode achar, sem uma referência absoluta do diretório. Neste caso o
shell retorna uma mensagem de erro.
Figura 19: Executando um programa que não está no PATH
O que ocorre frequentemente que as
aplicações não armazenam seus programas nos diretórios que não
estão na variável de ambiente PATH.
Podemos colocar
novos diretórios de busca para a variável de ambiente PATH
existente sem ter
que reconstrui-lo
a partir do zero. Os diretórios individuais listados no PATH são
separados
por dois pontos. Tudo que você precisa fazer é referenciar o valor PATH original e adicionar novos diretórios para a cadeia. Veja o exemplo!!!
por dois pontos. Tudo que você precisa fazer é referenciar o valor PATH original e adicionar novos diretórios para a cadeia. Veja o exemplo!!!
Localizando
variáveis de ambiente do sistema
Como mencionando o sistema GNU/Linux
usa variáveis de ambiente para muitas finalidades.
Sabemos como modificar e criar
nossas próprias variáveis de ambiente.
O segredo é na forma como essas
variáveis se tornam persistentes.
Quando iniciamos um shell bash,
fazendo login no sistema GNU/Linux, pelo bash padrão verifica
diversos arquivos para os comandos. Estes arquivos são chamados de
arquivos de inicialização ou arquivos de ambiente. Os arquivos de
inicialização que o bash processos dependem do método que você
usa para iniciar o shell bash.
Você pode iniciar um shell bash de
três maneiras:
-
Como um shell de login padrão no momento do login
-
Como um shell interativo que é iniciado por umsubshell
-
Como um shell não interativo de executar um script
Entendendo
o processo de shell de login
Quando efetuamos
o login no
sistema Linux, o shell bash começa como um shell de login. O shell
de login normalmente procura por cinco arquivos de inicialização
diferentes para processar comandos a partir de:
-
/etc/profile
-
$HOME/.bash_profile
-
$HOME/.bashrc
-
$HOME/.bash_login
-
$HOME/.profile
O arquivo /etc/profile é o
principal arquivo de inicialização padrão para o shell bash no
sistema.
Todos os usuários do sistema executar esse arquivo de inicialização quando iniciar sessão.
Todos os usuários do sistema executar esse arquivo de inicialização quando iniciar sessão.
Nota:
Esteja ciente de
que algumas distribuições Linux usam módulos de autenticação
conectável (PAM). Neste caso, antes do shell é iniciado, os
arquivos do PAM são processados, incluindo aqueles que podem conter
variáveis de ambiente. Exemplos de arquivo PAM incluem o arquivo
/etc/environment
e da $HOME/.pam_environment.
Os outros quatro arquivos de
inicialização são específicos para cada usuário e pode ser
personalizado para as necessidades de um usuário individual. Vamos
dar uma olhada mais de perto esses arquivos.
Exibindo
o arquivo /etc/profile
O arquivo /etc/profile é arquivo
principal de inicialização do shell, sempre que efetuamos login no
sistema GNU/Linux, o bash executa os comandos no /etc/profile.
Diferentes distribuições colocam
diferentes comandos neste arquivo.
Em nosso exemplo é uma saída do
CentOS.
Arquivos
/etc/profile das
diferentes
distribuições usam uma determinada característica.
É uma instrução
que percorre qualquer arquivos
localizado no diretório /etc/profile.d.
Isso fornece um
lugar para o sistema Linux para colocar arquivos
de inicialização específicos
do aplicativo que é executado pelo shell quando você faz login
Figura 23: Exibindo os arquivos do diretório /etc/profile.d/
Os restantes são
de arquivos
de inicialização todos utilizados para a
mesma função - para fornecer ao
usuário específico um arquivo
de inicialização para definir as variáveis de ambiente específicas
do usuário.
A maioria das
distribuições Linux usam apenas um ou dois desses quatro arquivos
de inicialização:
$ HOME/.bash_profile
$ HOME / .bashrc
$HOME/.bash_login
$HOME/.profile
Observe que todos os quatro arquivos
começam com um ponto, tornando-os arquivos ocultos (eles não
aparecem em uma listagem comando ls normais). Porque eles estão no
diretório home do usuário, cada usuário pode editar os arquivos e
adicionar suas próprias variáveis de ambiente que estão ativas
para cada sessão de shell bash que eles comecem.
Nota:
Arquivos do ambiente são uma
área em que as distribuições Linux variam muito. Não cada arquivo
$HOME listado nesta seção existe para cada usuário. Por exemplo,
alguns usuários podem ter
apenas o arquivo $HOME
/.bash_profile. Isto é normal.
O primeiro arquivo encontrado na
lista ordenada seguinte é executado, eo resto são ignorados:
$ HOME/.bash_profile
$ HOME/.bash_login
$ HOME/.profile
Observe que $
HOME/.bashrc não está nesta lista. Isto é assim porque normalmente
é executado a partir de um dos outros ficheiros.
Figura 24: Visualizando o arquivo .bash_profile
Entendo
processo do shell interativo
Se você iniciar um shell bash sem
fazer login em um sistema (se você digitar apenas o bash em um
prompt CLI, por exemplo), você começa o que é chamado um shell
interativo. O shell interativo não agir como o shell de login, mas
ainda fornece um prompt CLI para que você digite os comandos.
Se o bash é iniciado como um shell
interativo, ele não processa o arquivo /etc/profile. Em vez disso,
ele apenas verifica para o arquivo .bashrc no diretório home do
usuário.
Figura 25: Visualizando o arquivo bashrc |
O arquivo .bashrc
faz duas coisas. Primeiro, ele verifica para um arquivo bashrc comum
no diretório /etc. Em segundo lugar, ele oferece um lugar para que o
usuário digite aliases de comando pessoais
Entendo
processo do shell não
interativo
O
último tipo de concha é um subshell
não-interativo. Este é o shell onde o sistema pode começar a
executar um script shell. Isto é diferente na medida em que não há
uma linha de CLI que se preocupar. No entanto, você pode querer
executar comandos de inicialização específicas cada vez que inicia
um script no seu sistema.
Quando
o shell inicia um processo subshell não-interativo, ele verifica
essa variável de ambiente para o nome do arquivo de inicialização
para executar. Se um estiver presente, o shell executa os comandos do
arquivo, que geralmente incluem variáveis definidas para os shell
scripts.
Por exemplo, se o shell pai era um shell de login e teve variáveis definidas e exportados no arquivo /etc/profile, etc /profile.d/*.sh, e a $HOME /.bashrc , o shell para a filho herda essas variáveis.
No
entanto, lembre-se que todas as variáveis definidas, mas não
exportados pelo shell pai são variáveis locais. As variáveis
locais não são herdadas por um subnível.
Para
os scripts que não iniciam um subnível, as variáveis já estão
disponíveis no shell atual. Assim, mesmo se BASH_ENV não está
definido, ambas as variáveis locais e globais do shell atualestão
presentes para ser utilizado.
Adicionando
variáveis de ambiente persistente
Agora
que você sabe que caminho em torno dos vários tipos de processo
shell e seus vários arquivos do ambiente, introduzindo as variáveis
de ambiente permanente é muito mais fácil. Você também pode
definir suas próprias variáveis globais ou locais permanentes
utilizando esses arquivos.
Para
variáveis de ambiente globais (aquelas variáveis necessárias para
todos os usuários em um sistema Linux), pode ser tentador colocar
ajustes variáveis novas ou modificadas no arquivo /etc/ profile, mas
isso é uma má ideia.
O
arquivo pode ser alterado quando sua distribuição é atualizado, e
você perderia todas as definições de variáveis personalizadas.
É
uma idéia melhor para criar um arquivo terminando com .sh no
diretório /etc/profile.d. Nesse arquivo, coloque todas as suas
configurações novas ou modificadas de
variáveis de ambiente global
Na
maioria das distribuições, o melhor lugar para armazenar variáveis
shell bash persistentes de um usuário individual está no arquivo
$HOME/.bashrc.
Isto é verdade para todos os tipos de processo shell. No entanto, se
a variável BASH_ENV está definido, tenha em mente que a menos que
ele aponta para $HOME/ bashrc, pode ser necessário para armazenar
variáveis de um usuário para tipos de shell não interativos em
outros lugares.
Aprendendo
arrays
de variáveis
de ambiente
Uma
característica muito legal de variáveis de ambiente é que eles
podem ser usados como matrizes. Uma matriz é uma variável que pode
conter vários valores. Os valores podem ser consultados
individualmente ou como um todo para a matriz inteira. Para definir
vários valores para uma variável de ambiente, basta incluí-los
entre parênteses, com valores separados por espaços:
Para
definir vários valores para uma variável de ambiente, basta
incluí-los entre parênteses, com valores separados por espaços:
Se
exibirmos a matriz como uma variável de ambiente normal, não terá
o resultado esperado.
Somente
o primeiro valor na matriz aparece. Para fazer referência a um
elemento de matriz individual, você deve usar um valor índice
numérico, o que representa o seu lugar na matriz. O valor numérico
é entre colchetes:
Nota:
Arrays
de variáveis de ambiente começar com um valor de índice com valor
zero. Isso pode ser confuso.
Para
exibir uma variável de matriz inteira, você usar o caractere
curinga asterisco como o valor do índice:
Você ainda pode usar o comando unset para remover um valor individual dentro da matriz, mas tenha cuidado, porque isso fica complicado.
Este
exemplo usa o comando unset para remover o valor pelo valor de índice
2. Quando você exibe a matriz, parece que os outros valores de
índice caiu apenas um. No entanto, se você exibir especificamente
os dados no valor de índice 2, você vê que esse local está vazio.
Conclusão:
Estudamos
neste extenso tutorial toda teoria e prática sobre variáveis de
ambiente local como também global em ambientes shell bash.
Espero
que após a leitura seus conhecimentos sobre variáveis estejam
ampliados para resolução de problemas como também para um melhor
aperfeiçoamento da administração de ambientes GNU/Linux.
Parabéns, são ótimas dicas pra quem gosta dessa área tirar suas duvidas.
ResponderExcluir