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

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

  1. Identificar qual shell está a usar com echo $SHELL.
  2. Navegar para /etc, /var/log e /home e listar o conteúdo de cada um.
  3. Criar um directório de teste, criar ficheiros dentro, copiar e mover.
  4. Alterar permissões de um ficheiro para 644, 755 e 600 e verificar com ls -l.
  5. Usar find para procurar todos os ficheiros .conf em /etc.
  6. Usar grep para procurar uma palavra num ficheiro de log.
  7. Encadear três comandos com pipe (ex: ls -la /etc | grep conf | wc -l).
  8. Ler a man page de ls e encontrar uma flag que ainda não usou.

Artigos Relacionados