Containers rodam em cima do Linux. Saber o básico de Linux não é opcional se você quer entender o que acontece debaixo do capô.
Processos
Tudo que executa no Linux é um processo. Cada processo tem um PID (Process ID).
Comandos essenciais
bash
# Listar processos do usuário atual
ps
# Listar TODOS os processos com mais detalhes
ps aux
# Top — processos em tempo real (tipo gerenciador de tarefas)
top
# Versão mais bonita do top (precisa instalar)
htop
# Matar um processo pelo PID
kill 1234
# Matar à força (último recurso)
kill -9 1234
# Matar todos os processos com determinado nome
killall nginx
# Ver árvore de processos
pstreeSinais (Signals)
Quando você "mata" um processo, na verdade está mandando um sinal pra ele. Os mais importantes:
| Sinal | Número | O que faz |
|---|---|---|
SIGTERM | 15 | "Por favor, encerre" — o processo pode salvar estado, fechar conexões. Use sempre que possível. |
SIGKILL | 9 | "Morra agora" — o processo nem fica sabendo. Use só em emergência. |
SIGINT | 2 | É o que Ctrl+C envia |
SIGHUP | 1 | "Recarregue config" |
Containers bons respondem ao SIGTERM com graceful shutdown. Kubernetes manda SIGTERM antes de matar pods.
Foreground vs Background
bash
# Rodar em background (com &)
./meu-script.sh &
# Listar jobs em background
jobs
# Trazer pro foreground
fg %1
# Mandar pro background
bg %1Rede
Comandos de rede
bash
# Ver interfaces de rede e IPs (moderno)
ip addr
# Versão antiga (depreciada mas ainda comum)
ifconfig
# Ver rotas
ip route
# Ver portas em uso (moderno)
ss -tulpn
# Versão antiga
netstat -tulpn
# Testar conectividade
ping google.com
# Testar uma porta específica
nc -zv localhost 8080
# Ver requisições HTTP
curl https://api.exemplo.com
# Ver headers também
curl -i https://api.exemplo.com
# Resolver DNS
nslookup google.com
dig google.comDecifrando ss -tulpn
ss -tulpn
│││││
││││└─ n = não resolve nomes (mais rápido)
│││└── p = mostra qual processo
││└─── l = só os que estão escutando (listening)
│└──── u = UDP
└───── t = TCP
Portas — o básico
- Portas vão de 0 a 65535
- 0–1023: portas privilegiadas (precisa de root)
- 1024–49151: portas registradas (HTTP=80, HTTPS=443, SSH=22, MySQL=3306, Postgres=5432)
- 49152–65535: portas dinâmicas (uso temporário)
Arquivos
Hierarquia do sistema de arquivos
flowchart TD root["/<br/>raiz de tudo"] --> bin["bin/<br/>executáveis essenciais"] root --> etc["etc/<br/>configuração"] root --> home["home/<br/>pastas dos usuários"] home --> alice["alice/"] root --> var["var/<br/>dados variáveis"] var --> log["log/"] root --> tmp["tmp/<br/>temporários"] root --> usr["usr/<br/>programas instalados"] root --> opt["opt/<br/>software de terceiros"]
Comandos de arquivo
bash
# Listar arquivos
ls
ls -la # detalhado, incluindo ocultos
ls -lah # tamanhos legíveis (KB, MB)
# Navegar
cd /caminho
cd .. # subir um nível
cd ~ # ir pra home
pwd # onde estou?
# Criar
mkdir minha-pasta
touch arquivo.txt
# Copiar / Mover / Remover
cp origem destino
cp -r pasta1 pasta2 # recursivo
mv velho novo
rm arquivo
rm -rf pasta # apaga pasta com tudo dentro (cuidado!)
# Ver conteúdo
less arquivo.txt # paginado (q para sair)
head arquivo.txt # primeiras 10 linhas
tail arquivo.txt # últimas 10 linhas
tail -f arquivo.log # acompanha logs em tempo real
# Buscar
grep "erro" arquivo.log
grep -r "TODO" . # recursivo na pasta atual
find . -name "*.go" # achar arquivos por nomePermissões
Cada arquivo tem permissões para 3 grupos: dono, grupo, outros.
ls -l
-rwxr-xr-- 1 alice devs 4096 Jan 10 12:00 script.sh
│└┬┘└┬┘└┬┘
│ │ │ └─ outros: r-- (lê)
│ │ └──── grupo: r-x (lê e executa)
│ └─────── dono: rwx (lê, escreve, executa)
└────────── tipo: - (arquivo) | d (pasta) | l (link)
bash
# Mudar permissões (modo octal)
chmod 755 script.sh # rwx r-x r-x
chmod 644 arquivo.txt # rw- r-- r--
# Mudar permissões (modo simbólico)
chmod +x script.sh # adicionar permissão de execução
# Mudar dono
chown alice:devs arquivo.txtTabela rápida de permissões octais:
| Número | Permissão |
|---|---|
| 7 | rwx |
| 6 | rw- |
| 5 | r-x |
| 4 | r-- |
| 0 | --- |
Pipes e redirecionamento — o superpoder do shell
bash
# Redirecionar saída pra arquivo
echo "olá" > arquivo.txt # sobrescreve
echo "mundo" >> arquivo.txt # adiciona ao final
# Pipe — saída de um comando vira entrada do próximo
ps aux | grep nginx # processos relacionados a nginx
grep ERROR log.txt | wc -l # quantas linhas tem ERROR
# Combinando
docker ps | grep meu-app | awk '{print $1}' # pega só os IDs