Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
103.1 Lição 2
Tópico 101: Arquitetura de Sistema
101.1 Identificar e editar configurações de hardware
  • 101.1 Lição 1
101.2 Início (boot) do sistema
  • 101.2 Lição 1
101.3 Alternar runlevels/boot targets, desligar e reiniciar o sistema
  • 101.3 Lição 1
Tópico 102: Instalação do Linux e administração de Pacotes
102.1 Dimensionar partições de disco
  • 102.1 Lição 1
102.2 Instalar o gerenciador de inicialização
  • 102.2 Lição 1
102.3 Controle de bibliotecas compartilhadas
  • 102.3 Lição 1
102.4 Utilização do sistema de pacotes Debian
  • 102.4 Lição 1
102.5 Utilização do sistema de pacotes RPM e YUM
  • 102.5 Lição 1
102.6 Linux virtualizado
  • 102.6 Lição 1
Tópico 103: Comandos GNU e Unix
103.1 Trabalhar na linha de comando
  • 103.1 Lição 1
  • 103.1 Lição 2
103.2 Processar fluxos de texto usando filtros
  • 103.2 Lição 1
103.3 Gerenciamento básico de arquivos
  • 103.3 Lição 1
  • 103.3 Lição 2
103.4 Fluxos, pipes (canalização) e redirecionamentos de saída
  • 103.4 Lição 1
  • 103.4 Lição 2
103.5 Criar, monitorar e finalizar processos
  • 103.5 Lição 1
  • 103.5 Lição 2
103.6 Modificar a prioridade de execução de um processo
  • 103.6 Lição 1
103.7 Procurar em arquivos de texto usando expressões regulares
  • 103.7 Lição 1
  • 103.7 Lição 2
103.8 Edição básica de arquivos com o vi
  • 103.8 Lição 1
Tópico 104: Dispositivos, sistemas de arquivos Linux e padrão FHS
104.1 Criar partições e sistemas de arquivos
  • 104.1 Lição 1
104.2 Manutenção da integridade de sistemas de arquivos
  • 104.2 Lição 1
104.3 Controle da montagem e desmontagem dos sistemas de arquivos
  • 104.3 Lição 1
104.5 Controlar permissões e propriedades de arquivos
  • 104.5 Lição 1
104.6 Criar e alterar links simbólicos e hardlinks
  • 104.6 Lição 1
104.7 Encontrar arquivos de sistema e conhecer sua localização correta
  • 104.7 Lição 1
How to get certified
  1. Tópico 103: Comandos GNU e Unix
  2. 103.1 Trabalhar na linha de comando
  3. 103.1 Lição 2

103.1 Lição 2

Certificação:

LPIC-1

Versão:

5.0

Tópico:

103 Comandos GNU e Unix

Objetivo:

103.1 Trabalho na linha de comando

Lição:

2 de 2

Introdução

Um ambiente de sistema operacional inclui as ferramentas básicas — como shells de linha de comando e, às vezes, uma interface gráfica — necessárias para trabalhar. Mas seu ambiente também virá com um catálogo de atalhos e valores predefinidos. Nesta lição aprenderemos como listar, invocar e gerenciar esses valores.

Encontrando suas variáveis de ambiente

Então, como identificamos os valores atuais para cada uma de nossas variáveis de ambiente? Uma maneira de fazer isso é por meio do comando env:

$ env
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
XAUTHORITY=/run/user/1000/gdm/Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
[...]

Aparecerão muitos resultados — bem mais do que os incluídos no trecho acima. Mas, por enquanto, observe a entrada PATH, que contém os diretórios nos quais seu shell (e outros aplicativos) procura por outros programas sem a necessidade de especificar um caminho completo. Neste caso, seria possível executar um programa binário que reside, digamos, em /usr/local/bin de dentro do seu diretório pessoal, e ele seria executado como se o arquivo fosse local.

Vamos mudar de assunto um pouquinho. O comando echo exibe na tela o que você mandar. Acredite ou não, haverá diversas ocasiões em que será muito útil fazer echo literalmente repetir algo.

$ echo "Hi. How are you?"
Hi. How are you?

Mas echo tem outras cartas na manga. Quando você o alimenta com o nome de uma variável de ambiente — e informa que se trata de uma variável, com o prefixo $ — ao invés de apenas exibir o nome da variável, o shell irá expandi-lo, informando o valor. Não tem certeza se o seu diretório favorito está atualmente em PATH? Você pode verificar rapidamente com o echo:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Criando novas variáveis de ambiente

Você pode adicionar suas próprias variáveis personalizadas ao seu ambiente. A maneira mais simples é usar o caractere =. A string à esquerda será o nome da nova variável e a string à direita, seu valor. Depois, alimente echo com o nome da variável para confirmar se funcionou:

$ myvar=hello
$ echo $myvar
hello
Note
Note que não há espaços em torno do sinal de igual durante a atribuição de variáveis.

Mas será que funcionou mesmo? Digite bash no terminal para abrir um novo shell. Ele terá exatamente a mesma aparência daquele que acabamos de usar, mas na verdade é um filho do original (que chamamos de pai). Agora, dentro desse novo shell filho, tente fazer com que o echo opere sua mágica da mesma maneira de antes. Nada. O que aconteceu?

$ bash
$ echo $myvar

$

Uma variável criada da maneira como acabamos de fazer só estará disponível localmente — dentro daquela sessão de shell imediata. Se você iniciar um novo shell — ou fechar a sessão usando exit — a variável não irá junto. Aqui, se você digitar exit, será levado de volta ao shell pai original que, no momento, é onde queremos estar. Execute echo $myvar mais uma vez se quiser apenas confirmar que a variável ainda é válida. Depois digite export myvar para passar a variável para quaisquer shells filhos que possam ser abertos posteriormente. Experimente: digite bash para abrir um novo shell e em seguida use echo:

$ exit
$ export myvar
$ bash
$ echo $myvar
hello

Tudo isso pode parecer bobagem quando estamos criando shells sem um propósito real. Mas é importantíssimo entender como as variáveis do shell são propagadas pelo sistema para quando você começar a escrever scripts sérios.

Removendo as variáveis de ambiente

Quer saber como limpar todas as variáveis efêmeras que você criou? Uma maneira de fazer isso é simplesmente fechar o shell pai — ou reiniciar o computador. Mas existem jeitos mais simples. Como, por exemplo, unset. Basta digitar unset (sem o $) para matar a variável. Comprove com echo.

$ unset myvar
$ echo $myvar

$

Se um comando unset existe, pode apostar que também há um comando set complementar. A execução de set por si só exibirá um monte de saídas, mas nada muito diferente de env. Observe a primeira linha da saída obtida ao filtrarmos por PATH:

$ set | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[...]

Qual a diferença entre set e env? Para nossos propósitos, a principal delas é que set exibe todas as variáveis e funções. Para ilustrar isso, vamos criar uma nova variável chamada mynewvar e em seguida confirmar se ela está lá:

$ mynewvar=goodbye
$ echo $mynewvar
goodbye

Se rodarmos env usando grep para filtrar pela string mynewvar, nenhuma saída será exibida. Mas se rodarmos set da mesma maneira, veremos nossa variável local.

$ env | grep mynewvar

$ set | grep mynewvar
mynewvar=goodbye

Usando aspas para escapar dos caracteres especiais

Este é um bom momento para apresentar o problema dos caracteres especiais. Os caracteres alfanuméricos (a-z e 0-9) normalmente são lidos literalmente pelo Bash. Para criar um novo arquivo chamado myfile, bastaria digitar touch seguido de myfile e o Bash saberia o que fazer. Mas se quisermos incluir um caractere especial no nome do arquivo, teríamos um pouco mais de trabalho.

Para ilustrar esse fato, digitaremos touch e em seguida o título: my big file. O problema é que existem dois espaços entre as palavras que o Bash interpretará. Embora, tecnicamente, espaços não sejam “caracteres”, é assim que eles se comportam, já que o Bash não os lerá literalmente. Se você listar o conteúdo do diretório atual, em vez de um arquivo chamado my big file, verá três arquivos chamados, respectivamente, my, big, e file. Isso porque o Bash pensou que você queria criar vários arquivos cujos nomes estavam sendo dados em uma lista:

$ touch my big file
$ ls
my big file

Os espaços serão interpretados da mesma forma se você excluir (rm) os três arquivos com um só comando:

$ rm my big file

Agora, vamos fazer do jeito certo. Digite touch e as três partes do seu nome de arquivo, mas desta vez coloque o nome entre aspas. Desta vez, funciona. Ao listar o conteúdo do diretório, veremos um único arquivo com o nome correto.

$ touch "my big file"
$ ls
'my big file'

Existem outras maneiras de obter o mesmo efeito. As aspas simples, por exemplo, funcionam da mesma forma que as aspas duplas (note que as aspas simples preservam o valor literal de todos os caracteres, ao passo que as aspas duplas preservam todos os caracteres exceto $, `, \ e, em certos casos, !.)

$ rm 'my big file'

Podemos incluir uma barra invertida antes de cada caractere especial para “escapar” dessa característica e fazer com que o Bash o leia literalmente.

$ touch my\ big\ file

Exercícios Guiados

  1. Use o comando export para adicionar um novo diretório ao seu caminho (PATH) — ele não sobreviverá a uma reinicialização.

  2. Use o comando unset para remover a variável PATH. Tente executar um comando (como sudo cat /etc/shadow) usando sudo. O que aconteceu? Por quê? (saia do shell para retornar ao estado original.)

Exercícios Exploratórios

  1. Procure na internet a lista completa de caracteres especiais e explore-os.

  2. Tente executar comandos usando strings compostas de caracteres especiais e diversos métodos para escapar deles. Existem diferenças de comportamento entre esses métodos?

Resumo

Nesta lição, você aprendeu:

  • Como identificar as variáveis de ambiente de seu sistema.

  • Como criar suas próprias variáveis de ambiente e exportá-la para outros shells.

  • Como remover variáveis de ambiente e usar os comandos env e set.

  • Como escapar dos caracteres especiais para que o Bash os leia literalmente.

Os seguintes comandos foram abordados nesta lição:

echo

Exibe as strings e variáveis informadas.

env

Entende e modifica suas variáveis de ambiente.

export

Passa uma variável de ambiente para os shells filhos.

unset

Desconfigura os valores e atributos das variáveis e funções do shell.

Respostas aos Exercícios Guiados

  1. Use o comando export para adicionar um novo diretório ao seu caminho (PATH) — ele não sobreviverá a uma reinicialização.

    Podemos adicionar temporariamente um novo diretório (por exemplo, um chamado myfiles dentro do diretório inicial) ao caminho usando export PATH="/home/yourname/myfiles:$PATH". Crie um script simples no diretório myfiles/, torne-o executável e tente executá-lo a partir de um diretório diferente. Estes comandos pressupõem que você esteja no diretório inicial, que contém um diretório chamado myfiles.

    $ touch myfiles/myscript.sh
    $ echo '#!/bin/bash' >> myfiles/myscript.sh
    $ echo 'echo Hello' >> myfiles/myscript.sh
    $ chmod +x myfiles/myscript.sh
    $ myscript.sh
    Hello
  2. Use o comando unset para remover a variável PATH. Tente executar um comando (como sudo cat /etc/shadow) usando sudo. O que aconteceu? Por quê? (saia do shell para retornar ao estado original.)

    O comando unset PATH apaga as configurações de caminho atuais. Não será possível invocar um binário sem seu endereço absoluto. Por essa razão, se tentarmos rodar um comando usando sudo (que por sua vez é um programa binário localizado em /usr/bin/sudo) a operação falhará — a menos que especifiquemos a localização absoluta, como em: /usr/bin/sudo /bin/cat /etc/shadow. Podemos redefinir o PATH usando export ou simplesmente saindo do shell.

Respostas aos Exercícios Exploratórios

  1. Procure na internet a lista completa de caracteres especiais e explore-os.

    Eis uma lista: & ; | * ? " ' [ ] ( ) $ < > { } # / \ ! ~.

  2. Tente executar comandos usando strings compostas de caracteres especiais e diversos métodos para escapar deles. Existem diferenças de comportamento entre esses métodos?

    O escape com " preserva os valores especiais do cifrão, da crase e da barra invertida. Já o escape com o ' faz com que todos os caracteres sejam interpretados literalmente.

    $ echo "$mynewvar"
    goodbye
    $ echo '$mynewvar'
    $mynewvar

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

103.2 Processar fluxos de texto usando filtros (103.2 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.