Guia rápido de comandos Linux — mais de 200 comandos por tarefa

Comandos Linux por tarefa, de arquivos e permissões a rede, systemd e processamento de texto. Cada entrada tem opções, exemplos para copiar e notas sobre o macOS.

Guia rápido de comandos Linux · freetoolsforweb.com/tools/linux-commands-cheat-sheet · verificado em 2026-10-18

Última verificação: 2026-10-18, conferido com manuais do GNU coreutils 9.x, util-linux, procps-ng, iproute2, systemd e bash 5.2; notas de macOS conferidas com as man pages do macOS 26.

215 entradas em 15 seções

Ver e editar texto

Leia arquivos, percorra logs, edite no terminal e compare versões.

cat

Mostrar ou juntar arquivos

Linux · macOS#
cat [-n] [-A] file...
-n
numera todas as linhas
-A
mostra tabs como ^I e fins de linha como $ (GNU); revela finais de linha CRLF
cat /etc/os-release

mostrar um arquivo

cat part1.txt part2.txt > whole.txt

concatenar

cat -A script.sh | head

encontrar tabs ocultos e finais de linha ^M do Windows

macOS/BSD: O cat do macOS não tem -A; use cat -vet para ter a mesma visão.

tac

Mostrar um arquivo da última linha para a primeira

Linux#
tac file
tac access.log | head

linhas de log mais novas primeiro

macOS/BSD: Não existe no macOS; use tail -r arquivo.

less

Percorrer um arquivo ou saída longa página por página

Linux · macOS#
less [-N] [-S] [+F] file
Space / b
desce / sobe uma página
/text
pesquisa para a frente; n próximo, N anterior
g / G
vai para o início / fim
F
acompanha o arquivo como tail -f; Ctrl+C para parar
q
sai
-N
mostra os números das linhas
-S
não quebra linhas longas (rola para o lado)
less /var/log/syslog

ler um log

journalctl -u nginx | less -S

linhas largas sem quebra

head

Mostrar as primeiras linhas de um arquivo

Linux · macOS#
head [-n N] [-c N] file...
-n N
primeiras N linhas (padrão 10)
-c N
primeiros N bytes
-n -N
tudo menos as últimas N linhas (GNU)
head -n 20 data.csv

cabeçalho e primeiras linhas

head -c 512 file.bin | xxd

dar uma olhada no início de um binário

macOS/BSD: O head do macOS não aceita contagens negativas.

tail

Mostrar o fim de um arquivo ou acompanhá-lo ao vivo

Linux · macOS#
tail [-n N] [-f|-F] file...
-n N
últimas N linhas (padrão 10)
-n +N
começa na linha N
-f
continua mostrando conforme o arquivo cresce
-F
acompanha pelo nome, sobrevive à rotação de logs
tail -n 50 app.log

últimas 50 linhas

tail -F /var/log/nginx/access.log

acompanhar um log que sofre rotação

tail -n +2 data.csv

pular a linha de cabeçalho de um CSV

nano

Editar um arquivo com um editor simples

Linux#
nano file
Ctrl+O
salvar
Ctrl+X
sair
Ctrl+W
pesquisar
Ctrl+K / Ctrl+U
recortar linha / colar
Alt+U
desfazer
sudo nano /etc/hosts

editar um arquivo do sistema

A barra de atalhos no rodapé da tela mostra as teclas; ^ significa Ctrl e M- significa Alt.

vim

Editar um arquivo com o vim (e como sair)

Linux · macOS#
vim file
i
modo de inserção (digitar texto)
Esc
volta ao modo normal
:w / :q / :wq
salvar / sair / salvar e sair
:q!
sair sem salvar
/text
pesquisar; n para o próximo
dd / yy / p
apagar linha / copiar linha / colar
u / Ctrl+R
desfazer / refazer
vim +42 app.py

abrir na linha 42

diff

Comparar dois arquivos ou diretórios

Linux · macOS#
diff [-u] [-r] [-q] [-w] a b
-u
formato unificado (o que o patch e o git usam)
-r
compara diretórios recursivamente
-q
só diz se os arquivos diferem
-w
ignora todos os espaços em branco
-y
lado a lado
diff -u old.conf new.conf

visão legível das mudanças

diff -rq dir1/ dir2/

quais arquivos diferem entre duas árvores

diff <(sort a.txt) <(sort b.txt)

comparar depois de ordenar, via substituição de processo

tee

Gravar a saída em um arquivo e na tela ao mesmo tempo

Linux · macOS#
tee [-a] file...
-a
acrescenta em vez de sobrescrever
make 2>&1 | tee build.log

acompanhar um build e guardar um log

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

acrescentar a um arquivo do root (sudo echo >> falha porque quem faz o redirecionamento é o shell)

printf

Imprimir texto formatado de forma confiável

Linux · macOS#
printf 'format' args...
printf '%s\n' "$var"

mostrar uma variável com segurança, mesmo que comece com -n

printf '%-12s %6.2f\n' disk 93.5

colunas alinhadas

echo -e e echo -n se comportam de forma diferente entre shells; o printf se comporta igual em todos.

column

Alinhar a saída em uma tabela

Linux · macOS#
column -t [-s separators]
column -t -s, data.csv | less -S

ler um CSV simples como tabela

mount | column -t

alinhar saída separada por espaços

xxd / hexdump

Ver um arquivo em hexadecimal

Linux · macOS#
xxd file | hexdump -C file
xxd image.png | head

hex e ASCII lado a lado

hexdump -C file.bin | head

dump hexadecimal canônico

O xxd faz parte dos pacotes do vim; o hexdump está no util-linux (bsdextrautils no Debian/Ubuntu mais recentes).

strings

Extrair texto legível de um arquivo binário

Linux · macOS#
strings [-n min] file
-n N
só strings com pelo menos N caracteres (padrão 4)
strings -n 8 firmware.bin | less

encontrar strings de versão, URLs, caminhos

Faz parte do binutils no Linux.

Permissões e propriedade

Veja e altere quem pode ler, gravar e executar um arquivo.

ls -l

Ler uma string de permissões como -rwxr-x---

Linux · macOS#
ls -l file
ls -l deploy.sh

-rwxr-x--- 1 alice devs 812 Oct 18 09:12 deploy.sh

O primeiro caractere é o tipo (- arquivo, d diretório, l link simbólico). Depois vêm três trios: dono, grupo, todos os outros. r=4, w=2, x=1, então rwxr-x--- é 750.

chmod

Alterar permissões com números octais

Linux · macOS#
chmod [-R] mode file...
-R
aplica a um diretório e a tudo dentro dele
-v
informa cada alteração
chmod 644 index.html

dono lê/grava, todos leem: arquivos comuns

chmod 755 deploy.sh

dono tudo, outros leem/executam: scripts e diretórios

chmod 600 ~/.ssh/id_ed25519

chave privada legível só por você; o ssh recusa chaves mais abertas

chmod u+x

Alterar permissões com letras (u/g/o +/-)

Linux · macOS#
chmod [ugoa][+-=][rwxX] file...
chmod +x script.sh

tornar um script executável

chmod go-w file

tirar a gravação do grupo e dos outros

chmod -R u=rwX,go=rX site/

o X maiúsculo dá execução só a diretórios e a arquivos que já tinham

chmod -R 777

Por que chmod -R 777 é a solução errada

PerigosoLinux · macOS#
chmod -R 777 dir
find site/ -type d -exec chmod 755 {} +

a correção certa, parte 1: diretórios 755

find site/ -type f -exec chmod 644 {} +

parte 2: arquivos 644

Perigo: Dá a todos os usuários e a todo serviço comprometido da máquina acesso de gravação à árvore inteira, marca todos os arquivos como executáveis e faz o OpenSSH recusar chaves em um ~/.ssh com 777. Aplicado a /etc ou /usr, pode quebrar o sudo e o sistema. Corrija a propriedade com chown ou use os dois comandos find.

chown

Alterar o dono e o grupo de arquivos

PerigosoLinux · macOS#
chown [-R] user[:group] file...
-R
recursivo
user:
com dois-pontos no fim e sem grupo, também define o grupo como o grupo de login do usuário
sudo chown -R www-data:www-data /var/www/site

entregar a raiz web ao usuário do servidor web

sudo chown "$USER": file.txt

assumir a propriedade de um arquivo criado pelo root

Perigo: sudo chown -R em /, /usr ou /etc apaga os bits setuid e a propriedade de que o sudo, o passwd e os serviços dependem; recuperar costuma significar reinstalar. Confira o caminho duas vezes.

chgrp

Alterar só o grupo de arquivos

Linux · macOS#
chgrp [-R] group file...
chgrp -R developers /srv/shared

passar uma pasta compartilhada para o grupo de uma equipe

umask

Definir as permissões padrão de arquivos novos

Linux · macOS#
umask [mask]
umask

mostra a máscara atual, normalmente 0022

umask 077

arquivos novos 600 e diretórios 700 neste shell

A máscara remove bits: arquivos partem de 666 e diretórios de 777, então 022 dá 644 e 755.

sudo

Executar um comando como root (ou como outro usuário)

Linux · macOS#
sudo [-u user] [-i] command
-i
shell de login do root
-u user
executa como esse usuário em vez do root
-l
lista o que você tem permissão para executar
-k
esquece as credenciais em cache
sudo systemctl restart nginx

um comando de administrador

sudo !!

repetir o comando anterior com sudo

sudo -u postgres psql

executar como usuário de serviço

su

Trocar para outro usuário

Linux · macOS#
su [-] [user]
su - deploy

entrar como deploy com o ambiente dele

sudo su -

shell de root quando o root não tem senha (sudo -i faz o mesmo)

setfacl / getfacl

Dar acesso a um usuário extra com ACLs

Linux#
setfacl -m u:user:perms file
-m
modifica (adiciona) uma entrada
-x
remove uma entrada
-b
remove todas as entradas de ACL
-R
recursivo
-d
define a ACL padrão herdada pelos arquivos novos
setfacl -m u:alice:rw report.xlsx

alice pode ler e gravar, sem mudar o grupo

getfacl report.xlsx

mostrar todas as entradas

setfacl -R -m g:devs:rwX /srv/app

um grupo ganha acesso a uma árvore inteira

Um + no fim da string de permissões do ls -l indica que o arquivo tem ACL.

chattr / lsattr

Tornar um arquivo imutável

Linux#
chattr +i|-i file
sudo chattr +i /etc/resolv.conf

ninguém, nem o root, pode alterar ou apagar o arquivo até usar -i

lsattr /etc/resolv.conf

mostrar atributos; i significa imutável

Funciona em ext4, XFS e Btrfs. Se aparecer "Operation not permitted" mesmo como root, verifique com lsattr.

Processos e jobs

Descubra o que está rodando, pare e execute coisas em segundo plano.

ps

Listar os processos em execução

Linux · macOS#
ps aux | ps -ef | ps -o fields -p PID
aux
todos os processos com CPU, memória, usuário (estilo BSD)
-ef
todos os processos com o PID do pai (estilo System V)
-o
escolhe as colunas
--sort=-%mem
ordena por memória, maior primeiro (procps)
ps aux | grep [n]ginx

o truque do [n] deixa o próprio grep fora dos resultados

ps aux --sort=-%mem | head

quem mais usa memória

ps -o pid,ppid,etime,cmd -p 1234

há quanto tempo um processo está rodando

macOS/BSD: O ps do macOS não tem --sort; use ps aux -m (por memória) ou ps aux -r (por CPU).

pstree

Mostrar os processos em uma árvore pai/filho

Linux#
pstree [-p] [user|PID]
pstree -p

com PIDs

pstree -p 1234

o que um processo criou

top

Acompanhar o uso de CPU e memória ao vivo

Linux · macOS#
top [-u user] [-p PID] [-b -n 1]
P / M
ordena por CPU / memória (top do Linux)
1
mostra cada núcleo da CPU
k
encerra um processo pelo PID
q
sai
-b -n 1
um instantâneo em modo batch, para scripts
top -b -n 1 | head -20

instantâneo que dá para colar em um chamado

macOS/BSD: O top do macOS é outro programa: ordene com top -o cpu ou top -o mem.

htop

Visualizador interativo de processos mais amigável

Linux#
htop [-u user]
F3 or /
pesquisar
F4
filtrar
F6
escolher a coluna de ordenação
F9
enviar um sinal (kill)
t
visão em árvore
htop -u www-data

só os processos de um usuário

Instale com apt install htop / dnf install htop.

pgrep

Encontrar IDs de processos pelo nome

Linux · macOS#
pgrep [-a] [-f] [-u user] pattern
-a
mostra a linha de comando completa (procps do Linux)
-f
compara com a linha de comando completa, não só com o nome
-u user
só os processos desse usuário
-x
correspondência exata do nome
pgrep -a nginx

PIDs e linhas de comando

pgrep -f 'python manage.py runserver'

encontrar um script pelos argumentos

macOS/BSD: No macOS, -a significa "incluir ancestrais"; use pgrep -lf para ver nomes e argumentos.

pkill

Parar processos pelo nome

Linux · macOS#
pkill [-signal] [-f] [-u user] pattern
pkill -f "node server.js"

parar um app Node

pkill -HUP nginx

enviar um sinal de recarga

pgrep -af node

ver o que o -f pegaria antes de encerrar

Os padrões são expressões regulares procuradas em qualquer parte do nome; pkill node também pega o nodejs-helper. Confira antes com pgrep.

kill

Enviar um sinal a um processo (parar, encerrar, recarregar)

Linux · macOS#
kill [-signal] PID...
(none) / -15 / -TERM
pede ao processo que saia de forma limpa (padrão)
-9 / -KILL
encerramento forçado; não pode ser capturado, sem limpeza
-1 / -HUP
muitos daemons recarregam a configuração
-l
lista os nomes dos sinais
kill 1234

parada educada

kill -9 1234

último recurso quando o TERM é ignorado

kill %1

encerrar o job 1 deste shell

Tente primeiro o kill simples e espere alguns segundos: o -9 pula a limpeza, então arquivos temporários, travas e dados gravados pela metade podem ficar para trás.

killall

Encerrar todos os processos com um nome exato

Linux · macOS#
killall [-signal] name
killall firefox

todos os processos do Firefox

No Linux, ele está no pacote psmisc.

Ctrl+Z, bg, fg, jobs

Pausar um comando e continuá-lo em segundo plano

Linux · macOS#
Ctrl+Z; bg [%n]; fg [%n]; jobs
jobs

listar os jobs deste shell com os números

bg %1

retomar o job 1 em segundo plano

fg %1

trazê-lo de volta ao primeiro plano

Ctrl+Z suspende o programa em primeiro plano (ele para até você usar bg ou fg).

&

Iniciar um comando em segundo plano

Linux · macOS#
command &
./long-export.sh > export.log 2>&1 &

iniciar e recuperar o prompt

wait

em um script, esperar os jobs em segundo plano terminarem

nohup

Manter um comando rodando depois de sair da sessão

Linux · macOS#
nohup command > log 2>&1 &
nohup ./server > server.log 2>&1 &

sobrevive ao fechamento da sessão SSH

Para qualquer coisa de longa duração, um serviço systemd (veja Serviços e logs) ou o tmux é mais robusto.

disown

Desvincular do shell um job que já está rodando

Linux · macOS#
disown [-h] [%n]
disown -h %1

esqueceu o nohup: mande para segundo plano com bg e depois use disown

tmux

Manter uma sessão de terminal viva após desconexões

Linux#
tmux new -s name | tmux attach -t name
Ctrl+B d
desanexa (a sessão continua rodando)
Ctrl+B c
nova janela
Ctrl+B % / Ctrl+B "
dividir esquerda/direita / em cima/embaixo
tmux ls
lista as sessões
tmux new -s deploy

iniciar uma sessão com nome

tmux attach -t deploy

reconectar depois que o SSH cair

Instale pelo gerenciador de pacotes. O GNU screen é a alternativa mais antiga (Ctrl+A d para desanexar, screen -r para reanexar).

nice / renice

Executar um comando com prioridade de CPU menor (ou maior)

Linux · macOS#
nice -n N command | renice -n N -p PID
nice -n 19 tar -czf backup.tgz /data

backup que não atrapalha o resto

sudo renice -n -5 -p 1234

aumentar a prioridade de um processo em execução

O valor nice vai de -20 (maior prioridade) a 19 (menor). Só o root pode ir abaixo de 0.

timeout

Encerrar um comando se ele demorar demais

Linux#
timeout [-s signal] duration command
timeout 30s curl -s https://example.com/health

desistir depois de 30 segundos

timeout -s KILL 5m ./job.sh

encerramento forçado depois de cinco minutos

Sai com status 124 quando o tempo limite é atingido.

watch

Repetir um comando a cada poucos segundos

Linux#
watch [-n seconds] [-d] command
watch -n 2 df -h

acompanhar o disco enchendo

watch -d 'ss -s'

-d destaca o que mudou

lsof

Ver qual processo está com um arquivo ou porta aberto

Linux · macOS#
lsof [-i :port] [-p PID] [file]
sudo lsof -i :8080

o que está escutando na porta 8080

sudo lsof +L1

arquivos excluídos ainda abertos (disco cheio, mas o du não mostra nada)

lsof -p 1234

todos os arquivos que um processo tem abertos

fuser

Encontrar (ou encerrar) o que está usando um ponto de montagem ou porta

PerigosoLinux#
fuser [-v] [-m] [-k] target
sudo fuser -vm /mnt/usb

por que o umount diz "target is busy"

sudo fuser -v 8080/tcp

processo em uma porta TCP

Perigo: fuser -k encerra todos os processos que usam o alvo, sem perguntar; em um ponto de montagem, isso pode incluir o seu próprio shell.

time

Medir quanto tempo um comando leva

Linux · macOS#
time command
time ./build.sh

real = tempo de relógio, user + sys = tempo de CPU

strace

Rastrear as chamadas de sistema de um programa

Linux#
strace [-f] [-e trace=...] command | strace -p PID
strace -f -e trace=openat ./app 2>&1 | grep -v ENOENT

quais arquivos ele realmente abre?

sudo strace -p 1234

em que um processo travado está preso?

Informações e recursos do sistema

Versão do SO, kernel, CPU, memória, hardware, hora e carga.

uname

Mostrar a versão do kernel e a arquitetura

Linux · macOS#
uname [-a|-r|-m]
-a
tudo
-r
versão do kernel
-m
arquitetura da máquina: x86_64, aarch64
uname -r

ex.: 6.8.0-45-generic

uname -m

qual binário baixar: x86_64 ou aarch64

cat /etc/os-release

Descobrir a distribuição Linux e a versão

Linux#
cat /etc/os-release
cat /etc/os-release

NAME, VERSION_ID, ID em toda distro da era systemd

lsb_release -a

alternativa no Debian/Ubuntu, se instalado

macOS/BSD: macOS: sw_vers.

hostnamectl

Mostrar ou definir o hostname

Linux#
hostnamectl [set-hostname name]
hostnamectl

hostname, SO, kernel, virtualização

sudo hostnamectl set-hostname web01

renomear a máquina

uptime

Mostrar o uptime e a carga média

Linux · macOS#
uptime
uptime

carga média em 1, 5 e 15 minutos

A carga é o número de processos rodando ou esperando. Compare com o número de CPUs (nproc): carga 4 em 4 núcleos significa ocupação total.

free

Verificar o uso de memória e swap

Linux#
free [-h]
free -h

olhe a coluna "available", não "free"

macOS/BSD: macOS: vm_stat, ou top -l 1 | grep PhysMem.

O Linux usa a RAM livre como cache de disco, então "free" parece baixo em uma máquina saudável. "available" é o que os programas ainda podem obter.

lscpu / nproc

Mostrar o modelo da CPU e o número de núcleos

Linux#
lscpu | nproc
lscpu

modelo, soquetes, núcleos, threads, flags

make -j"$(nproc)"

usar todos os núcleos disponíveis

macOS/BSD: macOS: sysctl -n hw.ncpu e sysctl -n machdep.cpu.brand_string.

lspci / lsusb

Listar dispositivos PCI e USB

Linux#
lspci [-k] | lsusb
lspci -k | grep -A3 -i vga

placa de vídeo e o driver em uso

lsusb

o dispositivo USB foi detectado?

dmidecode / lshw

Mostrar slots de RAM, BIOS e detalhes do hardware

Linux#
sudo dmidecode -t type | sudo lshw -short
sudo dmidecode -t memory | grep -i size

RAM instalada por slot

sudo lshw -short

uma linha por dispositivo

dmesg

Ler as mensagens do kernel (hardware, drivers, OOM kills)

Linux#
dmesg [-T] [-w] [--level=...]
-T
timestamps legíveis
-w
acompanha as mensagens novas
--level=err,warn
só problemas
sudo dmesg -T | tail -30

o que acabou de acontecer (USB conectado, erros de disco)

sudo dmesg -T | grep -i 'out of memory'

o OOM killer derrubou seu app?

/proc

Ler informações brutas de CPU, memória e processos em /proc

Linux#
cat /proc/<file>
grep MemAvailable /proc/meminfo

memória disponível em kB

grep -c ^processor /proc/cpuinfo

número de CPUs lógicas

cat /proc/1234/status

estado e memória de um processo

vmstat / iostat

Ver se o gargalo é CPU, memória ou disco

Linux#
vmstat interval count | iostat -xz interval
vmstat 1 5

r = fila de execução, si/so = swap, wa = espera por E/S

iostat -xz 1

utilização por disco (%util) e latência (await)

O iostat vem do pacote sysstat.

date

Mostrar ou calcular datas e timestamps Unix

Linux · macOS#
date [+format] [-d 'description']
+%F
AAAA-MM-DD
+%s
timestamp Unix (segundos)
-d 'text'
interpreta uma data: tomorrow, 2 days ago, @1700000000 (GNU)
-u
UTC
date '+%Y-%m-%d %H:%M:%S'

timestamp para logs

date +%s

segundos desde 1970-01-01 UTC

date -d @1700000000

timestamp para data (GNU)

date -d '2 days ago' +%F

data relativa (GNU)

macOS/BSD: O date do macOS não tem -d. Use date -r 1700000000 para um timestamp, date -v-2d para "2 dias atrás" e date -j -f '%Y-%m-%d' 2026-10-18 +%s para converter.

timedatectl

Definir o fuso horário e verificar a sincronização do relógio

Linux#
timedatectl [set-timezone Zone]
timedatectl

hora local, UTC, fuso horário, NTP sincronizado?

timedatectl list-timezones | grep America

encontrar o nome do fuso

sudo timedatectl set-timezone America/Toronto

alterá-lo

Discos e sistemas de arquivos

Espaço livre, o que está ocupando, partições, montagem e formatação.

df

Verificar o espaço livre em disco

Linux · macOS#
df [-h] [-T] [-i] [path]
-h
tamanhos legíveis
-T
mostra o tipo do sistema de arquivos (GNU)
-i
uso de inodes em vez de bytes
df -h

todos os sistemas de arquivos montados

df -h .

o sistema de arquivos em que este diretório está

df -i

"No space left" com bytes livres? Talvez tenham acabado os inodes

macOS/BSD: No macOS, -T filtra por tipo em vez de mostrá-lo.

du

Descobrir o que está ocupando espaço em disco

Linux · macOS#
du [-s] [-h] [-d depth] [path...]
-s
um total por argumento
-h
legível
-d N
limite de profundidade (forma longa do GNU: --max-depth=N)
-x
fica em um só sistema de arquivos
du -sh /var/log

tamanho de uma pasta

du -h -d 1 | sort -h

subpastas, a maior por último (funciona no GNU e no macOS)

sudo du -xh -d 1 / | sort -h | tail

os maiores diretórios de primeiro nível

macOS/BSD: O du do macOS tem -d, mas não --max-depth.

ncdu

Navegar pelo uso de disco de forma interativa

Linux#
ncdu [-x] [path]
sudo ncdu -x /

navegue com as setas, d para excluir

Instale com apt install ncdu / dnf install ncdu.

lsblk

Listar discos e partições

Linux#
lsblk [-f]
-f
tipo de sistema de arquivos, rótulo, UUID, ponto de montagem
lsblk

discos, partições, tamanhos, pontos de montagem

lsblk -f

qual partição é ext4/xfs, e o UUID dela

macOS/BSD: macOS: diskutil list.

blkid

Obter o UUID de uma partição

Linux#
sudo blkid [device]
sudo blkid /dev/sdb1

UUID e TYPE, para o /etc/fstab

findmnt

Mostrar o que está montado e onde

Linux#
findmnt [target] | findmnt -T path
findmnt

árvore de montagem com opções

findmnt -T /var/lib/docker

qual sistema de arquivos contém este caminho

sudo findmnt --verify

verificar erros no /etc/fstab antes de reiniciar

mount

Montar um disco ou partição

Linux#
mount [-t type] [-o options] device dir
sudo mount /dev/sdb1 /mnt/usb

montar um pendrive (o diretório precisa existir)

sudo mount -o remount,rw /

tornar gravável uma raiz somente leitura

sudo mount -t nfs nas:/export /mnt/nas

montar um compartilhamento NFS

umount

Desmontar um disco

Linux#
umount dir|device
sudo umount /mnt/usb

depois disso é seguro desconectar

sudo umount -l /mnt/nas

lazy: desanexa agora e limpa quando não estiver mais ocupado

"target is busy" significa que um processo (muitas vezes o seu próprio shell parado nesse diretório) está usando o disco: encontre-o com fuser -vm ou lsof.

/etc/fstab

Montar um disco automaticamente na inicialização

Linux#
UUID=<uuid> <mountpoint> <type> <options> <dump> <pass>
UUID=3f6c...  /data  ext4  defaults,nofail  0  2

uma linha por sistema de arquivos; nofail deixa a inicialização continuar se o disco estiver ausente

sudo mount -a

montar agora tudo o que está no fstab: teste antes de reiniciar

Um erro de digitação no fstab pode fazer a próxima inicialização cair no modo de emergência. Sempre rode sudo mount -a (ou findmnt --verify) depois de editar.

fdisk / parted

Ver ou editar tabelas de partição

PerigosoLinux#
sudo fdisk -l | sudo fdisk /dev/sdX | sudo parted /dev/sdX print
sudo fdisk -l

todos os discos e as partições deles

sudo parted /dev/sdb print

tipo de tabela de partição (gpt/msdos) e layout

Perigo: Gravar uma tabela de partição (w no fdisk, mklabel no parted) torna inacessíveis os dados existentes nesse disco. Confirme o nome do dispositivo com lsblk antes; /dev/sda e /dev/sdb trocam de lugar com facilidade.

mkfs

Formatar uma partição

PerigosoLinux#
sudo mkfs.<type> device
sudo mkfs.ext4 -L data /dev/sdb1

ext4 com rótulo

sudo mkfs.vfat -F 32 /dev/sdc1

FAT32 para um pendrive que outros dispositivos consigam ler

Perigo: Apaga o sistema de arquivos do alvo na hora, sem confirmação se o dispositivo não estiver montado. Confira o dispositivo com lsblk -f; formatar /dev/sda em vez de /dev/sda1, ou o disco errado, o destrói.

fsck

Verificar e reparar um sistema de arquivos

PerigosoLinux#
sudo fsck [-f] device
sudo fsck -f /dev/sdb1

forçar uma verificação completa de uma partição desmontada

Perigo: Nunca rode fsck em um sistema de arquivos montado para leitura e gravação: ele pode corrompê-lo. Desmonte antes ou, para o sistema de arquivos raiz, inicie por uma mídia de recuperação.

dd

Gravar uma ISO em um pendrive ou copiar um disco bruto

PerigosoLinux · macOS#
dd if=input of=output bs=size [status=progress] [conv=fsync]
if= / of=
arquivo ou dispositivo de entrada / saída
bs=4M
tamanho do bloco; maior é mais rápido
status=progress
mostra os bytes copiados (GNU)
conv=fsync
descarrega no dispositivo antes de sair
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress conv=fsync

criar um pendrive inicializável (troque sdX pelo disco inteiro, não por uma partição)

dd if=/dev/zero of=test.img bs=1M count=100

criar um arquivo de 100 MB

Perigo: O dd sobrescreve o alvo of= sem perguntar. Inverter if= e of=, ou escolher o /dev/sdX errado, apaga esse disco. Confira com lsblk logo antes de rodar.

macOS/BSD: macOS: use como alvo /dev/rdiskN (do diskutil list) depois de diskutil unmountDisk, use bs=4m e pressione Ctrl+T para ver o progresso.

sync

Descarregar no disco as gravações pendentes

Linux · macOS#
sync
sync && sudo umount /mnt/usb

antes de tirar um pendrive

swapon / mkswap

Verificar ou adicionar espaço de swap

Linux#
swapon --show | mkswap file && swapon file
swapon --show

swap atual

sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile

adicionar um arquivo de swap de 2 GB (adicione-o ao /etc/fstab para mantê-lo)

No Btrfs, um arquivo de swap exige passos extras (btrfs filesystem mkswapfile nas versões recentes do btrfs-progs).

shred

Sobrescrever um arquivo antes de excluí-lo

PerigosoLinux#
shred [-u] [-n passes] file
shred -u -n 3 secrets.txt

sobrescrever três vezes e depois excluir

Perigo: Irreversível. Também não é confiável em SSDs, em sistemas de arquivos com journaling ou copy-on-write (Btrfs, ZFS) nem em nada com snapshots; para proteção real, use criptografia de disco inteiro.

Rede

Endereços IP, rotas, portas abertas, requisições HTTP, DNS, SSH e transferência de arquivos.

ip addr

Mostrar os endereços IP desta máquina

Linux#
ip [-br] addr [show dev IFACE]
ip -br a

uma linha por interface: nome, estado, endereços

ip a show eth0

uma interface em detalhe

hostname -I

só os endereços IP

macOS/BSD: macOS: ifconfig, ou ipconfig getifaddr en0.

O ip substitui o antigo ifconfig (net-tools), que muitas distribuições não instalam mais.

ip route

Mostrar a tabela de rotas e o gateway padrão

Linux#
ip route [get ADDRESS] | ip route add NET via GW
ip r

rotas; "default via" é o gateway

ip route get 1.1.1.1

qual interface e gateway um destino usa

sudo ip route add 10.20.0.0/16 via 192.168.1.1

adicionar uma rota (perdida ao reiniciar)

ip link

Ativar ou desativar uma interface de rede

PerigosoLinux#
ip link [set IFACE up|down]
ip link

interfaces e endereços MAC

sudo ip link set eth0 down && sudo ip link set eth0 up

reiniciar uma interface

Perigo: Desativar a interface pela qual você está conectado via SSH derruba a sua sessão.

ss

Listar portas em escuta e conexões abertas

Linux#
ss [-t] [-u] [-l] [-p] [-n]
-t / -u
TCP / UDP
-l
só sockets em escuta
-p
mostra o processo (sudo para ver os de outros usuários)
-n
portas numéricas, sem DNS
-s
contagens resumidas
sudo ss -tulpn

todas as portas em escuta e os programas delas

ss -tn state established '( dport = :443 )'

conexões estabelecidas com a porta 443

ss -s

totais de conexões

macOS/BSD: macOS: lsof -iTCP -sTCP:LISTEN -n -P, ou netstat -an.

O ss substitui o netstat; netstat -tulpn ainda funciona onde o net-tools está instalado.

curl

Fazer uma requisição HTTP ou baixar um arquivo

Linux · macOS#
curl [options] URL
-I
só cabeçalhos (requisição HEAD)
-L
segue redirecionamentos
-o file / -O
salva em um arquivo / salva com o nome remoto
-s / -S
silencioso / mas ainda mostra erros
-f
falha (saída 22) em HTTP 4xx/5xx em vez de mostrar a página de erro
-v
detalhado: cabeçalhos de requisição e resposta, TLS
curl -I https://example.com

linha de status e cabeçalhos

curl -LO https://example.com/file.tar.gz

baixar, seguindo redirecionamentos

curl -s -o /dev/null -w '%{http_code}\n' https://example.com

só o código de status

curl -fsSL https://example.com/install.sh -o install.sh

baixar um script para ler antes de rodar

curl -d

Enviar uma requisição POST com JSON

Linux · macOS#
curl -H 'Content-Type: application/json' -d 'json' URL
-d data
corpo da requisição; implica POST
--data-binary @file
envia um arquivo como está
-H header
adiciona um cabeçalho
-X METHOD
PUT, PATCH, DELETE…
-u user:pass
autenticação básica
curl -H 'Content-Type: application/json' -d '{"name":"Ada"}' https://api.example.com/users

POST de JSON

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me

aspas duplas para o $TOKEN ser expandido

curl -X DELETE https://api.example.com/users/42

outros métodos

wget

Baixar arquivos (com retomada)

Linux#
wget [options] URL
-c
retoma um download parcial
-O file
salva como (use -O- para stdout)
-q
silencioso
-r -np
recursivo, sem nunca subir ao diretório-pai
wget -c https://example.com/big.iso

retomar depois que a conexão cair

wget -qO- https://example.com/data.json | jq .

mandar direto para outro comando

macOS/BSD: Não vem no macOS padrão; use curl -LO (curl -C - -LO para retomar).

dig

Consultar registros DNS

Linux · macOS#
dig [@server] name [type] [+short]
dig +short example.com

só os registros A

dig MX example.com

servidores de e-mail

dig @1.1.1.1 example.com

perguntar a um resolvedor específico (ignora o cache local)

dig -x 8.8.8.8

consulta reversa

dig +trace example.com

seguir a delegação a partir da raiz

Nome do pacote: dnsutils (Debian/Ubuntu) ou bind-utils (Fedora/RHEL).

host / nslookup

Consulta DNS rápida

Linux · macOS#
host name | nslookup name [server]
host example.com

A, AAAA e MX em uma resposta curta

nslookup example.com 8.8.8.8

o mesmo comando existe no Windows

resolvectl

Ver os servidores DNS em uso e limpar o cache de DNS

Linux#
resolvectl [status|query|flush-caches]
resolvectl status

servidores DNS por interface

sudo resolvectl flush-caches

limpar o cache do systemd-resolved

macOS/BSD: macOS: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder.

Só em sistemas que usam systemd-resolved (Ubuntu e Fedora por padrão).

ping

Testar se um host está acessível

Linux · macOS#
ping [-c count] [-i interval] host
-c N
para depois de N pacotes
-i sec
intervalo entre pacotes
-4 / -6
força IPv4 / IPv6
ping -c 4 example.com

quatro pacotes e depois um resumo

No Linux e no macOS, o ping roda até Ctrl+C, a menos que você use -c (o Windows para depois de 4). Sem resposta nem sempre significa fora do ar: muitos hosts bloqueiam ICMP.

traceroute / tracepath

Ver o caminho que os pacotes fazem até um host

Linux · macOS#
traceroute [-n] host | tracepath host
traceroute -n example.com

saltos sem consultas DNS

tracepath example.com

não precisa de root e também informa o MTU

macOS/BSD: O macOS tem traceroute, mas não tracepath.

O traceroute pode precisar ser instalado no Linux; o tracepath (iputils) normalmente já está lá.

mtr

Descobrir onde acontece a perda de pacotes

Linux#
mtr [-r] [-w] [-c count] host
mtr -rw -c 100 example.com

relatório depois de 100 sondagens por salto

Combina ping e traceroute. Perda só em um salto intermediário costuma ser aquele roteador dando baixa prioridade ao ICMP; perda que continua até o fim é real.

ssh

Entrar em uma máquina remota

Linux · macOS#
ssh [-p port] [-i key] [-J jump] user@host [command]
ssh alice@203.0.113.10

entrar

ssh -p 2222 alice@host

porta não padrão

ssh alice@host 'df -h'

executar um comando e voltar

ssh -J bastion.example.com alice@10.0.0.5

passar por um bastion host

ssh -L / -R / -D

Encaminhar uma porta pelo SSH (túnel)

Linux · macOS#
ssh -L local:host:remote user@server
-L 5432:localhost:5432
a porta local 5432 chega à porta 5432 do servidor
-R 8080:localhost:3000
a porta 8080 do servidor chega à sua porta local 3000
-D 1080
proxy SOCKS na porta local 1080
-N
sem comando remoto, só o túnel
ssh -N -L 5432:localhost:5432 alice@db-host

conectar o seu cliente de banco local a um Postgres remoto

ssh -N -D 1080 alice@host

navegar através do servidor

ssh-keygen

Criar uma chave SSH e instalá-la em um servidor

Linux · macOS#
ssh-keygen -t ed25519 [-C comment] | ssh-copy-id user@host
ssh-keygen -t ed25519 -C "you@example.com"

novo par de chaves em ~/.ssh

ssh-copy-id alice@host

acrescentar sua chave pública ao authorized_keys do servidor

ssh-keygen -R host

remover uma chave de host antiga depois de recriar o servidor ("REMOTE HOST IDENTIFICATION HAS CHANGED")

~/.ssh/config

Salvar as configurações de conexão SSH como um alias curto

Linux · macOS#
Host alias / HostName / User / Port / IdentityFile
Host web
  HostName 203.0.113.10
  User deploy
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

depois é só: ssh web (o scp e o rsync também usam)

scp

Copiar arquivos de ou para um servidor via SSH

Linux · macOS#
scp [-r] [-P port] source... dest
-r
copia diretórios
-P port
porta (P maiúsculo; o ssh usa -p minúsculo)
-i key
arquivo de identidade
scp report.pdf alice@host:/tmp/

enviar

scp alice@host:/var/log/app.log .

baixar

scp -r -P 2222 site/ alice@host:~/

enviar uma pasta por outra porta

Desde o OpenSSH 9.0, o scp usa o protocolo SFTP por baixo. Para cópias grandes ou repetidas, o rsync é mais rápido porque envia só as mudanças.

rsync

Sincronizar pastas localmente ou via SSH

Linux · macOS#
rsync [-avz] [--progress] [-n] source dest
-a
arquivamento: recursivo, mantém permissões, horários, links
-v
detalhado
-z
comprime na transferência
-P
progresso e retomada de arquivos parciais
-n
simulação: mostra o que aconteceria
--exclude 'pattern'
ignora arquivos
-e 'ssh -p 2222'
opções de SSH personalizadas
rsync -avzP site/ deploy@host:/srv/site/

a barra no fim de site/ copia o conteúdo, não a própria pasta

rsync -av --exclude 'node_modules' ./ /backup/app/

backup local sem o lixo

macOS/BSD: O macOS recente traz o openrsync em vez do rsync; as flags comuns funcionam, algumas mais raras não.

src/ significa "o conteúdo de src"; src sem barra significa "a pasta src". Errar isso aninha as pastas (dest/src/…).

rsync --delete

Tornar o destino um espelho exato

PerigosoLinux · macOS#
rsync -av --delete source/ dest/
rsync -avn --delete site/ /srv/site/

simulação primeiro: as linhas que começam com "deleting" mostram o que seria apagado

rsync -av --delete site/ /srv/site/

depois a execução real

Perigo: Apaga tudo em dest que não está na origem. Inverter origem e destino, ou um caminho de origem vazio/errado, apaga o destino. Sempre rode com -n primeiro.

nc

Testar se uma porta TCP está aberta

Linux · macOS#
nc -zv host port | nc -l port
nc -zv db.internal 5432

"succeeded" ou "Connection refused"/timeout

nc -l 9000

escutar em uma porta para testar um firewall do outro lado

As flags variam entre as versões do netcat: a tradicional precisa de nc -l -p 9000.

ufw

Gerenciar o firewall no Ubuntu

PerigosoLinux#
sudo ufw [status|allow|deny|delete|enable]
sudo ufw status verbose

regras e política padrão

sudo ufw allow 22/tcp

liberar o SSH (faça isso antes do enable)

sudo ufw allow from 10.0.0.0/8 to any port 5432

uma porta, uma rede

Perigo: sudo ufw enable em um servidor remoto sem antes liberar o SSH (ufw allow OpenSSH ou 22/tcp) deixa você trancado do lado de fora.

firewall-cmd

Gerenciar o firewall no Fedora/RHEL

Linux#
sudo firewall-cmd [--permanent] --add-service|--add-port ...
sudo firewall-cmd --list-all

zona ativa e regras

sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload

abrir o HTTPS de forma permanente

sudo firewall-cmd --permanent --add-port=8080/tcp

abrir uma porta

Sem --permanent, uma regra dura até o próximo reload ou reinício.

nmcli

Gerenciar Wi-Fi e conexões (NetworkManager)

Linux#
nmcli [device|connection] ...
nmcli device status

interfaces e se estão conectadas

nmcli device wifi list

redes próximas

nmcli device wifi connect 'MyWiFi' password 'secret'

entrar em uma rede

Pacotes: apt, dnf, pacman, zypper

A mesma tarefa nos quatro principais gerenciadores de pacotes: Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch (pacman), openSUSE (zypper). Use sudo antes de tudo o que altera o sistema.

Tarefaapt (Debian, Ubuntu)dnf (Fedora, RHEL)pacman (Arch)zypper (openSUSE)
Atualizar as listas de pacotes #
O dnf atualiza automaticamente quando os metadados estão desatualizados. No Arch, nunca rode pacman -Sy seguido de -S pacote: atualizações parciais não são suportadas; use -Syu.
apt update
dnf makecache
pacman -Sy
zypper refresh
Atualizar tudo #
O openSUSE Tumbleweed usa zypper dup. O apt full-upgrade também remove pacotes quando necessário para concluir a atualização.
apt update && apt upgrade
dnf upgrade
pacman -Syu
zypper update
Instalar um pacote #
apt install nginx
dnf install nginx
pacman -S nginx
zypper install nginx
Instalar um arquivo de pacote baixado #
O ./ indica ao apt que é um arquivo, não um nome de pacote, e assim as dependências são resolvidas (o dpkg -i não faz isso).
apt install ./app.deb
dnf install ./app.rpm
pacman -U app.pkg.tar.zst
zypper install ./app.rpm
Remover um pacote #
apt remove nginx
dnf remove nginx
pacman -R nginx
zypper remove nginx
Remover com arquivos de configuração / dependências não usadas #
apt purge nginx && apt autoremove
dnf remove nginx && dnf autoremove
pacman -Rns nginx
zypper remove --clean-deps nginx
Mostrar detalhes do pacote #
apt show nginx
dnf info nginx
pacman -Si nginx (installed: -Qi)
zypper info nginx
Listar pacotes instalados #
apt list --installed
dnf list --installed
pacman -Q
zypper search --installed-only
Listar atualizações disponíveis #
apt list --upgradable
dnf check-update
checkupdates (pacman-contrib)
zypper list-updates
Qual pacote é dono de um arquivo #
Para arquivos ainda não instalados: dnf provides /caminho, apt-file search caminho (precisa do apt-file), pacman -F caminho.
dpkg -S /usr/bin/curl
rpm -qf /usr/bin/curl
pacman -Qo /usr/bin/curl
rpm -qf /usr/bin/curl
Listar os arquivos que um pacote instalou #
dpkg -L nginx
rpm -ql nginx
pacman -Ql nginx
rpm -ql nginx
Travar um pacote na versão atual #
No DNF 4, o versionlock precisa do pacote do plugin versionlock.
apt-mark hold nginx
dnf versionlock add nginx
IgnorePkg = nginx in /etc/pacman.conf
zypper addlock nginx
Limpar o cache de pacotes #
apt clean
dnf clean all
pacman -Sc
zypper clean

Usuários e grupos

Quem é você, quem está conectado e gerenciamento de contas.

whoami / id

Mostrar seu nome de usuário, UID e grupos

Linux · macOS#
whoami | id [user]
id

uid, gid e todos os grupos a que você pertence

id alice

outro usuário

who / w / last

Ver quem está conectado e os logins recentes

Linux · macOS#
who | w | last [-n N]
w

quem está conectado e o que está executando

last -n 10

logins e reinicializações recentes

sudo lastb -n 10

tentativas de login recentes que falharam (Linux)

useradd

Criar uma conta de usuário

Linux#
sudo useradd [-m] [-s shell] [-G groups] user
-m
cria o diretório pessoal (não é o padrão em todas as distros)
-s /bin/bash
shell de login
-G group1,group2
grupos suplementares
sudo useradd -m -s /bin/bash alice && sudo passwd alice

criar e definir uma senha

No Debian/Ubuntu, adduser alice é a alternativa interativa mais amigável, que configura o diretório pessoal e a senha.

usermod -aG

Adicionar um usuário a um grupo

PerigosoLinux#
sudo usermod -aG group user
sudo usermod -aG docker alice

deixar a alice usar o docker

sudo usermod -aG sudo alice

administrador no Debian/Ubuntu (no Fedora/RHEL/Arch o grupo é wheel)

Perigo: Sem -a, usermod -G substitui todos os grupos suplementares do usuário, o que pode tirar o acesso ao sudo. Mudanças de grupo valem no próximo login (ou rode newgrp docker).

userdel

Excluir uma conta de usuário

PerigosoLinux#
sudo userdel [-r] user
sudo userdel -r olduser

também remove o diretório pessoal e a caixa de e-mail

Perigo: -r apaga o diretório pessoal e os arquivos dele para sempre. Faça backup antes ou, em vez disso, bloqueie a conta (passwd -l).

passwd

Mudar uma senha ou bloquear uma conta

Linux#
passwd [user] | passwd -l|-u user
passwd

mudar a sua

sudo passwd alice

redefinir a de outra pessoa

sudo passwd -l alice

bloquear o login por senha (chaves SSH ainda podem funcionar)

groupadd / gpasswd

Criar um grupo ou tirar um usuário de um grupo

Linux#
sudo groupadd name | sudo gpasswd -d user group
sudo groupadd developers

novo grupo

sudo gpasswd -d alice developers

tirar a alice dele

groups / getent

Listar os membros de um grupo ou os grupos de um usuário

Linux#
groups [user] | getent group name
groups alice

grupos da alice

getent group sudo

membros do sudo (também funciona com LDAP)

getent passwd alice

entrada da conta: UID, diretório pessoal, shell

visudo

Dar direitos de sudo a um usuário com segurança

Linux · macOS#
sudo visudo [-f /etc/sudoers.d/file]
sudo visudo -f /etc/sudoers.d/deploy

um arquivo separado por regra

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

um comando sem senha

O visudo verifica a sintaxe antes de salvar. Editar o /etc/sudoers com um editor comum e cometer um erro de digitação pode deixar todo mundo sem sudo.

chage

Ver ou definir a expiração da senha

Linux#
sudo chage [-l] [-M days] user
sudo chage -l alice

datas da última troca e da expiração

sudo chage -M 90 alice

expirar a cada 90 dias

Arquivos compactados e compressão

tar, gzip, xz, zip e checksums.

tar -c

Criar um arquivo .tar.gz

Linux · macOS#
tar -czf archive.tar.gz files...
-c
cria
-z / -j / -J
compressão gzip / bzip2 / xz
-f file
nome do arquivo (coloque logo depois do f)
-v
lista os arquivos conforme entram
--exclude='pattern'
deixa arquivos de fora
tar -czf site-2026-10-18.tar.gz site/

arquivo compactado com gzip de uma pasta

tar -cJf logs.tar.xz --exclude='*.tmp' logs/

arquivo xz menor, sem os temporários

tar -x

Extrair um .tar.gz, .tar.xz ou .tar.bz2

Linux · macOS#
tar -xf archive [-C dir]
-x
extrai
-C dir
extrai para dir (precisa existir)
--strip-components=1
descarta a pasta de primeiro nível
tar -xf archive.tar.gz

o tar do GNU e o do macOS detectam a compressão sozinhos

tar -xzf app.tar.gz -C /opt/app --strip-components=1

para uma pasta, sem o diretório que embrulha tudo

tar -t

Listar ou extrair um único arquivo de um pacote tar

Linux · macOS#
tar -tf archive | tar -xf archive path/in/archive
tar -tf backup.tar.gz | less

ver o que há dentro sem extrair

tar -xf backup.tar.gz etc/nginx/nginx.conf

tirar um arquivo (caminho como mostrado por -t)

tar --zstd

Compressão rápida com zstd

Linux · macOS#
tar --zstd -cf archive.tar.zst files...
tar --zstd -cf data.tar.zst data/

bem mais rápido que o xz, taxa parecida ou melhor que gzip -9

zstd -d file.zst

descompactar um único arquivo

Precisa do GNU tar 1.31+ (ou de um bsdtar recente) e do programa zstd.

gzip / gunzip

Compactar ou descompactar um único arquivo

Linux · macOS#
gzip [-k] [-d] [-9] file
-k
mantém o original
-d
descompacta (o mesmo que gunzip)
-9
compressão máxima
gzip -k access.log

cria access.log.gz e mantém o original

zcat access.log.gz | grep 404

ler sem descompactar no disco

zgrep 500 access.log.*.gz

fazer grep direto em logs rotacionados

Sem -k, o gzip substitui o arquivo pela versão .gz.

xz / bzip2

Compressão maior para arquivos únicos

Linux#
xz [-T0] [-9] [-d] file | bzip2 [-d] file
xz -T0 -k big.sql

todos os núcleos da CPU, mantendo o original

unxz big.sql.xz

descompactar

zip

Criar um arquivo .zip

Linux · macOS#
zip -r archive.zip files... [-x pattern]
zip -r site.zip site/

compactar uma pasta

zip -r site.zip site/ -x '*.git*' '*/node_modules/*'

excluir caminhos

zip -e criptografa com o esquema antigo ZipCrypto, que é fraco. Use 7z ou gpg para sigilo de verdade.

unzip

Extrair um arquivo .zip

Linux · macOS#
unzip [-l] [-o] archive.zip [-d dir]
unzip files.zip -d files/

para uma pasta

unzip -l files.zip

só listar o conteúdo

unzip -o files.zip

sobrescrever sem perguntar

7z

Trabalhar com arquivos .7z (e a maioria dos outros formatos)

Linux#
7z a|x|l archive [files]
7z x archive.7z

extrair com os caminhos completos

7z a -p backup.7z docs/

arquivo criptografado com AES-256 (pede uma senha)

7z l archive.rar

listar o conteúdo de vários formatos

Pacote: p7zip-full / 7zip no Debian/Ubuntu, p7zip ou 7zip no Fedora/Arch.

sha256sum

Verificar um download com checksum

Linux#
sha256sum file | sha256sum -c SUMSFILE
sha256sum ubuntu.iso

comparar com o hash da página de download

sha256sum -c SHA256SUMS --ignore-missing

conferir todos os arquivos listados que você realmente tem

macOS/BSD: macOS: shasum -a 256 arquivo (e shasum -a 256 -c ARQUIVO_DE_SOMAS).

split

Dividir um arquivo grande em partes e juntá-las

Linux · macOS#
split -b size file prefix
split -b 100M backup.tar.gz backup.part.

backup.part.aa, .ab, …

cat backup.part.* > backup.tar.gz

juntá-las de novo

Processamento de texto

Corte, filtre, ordene, conte, transforme e reorganize texto e JSON.

sed s///

Localizar e substituir texto

Linux · macOS#
sed 's/old/new/[g]' file
g
substitui todas as ocorrências da linha, não só a primeira
-E
regex estendida (grupos sem barras invertidas)
I
correspondência sem diferenciar maiúsculas e minúsculas (GNU)
sed 's/http:/https:/g' links.txt

mostra o resultado; o arquivo não muda

sed 's|/usr/local|/opt|g' paths.txt

qualquer delimitador, útil para caminhos

sed -E 's/([0-9]+)px/\1rem/g' style.css

reaproveitar um grupo capturado

sed -i

Editar um arquivo no próprio lugar

Linux · macOS#
sed -i[SUFFIX] 's/old/new/g' file
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

sed do GNU

sed -i.bak 's/foo/bar/g' config.ini

mantém config.ini.bak; funciona no GNU e no macOS

macOS/BSD: O sed do macOS exige um argumento depois de -i: sed -i '' 's/foo/bar/g' arquivo. O sed do GNU lê '' como o script, então a única forma que funciona nos dois é -i.bak.

sed -n / d

Mostrar ou apagar linhas específicas

Linux · macOS#
sed -n 'Np' | sed '/regex/d'
sed -n '100,120p' big.log

linhas 100 a 120

sed '/^\s*#/d; /^$/d' app.conf

remover comentários e linhas em branco (\s do GNU)

sed -n '/BEGIN CERT/,/END CERT/p' bundle.pem

tudo entre dois marcadores

awk

Mostrar colunas específicas

Linux · macOS#
awk [-F sep] '{print $N}' file
-F sep
separador de campos (padrão: sequências de espaços/tabs)
$1 … $NF
campos; $NF é o último, $0 a linha inteira
NR
número da linha
awk '{print $1}' access.log

primeira coluna (IP do cliente)

awk -F: '{print $1, $7}' /etc/passwd

usuário e shell

awk -F, 'NR>1 {print $2}' data.csv

segunda coluna de um CSV, sem o cabeçalho (só CSV simples: sem vírgulas entre aspas)

awk (filter & sum)

Filtrar linhas e somar uma coluna

Linux · macOS#
awk 'condition {action} END {action}' file
awk '$9 >= 500' access.log

linhas em que o campo 9 (status) é 5xx

awk '{s += $2} END {print s}' sales.txt

soma da coluna 2

awk '{c[$1]++} END {for (k in c) print c[k], k}' access.log | sort -rn | head

contagem por valor, os 10 primeiros

cut

Cortar campos por um delimitador de um caractere

Linux · macOS#
cut -d DELIM -f LIST | cut -c RANGE
cut -d, -f1,3 data.csv

colunas 1 e 3

cut -d: -f1 /etc/passwd

todos os nomes de usuário

cut -c1-10 file

os 10 primeiros caracteres de cada linha

O cut trata cada delimitador como quebra de campo, então dois espaços significam um campo vazio. Para saída alinhada com espaços, use awk.

sort

Ordenar linhas

Linux · macOS#
sort [-n] [-r] [-h] [-k N,N] [-t sep] [-u] file
-n
numérico
-r
inverso
-h
tamanhos legíveis: 2K < 1M < 3G
-k 2,2
ordena só pelo campo 2
-t ,
separador de campos
-u
remove duplicatas
-V
ordem de versão: 1.9 < 1.10
du -sh * | sort -h

pastas por tamanho

sort -t, -k3,3nr data.csv

CSV pela coluna 3, numérico, decrescente

sort -u emails.txt > unique.txt

ordenado e sem duplicatas

uniq

Contar ou remover linhas duplicadas

Linux · macOS#
sort file | uniq [-c] [-d] [-u]
-c
prefixa cada linha com a contagem
-d
só linhas que se repetem
-u
só linhas que aparecem uma vez
sort ips.txt | uniq -c | sort -rn | head

as 10 linhas mais frequentes

O uniq só junta duplicatas adjacentes, então ordene antes.

wc

Contar linhas, palavras ou bytes

Linux · macOS#
wc [-l] [-w] [-c] [-m] file...
wc -l access.log

número de linhas

ls | wc -l

quantas entradas há nesta pasta

grep -c '' file

contagem de linhas que inclui uma última linha sem quebra de linha

tr

Trocar ou apagar caracteres

Linux · macOS#
tr [-d] [-s] 'set1' ['set2']
tr 'a-z' 'A-Z' < in.txt

maiúsculas

tr -d '\r' < windows.txt > unix.txt

remover finais de linha CRLF do Windows

tr -s ' ' < file

juntar espaços repetidos

tr '\n' ',' < list.txt

juntar linhas com vírgulas

O tr só lê a entrada padrão, então redirecione o arquivo com <.

xargs

Transformar linhas de entrada em argumentos de comando

Linux · macOS#
command | xargs [-0] [-n N] [-P N] [-I {}] cmd
-0
a entrada é separada por NUL (combine com find -print0); seguro com espaços
-n N
no máximo N argumentos por comando
-P N
executa N comandos em paralelo
-I {}
substitui {} por cada linha de entrada
-r
não executa o comando se a entrada estiver vazia (GNU)
find . -name '*.log' -print0 | xargs -0 rm -f

excluir com segurança os arquivos encontrados

cat urls.txt | xargs -n 1 -P 4 curl -sO

baixar 4 de cada vez

ls *.png | xargs -I {} cp {} /backup/{}

um comando por item

macOS/BSD: O xargs do GNU executa o comando uma vez mesmo com entrada vazia, a menos que você use -r; o xargs do macOS ignora entrada vazia por padrão e aceita -r por compatibilidade.

jq

Ler e filtrar JSON

Linux · macOS#
jq [-r] 'filter' file
.
formata de forma legível
-r
strings brutas, sem aspas
-c
compacto, uma linha por resultado
.[]
percorre um array
select(cond)
mantém os itens que correspondem
jq . response.json

formatar de forma legível

jq -r '.items[].name' data.json

um nome por linha

jq -r '.[] | select(.active) | .email' users.json

filtrar e depois escolher um campo

curl -s https://api.github.com/repos/jqlang/jq | jq '.stargazers_count'

direto de uma API

Instale com apt/dnf install jq. Vem com o macOS recente.

paste

Juntar linhas ou mesclar arquivos lado a lado

Linux · macOS#
paste [-s] [-d delim] file...
paste -sd, ids.txt

todas as linhas unidas com vírgulas

paste names.txt emails.txt

dois arquivos como duas colunas

comm

Linhas em comum (ou exclusivas) entre duas listas

Linux · macOS#
comm [-1] [-2] [-3] sorted1 sorted2
comm -12 <(sort a.txt) <(sort b.txt)

nas duas

comm -23 <(sort a.txt) <(sort b.txt)

só em a.txt

seq

Gerar uma sequência de números

Linux · macOS#
seq [first [step]] last
seq 1 5

de 1 a 5, um por linha

seq -w 1 10

com zeros à esquerda: 01 … 10

for i in $(seq 1 3); do echo "run $i"; done

contador de loop

base64

Codificar ou decodificar Base64

Linux · macOS#
base64 [-d] [-w 0] [file]
printf '%s' 'user:pass' | base64

codificar (o printf evita a quebra de linha no fim)

echo dXNlcjpwYXNz | base64 -d

decodificar

base64 -w 0 image.png > image.b64

sem quebra de linha (o GNU quebra a cada 76 caracteres)

macOS/BSD: O base64 do macOS não quebra linhas por padrão e não tem -w. Use -d para decodificar (o macOS antigo usava -D).

iconv

Converter a codificação de texto (ex.: para UTF-8)

Linux · macOS#
iconv -f FROM -t TO file
iconv -f WINDOWS-1252 -t UTF-8 old.csv > new.csv

corrigir caracteres embaralhados em exportações do Excel

iconv -l

listar as codificações suportadas

shuf

Embaralhar linhas ou escolher algumas ao acaso

Linux#
shuf [-n N] file
shuf -n 1 names.txt

uma linha aleatória

shuf -i 1-100 -n 5

cinco números aleatórios de 1 a 100

Serviços e logs

Serviços do systemd: iniciar, parar, ativar na inicialização e ler os logs com journalctl.

systemctl status

Verificar se um serviço está rodando

Linux#
systemctl status|is-active|is-enabled unit
systemctl status nginx

estado, PID, memória e as últimas linhas de log

systemctl is-active --quiet nginx && echo up

para scripts

systemctl start

Iniciar, parar, reiniciar ou recarregar um serviço

Linux#
sudo systemctl start|stop|restart|reload unit
sudo systemctl restart nginx

reinício completo

sudo systemctl reload nginx

reler a configuração sem derrubar conexões (se o serviço suportar)

Teste a configuração antes de reiniciar quando possível, ex.: sudo nginx -t, para que um erro de digitação não derrube o site.

systemctl enable

Iniciar um serviço na inicialização (ou impedir que inicie)

Linux#
sudo systemctl enable|disable [--now] unit
sudo systemctl enable --now docker

ativar na inicialização e iniciar agora

sudo systemctl disable --now cups

parar agora e na inicialização

sudo systemctl mask bluetooth

impedir totalmente que ele seja iniciado (unmask para desfazer)

systemctl list-units

Listar serviços rodando e com falha

Linux#
systemctl list-units [--type=service] [--state=…] | systemctl --failed
systemctl --failed

o que quebrou

systemctl list-units --type=service --state=running

o que está rodando

systemctl list-unit-files --state=enabled

o que inicia com o sistema

systemctl edit

Alterar uma unit de serviço (e recarregar o systemd)

Linux#
sudo systemctl edit unit | sudo systemctl daemon-reload
sudo systemctl edit nginx

override drop-in que sobrevive às atualizações do pacote

systemctl cat nginx

a unit mais todos os overrides

sudo systemctl daemon-reload

necessário depois de editar arquivos de unit à mão

.service file

Rodar o seu próprio app como serviço

Linux#
/etc/systemd/system/<name>.service
[Unit]
Description=My app
After=network.target

[Service]
User=app
WorkingDirectory=/srv/app
ExecStart=/srv/app/bin/server
Restart=on-failure

[Install]
WantedBy=multi-user.target

depois: sudo systemctl daemon-reload && sudo systemctl enable --now myapp

journalctl

Ler logs de serviços e do sistema

Linux#
journalctl [-u unit] [-f] [-n N] [--since …] [-p level] [-b]
-u unit
um serviço
-f
acompanha
-n N
últimas N linhas
--since '1 hour ago'
também: today, yesterday, 2026-10-18 09:00
-p err
prioridade err e piores
-b / -b -1
esta inicialização / a anterior
-e
vai para o fim
journalctl -u nginx -f

acompanhar um serviço

journalctl -u myapp --since '10 min ago'

janela recente

journalctl -b -1 -p err

erros da inicialização anterior ao travamento

journalctl --vacuum

Reduzir o journal do systemd

Linux#
journalctl --disk-usage | sudo journalctl --vacuum-size=SIZE | --vacuum-time=TIME
journalctl --disk-usage

quanto espaço os logs ocupam

sudo journalctl --vacuum-size=500M

manter no máximo 500 MB de logs arquivados

sudo journalctl --vacuum-time=14d

descartar logs arquivados com mais de duas semanas

Para um limite permanente, defina SystemMaxUse= em /etc/systemd/journald.conf.

/var/log

Encontrar os arquivos de log clássicos

Linux#
sudo tail -f /var/log/<file>
sudo tail -f /var/log/syslog

log geral no Debian/Ubuntu (/var/log/messages no Fedora/RHEL)

sudo tail -f /var/log/auth.log

logins e sudo no Debian/Ubuntu (/var/log/secure no RHEL)

Algumas distribuições (Fedora, Arch) guardam os logs só no journal, a menos que o rsyslog esteja instalado.

shutdown / reboot

Reiniciar ou desligar

Linux#
sudo shutdown -r|-h [now|+min|hh:mm] [message] | sudo reboot
sudo reboot

reiniciar agora

sudo shutdown -r +10 'Kernel update'

reiniciar em 10 minutos, avisando os usuários conectados

sudo shutdown -c

cancelar um desligamento agendado

sudo shutdown -h now

desligar

Agendamento: cron, at, timers

Execute comandos em um horário programado ou uma vez mais tarde.

cron syntax

Escrever uma linha de agendamento do cron

Linux · macOS#
minute hour day-of-month month day-of-week command
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

todo dia às 02:30, guardando a saída

*/15 * * * * /usr/local/bin/check.sh

a cada 15 minutos

0 9 * * 1-5 /usr/local/bin/report.sh

09:00 de segunda a sexta

@reboot /usr/local/bin/startup.sh

uma vez na inicialização

O cron roda com um PATH mínimo e sem o perfil do shell: use caminhos absolutos. Um % no comando precisa ser escapado como \%.

crontab -r

Remover o seu crontab (cuidado)

PerigosoLinux · macOS#
crontab -r
crontab -l > ~/crontab.bak && crontab -r

fazer backup antes de remover

crontab ~/crontab.bak

restaurar a partir de um arquivo

Perigo: Apaga todos os seus jobs do cron sem perguntar, e o r fica bem ao lado do e no teclado. Algumas implementações do cron oferecem -i para perguntar antes (crontab -ri).

/etc/cron.d

Jobs do cron para todo o sistema

Linux#
/etc/crontab, /etc/cron.d/*, /etc/cron.{hourly,daily,weekly,monthly}/
0 3 * * * root /usr/local/bin/cleanup.sh

linha em /etc/cron.d/cleanup: repare no campo extra de usuário

ls /etc/cron.daily/

scripts executados uma vez por dia pelo run-parts

No Debian e no Ubuntu, arquivos em /etc/cron.d cujo nome contém ponto são ignorados; então chame de backup, não de backup.cron.

at

Executar um comando uma vez, mais tarde

Linux#
at TIME | atq | atrm N
echo 'systemctl restart myapp' | sudo at 02:00

hoje às 2 da manhã

echo './report.sh' | at now + 30 minutes

daqui a meia hora

atq

jobs pendentes

atrm 3

cancelar o job 3

Precisa do pacote at e do serviço atd rodando.

systemd timers

Agendar com timers do systemd em vez do cron

Linux#
systemctl list-timers | <name>.timer with OnCalendar=
systemctl list-timers

todos os timers e quando disparam de novo

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

backup.timer ao lado do backup.service; Persistent recupera execuções perdidas com a máquina desligada

systemd-analyze calendar 'Mon..Fri 09:00'

ver o que significa uma expressão OnCalendar

sleep

Esperar antes do próximo comando

Linux · macOS#
sleep N[s|m|h|d]
sleep 5 && curl -s localhost:8080/health

dar tempo para um serviço subir

sleep 2m

sufixos funcionam no GNU e no macOS atual

Básico do shell (bash)

Pipes, redirecionamento, globbing, variáveis, histórico e as teclas que mais economizam tempo. O macOS usa zsh por padrão: quase tudo isto funciona lá também, exceto shopt, help e recursos do bash 4 (o macOS traz o bash 3.2).

|

Mandar a saída de um comando para outro

Linux · macOS#
command1 | command2
ps aux | grep nginx

filtrar uma listagem

history | grep 'docker run'

encontrar um comando que você rodou antes

set -o pipefail

em scripts: um pipeline falha se qualquer parte falhar, não só a última

> and >>

Salvar a saída em um arquivo (sobrescrever ou acrescentar)

Linux · macOS#
command > file | command >> file
ls -l > listing.txt

sobrescrever (cria o arquivo)

echo 'done' >> progress.log

acrescentar

set -o noclobber

fazer o > se recusar a sobrescrever arquivos existentes (>| força)

O shell esvazia o arquivo antes de o comando rodar, então sort arquivo > arquivo deixa você com um arquivo vazio. Grave com outro nome e depois use mv.

2> and 2>&1

Redirecionar erros, ou erros e saída juntos

Linux · macOS#
command 2> err.log | command > all.log 2>&1 | command &> all.log
find / -name x 2>/dev/null

descartar as mensagens de erro

./build.sh > build.log 2>&1

saída e erros em um arquivo (a ordem importa: primeiro >, depois 2>&1)

./build.sh &> build.log

atalho do bash para o mesmo

<, <<EOF, <<<

Fornecer entrada a partir de um arquivo, um bloco de texto ou uma string

Linux · macOS#
command < file | command <<'EOF' … EOF | command <<< "string"
mysql mydb < dump.sql

arquivo como entrada

cat > config.yml <<'EOF'
port: 8080
host: $HOST stays literal
EOF

colocar 'EOF' entre aspas impede a expansão das $variáveis

grep -c a <<< "banana"

here-string

&& || ;

Executar comandos em sequência, de forma condicional

Linux · macOS#
a && b | a || b | a ; b
make && sudo make install

instalar só se o build deu certo

cd /srv/app || exit 1

parar um script se o cd falhar

(cd frontend && npm run build)

parênteses: um subshell, então o seu diretório não muda

$( ) $(( )) <( )

Usar a saída de um comando ou fazer contas

Linux · macOS#
$(command) | $((expression)) | <(command)
echo "Today is $(date +%A)"

substituição de comando

echo $(( 1024 * 4 ))

aritmética com inteiros

diff <(ls dir1) <(ls dir2)

substituição de processo: a saída como arquivo temporário

Crases `comando` são a forma antiga de $(comando); $( ) pode ser aninhado e é mais legível.

* ? [ ] { }

Selecionar vários arquivos com curingas

Linux · macOS#
* any string | ? one char | [abc] one of | {a,b} each word
ls *.jpg

todos os JPGs desta pasta

rm photo-??.png

photo-01.png … photo-99.png

cp config.{yml,yml.bak}

expansão de chaves: cp config.yml config.yml.bak

shopt -s globstar; ls **/*.md

** pega qualquer profundidade (bash 4+)

Os globs não pegam dotfiles por padrão (shopt -s dotglob muda isso). Se nada corresponder, o bash passa o padrão literalmente, a menos que shopt -s nullglob esteja ativo.

' ' vs " "

Colocar strings e variáveis entre aspas corretamente

Linux · macOS#
'literal' | "expands $var and $(cmd)" | \ escapes one character
echo 'Cost: $5'

aspas simples: nada é expandido

echo "Home is $HOME"

aspas duplas: as variáveis são expandidas e os espaços mantidos

cp "$file" "$dest/"

sempre coloque entre aspas variáveis que guardam caminhos: espaços quebram as que estão sem aspas

VAR=value

Definir e usar variáveis do shell

Linux · macOS#
name=value (no spaces around =) | "$name" | "${name}"
name="Ada"; echo "Hi $name"

definir e usar

echo "${PORT:-8080}"

valor padrão quando não definida ou vazia

file=report.tar.gz; echo "${file%%.*}" "${file##*/}"

remover a extensão / remover o diretório

echo "${#name}"

comprimento da string

export

Definir variáveis de ambiente

Linux · macOS#
export NAME=value | NAME=value command | unset NAME
export NODE_ENV=production

visível para todo programa iniciado a partir deste shell

DEBUG=1 ./app

só para aquele comando

printenv | sort

listá-las

unset DEBUG

remover

Somem quando o shell é fechado. Coloque os exports no ~/.bashrc (shells interativos) ou no ~/.profile (shells de login) para mantê-los.

$PATH

Adicionar uma pasta ao seu PATH

Linux · macOS#
export PATH="dir:$PATH"
echo "$PATH" | tr : '\n'

uma entrada por linha

export PATH="$HOME/.local/bin:$PATH"

colocar a sua pasta bin na frente (adicione ao ~/.bashrc)

hash -r

esquecer os locais de comandos em cache depois de mover binários

alias / source

Criar atalhos e recarregar a configuração do shell

Linux · macOS#
alias name='command' | source file
alias ll='ls -alF'

adicione ao ~/.bashrc para manter

source ~/.bashrc

aplicar as mudanças sem abrir um novo terminal (o mesmo que . ~/.bashrc)

\ls

rodar o ls de verdade, ignorando um alias

$?

Verificar se o último comando deu certo

Linux · macOS#
echo $? (0 = success)
grep -q root /etc/passwd; echo $?

0 encontrado, 1 não encontrado, 2 erro

set -euo pipefail

no topo de um script: parar em erros, variáveis não definidas e pipes que falham

history, !!

Reaproveitar comandos anteriores

Linux · macOS#
history | !! | !$ | !N | !prefix | ^old^new
sudo !!

repetir o último comando com sudo

cd !$

usar o último argumento do comando anterior

!42

repetir a linha 42 do histórico

^foo^bar

repetir o último comando trocando foo por bar

Com HISTCONTROL=ignorespace (padrão no Ubuntu, como parte de ignoreboth), um comando digitado com um espaço no início não é salvo: útil para comandos com segredos.

Ctrl+R, Ctrl+A …

Atalhos de teclado do terminal (bash/readline)

Linux · macOS#
Emacs-style readline keys (the default)
Ctrl+R
pesquisa no histórico para trás; pressione de novo para resultados mais antigos
Ctrl+A / Ctrl+E
início / fim da linha
Ctrl+U / Ctrl+K
recorta até o início / até o fim da linha
Ctrl+W
recorta a palavra anterior
Ctrl+Y
cola o que você recortou
Alt+B / Alt+F
volta / avança uma palavra
Alt+.
insere o último argumento do comando anterior
Ctrl+L
limpa a tela
Ctrl+C
cancela o comando em execução
Ctrl+D
fim da entrada; fecha o shell em uma linha vazia
Tab Tab
mostra os preenchimentos possíveis
bind -P | less

listar todos os atalhos de teclas

man / --help

Obter ajuda sobre qualquer comando

Linux · macOS#
man [section] cmd | cmd --help | help builtin | apropos word
man rsync

manual completo; / para pesquisar, q para sair

man 5 crontab

seção 5: o formato do arquivo, não o comando

help cd

os builtins do bash não têm man page própria

apropos partition

quais comandos mencionam uma palavra

#!/usr/bin/env bash

Escrever e executar um script de shell

Linux · macOS#
#!/usr/bin/env bash, chmod +x, ./script.sh
#!/usr/bin/env bash
set -euo pipefail
name="${1:-world}"
if [[ -f "$name.txt" ]]; then
  echo "found $name.txt"
fi
for f in *.log; do
  echo "$f"
done

argumentos, um teste, um loop

chmod +x script.sh && ./script.sh Ada

tornar executável e rodar

bash -x script.sh

rastrear cada linha durante a execução

$1 … $9 são os argumentos, "$@" são todos eles, $# é quantos são. [[ ]] é do bash; use [ ] em scripts POSIX sh.

clear / reset

Limpar ou consertar um terminal embaralhado

Linux · macOS#
clear | reset
reset

depois que um cat em um arquivo binário deixou o terminal mostrando lixo

Uma referência estática que funciona no seu navegador; suas pesquisas não são enviadas a lugar nenhum. Ver todas as ferramentas grátis.

Encontrou um problema ou algo que poderia ser melhor? Lemos todas as mensagens e corrigimos rápido.

Este guia rápido de comandos Linux agrupa mais de 200 comandos pela tarefa que você quer fazer: navegar e gerenciar arquivos, permissões, processos, espaço em disco, rede, pacotes, usuários, arquivos compactados, buscas, processamento de texto, serviços e logs do systemd, cron e o básico do bash que amarra tudo isso. Cada entrada traz a sintaxe, as opções que você vai realmente usar com uma explicação de uma linha, exemplos para copiar e, quando importa, um alerta. Pesquise por tarefa (“espaço livre em disco”, “porta 8080”) ou pelo nome do comando, e crie um link direto para qualquer entrada.

As opções seguem os manuais do GNU coreutils, util-linux, procps-ng, iproute2, systemd e bash, que é o que Ubuntu, Debian, Fedora, RHEL, Arch e openSUSE trazem. Onde o macOS se comporta de outro jeito, uma nota azul explica como, porque sed -i, date -d, stat -c e xargs são os pontos clássicos em que um script escrito num sistema quebra no outro. É uma referência para os 90% comuns, não um substituto das man pages: para opções pouco usadas, man <comando> continua sendo a autoridade.

Como usar

  1. Digite uma tarefa ou um comando na caixa de pesquisa (pressione / para ir até ela). Todas as palavras precisam corresponder, então “tar extrair” restringe a lista a poucas entradas, como a de extração do tar.
  2. Use os filtros de seção para ir a um tema como Rede ou Pacotes, ou marque “Só os perigosos” para ver todos os comandos que podem destruir dados ou bloquear o seu acesso.
  3. Clique em Copiar ao lado de qualquer exemplo e depois troque os nomes de arquivos e hosts de exemplo pelos seus.
  4. Clique no # ao lado de uma entrada para obter um link direto para ela, por exemplo /tools/linux-commands-cheat-sheet#rsync.
  5. Use Imprimir / Salvar como PDF para obter uma cópia compacta em duas colunas, sem a navegação do site.

Perguntas frequentes

Quais são os comandos Linux mais básicos para aprender primeiro?

Comece pela navegação e pelos arquivos: pwd, ls, cd, mkdir, cp, mv, rm, cat e less. Depois man (ajuda), sudo, grep e find para buscas, chmod e chown para permissões, ps, top e kill para processos, df e du para espaço em disco, e ssh e scp para máquinas remotas. Aprenda pipes (|) e redirecionamento (> e >>) cedo, porque eles permitem combinar todo o resto.

Como verificar o espaço em disco no Linux?

Execute df -h para ver o espaço livre em todos os sistemas de arquivos montados, em unidades legíveis. Para descobrir o que está ocupando o espaço, execute du -h -d 1 | sort -h dentro de um diretório: ele lista as subpastas com as maiores por último. Se o df diz que o disco está cheio, mas o du não encontra nada, provavelmente um arquivo apagado ainda está aberto por algum processo; sudo lsof +L1 lista esses arquivos.

Como descobrir qual processo está usando uma porta?

Execute sudo ss -tulpn para listar todas as portas TCP e UDP em escuta com o programa dono de cada uma, ou sudo lsof -i :8080 para uma porta específica. O sudo faz diferença: sem ele, você só vê os nomes dos seus próprios processos. O ss substituiu o netstat, que ainda funciona em sistemas com o pacote net-tools instalado.

Qual é a diferença entre kill e kill -9?

kill PID envia SIGTERM, que pede ao processo que termine e deixa que ele faça a limpeza: gravar arquivos, liberar travas, fechar conexões. kill -9 PID envia SIGKILL, que o kernel aplica imediatamente e que o processo não pode capturar nem ignorar, então nenhuma limpeza acontece. Use o kill simples primeiro, espere alguns segundos e reserve o -9 para processos que o ignoram.

Por que o sed -i não funciona no Mac?

O macOS vem com o sed do BSD, em que o -i exige um argumento de extensão de backup. No macOS, escreva sed -i '' 's/old/new/g' file; no Linux, com o GNU sed, o mesmo comando falha porque ele lê '' como o script. A forma que funciona nos dois é sed -i.bak 's/old/new/g' file, que mantém uma cópia de backup que você pode apagar depois.

Estes comandos são iguais em todas as distribuições Linux?

Quase todos: as ferramentas principais vêm dos mesmos projetos GNU e util-linux em todo lugar. O que muda é o gerenciador de pacotes (apt no Debian e no Ubuntu, dnf no Fedora e no RHEL, pacman no Arch, zypper no openSUSE, mostrados lado a lado na tabela de Pacotes), alguns caminhos de arquivos de log, o grupo de administradores (sudo ou wheel) e a interface do firewall (ufw ou firewalld). Sistemas Alpine e baseados em BusyBox usam versões menores das ferramentas, com menos opções.

Os comandos que podem destruir um sistema e o hábito que evita isso

Uma lista curta de comandos causa quase todo o estrago: rm -rf com um caminho errado ou vazio, dd ou mkfs apontados para o disco errado, chmod -R 777 ou chown -R num diretório do sistema, rsync --delete ou espelhamentos no estilo robocopy com origem e destino trocados, crontab -r em vez de crontab -e, usermod -G sem -a, e find com -delete na posição errada. Cada um está marcado como Perigoso no guia, com a forma específica como dá errado.

O hábito que evita a maior parte disso é executar primeiro a versão inofensiva. Antes de rm -rf, execute ls no mesmo caminho. Antes de find … -delete, execute o mesmo find com -print. Antes de rsync --delete, adicione -n para uma simulação. Antes de dd ou mkfs, execute lsblk e leia o nome do dispositivo duas vezes. Em scripts, escreva ${DIR:?} em vez de $DIR, para que uma variável vazia aborte o script em vez de transformar o caminho em /.

Duas configurações do shell também ajudam: set -euo pipefail no início dos scripts para na primeira falha em vez de continuar num estado ruim, e set -o noclobber faz o > se recusar a sobrescrever um arquivo existente.

GNU vs. macOS (BSD): onde o mesmo comando se comporta de outro jeito

O macOS é Unix, mas as ferramentas de linha de comando dele vêm do FreeBSD, e não do GNU, e as diferenças aparecem justamente quando você copia um comando de um tutorial de Linux:

• sed -i precisa de um argumento no macOS (sed -i '' …); -i.bak funciona nos dois.

• date não tem -d no macOS; use date -r <epoch> para converter um timestamp e date -v-2d para datas relativas.

• stat usa -f com outras letras de formato, em vez do -c do GNU.

• xargs no macOS ignora entrada vazia por padrão, enquanto o GNU xargs executa o comando uma vez, a menos que receba -r.

• du aceita -d 1 nos dois, mas só o GNU aceita --max-depth; ps não tem --sort no macOS (use ps aux -m ou -r).

• head -n -5, tac, free, ip, ss, timeout e watch não existem no macOS padrão.

Se você precisa do comportamento GNU num Mac, os pacotes coreutils, gnu-sed e findutils do Homebrew instalam as versões GNU com o prefixo g (gsed, gdate, gstat, gxargs).

Como ler permissões e escolher o chmod certo

O ls -l mostra as permissões como dez caracteres, por exemplo -rwxr-x---. O primeiro é o tipo (- arquivo, d diretório, l link); os nove seguintes são três grupos de leitura, escrita e execução para o dono, o grupo e todos os demais. Em números, r vale 4, w vale 2 e x vale 1, somados por grupo, então rwxr-x--- é 750.

Modos típicos: 644 para arquivos comuns, 755 para diretórios e scripts, 600 para chaves privadas e arquivos com segredos, 700 para um diretório privado como ~/.ssh. Num diretório, x significa “pode entrar”, e é por isso que diretórios precisam dele e arquivos comuns não. A calculadora de chmod converte entre as formas simbólica e octal, se você quiser conferir um modo antes de aplicá-lo.

Ferramentas grátis relacionadas

  • CMD vs PowerShell vs Bash — A mesma tarefa no Prompt de Comando, no PowerShell e no bash, lado a lado: arquivos, grep, variáveis de ambiente, processos, rede, serviços e scripts.
  • Calculadora chmod — Marque as caixas de Leitura, Escrita e Execução para obter o modo octal e o comando chmod, ou decodifique 755, 644 e rwxr-xr-x.
  • Gerador de expressões cron — Monte um agendamento cron com menus ou cole um pronto, leia-o em português e veja as próximas 10 execuções no seu fuso e em UTC. Grátis, no navegador.
  • Calculadora de sub-rede — Rede, broadcast, faixa de hosts e máscara para qualquer CIDR; divida redes com VLSM, expanda IPv6 e encontre faixas sobrepostas.
  • Guia rápido de Git — Comandos do Git organizados pelo que você quer fazer: desfazer o último commit, renomear uma branch, apagar uma branch remota. switch/restore modernos com os equivalentes clássicos e alertas de perigo.