Linux Cheat Sheet
Comandos terminal, bash, pipes e one-liners
Navegação
Lista o conteúdo de um directório com permissões, tamanho e data.
ls -la /var/log
Muda o directório actual. Sem argumento vai para o home.
cd /etc/nginx cd ~ cd - cd ..
Mostra o caminho completo do directório actual.
pwd
Mostra a árvore de directórios em formato visual.
tree -L 2 ~/projects
Identifica o tipo de um ficheiro (texto, binário, imagem, script, etc).
file image.png file -i script.sh
Mostra metadados detalhados de um ficheiro (tamanho, inode, datas, permissões).
stat file.txt stat -c "%n %s %y" file.txt
Ficheiros
Cria um ficheiro vazio ou actualiza a data de modificação.
touch newfile.txt touch -t 202601011200 file.txt
Cria um directório. Com -p cria toda a estrutura de pais que faltarem.
mkdir -p projects/app/src mkdir -m 700 secret
Apaga um directório que esteja vazio.
rmdir empty_dir rmdir -p a/b/c
Apaga ficheiros ou directórios. Com -rf apaga recursivo e sem confirmar (perigoso).
rm file.txt rm -rf node_modules
Copia ficheiros ou directórios.
cp file.txt backup.txt cp -r src/ dest/
Move ou renomeia ficheiros e directórios.
mv old.txt new.txt mv *.log archive/
Cria links: -s para link simbólico, sem flag para hard link.
ln -s /usr/local/bin/node ~/node ln file hardlink
Imprime o conteúdo de um ou mais ficheiros para stdout.
cat file.txt cat -n script.sh
Visualiza ficheiros página a página com navegação. Pesquisa com /. +F segue como tail -f.
less /var/log/syslog less +F app.log
Mostra as primeiras N linhas de um ficheiro (default: 10).
head -n 20 file.txt head -c 1024 binary
Mostra as últimas N linhas. -f segue o ficheiro à medida que cresce.
tail -n 50 access.log tail -f /var/log/syslog
Conta linhas (-l), palavras (-w), bytes (-c) ou caracteres (-m).
wc -l file.txt wc *.md
Permissões
Altera as permissões (rwx) de ficheiros e directórios.
chmod 755 script.sh chmod +x deploy.sh chmod -R 644 docs/
Altera o dono e/ou grupo de ficheiros.
chown user file.txt chown -R www-data:www-data /var/www
Executa um comando como outro utilizador (por defeito root).
sudo apt update sudo -u postgres psql sudo -i
Muda para outro utilizador. - carrega o ambiente desse utilizador.
su - postgres su -c 'whoami' root
Cria (useradd) ou apaga (userdel) contas de utilizador.
sudo useradd -m -s /bin/bash john sudo userdel -r john
Define ou altera a password de um utilizador.
passwd sudo passwd john
Mostra o utilizador actual (whoami) ou todos os utilizadores ligados (who).
whoami who who -a
Mostra o UID, GID e grupos do utilizador actual.
id id -nG groups
Processos
Lista processos. aux mostra todos os processos com detalhe.
ps aux ps -ef
Mostra processos em tempo real, ordenados por uso de CPU/memória.
top top -u www-data top -p 1234
Envia um sinal a um processo pelo PID. -9 força a terminação (SIGKILL).
kill 1234 kill -9 1234 kill -HUP $(pidof nginx)
Mata processos por nome (killall) ou padrão (pkill).
killall firefox pkill -9 -f node pkill -u john
Gere jobs do shell: jobs lista, fg traz para foreground, bg retoma em background.
jobs fg %1 bg %2 # Ctrl+Z to suspend the foreground job
Corre um comando que continua mesmo depois de fechar o terminal.
nohup ./long-task.sh > out.log 2>&1 & nohup python script.py &
Inicia um processo com prioridade ajustada (nice) ou altera a prioridade (renice).
nice -n 19 ./heavy.sh renice -n 5 -p 1234
Acrescentar & no fim do comando faz correr em background, libertando o terminal.
./server.sh & long-task & disown %1
Rede
Testa conectividade enviando pacotes ICMP. -c limita o número.
ping google.com ping -c 4 8.8.8.8
Faz pedidos HTTP/HTTPS e descarrega ficheiros. Suporta GET, POST, headers, autenticação.
curl https://api.github.com
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url
curl -O https://example.com/file.zipDescarrega ficheiros via HTTP/FTP. Suporta retoma com -c e mirror recursivo.
wget https://example.com/file.zip wget -c <url> wget -r -np https://site/docs/
Liga-se a um servidor remoto via Secure Shell. -L cria túneis para portas locais.
ssh user@host ssh -p 2222 -i ~/.ssh/id_ed25519 user@host ssh -L 8080:localhost:80 user@host
Copia ficheiros via SSH entre máquinas.
scp file.txt user@host:/tmp/ scp -r dir/ user@host:/var/www/ scp user@host:/etc/conf .
Sincroniza ficheiros e directórios eficientemente. -avz é a combinação mais usada.
rsync -avz src/ user@host:/dest/ rsync -av --delete --exclude='.git' a/ b/
Mostra portas em escuta e ligações activas. -tulpn é o uso típico.
ss -tulpn ss -t state established
Consulta DNS. dig é mais detalhado, nslookup mais simples, host mais conciso.
dig google.com dig +short MX gmail.com nslookup example.com 8.8.8.8
Compressão
Empacota e comprime directórios. -czf cria com gzip, -xzf extrai.
tar -czvf archive.tar.gz folder/ tar -xzvf archive.tar.gz tar -tf archive.tar.gz
Compressão zip. unzip -l lista o conteúdo sem extrair.
zip -r out.zip folder/ unzip archive.zip unzip -l archive.zip
Comprime/descomprime ficheiros individuais com gzip. -k mantém o original.
gzip file.txt gzip -d file.txt.gz gzip -k file.txt
Compressão bzip2, mais lenta mas com melhor ratio que gzip.
bzip2 file.txt bunzip2 file.txt.bz2
Compressão xz, ainda melhor ratio. -T0 usa todos os cores.
xz file.txt unxz file.txt.xz xz -T0 file
Formato 7z, alto ratio de compressão. Suporta password e split de archives.
7z a out.7z folder/ 7z x archive.7z 7z a -p out.7z secret.txt
Pesquisa
Procura ficheiros por nome, tipo, tamanho, idade, e executa acções com -exec.
find . -name "*.log" find / -type f -size +100M find . -mtime -7 find . -name "*.tmp" -delete
Procura padrões em ficheiros. -r recursivo, -i ignora maiúsculas, -E ativa regex.
grep -rn "TODO" src/ grep -i error log grep -E "warn|error" file
Processa texto coluna a coluna. Linguagem completa para parsing de ficheiros estruturados.
awk '{print $1}' file.txt
awk -F',' '{print $2}' csv
awk '/error/ {count++} END {print count}' logEdita streams de texto. -i altera o ficheiro no sítio, mais usado para substituições.
sed 's/old/new/g' file sed -i 's/old/new/g' file sed -n '10,20p' file
Encontra binários e ficheiros: locate (cache), which (no PATH), whereis (binário, source, manual).
locate nginx.conf which python3 whereis bash
Redirecionamento
Redireciona stdout para um ficheiro, sobrescrevendo o conteúdo existente.
echo hello > out.txt ls -la > files.txt
Redireciona stdout para um ficheiro acrescentando ao conteúdo existente.
echo "line" >> log.txt date >> events.log
Liga o stdout de um comando ao stdin do seguinte, encadeando processos.
ls -la | grep .conf cat file | sort | uniq
Redireciona stderr (fd 2). 2>&1 junta stderr ao stdout. &> faz ambos em bash.
cmd 2> errors.log cmd > out.log 2>&1 cmd &> all.log
Lê do stdin e escreve para ficheiro E para stdout. -a acrescenta em vez de sobrescrever.
ls | tee files.txt echo 'data' | sudo tee /etc/conf make | tee -a build.log
Constrói comandos a partir do stdin. Indispensável para combinar find ou grep com outros comandos.
find . -name "*.log" | xargs rm
echo "a b c" | xargs -n 1
ls *.txt | xargs -I {} cp {} backup/Ambiente
Define variáveis de ambiente que são herdadas por processos filhos.
export PATH="$PATH:/opt/bin" export API_KEY="abc123" export -p
Lista todas as variáveis de ambiente activas. printenv pode mostrar uma específica.
env printenv PATH env VAR=value command
Cria atalhos para comandos. Define em ~/.bashrc ou ~/.zshrc para serem permanentes.
alias ll='ls -la' alias gs='git status' unalias ll
Imprime texto ou variáveis para stdout. -e activa escapes como \n e \t.
echo "Hello $USER" echo -e "line1\nline2" echo $PATH
Carrega um script no shell actual (não num subshell). Útil para .bashrc e venv.
source ~/.bashrc . ~/.zshrc source venv/bin/activate
Mostra histórico de comandos. !! repete o último, !N executa o comando N.
history history | grep ssh !! !42
Pacotes
Gestor de pacotes Debian/Ubuntu. apt é mais moderno e amigável que apt-get.
sudo apt update && sudo apt upgrade sudo apt install nginx sudo apt remove --purge package apt search keyword
Gestor de pacotes Red Hat/Fedora/CentOS. dnf é o sucessor moderno do yum.
sudo dnf install nginx sudo yum update dnf search keyword
Gestor de pacotes para macOS e Linux com fórmulas mantidas pela comunidade.
brew install wget brew update && brew upgrade brew list brew search node
Gestor de pacotes Arch Linux. -Syu actualiza tudo, -S instala, -R remove.
sudo pacman -S nginx sudo pacman -Syu pacman -Ss keyword
Pacotes universais com sandboxing. Instalam em qualquer distribuição moderna.
sudo snap install code flatpak install flathub org.gimp.GIMP snap list
SSH
Gera pares de chaves SSH. ed25519 é a recomendação actual (mais rápido e seguro que RSA).
ssh-keygen -t ed25519 -C "john.doe@example.com" ssh-keygen -t rsa -b 4096
Copia a chave pública para o ~/.ssh/authorized_keys do servidor remoto.
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
Agente SSH guarda chaves desencriptadas em memória para não pedir passphrase a cada conexão.
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l
Cliente SFTP interactivo para transferir ficheiros via SSH.
sftp user@host put file.txt get remote.zip ls bye
Ficheiro de configuração SSH por host. Permite alias, identidade, porta, jump host.
Host myserver HostName 1.2.3.4 User john Port 2222 IdentityFile ~/.ssh/id_ed25519
Disco
Mostra espaço usado e disponível por sistema de ficheiros. -h em formato legível.
df -h df -h / df -i
Mostra o espaço ocupado por ficheiros e directórios. -sh resumo em formato legível.
du -sh * du -h --max-depth=1 du -ah . | sort -rh | head -20
Monta um sistema de ficheiros num ponto de montagem. umount desmonta.
mount sudo mount /dev/sdb1 /mnt/data sudo umount /mnt/data
Lista discos e partições em formato de árvore (lsblk) ou tabela (fdisk).
lsblk lsblk -f sudo fdisk -l
Mostra memória RAM total, usada, livre e cache. -h em formato legível.
free -h free -m free -h -s 2
Monitorização
Versão melhorada do top com cores, scroll e mata processos com F9.
htop htop -u www-data htop -p 1234,5678
Estatísticas de memória virtual, CPU, IO. Útil para diagnosticar bottlenecks.
vmstat vmstat 2 5
Estatísticas de IO de discos. Identifica discos saturados.
iostat iostat -xz 2
Mostra mensagens do kernel. Útil para diagnosticar problemas de hardware ou drivers.
sudo dmesg | tail sudo dmesg -T sudo dmesg -w
Controla serviços systemd: arrancar, parar, ver estado, activar no boot.
sudo systemctl start nginx sudo systemctl status sshd sudo systemctl enable docker
Logs do systemd. -f segue ao vivo, -u filtra por serviço, --since por tempo.
journalctl -u nginx journalctl -f journalctl --since "1 hour ago" journalctl -p err
uptime mostra há quanto tempo o sistema está ligado e a load average. w lista utilizadores e o que fazem.
uptime w
Avançado
Repete um comando periodicamente. -d destaca alterações entre execuções.
watch -n 2 "df -h" watch -d "ls -l" watch "ps aux | grep node"
Cria sessões de terminal persistentes que sobrevivem a logouts. Versão clássica.
screen -S work screen -r work screen -ls # Ctrl+A D to detach
Multiplexador de terminal moderno: múltiplas janelas, panes e sessões persistentes.
tmux new -s work tmux attach -t work tmux ls # Ctrl+B D to detach
Agendador de tarefas periódicas. crontab -e edita os jobs do utilizador actual.
crontab -e crontab -l 0 3 * * * /script.sh # daily at 3am */15 * * * * /poll.sh # every 15 minutes
Agenda um comando para correr uma única vez no futuro.
echo "/script.sh" | at now + 1 hour at 14:30 tomorrow atq at -r 5
Referência
Cada processo tem três streams por defeito identificadas por file descriptors. Compreender estas streams é a chave para combinar comandos com pipes e redirecionamentos.
stdinfd 0Entrada padrão. Por defeito vem do teclado, mas pode ser substituída por um ficheiro com < ou pelo stdout de outro comando via pipe.
stdoutfd 1Saída padrão. Por defeito vai para o terminal. Redireciona-se com > (sobrescrever) ou >> (acrescentar).
stderrfd 2Erros e avisos. É uma stream separada para os erros não se misturarem com a saída normal. Redireciona-se com 2>.
cmd > out.txt # stdout → file cmd 2> err.txt # stderr → file cmd > out 2>&1 # stdout + stderr → file cmd &> all.txt # bash shorthand cmd < input.txt # stdin ← file cmd1 | cmd2 # stdout cmd1 → stdin cmd2
Cada ficheiro tem três grupos de permissões (utilizador, grupo, outros) com três bits cada (read, write, execute). Em formato numérico cada grupo é a soma dos bits.
u— dono do ficheirog— grupo do ficheiroo— todos os outrosa— todos (u+g+o)
r= 4 — lerw= 2 — escreverx= 1 — executar (ou entrar em directório)
chmod 755 file # rwx r-x r-x (typical script) chmod 644 file # rw- r-- r-- (regular file) chmod 600 file # rw- --- --- (private, e.g. SSH key) chmod 700 dir # rwx --- --- (private dir) chmod +x script.sh # add execute for everyone chmod u+w,g-w file # add write to owner, remove from group chmod -R 755 dir/ # recursive
O shell pode ter vários jobs em simultâneo. Apenas o job em foreground ocupa o terminal; os jobs em background continuam a correr enquanto escreves outros comandos.
Job que está a usar o terminal. Recebe input do teclado e mostra output. Bloqueia o prompt até terminar.
Job a correr em paralelo, sem ocupar o terminal. Liberta o prompt para outros comandos. Termina-se com kill ou trazendo para fg.
./long-task.sh & # start in background Ctrl+Z # suspend the foreground job jobs # list jobs of the current shell fg %1 # bring job 1 to foreground bg %1 # resume job 1 in background disown %1 # detach from shell (survives logout) nohup ./task.sh & # ignore HUP, redirect to nohup.out ps -ef # list all system processes
Combinações de comandos frequentes no dia a dia. Cada uma resolve uma tarefa específica num único pipeline.
- 01.Encontra ficheiros maiores que 100MB em todo o sistema.
find / -type f -size +100M 2>/dev/null - 02.Lista os 10 ficheiros maiores no directório actual.
du -ah . | sort -rh | head -10 - 03.Pesquisa e substitui texto em todos os ficheiros que o contêm.
grep -rl 'old' . | xargs sed -i 's/old/new/g' - 04.Conta o número total de ficheiros recursivamente.
find . -type f | wc -l - 05.Mostra todos os utilizadores actualmente ligados ao sistema.
who - 06.Torna todos os scripts .sh executáveis recursivamente.
find . -name '*.sh' -exec chmod +x {} + - 07.Repete um comando a cada 2 segundos para ver alterações em tempo real.
watch -n 2 "df -h" - 08.Obtém o IP público externo da máquina actual.
curl -s ifconfig.me - 09.Lista todas as portas abertas e os processos que as usam.
ss -tulpn - 10.Mostra os 10 processos que mais memória consomem.
ps aux --sort=-%mem | head -10 - 11.Mostra os 10 processos que mais CPU consomem.
ps aux --sort=-%cpu | head -10 - 12.Encontra symlinks quebrados (apontam para ficheiros inexistentes).
find . -xtype l - 13.Apaga todos os ficheiros .DS_Store gerados pelo macOS.
find . -name '.DS_Store' -delete - 14.Cria um backup tar.gz com a data no nome do ficheiro.
tar czf backup-$(date +%F).tar.gz folder/ - 15.Inicia um servidor HTTP simples na porta 8000 para partilhar ficheiros.
python3 -m http.server 8000 - 16.Formata e imprime JSON de forma legível.
cat data.json | python3 -m json.tool - 17.Acompanha um log em tempo real começando pelas últimas 100 linhas.
tail -f -n 100 logfile - 18.Encontra todos os ficheiros e directórios vazios.
find . -empty - 19.Conta linhas de código somando todos os ficheiros .py do projecto.
find . -name '*.py' | xargs wc -l - 20.Mostra o tamanho de cada subdirectório ordenado do menor para o maior.
du -h --max-depth=1 | sort -h