Dia 1: Terminal, Shell e Comandos Essenciais — Linux do Zero
O terminal é a ferramenta mais importante para qualquer administrador Linux, DevOps ou infrastructure engineer. Ao contrário do Windows, onde a GUI é o interface principal, em Linux a linha de comandos é o centro das operações — toda a configuração de servidor, automação, troubleshooting e deployment passa pelo shell. Este primeiro dia do curso de Linux em 30 dias cobre os comandos essenciais de navegação, manipulação de ficheiros e permissões que precisa de dominar antes de avançar para tópicos mais complexos.
Neste artigo
- 1. O Que é o Shell
- 2. Navegação no Sistema de Ficheiros
- 3. Manipulação de Ficheiros e Directórios
- 4. Permissões Básicas
- 5. Pesquisa de Ficheiros e Conteúdos
- 6. Redireccionamento e Pipes
- 7. man e Aprender a Aprender
- 8. Erros Comuns
- 9. Checklist do Dia 1
- Artigos Relacionados
1. O Que é o Shell
O shell é o programa que interpreta os comandos que introduz no terminal e os executa no sistema operativo. Em Linux, o shell padrão na maioria das distribuições é o Bash (Bourne Again Shell), desenvolvido pelo projecto GNU (GNU Bash). Outros shells comuns incluem zsh (padrão no macOS e popular em distribuições modernas), fish (focado em usabilidade) e sh (POSIX shell, usado em scripts de sistema).
Para saber qual shell está a usar:
echo $SHELL
# Output típico: /bin/bash
O terminal (ou emulador de terminal) é a janela gráfica onde se escreve. O shell é o programa que está a correr dentro dela. Esta distinção importa quando se configura ambientes remotos via SSH — o terminal é local, o shell corre no servidor remoto.
A prompt do shell mostra informação de contexto. O formato varia, mas tipicamente inclui:
utilizador@servidor:~/directorio$
# | | | |
# quem onde caminho prompt normal ($)
# prompt de root (#)
O $ indica utilizador normal; # indica root (administrador). Esta convenção é universal em todos os shells Unix.
2. Navegação no Sistema de Ficheiros
O Linux organiza tudo numa árvore hierárquica que começa na raiz / — não há letras de drive como no Windows (C:, D:). Tudo é um ficheiro ou directório sob /.
| Comando | Função | Exemplo |
|---|---|---|
pwd |
Mostra o directório actual (print working directory) | pwd → /home/utilizador |
cd |
Muda de directório (change directory) | cd /var/log |
ls |
Lista conteúdo de um directório | ls -la /etc |
tree |
Mostra árvore de directórios (não instalado por defeito) | tree -L 2 /etc |
Atalhos de navegação essenciais:
cd ~ # Ir para o home do utilizador
cd - # Voltar ao directório anterior
cd .. # Subir um nível
cd ../.. # Subir dois níveis
cd /var/log # Caminho absoluto (começa em /)
cd documentos # Caminho relativo (começa no directório actual)ls -la # Lista tudo (-a inclui ficheiros ocultos) em formato longo (-l)
ls -lh # Tamanhos legíveis (KB, MB, GB)
ls -lt # Ordenar por data de modificação (mais recente primeiro)
ls -lS # Ordenar por tamanho (maior primeiro)
ls -R # Listar recursivamente (subdirectórios)
Os ficheiros ocultos em Linux começam com ponto (.bashrc, .ssh/). O ls sem -a não os mostra — é a forma mais comum de “perder” ficheiros de configuração (man ls).
3. Manipulação de Ficheiros e Directórios
Os comandos seguintes formam o núcleo da manipulação de ficheiros. Praticamente toda a administração de sistema envolve criar, copiar, mover e remover ficheiros.
# Criar
mkdir projecto # Criar directório
mkdir -p a/b/c # Criar directórios aninhados (-p não erro se existir)
touch ficheiro.txt # Criar ficheiro vazio ou actualizar timestamp# Copiar
cp ficheiro.txt copia.txt # Copiar ficheiro
cp -r directorio/ copia_dir/ # Copiar directório recursivamente (-r)
cp -i ficheiro.txt destino/ # Perguntar antes de sobrescrever (-i)
# Mover e renomear
mv ficheiro.txt novo_nome.txt # Renomear
mv ficheiro.txt /tmp/ # Mover para outro directório
mv -i ficheiro.txt destino/ # Perguntar antes de sobrescrever
# Remover
rm ficheiro.txt # Remover ficheiro
rm -r directorio/ # Remover directório recursivamente
rm -rf directorio/ # Forçar (-f), sem confirmação
rm -i ficheiro.txt # Perguntar antes de remover (-i)
# Ver conteúdo
cat ficheiro.txt # Mostrar conteúdo completo
less ficheiro.txt # Paginar (q para sair, / para pesquisar)
head -20 ficheiro.txt # Primeiras 20 linhas
tail -20 ficheiro.txt # Últimas 20 linhas
tail -f /var/log/syslog # Seguir em tempo real (logs)
⚠ Atenção: rm -rf não pede confirmação e não envia para o caixote do lixo. Executado como root, pode destruir um sistema inteiro em segundos. Nunca correr rm -rf / ou variantes com sudo. Usar sempre caminhos absolutos e verificar duas vezes antes de Enter.
4. Permissões Básicas
O modelo de permissões Linux é simples mas fundamental. Cada ficheiro e directório tem três conjuntos de permissões: dono (owner), grupo (group) e outros (others). Cada conjunto tem três flags: read (r), write (w) e execute (x) (Arch Wiki — File permissions).
O ls -l mostra as permissões no primeiro campo:
$ ls -l ficheiro.txt
-rw-r--r-- 1 utilizador grupo 4096 Jul 20 10:30 ficheiro.txt
#|--|---|---|---|
# | | | +-- outros: r-- (ler apenas)
# | | +------ grupo: r-- (ler apenas)
# | +---------- dono: rw- (ler e escrever)
# +-------------- tipo: - = ficheiro, d = directório
As permissões também se representam em octal (números), onde r=4, w=2, x=1:
| Octal | Simbólico | Significado | Uso típico |
|---|---|---|---|
| 755 | rwxr-xr-x | Dono: tudo. Outros: ler e executar | Directórios, scripts executáveis |
| 644 | rw-r–r– | Dono: ler e escrever. Outros: ler | Ficheiros de configuração, documentos |
| 600 | rw——- | Apenas dono: ler e escrever | Chaves SSH, ficheiros sensíveis |
| 700 | rwx—— | Apenas dono: tudo | Directório home, .ssh/ |
| 777 | rwxrwxrwx | Todos: tudo | NUNCA usar em produção |
Comandos para alterar permissões e dono (man chmod, man chown):
# Alterar permissões (chmod)
chmod 755 script.sh # Octal: rwxr-xr-x
chmod u+x script.sh # Simbólico: adicionar execute ao dono
chmod g-w ficheiro.txt # Simbólico: remover write ao grupo
chmod a+r ficheiro.txt # Simbólico: adicionar read a todos (a=all)
chmod -R 644 config/ # Recursivo: toda a directoria# Alterar dono e grupo (chown)
chown utilizador ficheiro.txt # Mudar dono
chown utilizador:grupo ficheiro.txt # Mudar dono e grupo
chown -R utilizador:grupo /var/www/ # Recursivo: toda a directoria
# Alterar apenas grupo (chgrp)
chgrp www-data /var/www/html/index.html
Para directórios, o bit execute tem um significado especial: não significa “executar” mas sim “entrar”. Um directório sem x não pode ser atravessado com cd, mesmo que se tenha permissão de leitura para listar o conteúdo.
5. Pesquisa de Ficheiros e Conteúdos
Encontrar ficheiros e padrões de texto é uma tarefa diária. Os dois comandos essenciais são find (procurar ficheiros por nome, tipo, tamanho, data) e grep (procurar texto dentro de ficheiros) (man find, man grep).
# find — procurar ficheiros
find /etc -name "*.conf" # Por nome (em /etc)
find / -name "*.log" -mtime -1 # Modificados nas últimas 24h
find /var/log -name "*.log" -size +10M # Maiores que 10 MB
find /home -type f -name "*.sh" # Apenas ficheiros (-type f)
find /tmp -type d -empty # Directórios vazios
find . -name "*.tmp" -delete # Procurar e remover# grep — procurar texto
grep "erro" /var/log/syslog # Procurar "erro" num ficheiro
grep -r "Listen" /etc/apache2/ # Recursivo numa directoria
grep -i "error" /var/log/syslog # Case-insensitive
grep -n "Port" /etc/ssh/sshd_config # Mostrar número de linha
grep -v "INFO" /var/log/app.log # Inverter: linhas que NÃO contêm
grep -c "failed" /var/log/auth.log # Contar ocorrências
grep -E "error|warning" /var/log/syslog # Expressão regular (ER estendido)
O find percorre o sistema de ficheiros em tempo real. Para procuras frequentes em sistemas grandes, existe o locate, que usa uma base de dados indexada (actualizada via updatedb) e é muito mais rápido, mas pode não ter ficheiros criados após a última actualização do índice.
6. Redireccionamento e Pipes
Uma das capacidades mais poderosas do shell é a possibilidade de encadear comandos. Cada comando tem três fluxos padrão: stdin (entrada, teclado), stdout (saída, ecrã) e stderr (erros, ecrã). O shell permite redireccionar estes fluxos.
# Redireccionar saída (stdout)
ls -la > listagem.txt # Escrever para ficheiro (substitui)
ls -la >> listagem.txt # Acrescentar ao ficheiro (append)# Redireccionar entrada (stdin)
mysql < backup.sql # Ler ficheiro como entrada
# Redireccionar erros (stderr)
comando 2> erros.log # Erros para ficheiro
comando > output.log 2>&1 # stdout e stderr para o mesmo ficheiro
comando > /dev/null 2>&1 # Descartar tudo (silencioso)
# Pipe — saída de um comando como entrada do próximo
cat /var/log/syslog | grep "error" # Filtrar logs
ps aux | grep nginx # Procurar processo
ls -la | wc -l # Contar ficheiros
dmesg | grep -i usb | tail -20 # Últimas 20 linhas sobre USB
grep "failed" /var/log/auth.log | wc -l # Contar falhas de auth
O pipe | é a peça central da filosofia Unix: cada comando faz uma coisa bem, e os comandos combinam-se como blocos de Lego. Um sysadmin experiente raramente usa um comando isolado — quase tudo é uma cadeia de pipes.
7. man e Aprender a Aprender
O comando mais importante deste artigo não é ls, grep ou chmod — é man. O man (manual) dá acesso à documentação de qualquer comando, sem precisar de internet.
man ls # Manual do comando ls
man 5 crontab # Secção 5 (formato de ficheiros) do crontab
man -k password # Procurar manuais que mencionam "password"
man -k "copy" # Procurar comandos relacionados com "copy"
whatis grep # Descrição de uma linha do comando
apropos disk # Sinónimo de man -k disk
As man pages estão organizadas em secções: 1 = comandos de utilizador, 5 = formatos de ficheiro, 8 = administração de sistema. Quando se procura man crontab, o sistema mostra a secção 1 (o comando). Para ver o formato do ficheiro, usa-se man 5 crontab.
Nota: Dentro de uma man page, usar / para pesquisar texto, n para próxima ocorrência, N para anterior, e q para sair. As man pages usam o paginador less — os mesmos atalhos aplicam-se a qualquer comando paginado.
8. Erros Comuns
| Problema | Causa | Solução |
|---|---|---|
| Permission denied | Falta de permissões de leitura/execução no ficheiro ou directório | Verificar com ls -l; ajustar com chmod ou usar sudo se apropriado |
| Command not found | Comando não instalado ou não no PATH | Instalar pacote (apt install / dnf install) ou usar caminho completo |
| No such file or directory | Caminho incorrecto ou ficheiro não existe | Verificar com pwd e ls; usar caminho absoluto para evitar ambiguidade |
| cd não entra no directório | Falta bit de execute (x) no directório | chmod +x directorio — em directórios, x significa permissão de atravessar |
| rm apaga sem perguntar | Alias rm -f definido ou falta -i |
Usar sempre rm -i em produção; verificar aliases com alias |
| grep não encontra padrão óbvio | Case-sensitive por defeito | Usar grep -i para ignorar maiúsculas/minúsculas |
9. Checklist do Dia 1
- Identificar qual shell está a usar com
echo $SHELL. - Navegar para
/etc,/var/loge/homee listar o conteúdo de cada um. - Criar um directório de teste, criar ficheiros dentro, copiar e mover.
- Alterar permissões de um ficheiro para 644, 755 e 600 e verificar com
ls -l. - Usar
findpara procurar todos os ficheiros.confem/etc. - Usar
greppara procurar uma palavra num ficheiro de log. - Encadear três comandos com pipe (ex:
ls -la /etc | grep conf | wc -l). - Ler a man page de
lse encontrar uma flag que ainda não usou.
Artigos Relacionados
- Dia 2: Sistema de Ficheiros Linux — Hierarquia FHS, Mounts e Links — próximo artigo do curso, cobre a estrutura de directórios do Linux em profundidade
- Diagnóstico de Conectividade Linux Avançado — artigo existente no kbase.pt que usa muitos dos comandos aqui introduzidos em cenários reais de troubleshooting