Jhonatan Pinheiro
Loading page...
Jhonatan Pinheiro
Loading page...
Jhonatan Pinheiro
Loading page...
Navigation, files, permissions, users, processes, packages, disk, network, archiving and search: 200 commands with copy-ready examples.
Todo servidor que você vai administrar, todo container que você vai depurar e boa parte das ferramentas que você usa rodam em Linux. Aprender o terminal deixa de ser opcional muito rápido.
Estes 200 comandos são a base: navegar, ler, editar, dar permissão, matar processo, instalar pacote, ver disco, testar rede, compactar e procurar. Os exemplos usam Debian/Ubuntu como referência, com a variação de RHEL/Fedora anotada onde muda.
Dica que economiza horas:
Tabcompleta nomes,Ctrl+Rbusca no histórico eman comando(oucomando --help) responde antes do Google.
Onde você está, o que tem aqui e como mover as coisas de lugar.
Mostra o diretório atual por completo.
pwdO comando mais usado do terminal.
lsPermissões, dono, tamanho e data de cada item.
ls -lArquivos que começam com ponto só aparecem com -a.
ls -la-h troca bytes por KB, MB e GB.
ls -lhMais recentes primeiro — ótimo para achar o que acabou de mudar.
ls -lt
ls -ltr # mais antigos primeiroNavega para o caminho informado.
cd /var/logCasa, anterior, acima. Os três que você mais usa.
cd ~ # home do usuário
cd - # diretório anterior
cd .. # um nível acimaComeçando com / é absoluto; sem, parte de onde você está.
cd /etc/nginx # absoluto
cd nginx/conf.d # relativoCria uma pasta.
mkdir projetosCria os pais que faltarem e não reclama se já existir.
mkdir -p projetos/api/srcCria o arquivo ou atualiza a data de modificação.
touch notas.txtCopia arquivo mantendo o original.
cp origem.txt destino.txt-r é obrigatório para pastas.
cp -r projetos/ backup-projetos/-a mantém permissões, dono e datas. O jeito certo de copiar backup.
cp -a /var/www/ /backup/www/O mesmo comando faz as duas coisas.
mv antigo.txt novo.txt
mv relatorio.pdf ~/Documentos/Não existe lixeira. O que sai daqui, saiu.
rm arquivo.txtRemove recursivamente.
rm -r pasta-antiga/Pergunta a cada arquivo. Vale o hábito em servidor.
rm -i *.logUm espaço a mais apaga o sistema. Confira o caminho duas vezes antes do Enter.
rm -rf /caminho/certo # confira antes
# rm -rf / caminho <- o espaço aqui apaga tudoAtalho que aponta para outro caminho.
ln -s /var/www/site /home/user/siteVisualiza a estrutura; -L limita a profundidade.
tree -L 2Separam o nome do arquivo do caminho. Muito usados em script.
basename /var/log/syslog # syslog
dirname /var/log/syslog # /var/logResolve links e caminhos relativos até o caminho absoluto.
realpath ../projetoO shell expande o padrão antes do comando rodar.
ls *.log # termina em .log
ls arquivo?.txt # um caractere qualquer
ls dados[1-3].csv # intervaloLer arquivo grande sem travar o terminal e editar sem sair do SSH.
Despeja o conteúdo inteiro. Cuidado com arquivo grande.
cat /etc/hostnameFacilita conversar sobre a linha X do arquivo.
cat -n script.shO jeito certo de abrir arquivo grande. q sai, / busca, G vai ao fim.
less /var/log/syslogPrimeiras 10 linhas por padrão.
head arquivo.csv
head -n 50 arquivo.csvÚltimas linhas — onde o erro recente costuma estar.
tail -n 100 /var/log/nginx/error.logSegue o arquivo enquanto ele cresce. O comando do plantão.
tail -f /var/log/nginx/access.logComo -f, mas sobrevive à rotação do log.
tail -F /var/log/app.logLinhas, palavras e bytes.
wc -l acesso.log # linhas
wc -w texto.txt # palavras
wc -c arquivo.bin # bytesPara quem só precisa editar e sair. Ctrl+O salva, Ctrl+X sai.
nano /etc/hostsEstá em qualquer servidor. i insere, Esc sai do modo, :wq salva e fecha, :q! sai sem salvar.
vim /etc/nginx/nginx.confOrdena as linhas; -n numérico, -r reverso.
sort nomes.txt
sort -nr valores.txtSó funciona em linhas adjacentes — combine com sort.
sort acessos.log | uniq
sort acessos.log | uniq -c | sort -nr # rankingExtrai campos por delimitador ou posição.
cut -d: -f1 /etc/passwd # usuários
cut -c1-10 arquivo.txt # primeiros 10 caracteresConverte ou remove caracteres do fluxo.
echo "texto" | tr 'a-z' 'A-Z'
tr -d '\r' < arquivo-windows.txt > arquivo-unix.txtMostra o que mudou entre dois arquivos.
diff config-antigo.conf config-novo.conf
diff -u a.txt b.txt # formato unificado, como no gitComo cat -n, com mais opções de formatação.
nl arquivo.txtQuebra arquivo grande em pedaços.
split -l 1000 grande.csv parte_Verificam integridade de download.
sha256sum imagem.iso
sha256sum -c checksums.txtDescobre o tipo real, ignorando a extensão.
file documento.pdf
file *Tamanho, permissões, dono e as três datas do arquivo.
stat arquivo.txtO modelo de segurança do Unix: quem pode ler, escrever e executar o quê.
-rwxr-xr--: tipo, dono, grupo e outros. r=4, w=2, x=1.
ls -l arquivo.sh
# -rwxr-xr-- dono: rwx (7) | grupo: r-x (5) | outros: r-- (4)A forma mais comum: três dígitos, um por faixa.
chmod 644 arquivo.txt # dono lê/escreve, resto lê
chmod 755 script.sh # todos executam, só o dono escreve
chmod 600 ~/.ssh/id_ed25519 # só o dono, e nada maisAdiciona ou remove permissão sem recalcular tudo.
chmod +x script.sh
chmod u+w,go-w arquivo.txt
chmod a-x binarioAplica na árvore inteira. Cuidado para não dar 777 no servidor.
chmod -R 755 /var/www/siteDiretório precisa de x para ser atravessado; arquivo não precisa.
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;Só root pode dar arquivo para outro usuário.
sudo chown www-data arquivo.html
sudo chown www-data:www-data -R /var/wwwMuda só o grupo dono.
sudo chgrp desenvolvedores projeto/Define o que é subtraído das permissões de arquivos novos.
umask # 0022 é o padrão
umask 0077 # arquivos novos só para o donoExecuta com o dono do arquivo, não com quem chamou. É por isso que passwd funciona.
ls -l /usr/bin/passwd # -rwsr-xr-x
sudo chmod u+s programaEm diretório, faz todo arquivo criado herdar o grupo da pasta.
sudo chmod g+s /projetos/compartilhadoEm pasta compartilhada, só o dono apaga o próprio arquivo. É o que protege o /tmp.
ls -ld /tmp # drwxrwxrwt
sudo chmod +t /pasta-compartilhadaVai além de dono/grupo/outros: permissão por usuário específico.
setfacl -m u:jhonatan:rw arquivo.txt
getfacl arquivo.txt+i deixa o arquivo imutável — nem root altera sem remover o atributo.
sudo chattr +i /etc/resolv.conf
lsattr /etc/resolv.conf
sudo chattr -i /etc/resolv.confPede a sua senha e registra no log quem fez o quê.
sudo apt updateAbrem shell de root. Prefira sudo comando pontual.
sudo -i
su - outro-usuarioO atalho mais satisfatório do terminal.
sudo !!Lista as permissões de sudo do seu usuário.
sudo -lPermissão total para qualquer usuário do sistema. Quase sempre existe uma combinação de dono/grupo que resolve.
# em vez de: chmod -R 777 /var/www
sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/wwwQuem existe na máquina e o que cada um pode fazer.
Quem você é e a que grupos pertence.
whoami
id
id jhonatanQuem está conectado agora; w mostra também o que está executando.
who
wÚltimos acessos à máquina — primeira parada em auditoria.
last
last -n 20adduser (Debian) é interativo e cria home; useradd é o comando cru.
sudo adduser maria
sudo useradd -m -s /bin/bash mariaTroca a própria senha ou a de outro usuário (como root).
passwd
sudo passwd mariaAdiciona a grupos, troca shell, muda a home.
sudo usermod -aG sudo maria # -a é obrigatório para NÃO remover os outros grupos
sudo usermod -s /bin/zsh maria-r apaga também a pasta pessoal.
sudo userdel maria
sudo userdel -r mariaCria grupo e lista os do usuário.
sudo groupadd desenvolvedores
groups mariaOnde usuários e grupos ficam registrados (a senha vive em /etc/shadow).
cat /etc/passwd | cut -d: -f1,3,7
cat /etc/groupImpede login sem apagar o usuário.
sudo usermod -L maria # bloqueia
sudo usermod -U maria # desbloqueiaPolítica de troca periódica.
sudo chage -l maria
sudo chage -M 90 maria # expira em 90 diasSem shell e sem login: aplicação não precisa de acesso interativo.
sudo useradd -r -s /usr/sbin/nologin appO que está rodando, quanto consome e como parar.
A listagem completa de processos, com CPU e memória.
ps auxCombinado com grep, acha o processo específico.
ps aux | grep nginxMostra a hierarquia de pai e filhos.
ps auxf
pstree -pAtualiza sozinho. q sai, k mata, M ordena por memória.
topColorido, com scroll e mouse. Vale instalar em todo servidor.
htopManda SIGTERM (15): pede para encerrar direito.
kill 12345SIGKILL não pode ser ignorado, mas o processo não salva nada. Use por último.
kill -9 12345Matam por nome, sem precisar do PID.
pkill nginx
killall firefoxProcura processo por nome.
pgrep -a nginx& solta o processo; jobs lista; fg traz de volta.
./script-longo.sh &
jobs
fg %1O processo continua depois que você fecha o SSH.
nohup ./backup.sh > backup.log 2>&1 &Suspende o processo em primeiro plano e o retoma em segundo.
# Ctrl+Z suspende
bg # continua em segundo plano
fg # traz de voltaRoda com prioridade menor, para não atrapalhar o resto.
nice -n 19 ./tarefa-pesada.sh
renice -n 10 -p 12345Mata o comando se passar do tempo.
timeout 30s ./script.shExecuta a cada N segundos e mostra o resultado atualizado.
watch -n 2 'df -h /'Descobre quem está usando um arquivo ou uma porta.
lsof /var/log/app.log
sudo lsof -i :8080Há quanto tempo a máquina está no ar e a carga em 1, 5 e 15 minutos.
uptimeMemória usada, livre e em cache. available é o número que importa.
free -hInstalar, atualizar e remover software na sua distribuição.
Atualiza a lista de pacotes. Não instala nada.
sudo apt updateAtualiza os pacotes instalados.
sudo apt upgrade
sudo apt full-upgradeInstala um ou vários pacotes.
sudo apt install -y htop curl gitremove tira o programa; purge leva junto os arquivos de configuração.
sudo apt remove nginx
sudo apt purge nginxRemove dependências que ficaram órfãs.
sudo apt autoremoveProcura e detalha um pacote antes de instalar.
apt search postgresql
apt show postgresql-16Tudo que está instalado na máquina.
apt list --installed | lessEquivalentes do apt no mundo Red Hat.
sudo dnf install htop
sudo dnf update
sudo dnf remove htopGerenciador do Arch Linux.
sudo pacman -S htop
sudo pacman -SyuInstalam pacote local, sem resolver dependência automaticamente.
sudo dpkg -i pacote.deb
sudo apt install -f # conserta dependências
sudo rpm -i pacote.rpmFormatos universais, com a aplicação isolada.
sudo snap install code --classic
flatpak install flathub org.gimp.GIMPOnde está o binário que será executado.
which python3
whereis nginxDiz se é binário, alias, função ou comando interno do shell.
type ls
type cdAdiciona fonte de terceiro com a chave de assinatura.
curl -fsSL https://exemplo.com/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/exemplo.gpg
echo "deb [signed-by=/usr/share/keyrings/exemplo.gpg] https://exemplo.com/apt stable main" | sudo tee /etc/apt/sources.list.d/exemplo.listLibera espaço em servidor apertado.
sudo apt clean
sudo apt autocleanA pergunta mais comum em servidor: quem encheu o disco?
Visão geral do disco. O primeiro comando quando algo para de gravar.
df -hDisco pode encher de arquivos mesmo com espaço livre. Milhões de arquivinhos esgotam os inodes.
df -iQuanto cada pasta ocupa.
du -sh /var/logA receita para achar o vilão do espaço.
du -h --max-depth=1 /var | sort -hr | head -20Interativo: você navega e apaga direto. Vale instalar.
ncdu /varEncontra os arquivos grandes de uma vez.
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/nullÁrvore de dispositivos de bloco.
lsblk
lsblk -f # com sistema de arquivos e UUIDConecta um dispositivo a um diretório.
sudo mount /dev/sdb1 /mnt/dados
mount | column -tFalha se algo estiver usando; lsof revela quem é.
sudo umount /mnt/dados
sudo lsof +D /mnt/dadosMontagens aplicadas no boot. Erro aqui pode impedir a máquina de subir.
cat /etc/fstab
sudo mount -a # testa o fstab sem reiniciarLog costuma ser o primeiro suspeito.
sudo du -sh /var/log/*
sudo journalctl --disk-usageProcesso ainda com o arquivo aberto segura o espaço até ser reiniciado.
sudo lsof | grep deletedEspaço fácil de recuperar em emergência.
sudo apt clean
sudo journalctl --vacuum-time=7dGera arquivo de tamanho definido para testar disco.
dd if=/dev/zero of=teste.img bs=1M count=100
fallocate -l 1G teste.imgTeste rápido de I/O do disco.
dd if=/dev/zero of=teste bs=1M count=1024 oflag=directDescobrir IP, testar conexão e ver o que está escutando.
Substituto moderno do ifconfig.
ip a
ip -br a # versão resumidaMostra o gateway padrão e as rotas configuradas.
ip rPrimeiro teste de conectividade.
ping -c 4 google.comO canivete suíço da web na linha de comando.
curl https://api.exemplo.com/status
curl -I https://exemplo.com # só os headers
curl -s -o /dev/null -w "%{http_code}\n" https://exemplo.comTesta API sem sair do terminal.
curl -X POST https://api.exemplo.com/itens \
-H "Content-Type: application/json" \
-d '{"nome":"teste"}'Download resiliente, com retomada.
wget https://exemplo.com/arquivo.tar.gz
wget -c https://exemplo.com/grande.iso # continua download interrompidoSubstituto do netstat. Mostra quem está escutando.
ss -tuln
sudo ss -tulpn # com o processo dono da portaA resposta para "address already in use".
sudo ss -tulpn | grep :8080
sudo lsof -i :8080Resolve nome e mostra a resposta completa.
dig exemplo.com
dig +short exemplo.com
dig @8.8.8.8 exemplo.comConsultas DNS mais simples.
host exemplo.com
nslookup exemplo.comMostra o caminho até o destino e onde a latência aparece.
traceroute exemplo.com
mtr exemplo.com # traceroute contínuoO endereço com que sua máquina aparece na internet.
curl -s ifconfig.me
curl -s https://api.ipify.orgNome da máquina na rede.
hostname
hostname -I # IPs
sudo hostnamectl set-hostname servidor01Resolução local, antes do DNS. Ótimo para testar antes de apontar o domínio.
cat /etc/hosts
# 192.168.0.10 meu-site.localConfere se a porta está aberta do outro lado.
nc -zv exemplo.com 443
timeout 3 bash -c "</dev/tcp/exemplo.com/443" && echo abertaEmpacotar, comprimir e mover arquivos entre máquinas.
cria, z comprime com gzip, verbose, file.
tar -czvf backup.tar.gz pasta/x extrai. -C escolhe o destino.
tar -xzvf backup.tar.gz
tar -xzvf backup.tar.gz -C /destinoConfira o conteúdo antes de descompactar.
tar -tzvf backup.tar.gzBackup sem node_modules nem .git.
tar -czvf app.tar.gz --exclude=node_modules --exclude=.git app/xz e zstd comprimem melhor; zstd é muito mais rápido.
tar -cJvf backup.tar.xz pasta/
tar --zstd -cvf backup.tar.zst pasta/Comprime arquivo isolado (substitui o original).
gzip arquivo.log
gunzip arquivo.log.gz
zcat arquivo.log.gz | less # lê sem descompactarFormato universal, compatível com Windows.
zip -r pasta.zip pasta/
unzip pasta.zip -d destino/Transfere entre máquinas usando a conexão SSH.
scp arquivo.txt usuario@servidor:/caminho/
scp -r pasta/ usuario@servidor:/caminho/
scp usuario@servidor:/caminho/arquivo.txt .Copia só a diferença e retoma de onde parou. Melhor que scp para volume.
rsync -avz pasta/ usuario@servidor:/destino/Espelha o destino, apagando o que não existe mais na origem.
rsync -avz --delete --exclude=node_modules ./site/ usuario@servidor:/var/www/site/--dry-run mostra o que faria, sem fazer. Use sempre antes do --delete.
rsync -avzn --delete origem/ destino/Acompanha a transferência de arquivo grande.
rsync -avz --progress grande.iso usuario@servidor:/dados/Sessão interativa de transferência sobre SSH.
sftp usuario@servidor
# get arquivo.txt / put local.txt / ls / byeEmpacota, envia e desempacota do outro lado, sem arquivo intermediário.
tar -czf - pasta/ | ssh usuario@servidor "tar -xzf - -C /destino"Padrão simples que evita sobrescrever backup.
tar -czf backup-$(date +%F-%H%M).tar.gz /var/wwwfind procura por atributos; grep procura dentro do conteúdo.
A busca mais comum.
find /var -name "*.log"
find . -iname "readme*" # sem diferenciar maiúsculasArquivo (f), diretório (d) ou link (l).
find /etc -type f -name "*.conf"
find /var -type d -name "cache"+ maior, - menor.
find / -type f -size +100M
find . -type f -size -1kModificados nos últimos dias ou minutos.
find /var/log -mtime -1 # últimas 24 h
find /tmp -mmin -30 # últimos 30 minAuditoria: arquivos de um usuário ou com permissão perigosa.
find /home -user maria
find / -perm -4000 -type f 2>/dev/null # binários SUID-exec roda um comando em cada resultado; -delete remove.
find /tmp -name "*.tmp" -mtime +7 -delete
find . -name "*.sh" -exec chmod +x {} \;Mais rápido que -exec em muitos arquivos. -print0/-0 trata nome com espaço.
find . -name "*.log" -print0 | xargs -0 rmEvita varrer a árvore inteira.
find /var -maxdepth 2 -name "*.conf"Consulta um índice; muito mais rápido, porém desatualizado até o próximo updatedb.
locate nginx.conf
sudo updatedbProcura o padrão dentro dos arquivos.
grep "erro" /var/log/syslogVarre a árvore inteira de diretórios.
grep -r "TODO" src/-i ignora o caixa.
grep -i "error" app.log-n diz onde está.
grep -n "senha" config.py-v mostra o que não casa — ótimo para filtrar ruído.
grep -v "DEBUG" app.logLinhas antes e depois do achado.
grep -B 3 -A 5 "Exception" app.log
grep -C 3 "Exception" app.log-c conta as ocorrências; -l lista só os arquivos.
grep -c "404" access.log
grep -rl "senha" /etc-w evita casar test dentro de testing.
grep -w "test" arquivo.txt-E habilita |, + e ? sem escape.
grep -E "erro|falha|timeout" app.logPrefixa cada resultado com o nome do arquivo.
grep "database" /etc/*.confMuito mais rápido e já respeita o .gitignore.
rg "getThemeSelection"
rg -t ts "useState"Atalhos, histórico e ajuda — o que faz você digitar menos.
Completa comando, caminho e nome de arquivo. Dois toques listam as opções.
cd /var/lo<Tab> # vira /var/log/Todos os comandos que você já rodou.
history
history | grep docker!! repete o último; !123 roda o número 123.
!!
!123
!docker # último que começa com dockerO atalho que mais economiza digitação. Continue apertando para ir voltando.
# Ctrl+R e comece a digitar parte do comandoMovimentação e apagamento sem setas.
# Ctrl+A início | Ctrl+E fim
# Ctrl+U apaga até o início | Ctrl+K até o fim
# Ctrl+W apaga a palavra anterior | Ctrl+L limpa a telaInterrompe o comando atual; encerra a entrada/sessão.
# Ctrl+C cancela
# Ctrl+D envia EOF (sai do shell)Comando longo vira palavra curta.
alias ll='ls -lah'
alias gs='git status'
alias ..='cd ..'Coloque no arquivo de perfil do seu shell.
echo "alias ll='ls -lah'" >> ~/.bashrc
source ~/.bashrcVer, criar e exportar para os processos filhos.
echo $HOME
export API_URL="https://api.exemplo.com"
printenv | sortOnde o shell procura os executáveis.
echo $PATH
export PATH="$HOME/bin:$PATH"A documentação oficial de cada comando. / busca, q sai.
man tar
man 5 crontab # seção 5: formatos de arquivoResumo rápido, sem abrir o manual.
tar --help | lessManual resumido, só com os usos comuns. Vale instalar.
tldr tar
tldr findBusca no manual pelo que o comando faz.
apropos compressLimpa a tela; reset conserta o terminal bagunçado por saída binária.
clear
reset; sempre, && se der certo, || se falhar.
cd /tmp; ls
mkdir dados && cd dados
ping -c1 host || echo "sem resposta"> sobrescreve, >> acrescenta, 2> é o erro.
ls > lista.txt
echo "linha" >> log.txt
comando > saida.txt 2> erros.txt
comando > tudo.txt 2>&1Saber onde você está pisando antes de mexer.
Mostra e formata a data. Muito usado em nome de arquivo.
date
date +"%Y-%m-%d %H:%M:%S"
date +%s # timestamp UnixCalendário do mês ou do ano.
cal
cal 2026Configura fuso horário e sincronização NTP.
timedatectl
sudo timedatectl set-timezone America/Sao_PauloQual kernel e que arquitetura a máquina usa.
uname -a
uname -r # só a versão do kernelNome e versão do sistema.
cat /etc/os-release
lsb_release -aModelo, núcleos e frequência.
lscpu
nproc # só o número de núcleosInventário do que a máquina tem.
free -h
sudo lshw -short
sudo dmidecode -t memoryPlaca de rede, GPU, dispositivos conectados.
lspci
lsusbDesde quando está no ar e o histórico de reinicializações.
uptime -p
last reboot | headSempre avise quem estiver conectado antes.
sudo shutdown -h now
sudo shutdown -r +5 "Reinício em 5 minutos"
sudo shutdown -c # cancela