Linux · Capítulo 3
Linux Essentials: orientando-se em um sistema Linux
Primeiros passos no shell: sintaxe de comandos, aspas e variáveis, PATH, como pedir ajuda, caminhos, arquivos e curingas.
Este capítulo cobre o tema 2 do exame Linux Essentials: movimentar-se por um sistema Linux pela linha de comando. É aqui que a teoria vira prática, então abra um terminal e vá testando cada comando.
O shell
O shell ou interpretador de comandos é o programa que recebe as ordens que você digita no teclado e as repassa ao sistema operacional. Também é chamado de terminal ou linha de comando, embora, a rigor, o terminal seja a janela e o shell, o programa que roda dentro dela.
| Shell | Características |
|---|---|
| Bash | O mais difundido; o shell padrão na maioria das distribuições. É o do exame. |
| sh | O shell clássico do Unix; base do padrão POSIX. |
| zsh | Compatível com o Bash e muito configurável; o shell padrão no macOS. |
| csh / tcsh | Sintaxe parecida com a linguagem C. |
| fish | Pensado para ser amigável, com sugestões automáticas. |
echo $SHELL # qual shell seu usuário usa
clear # limpa a tela (ou Ctrl + L)
pwd # print working directory: em que diretório você está
Anatomia de um comando
Um comando tem três partes: o comando, suas opções (mudam como ele se comporta e
costumam começar com - ou --) e seus argumentos (sobre o que ele atua).
ls # comando sozinho
ls -l # comando + opção
ls -l /home # comando + opção + argumento
ls -la /home # várias opções curtas juntas: -l e -a
ls --all /home # opção longa
Nos comandos GNU a ordem de opções e argumentos costuma ser flexível (ls /home -la também
funciona), mas a convenção é comando, opções, argumentos.
Mostrar texto: echo e as aspas
echo "Olá mundo"
echo -e "Olá\tmundo" # -e interpreta \t (tabulação)
echo -e "Olá\nmundo" # e \n (quebra de linha)
As aspas mudam como o shell trata o texto:
| Aspas | Comportamento | Exemplo |
|---|---|---|
Duplas "..." |
Expandem as variáveis ($VAR) e os comandos $(...). |
echo "Seu PATH é $PATH" |
Simples '...' |
Tudo é literal: nada é expandido. | echo 'Seu PATH é $PATH' |
Barra invertida \ |
Escapa um único caractere. | echo "Custa \$5" |
echo "Hoje é $(date +%A)" # substituição de comandos
Saber o que é cada comando: type, which, uname, whatis
type cd # cd is a shell builtin (comando interno do Bash)
type ls # pode ser um alias de ls --color=auto
type cp # cp is /usr/bin/cp (programa externo)
which cp # caminho do executável: /usr/bin/cp
uname # nome do kernel: Linux
uname -a # todas as informações: versão, arquitetura, nome da máquina...
cat /etc/os-release # nome e versão da distribuição
A diferença importa: os comandos internos (builtins) fazem parte do próprio shell; os
externos são programas em disco que o shell procura nos diretórios do PATH.
Variáveis: set, export, unset e env
saudacao="olá" # variável local do shell (sem espaços em volta do =)
echo $saudacao
export EDITOR=nano # variável de ambiente: herdada pelos programas que você abrir
env # lista as variáveis de ambiente
set # lista variáveis e funções do shell
unset saudacao # remove a variável
set +o history # desativa o histórico nesta sessão
set -o history # reativa
A variável PATH
PATH contém a lista de diretórios, separados por :, onde o shell procura os comandos
externos. Graças a ela você digita ls em vez de /usr/bin/ls.
echo $PATH
# /usr/local/bin:/usr/bin:/bin:...
Para executar seus próprios scripts de qualquer diretório, adicione a pasta deles ao PATH:
mkdir -p ~/scripts
export PATH="$PATH:$HOME/scripts"
Essa mudança dura só até a sessão terminar. Para torná-la permanente, salve-a em
~/.bashrc (no zsh, ~/.zshrc) e recarregue o arquivo:
echo 'export PATH="$PATH:$HOME/scripts"' >> ~/.bashrc
source ~/.bashrc
Use aspas simples no
echo: assim o texto$PATHé salvo como está e expandido ao abrir cada sessão. Com aspas duplas, seria salvo o valor atual completo.
Seu primeiro script e o shebang
A primeira linha de um script, o shebang, indica qual interpretador deve executá-lo:
#!/bin/bash
# ~/scripts/ola.sh
echo "Olá, $USER"
echo "Hoje é $(date +%d/%m/%Y)"
chmod +x ~/scripts/ola.sh # dar permissão de execução
ola.sh # funciona de qualquer lugar se ~/scripts estiver no PATH
./ola.sh # se não, execute indicando o caminho
Como pedir ajuda
| Ferramenta | Para que serve |
|---|---|
comando --help |
Resumo rápido das opções. |
man comando |
O manual completo. Navega-se com as setas, / busca, q sai. |
info comando |
Documentação mais extensa, com links entre seções. |
whatis comando |
Descrição de uma linha (igual a man -f). |
apropos palavra |
Busca a palavra nas descrições dos manuais (igual a man -k). |
locate arquivo |
Encontra arquivos pelo nome usando um banco de dados atualizado com updatedb. |
whereis comando |
Onde estão o binário, o código-fonte e o manual de um comando. |
/usr/share/doc/ |
Documentação adicional dos pacotes instalados. |
O manual é dividido em seções. A mesma palavra pode aparecer em várias:
| Seção | Conteúdo |
|---|---|
| 1 | Comandos de usuário |
| 5 | Formatos de arquivos de configuração |
| 8 | Comandos de administração do sistema |
man passwd # seção 1: o comando passwd
man 5 passwd # seção 5: o arquivo /etc/passwd
man -f cp # = whatis cp
man -k copy # = apropos copy
Diretórios e caminhos
O sistema de arquivos do Linux é uma árvore que começa na raiz, /. Cada usuário tem seu
diretório pessoal, normalmente /home/usuario, que também pode ser escrito como ~.
- Um caminho absoluto começa em
/e vale de qualquer lugar:/home/usuario/documentos/notas.txt - Um caminho relativo parte do diretório onde você está e não começa com
/: se você está em/home/usuario, o mesmo caminho édocumentos/notas.txt. .é o diretório atual e..o diretório pai.
Movimentar-se com cd
cd # ir para o seu diretório pessoal (igual a cd ~)
cd /etc # caminho absoluto
cd documentos # caminho relativo
cd .. # subir para o diretório pai
cd - # voltar ao diretório anterior
cd / # ir para a raiz
Listar com ls
ls -a # inclui arquivos ocultos (começam com .)
ls -l # formato longo: permissões, proprietário, tamanho, data
ls -lh # tamanhos legíveis (K, M, G)
ls -S # ordena por tamanho, o maior primeiro
ls -lr # ordem inversa
ls -R # recursivo: entra nos subdiretórios
Criar, mover, copiar e apagar
touch notas.txt # cria um arquivo vazio (ou atualiza sua data)
mkdir projetos # cria um diretório
mkdir dir1 dir2 dir3 # vários de uma vez
mkdir -p cursos/linux/lpi # cria também os diretórios intermediários
mkdir "minhas fotos" # nome com espaços (ou: mkdir minhas\ fotos)
cp notas.txt copia.txt # copia um arquivo
cp -r projetos backup # copia um diretório inteiro
mv notas.txt projetos/ # move
mv copia.txt resumo.txt # renomeia
rm resumo.txt # apaga um arquivo
rmdir dir1 # apaga um diretório vazio
rm -r backup # apaga um diretório e todo o seu conteúdo
Cuidado: o
rmnão usa lixeira. O que você apaga desaparece. Acrescente-ipara que ele peça confirmação.
Uma diferença que cai no exame: o mv mantém o proprietário e as permissões do arquivo, porque
não cria um novo; o cp cria um arquivo novo que pertence ao usuário que copia.
E lembre-se: o Linux diferencia maiúsculas de minúsculas. Notas.txt e notas.txt são
arquivos diferentes.
O histórico
history # lista os comandos executados, numerados
!123 # repete o comando número 123
!! # repete o último comando
Ctrl + R busca para trás no histórico enquanto você digita.
Curingas (globbing)
Os curingas permitem se referir a vários arquivos de uma vez. O shell os expande antes de executar o comando.
| Curinga | Significado | Exemplo | Corresponde a |
|---|---|---|---|
* |
Qualquer quantidade de caracteres (até nenhum) | ls *.txt |
notas.txt, a.txt |
? |
Exatamente um caractere | ls foto?.jpg |
foto1.jpg, fotoA.jpg |
[abc] |
Um dos caracteres indicados | ls relatorio[123].pdf |
relatorio1.pdf, relatorio3.pdf |
[a-z] |
Um caractere do intervalo | ls [a-c]* |
arquivos que começam com a, b ou c |
[!abc] |
Qualquer caractere exceto esses | ls [!0-9]* |
arquivos que não começam com dígito |
[[:digit:]] |
Uma classe de caracteres (dígitos, letras...) | ls *[[:digit:]].log |
app1.log, app2.log |
ls *.txt # todos os .txt
ls ??.conf # nomes de dois caracteres terminados em .conf
cp *.jpg ~/fotos/ # copia todas as imagens .jpg
rm log-2026-0[1-3]-*.txt # apaga os logs de janeiro a março
Uma dica ao montar padrões: comece pela parte mais distintiva, que muitas vezes está no final do nome (a extensão), e vá acrescentando condições para a esquerda.
Ideias-chave
- O shell (Bash) interpreta o que você digita; a sintaxe é comando, opções, argumentos.
- As aspas duplas expandem variáveis; as simples, não.
typedistingue comandos internos de externos;whichmostra o caminho de um executável.PATHdiz onde procurar comandos; para mudanças permanentes,~/.bashrc.- Ajuda:
--help,man(com seções),info,whatis,apropos,locate. - Caminhos absolutos começam em
/; os relativos, no diretório atual..,..,~. - O
mvmantém o proprietário; ocpcria um arquivo novo. O Linux diferencia maiúsculas. - Curingas:
*,?,[...],[!...]e classes como[[:digit:]].