2.1 Lição 2
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
2 Como se orientar em um sistema Linux |
Objetivo: |
2.1 As bases da linha de comando |
Lição: |
2 de 2 |
Introdução
Todos os shells gerenciam um conjunto de informações de status ao longo das sessões do shell. Essas informações de tempo de execução podem mudar durante a sessão e influenciar o comportamento do shell. Esses dados também são usados pelos programas para determinar aspectos da configuração do sistema. A maioria desses dados é armazenada nas chamadas variáveis, que abordaremos nesta lição.
Variáveis
As variáveis são espaços de armazenamento para dados, como texto ou números. Uma vez definido, o valor de uma variável pode ser acessado posteriormente. As variáveis têm um nome, o que permite acessar uma variável específica mesmo quando seu conteúdo é alterado. Elas são uma ferramenta muito comum na maioria das linguagens de programação.
Na maioria dos shells do Linux, existem dois tipos de variáveis:
- Variáveis locais
-
Essas variáveis estão disponíveis apenas para o processo atual do shell. Se você criar uma variável local e, em seguida, iniciar outro programa nesse shell, a variável não poderá mais ser acessada por esse programa. Como não são herdadas por subprocessos, essas variáveis são chamadas variáveis locais.
- Variáveis de ambiente
-
Essas variáveis estão disponíveis tanto em uma sessão de shell específica quanto em subprocessos gerados a partir dessa sessão de shell. Essas variáveis podem ser usadas para transmitir dados de configuração para os comandos executados. Como os programas podem acessar essas variáveis, elas são chamadas variáveis de ambiente. A maioria das variáveis de ambiente aparece em letras maiúsculas (por exemplo,
PATH
,DATE
,USER
). Um conjunto de variáveis de ambiente padrão fornece, por exemplo, informações sobre o diretório inicial ou o tipo de terminal do usuário. Em certos casos, nos referimos ao conjunto completo de todas as variáveis de ambiente como ambiente.
Note
|
As variáveis não são persistentes. Quando o shell em que foram configuradas é fechado, todas as variáveis e seus conteúdos são perdidos. A maioria dos shells oferece arquivos de configuração que contêm variáveis definidas sempre que um novo shell é iniciado. As variáveis que devem ser definidas permanentemente precisam ser adicionadas a um desses arquivos de configuração. |
Manipulação de variáveis
Como administrador do sistema, você precisará criar, modificar ou remover variáveis locais e de ambiente.
Trabalhando com variáveis locais
Você pode configurar uma variável local usando o operador =
(igual). Uma atribuição simples criará uma variável local:
$ greeting=hello
Note
|
Não coloque espaço antes ou depois do operador |
É possível exibir qualquer variável usando o comando echo
. O comando geralmente exibe o texto na seção de argumentos:
$ echo greeting greeting
Para acessar o valor da variável, você terá de usar $
(cifrão) na frente do nome da variável.
$ echo $greeting hello
Como vimos, a variável foi criada. Agora abra outro shell e tente exibir o conteúdo da variável criada.
$ echo $greeting
Nada é exibido. Isso ilustra o fato de que as variáveis existem somente em um shell específico.
Para verificar se a variável é de fato uma variável local, tente gerar um novo processo e confira se esse processo é capaz de acessar a variável. Para isso, inicie outro shell e execute nele o comando echo
. Como o novo shell roda em um novo processo, ele não herdará as variáveis locais do processo pai:
$ echo $greeting world hello world $ bash -c 'echo $greeting world' world
Note
|
Lembre-se de usar aspas simples no exemplo acima. |
Para remover uma variável, usamos o comando unset
:
$ echo $greeting hey $ unset greeting $ echo $greeting
Note
|
O |
Trabalhando com variáveis globais
Para disponibilizar uma variável local para subprocessos, podemos transformá-la em variável de ambiente. Usamos para isso o comando export
. Quando ele é invocado junto ao nome da variável, essa variável é adicionada ao ambiente do shell:
$ greeting=hello $ export greeting
Note
|
Aqui também não se deve usar |
Uma maneira mais fácil de criar a variável de ambiente é combinar os dois métodos acima, atribuindo o valor da variável na parte de argumento do comando.
$ export greeting=hey
Vamos conferir novamente se a variável está acessível aos subprocessos:
$ export greeting=hey $ echo $greeting world hey world $ bash -c 'echo $greeting world' hey world
Outra maneira de usar variáveis de ambiente é colocá-las na frente dos comandos. Vamos testar essa possibilidade com a variável de ambiente TZ
, que contém o fuso horário. Essa variável é usada pelo comando date
para determinar qual hora do fuso horário deve ser exibida:
$ TZ=EST date Thu 31 Jan 10:07:35 EST 2019 $ TZ=GMT date Thu 31 Jan 15:07:35 GMT 2019
Para exibir todas as variáveis de ambiente, use o comando env
.
A variável PATH
A variável PATH
é uma das variáveis de ambiente mais importantes de um sistema Linux. Ela armazena uma lista de diretórios, separados por dois pontos, que contêm programas executáveis que funcionam como comandos do shell do Linux.
$ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Para acrescentar um novo diretório à variável, usamos o sinal de dois pontos (:
).
$ PATH=$PATH:new_directory
Eis um exemplo:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ PATH=$PATH:/home/user/bin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin
Como vimos, $PATH
é usado no novo valor atribuído a PATH
. Essa variável é resolvida durante a execução do comando e garante que o conteúdo original da variável seja preservado. Obviamente, também dá para usar outras variáveis na atribuição:
$ mybin=/opt/bin $ PATH=$PATH:$mybin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin:/opt/bin
A variável PATH
deve ser usada com cautela, pois é crucial para o trabalho na linha de comando. Vamos considerar a seguinte variável PATH
:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Para descobrir como o shell chama um comando específico, which
pode ser executado com o nome do comando como argumento. Podemos, por exemplo, tentar descobrir onde o nano
está armazenado:
$ which nano /usr/bin/nano
Neste exemplo, o executável nano
está localizado no diretório /usr/bin
. Vamos remover o diretório da variável e verificar se o comando ainda funciona:
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games
Vamos procurar pelo comando nano
novamente:
$ which nano which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games)
Como vimos, o comando não foi encontrado, e portanto não foi executado. A mensagem de erro também explica o motivo pelo qual o comando não foi encontrado e em quais locais foi buscado.
Vamos readicionar os diretórios e tentar executar o comando novamente.
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ which nano /usr/bin/nano
Agora nosso comando voltou a funcionar.
Tip
|
A ordem dos elementos em |
Exercícios Guiados
-
Crie uma variável local
number
. -
Crie uma variável de ambiente
ORDER
usando um dos dois métodos acima. -
Exiba o nome das variáveis e seu conteúdo.
-
Qual o escopo das variáveis criadas anteriormente?
Exercícios Exploratórios
-
Crie uma variável local
nr_files
e atribua o número de linhas encontrado no arquivo/etc/passwd
. Dica: pesquise sobre o comandowc
e substituição de comandos, e não se esqueça das aspas. -
Crie uma variável de ambiente
ME
. Atribua a ela o valor de variávelUSER
. -
Inclua o valor da variável
HOME
aME
, usando o delimitador:
. Exiba o conteúdo da variávelME
. -
Usando o exemplo acima, crie uma variável chamada
today
e atribua a data de um dos fusos horários. -
Crie outra variável chamada
today1
e atribua a ela a data do sistema.
Sumário
Nesta lição, você aprendeu:
-
Tipos de variáveis
-
Como criar variáveis
-
Como manipular variáveis
Comandos usados nos exercícios:
env
-
Exibe o ambiente atual.
echo
-
Gera uma saída de texto.
export
-
Torna as variáveis locais disponíveis para os subprocessos.
unset
-
Remove uma variável.
Respostas aos Exercícios Guiados
-
Crie uma variável local
number
.$ number=5
-
Crie uma variável de ambiente
ORDER
usando um dos dois métodos acima.$ export ORDER=desc
-
Exiba o nome das variáveis e seu conteúdo.
$ echo number number $ echo ORDER ORDER $ echo $number 5 $ echo $ORDER desc
-
Qual o escopo das variáveis criadas anteriormente?
-
O escopo da variável
number
é somente o shell atual. -
O escopo da variável
ORDER
é o shell atual e todos os subshells gerados por ele.
-
Respostas aos Exercícios Exploratórios
-
Crie uma variável local
nr_files
e atribua o número de linhas encontrado no arquivo/etc/passwd
. Dica: pesquise sobre o comandowc
e substituição de comandos, e não se esqueça das aspas.$ nr_files=`wc -l /etc/passwd`
-
Crie uma variável de ambiente
ME
. Atribua a ela o valor de variávelUSER
.$ export ME=$USER
-
Inclua o valor da variável
HOME
aME
, usando o delimitador:
. Exiba o conteúdo da variávelME
.$ ME=$ME:$HOME $ echo $ME user:/home/user
-
Usando o exemplo acima, crie uma variável chamada
today
e atribua a data de um dos fusos horários.O exemplo a seguir usa os fusos horários GMT e EST, mas você pode escolher o que quiser.
$ today=$(TZ=GMT date) $ echo $today Thu 31 Jan 15:07:35 GMT 2019
or
$ today=$(TZ=EST date) $ echo $today Thu 31 Jan 10:07:35 EST 2019
-
Crie outra variável chamada
today1
e atribua a ela a data do sistema.Se você estiver no horário GMT:
$ today1=$(date) $ echo today1 Thu 31 Jan 10:07:35 EST 2019