Guia completo de Bash para automação e administração de sistemas
📖 Definição
Bash (Bourne Again Shell) é o shell mais popular em sistemas Unix/Linux. É uma interface de linha de comando poderosa que permite executar comandos, automatizar tarefas e gerenciar sistemas operacionais.
💪 Por que aprender?
• Interface de linha de comando
• Scripting e automação
• Compatibilidade com POSIX
• Extensível com plugins
• Padrão da maioria das distribuições Linux
🚀 O que você pode fazer?
• Automação de tarefas
• Administração de sistemas
• Desenvolvimento de scripts
• Processamento de dados
• DevOps e CI/CD
Linux, macOS, WSL
Automação, Deploy
CI/CD, Docker
Cloud, Containers
🟢 Navegação & Sistema
Use quando: Começando, setup inicial, navegação básica
📋Onde estou?
pwd# Print Working Directory
whoami# Mostra usuário atual
hostname# Nome do servidor
uname -a# Info do sistema
📋Listando arquivos
ls# Lista arquivos
ls -l# Lista detalhada
ls -la# Inclui ocultos
ls -lh# Tamanhos legíveis
ls -ltr# Ordena por data
ls -R# Lista recursivo
📋Navegando
cd pasta/# Entra na pasta
cd ..# Volta 1 nível
cd ~# Vai para home
cd -# Volta pasta anterior
cd /# Vai para raiz
🟢 Arquivos & Diretórios
Use quando: Gerenciamento diário de arquivos e pastas
📋Criar
touch arquivo.txt# Cria arquivo vazio
mkdir pasta# Cria diretório
mkdir -p a/b/c# Cria hierarquia
echo "texto" > file# Cria com conteúdo
📋Copiar & Mover
cp origem destino# Copia arquivo
cp -r pasta/ dest/# Copia pasta
cp -v file dest# Copia verbose
mv antigo novo# Move/Renomeia
mv *.txt pasta/# Move múltiplos
📋Deletar
rm arquivo# Deleta arquivo
rm -i arquivo# Pede confirmação
rm -f arquivo# Força deletar
rm -rf pasta/# Deleta pasta ⚠️
rmdir pasta# Remove pasta vazia
📋Links
ln -s origem link# Link simbólico
ln origem link# Hard link
readlink link# Mostra destino do link
find . -type l# Lista links simbólicos
ls -l link# Verifica tipo de link
🟢 Visualização & Busca
💡 💡 Ctrl+R busca histórico | !! repete último comando
📋Ver conteúdo
cat arquivo.txt# Mostra tudo
cat -n file# Com números
more arquivo# Página por página
less arquivo# Melhor navegação
head file# Primeiras 10 linhas
head -n 20 file# Primeiras 20
tail file# Últimas 10 linhas
tail -f log.txt# Monitora tempo real
tail -n 50 file# Últimas 50
📋Buscar
grep "texto" file# Busca string
grep -i "TEXT" file# Case insensitive
grep -r "texto" ./# Busca recursiva
grep -v "texto" file# Inverte (não contém)
grep -n "texto" file# Mostra números linha
find . -name "*.js"# Busca arquivos
find . -type f# Só arquivos
find . -type d# Só diretórios
find . -name "*.txt" -size +1M# Arquivos > 1MB
find . -mtime -7# Modificados nos últimos 7 dias
find . -empty# Arquivos vazios
find . -exec rm {} \;# Remove arquivos encontrados
🟢 Ajuda & Histórico
Use quando: Precisa de ajuda, documentação ou referência
📋Documentação
man ls# Manual do comando
ls --help# Ajuda rápida
which python# Onde está instalado
whereis python# Todos caminhos
type python# Tipo do comando
apropos search# Busca comandos
📋Histórico
history# Lista histórico
history 20# Últimos 20
history | grep git# Busca no histórico
!123# Executa comando #123
!!# Repete último
!git# Último que começa com git
history -c# Limpa histórico
history -d 123# Remove linha específica
fc -l# Lista últimos comandos
Ctrl+R# Busca interativa no histórico
📋Informações
date# Data e hora
cal# Calendário
uptime# Tempo ligado
w# Quem está logado
who# Usuários logados
last# Últimos logins
id# ID do usuário e grupos
groups# Grupos do usuário
🟡 Processamento de Texto
Use quando: Processar logs, ETL, limpeza de dados
📋Pipes & Filtros
cat file | grep "error"# Filtra linhas
cat file | sort# Ordena
cat file | sort | uniq# Remove duplicatas
cat file | wc -l# Conta linhas
cat file | wc -w# Conta palavras
cat file | wc -c# Conta caracteres
📋Sed (Stream Editor)
sed 's/old/new/' file# Substitui 1ª ocorrência
sed 's/old/new/g' file# Substitui todas
sed -i 's/old/new/g' file# Edita arquivo
sed '5d' file# Deleta linha 5
sed -n '10,20p' file# Imprime linhas 10-20
📋Awk (Pattern Processing)
awk '{print $1}' file# Imprime coluna 1
awk '{print $1,$3}' file# Colunas 1 e 3
awk '/error/ {print}' file# Filtra por padrão
awk '{sum+=$1} END {print sum}'# Soma coluna
📋Cut & Paste
cut -d',' -f1 file.csv# Corta por delimitador
cut -c1-10 file# Primeiros 10 chars
paste file1 file2# Junta linhas de arquivos
join file1 file2# Junta por campo comum
tr 'a-z' 'A-Z' < file# Converte para maiúsculas
tr -d '\n' < file# Remove quebras de linha
🟡 Redirecionamento & Pipes
Use quando: Scripts, automação, processamento de dados
📋Redirecionamento básico
comando > arquivo# Sobrescreve
comando >> arquivo# Adiciona no final
comando < arquivo# Input de arquivo
comando 2> erro.log# Só erros (stderr)
comando 1> saida.log# Só output (stdout)
comando &> tudo.log# Stdout + stderr
comando 2>&1# stderr → stdout
📋Pipes avançados
cmd1 | cmd2# Output cmd1 → input cmd2
cmd | tee file# Mostra E salva
cmd | tee -a file# Append
📋Here Documents
cat << EOF > file
texto
EOF# Múltiplas linhas
📋Combinações úteis
ls -la | grep ".js"# Filtra listagem
ps aux | grep node# Busca processos
history | tail -20# Últimos 20 comandos
cat log | sort | uniq -c# Conta únicas
📋Descarte output
comando > /dev/null# Descarta output
comando 2> /dev/null# Descarta erros
comando &> /dev/null# Descarta tudo
comando 2>&1 | tee file# Salva stdout+stderr
comando > >(stdout) 2> >(stderr)# Redireciona separado
cmd1 && cmd2 || cmd3# Encadeamento condicional
🟡 Processos & Monitoramento
Use quando: Debug produção, otimização, gerenciar serviços
📋Listar processos
ps# Processos do terminal
ps aux# Todos processos
ps aux | grep node# Busca específico
pgrep node# PIDs do processo
pidof node# PID do programa
📋Monitoramento em tempo real
top# Monitor interativo
htop# Top melhorado
top -u user# Processos do usuário
📋Gerenciar processos
kill PID# Mata processo (TERM)
kill -9 PID# Mata forçado (KILL)
killall node# Mata todos node
pkill -f "script.js"# Mata por nome
📋Background & Foreground
comando &# Executa em background
Ctrl+Z# Pausa processo
bg# Continua em background
fg# Traz para foreground
jobs# Lista jobs
nohup cmd &# Roda desconectado
disown# Desvincula do terminal
kill -l# Lista sinais disponíveis
kill -USR1 PID# Envia sinal específico
renice 10 PID# Altera prioridade
ionice -c 3 cmd# Prioridade de I/O
🟡 Sistema & Recursos
Use quando: Monitoramento, troubleshooting, capacity planning
📋Disco
df -h# Espaço em disco
df -i# Inodes
du -sh pasta/# Tamanho da pasta
du -sh *# Tamanho de tudo
du -h --max-depth=1# Só 1 nível
ncdu# Análise interativa
📋Memória
free -h# Uso de RAM
free -m# Em megabytes
vmstat# Estatísticas VM
vmstat 5# A cada 5 segundos
📋CPU & Load
uptime# Load average
lscpu# Info da CPU
cat /proc/cpuinfo# Detalhes CPU
📋Sistema
uname -a# Info do sistema
lsb_release -a# Versão distro
hostname# Nome do host
dmesg | tail# Logs do kernel
lshw# Hardware do sistema
lsblk# Dispositivos de bloco
lsusb# Dispositivos USB
lspci# Dispositivos PCI
🟡 Rede & Conectividade
Use quando: Deploy, troubleshooting, integrações, APIs
📋Testes de conexão
ping google.com# Testa conectividade
ping -c 4 host# 4 pacotes
traceroute google.com# Traça rota
mtr google.com# Ping + traceroute
📋HTTP & Downloads
curl https://api.com# HTTP GET
curl -I https://site.com# Só headers
curl -X POST -d "data"# POST request
curl -o file url# Download
wget https://file.zip# Download arquivo
wget -c url# Continua download
📋SSH & SCP
ssh user@servidor# Conecta remoto
ssh -p 2222 user@host# Porta diferente
ssh -i key.pem user@host# Usa chave
scp file user@host:/path# Copia via SSH
scp -r pasta/ user@host:/# Copia pasta
rsync -avz src/ dest/# Sync eficiente
📋Portas & Conexões
netstat -tuln# Portas escutando
netstat -an | grep ESTABLISHED# Conexões ativas
ss -tuln# Netstat moderno
lsof -i :3000# Quem usa porta 3000
lsof -i -P# Todas conexões
nc -zv host 80# Testa porta aberta
📋DNS & IP
nslookup google.com# DNS lookup
dig google.com# DNS detalhado
host google.com# DNS simples
ifconfig# Config rede (legado)
ip addr# IP addresses
ip route# Tabela de rotas
ip neigh# Tabela ARP
ss -ltp# Portas com processos
tcpdump -i eth0# Captura pacotes
dig +trace google.com# Traçado DNS
🔴 Scripts & Variáveis
Use quando: Automação, scripts complexos, CI/CD
📋Variáveis
nome="João"# Define variável
echo $nome# Usa variável
echo "${nome}"# Forma segura
readonly VAR="fix"# Constante
unset nome# Remove variável
📋Variáveis especiais
$0# Nome do script
$1, $2, $3...# Argumentos
$## Número de args
$@# Todos args
$?# Exit code anterior
$$# PID do script
📋Arrays
arr=(a b c)# Define array
echo ${arr[0]}# Acessa elemento
echo ${arr[@]}# Todos elementos
echo ${#arr[@]}# Tamanho
arr+=(novo)# Adiciona elemento
unset arr[0]# Remove elemento
declare -p arr# Mostra definição
📋Command substitution
hoje=$(date)# Resultado em var
files=$(ls *.txt)# Lista em var
🔴 Condições & Loops
Use quando: Scripts de deploy, automação condicional
📋If/Else
if [ -f "file" ]; then
echo "Existe"
fiif [ $x -eq 10 ]; then
echo "É 10"
else
echo "Não é"
fi📋Operadores de teste
-f file# Arquivo existe
-d dir# Diretório existe
-z "$str"# String vazia
-n "$str"# String não vazia
$a -eq $b# Igual (números)
$a -ne $b# Diferente
$a -lt $b# Menor que
$a -gt $b# Maior que
"$a" = "$b"# Igual (strings)
📋For Loop
for i in {1..5}; do
echo $i
donefor file in *.txt; do
echo $file
donefor ((i=0; i<10; i++)); do
echo $i
done📋While Loop
while [ $x -lt 10 ]; do
echo $x
((x++))
donewhile read line; do
echo $line
done < filewhile true; do
echo "Loop infinito"
sleep 1
doneuntil [ $x -eq 10 ]; do
echo $x
((x++))
done📋Case
case $1 in
start) echo "Start"
stop) echo "Stop"
*) echo "?"
esac🔴 Funções & Debugging
Use quando: Scripts de produção, automação crítica
📋Funções
funcao() {
echo "Olá $1"
return 0
}funcao "Mundo"# Chama função
local var="local"# Variável local
📋Debugging
bash -x script.sh# Debug mode
set -x# Ativa debug
set +x# Desativa debug
set -e# Exit on error
set -u# Error on undefined
set -o pipefail# Pipe error handling
set -o nounset# Error on undefined vars
set -o errexit# Exit on error
shopt -s globstar# Ativa ** globbing
📋Error handling
comando || echo "Erro"# Se falhar
comando && echo "OK"# Se sucesso
trap "echo Erro" ERR# Captura erros
trap "cleanup" EXIT# Executa ao sair
📋Best practices
#!/bin/bash# Shebang
set -euo pipefail# Strict mode
"$var"# Sempre quote vars
🔴 Power Combos
Use quando: Data analysis, bulk operations, otimização
📋Logs em tempo real
tail -f app.log | grep ERROR# Filtra ao vivo
tail -f log | awk '{print $1,$5}'# Extrai colunas
📋Top IPs de acesso
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10📋Busca e substitui em lote
find . -name "*.js" -exec sed -i 's/var/const/g' {} \;grep -rl "old" . | xargs sed -i 's/old/new/g'📋Paralelização
cat urls.txt | xargs -P 10 -I {} curl -O {}# 10 paralelos
find . -name "*.jpg" | parallel convert {} {.}.png📋Compara arquivos
diff file1 file2# Diferenças
diff -u file1 file2# Unified format
diff <(sort file1) <(sort file2)# Process substitution
comm file1 file2# Comum/diferente
sd 'old' 'new' file# Substituição rápida
rg "pattern" --type-add 'web:*.{html,js,css}' -t web# Ripgrep com tipos
fd -e txt -x cat# Find moderno
📋Processamento JSON
cat api.json | jq '.data'# Extrai campo
curl api.com | jq -r '.[]'# Raw output
🔴 Permissões & Segurança
Use quando: DevOps, deploy, configuração de servidores
📋Permissões (chmod)
chmod 755 file# rwxr-xr-x
chmod 644 file# rw-r--r--
chmod +x script.sh# Torna executável
chmod -R 755 dir/# Recursivo
chmod u+x file# User exec
chmod g-w file# Remove write grupo
📋Ownership (chown)
chown user file# Muda dono
chown user:group file# Dono e grupo
chown -R user dir/# Recursivo
chgrp group file# Só grupo
📋SSH Keys
ssh-keygen -t rsa -b 4096# Gera chave RSA
ssh-keygen -t ed25519# Ed25519 (melhor)
ssh-copy-id user@host# Copia chave pública
ssh-add ~/.ssh/id_rsa# Adiciona ao agent
chmod 600 ~/.ssh/id_rsa# Permissão chave
chmod 644 ~/.ssh/id_rsa.pub# Permissão pública
📋Sudo
sudo comando# Executa como root
sudo -u user cmd# Como outro user
sudo -i# Login como root
sudo !!# Repete com sudo
📋Variáveis de ambiente
export VAR="value"# Define e exporta
echo $PATH# Mostra PATH
export PATH=$PATH:/new# Adiciona ao PATH
env# Lista todas vars
printenv VAR# Mostra var específica
unset VAR# Remove variável
declare -x VAR="value"# Exporta variável
source ~/.bashrc# Recarrega configuração
🔴 Compressão & Arquivos
Use quando: Backups, transferências, deploy de arquivos
📋Tar
tar -czf file.tar.gz dir/# Compacta (gzip)
tar -xzf file.tar.gz# Extrai (gzip)
tar -cjf file.tar.bz2 dir/# Compacta (bzip2)
tar -xjf file.tar.bz2# Extrai (bzip2)
tar -tzf file.tar.gz# Lista conteúdo
tar -xzf file.tar.gz -C /dest# Extrai em dir
📋Zip/Unzip
zip file.zip files# Compacta
zip -r dir.zip dir/# Compacta pasta
unzip file.zip# Extrai
unzip -l file.zip# Lista
📋Gzip
gzip file# Compacta (remove orig)
gzip -k file# Mantém original
gunzip file.gz# Descompacta
zcat file.gz# Mostra sem extrair
zip -r -9 archive.zip folder/# Máxima compressão
unzip -q file.zip# Extrai silencioso
tar -xjf file.tar.bz2 -C /dest# Extrai bzip2
7z a archive.7z folder/# 7-Zip
🤝 Contribuindo
Encontrou um erro? Quer melhorar um cheatsheet? Tem uma sugestão? Adoraríamos suas contribuições! Abra uma issue ou submeta um PR.
Gostou do projeto? Apoie o desenvolvimento com um café e ajude a manter tudo open source ☕