
Decorar comando não é o objetivo — saber que ele existe é. Este guia é a referência rápida do terminal Linux organizada por tarefa: você bate o olho, acha a família certa e vai fundo no man. No fim há o PDF com mais de 500 comandos, para baixar e consultar offline.
Antes de tudo: como descobrir o resto sozinho
Quatro comandos que substituem metade das buscas no Google:
man tar # o manual completo, a fonte da verdade
tar --help # o resumo, quando o man é longo demais
apropos compress # procura comando pela descrição, quando você não sabe o nome
type -a ls # o que é isso? alias, builtin, binário? onde está?
E o mais útil que não vem instalado: o tldr, que mostra exemplos práticos em vez de sintaxe formal.
sudo apt install tldr # ou: sudo dnf install tealdeer / sudo pacman -S tealdeer
tldr tar
pwd # onde estou
cd /var/log # ir para o diretório
cd - # voltar ao diretório anterior
ls -lah # listar: longo, ocultos, tamanho legível
ls -lt # ordenar pelo mais recente
tree -L 2 # árvore de diretórios, 2 níveis
cp origem destino # copiar
cp -a pasta/ /backup/ # copiar preservando tudo (dono, data, links)
mv antigo novo # mover ou renomear
rm -i arquivo # remover perguntando antes
rm -rf pasta/ # remover recursivo e sem perguntar (cuidado)
mkdir -p a/b/c # criar a árvore inteira
ln -s /opt/app/bin/app /usr/local/bin/app # link simbólico
touch arquivo # criar vazio ou atualizar a data
stat arquivo # metadados: inode, permissão, três datas
file arquivo # que tipo de arquivo é este, de verdade
readlink -f link # para onde o link aponta, resolvido
basename /a/b/c.txt # c.txt
dirname /a/b/c.txt # /a/b
Ver e editar texto
cat arquivo # despejar o conteúdo
less arquivo # paginar (q sai, / busca, G vai ao fim)
head -n 20 arquivo # primeiras 20 linhas
tail -n 50 arquivo # últimas 50
tail -f /var/log/syslog # acompanhar em tempo real
wc -l arquivo # contar linhas
nano arquivo # editor simples
vim arquivo # editor do sysadmin (:wq salva e sai)
diff -u antigo novo # diferença entre dois arquivos
comm -3 a.txt b.txt # o que está em um e não no outro (arquivos ordenados)
tee arquivo # escrever na tela E no arquivo ao mesmo tempo
sudo tee /etc/x.conf # o truque para escrever em arquivo de root com pipe
Procurar
find /var -name "*.log" # por nome
find . -type f -size +100M # arquivos maiores que 100 MB
find . -mtime -1 # modificados nas últimas 24h
find . -name "*.tmp" -delete # achar e apagar
find . -type f -print0 | xargs -0 grep -l "senha" # nomes com espaço, sem quebrar
grep -rn "erro" /var/log # recursivo, com número de linha
grep -i "warning" arquivo # ignorando maiúscula
grep -v "^#" /etc/ssh/sshd_config # tirar comentários
grep -c "404" access.log # contar ocorrências
grep -A3 -B3 "falhou" log # com 3 linhas de contexto
locate nginx.conf # busca no índice (rode updatedb antes)
which python3 # onde está o binário do PATH
whereis python3 # binário, fonte e manual
Processar texto: o poder real do shell
cut -d: -f1 /etc/passwd # coluna 1, separador ":"
sort arquivo | uniq -c | sort -rn # contar e ranquear ocorrências
tr 'a-z' 'A-Z' < arquivo # trocar caractere
sed 's/antigo/novo/g' arquivo # substituir (na saída)
sed -i.bak 's/antigo/novo/g' arquivo # substituir no arquivo, com backup
awk '{print $1, $9}' access.log # imprimir colunas
awk '$9 == 404 {print $7}' access.log # filtrar por coluna e imprimir outra
awk '{soma+=$1} END {print soma}' nums # somar uma coluna
paste a.txt b.txt # colar arquivos lado a lado
column -t arquivo # alinhar em colunas
jq '.items[].name' dados.json # o awk do JSON
O combo que resolve a maioria das análises de log: grep filtra, awk escolhe a coluna, sort | uniq -c | sort -rn ranqueia.
Permissões e propriedade
chmod 644 arquivo # dono lê/escreve, resto só lê
chmod 755 script.sh # executável para todos
chmod +x script.sh # só ligar o bit de execução
chmod -R g+w pasta/ # recursivo, dá escrita ao grupo
chown usuario:grupo arquivo
chown -R www-data:www-data /var/www
umask 022 # permissão padrão dos arquivos novos
getfacl arquivo # ACLs, quando chmod não basta
setfacl -m u:joao:rw arquivo
sudo comando # rodar como root
sudo -u www-data comando # rodar como outro usuário
visudo # editar o sudoers com validação de sintaxe
Compactar e arquivar
tar czf pacote.tar.gz pasta/ # criar (c) gzip (z) arquivo (f)
tar xzf pacote.tar.gz # extrair
tar tzf pacote.tar.gz # listar sem extrair
tar xzf pacote.tar.gz -C /destino # extrair em outro lugar
tar cJf pacote.tar.xz pasta/ # xz: comprime mais, demora mais
zip -r pacote.zip pasta/
unzip pacote.zip
gzip arquivo / gunzip arquivo.gz
zcat log.gz | grep erro # ler comprimido sem descompactar
O mnemônico do tar: criar, extrair, listar.
Processos
ps aux # todos os processos
ps aux | grep nginx # filtrar
pgrep -a nginx # PIDs e linha de comando
top # monitor interativo clássico
htop # a versão civilizada (instale)
btop # a versão bonita (instale)
kill 1234 # pedir para terminar (SIGTERM)
kill -9 1234 # matar sem chance de limpeza (último recurso)
pkill -f "python script" # matar pelo padrão da linha de comando
killall nginx
nice -n 10 comando # rodar com prioridade baixa
renice -n 5 -p 1234 # mudar prioridade de processo em execução
nohup comando & # continua depois que você desloga
comando & # em segundo plano
jobs / fg / bg # gerenciar os jobs do shell
lsof -p 1234 # arquivos abertos pelo processo
lsof -i :80 # quem está usando a porta 80
Disco e sistemas de arquivos
df -h # espaço livre por partição
du -sh * # tamanho de cada item do diretório atual
du -sh * | sort -rh | head # os maiores primeiro
ncdu /var # explorador de espaço interativo (instale)
lsblk -f # discos, partições e sistemas de arquivos
blkid # UUID e tipo de cada partição
mount /dev/sdb1 /mnt # montar
umount /mnt # desmontar
findmnt # o que está montado, em árvore
fdisk -l # particionamento (MBR/GPT)
mkfs.ext4 /dev/sdb1 # formatar
fsck /dev/sdb1 # checar (só com a partição desmontada)
smartctl -a /dev/sda # saúde do disco (pacote smartmontools)
Usuários e grupos
whoami / id / groups
adduser joao # criar usuário (interativo, Debian/Ubuntu)
usermod -aG sudo joao # adicionar ao grupo — o -a é obrigatório
passwd joao # trocar senha
deluser joao # remover
su - joao # virar outro usuário
last # últimos logins
w # quem está logado agora e fazendo o quê
Pacotes
# Debian / Ubuntu
apt update && apt upgrade
apt install pacote
apt remove pacote / apt purge pacote
apt search termo / apt show pacote
apt list --installed
dpkg -l | grep nome # o que está instalado
dpkg -S /usr/bin/ls # de qual pacote veio este arquivo
# Fedora / RHEL / Rocky
dnf install pacote / dnf remove pacote
dnf search termo / dnf info pacote
rpm -qa | grep nome
rpm -qf /usr/bin/ls
# Arch
pacman -Syu / pacman -S pacote / pacman -Rns pacote
pacman -Qs termo / pacman -Qo /usr/bin/ls
# universais
snap list / flatpak list
Rede
ip a # endereços das interfaces (substitui ifconfig)
ip r # tabela de rotas
ip link set eth0 up
ss -tulpn # portas em escuta e processos (substitui netstat)
ss -tn state established # conexões abertas
ping -c4 1.1.1.1
traceroute exemplo.com / mtr exemplo.com
dig exemplo.com +short # consulta DNS
dig @1.1.1.1 exemplo.com MX
host exemplo.com
curl -I https://exemplo.com # só os cabeçalhos
curl -s -o /dev/null -w '%{http_code}n' URL # só o código HTTP
curl -fLO https://exemplo.com/arquivo.tar.gz # baixar mantendo o nome
wget -c https://exemplo.com/grande.iso # baixar com retomada
nmap -p 1-1000 servidor # varredura de portas (só onde você tem autorização)
tcpdump -i eth0 port 80 # capturar pacote
nc -zv servidor 22 # a porta está aberta?
SSH e transferência
ssh usuario@servidor
ssh -p 2222 usuario@servidor
ssh-keygen -t ed25519 # gerar par de chaves
ssh-copy-id usuario@servidor # instalar a chave pública lá
scp arquivo usuario@servidor:/destino/
scp -r pasta/ usuario@servidor:/destino/
rsync -avz --progress origem/ usuario@servidor:/destino/
rsync -avz --delete origem/ /backup/ # espelhar (apaga o que sumiu na origem)
ssh -L 8080:localhost:80 usuario@servidor # túnel local
ssh -D 1080 usuario@servidor # proxy SOCKS
A barra final em rsync muda tudo: origem/ copia o conteúdo, origem copia a pasta.
systemd e serviços
systemctl status nginx
systemctl start|stop|restart|reload nginx
systemctl enable --now nginx # habilitar no boot e iniciar agora
systemctl disable nginx
systemctl list-units --type=service --state=running
systemctl daemon-reload # depois de editar uma unit
systemctl cat nginx # ver a unit inteira
systemctl edit nginx # sobrescrever sem tocar no original
systemd-analyze blame # o que está demorando no boot
journalctl -u nginx -f # log do serviço, ao vivo
journalctl -p err -b # só erros, deste boot
journalctl --since "1 hour ago"
journalctl --disk-usage / journalctl --vacuum-time=7d
Sistema e desempenho
uname -a # kernel e arquitetura
hostnamectl # hostname, SO, kernel, virtualização
uptime # tempo ligado e carga
free -h # memória
vmstat 1 # CPU, memória, I/O a cada segundo
iostat -x 1 # I/O por disco (pacote sysstat)
sar -u 1 5 # histórico de CPU
lscpu / lsmem / lspci / lsusb / lsmod
dmesg -T | tail -50 # mensagens do kernel com data
sensors # temperatura (pacote lm-sensors)
Agendamento
crontab -e # editar o cron do usuário
crontab -l # listar
# min hora dia mês diadasemana comando
# 0 3 * * * /opt/backup.sh → todo dia às 3h
at 22:00 # executar uma única vez (Ctrl-D encerra)
systemd-run --on-active=30m /opt/script.sh # timer descartável
systemctl list-timers # timers do systemd
O shell em si
history | grep ssh # o que eu digitei mesmo?
!! # repetir o último comando
sudo !! # repetir o último com sudo
!$ # último argumento do comando anterior
Ctrl-R # busca reversa no histórico
Ctrl-A / Ctrl-E # início / fim da linha
Ctrl-L # limpar a tela
Ctrl-C / Ctrl-Z # interromper / suspender
comando1 | comando2 # pipe: saída de um vira entrada do outro
comando > arquivo # redirecionar saída (sobrescreve)
comando >> arquivo # acrescentar
comando 2> erros.txt # redirecionar só o erro
comando &> tudo.txt # saída e erro juntos
comando1 && comando2 # só roda o segundo se o primeiro deu certo
comando1 || comando2 # só roda o segundo se o primeiro falhou
alias ll='ls -lah' # atalho (ponha no ~/.bashrc para durar)
export VAR=valor
echo $PATH
watch -n2 'df -h' # repetir um comando a cada 2 segundos
timeout 10 comando # matar se passar de 10 segundos
yes | comando # responder "sim" para tudo
screen / tmux # sessão que sobrevive à queda do SSH
A geração nova de ferramentas
Substitutos modernos que valem a instalação — mais rápidos, com saída mais legível e padrões melhores:
| Clássico | Moderno | Ganho |
|---|---|---|
grep |
rg (ripgrep) |
Muito mais rápido; ignora .git and .gitignore sozinho |
find |
fd |
Sintaxe humana: fd ".log$" |
cat |
bat |
Cor por sintaxe e número de linha |
ls |
eza |
Cores, ícones, status do git |
du |
dust / ncdu |
Mostra onde o espaço foi, visualmente |
df |
duf |
Tabela legível por tipo de montagem |
top |
btop |
Gráfico de CPU, memória, rede e disco |
cd |
zoxide |
Aprende os diretórios que você usa |
man |
tldr |
Exemplos práticos em vez de sintaxe formal |
| — | fzf |
Busca difusa em qualquer lista; casa com Ctrl-R |
Cinco hábitos que evitam desastre
- Teste o
rmwithlsantes. Rode o mesmo padrão comls; se a lista estiver certa, troque porrm. - Cuidado com o espaço.
rm -rf /home/user /tmpapaga duas coisas, não uma. - Sempre
-ior--dry-runquando o comando é destrutivo — thersynctem-n, ofindtem-printantes do-delete. - Copie o arquivo de configuração antes de editar:
cp x.conf x.conf.bak. Custa um segundo. - Valide antes de recarregar:
nginx -t,apachectl configtest,visudo,named-checkconf. Serviço que não sobe às três da manhã sempre foi editado sem validar.
Baixe o guia completo em PDF
A apostila em português com mais de 500 comandos explicados, gratuita e livre para compartilhar:
Útil para iniciante, para quem está no meio do caminho e também para quem já é avançado e precisa relembrar. E, antes de sair executando como root, a frase de sempre: “com grandes poderes vêm grandes responsabilidades”.
Para continuar: a Série Servidores Linux aplica boa parte disso na prática, e um assistente de IA no terminal explica qualquer um destes comandos na hora em que você travar.