Linux para DevOps: comandos essenciais
1. Navegação e Gerenciamento de Arquivos
Os comandos fundamentais de navegação são a base de qualquer operação em sistemas Linux. No contexto DevOps, dominar ls, cd, pwd, mkdir, rm, cp e mv é essencial para manipular arquivos de configuração, Dockerfiles e manifests Kubernetes.
# Navegação básica
pwd # /home/devops/projeto
ls -la # Lista detalhada com permissões
cd /etc/docker # Navega para diretório do Docker
mkdir -p volumes/{nginx,postgres} # Cria estrutura de diretórios
Permissões de arquivos têm impacto direto em containers. O comando chmod e chown são cruciais ao montar volumes:
# Ajustando permissões para containers
chmod 644 config.yaml # Leitura para todos, escrita apenas para dono
chown 1000:1000 dados/ # Altera dono para UID 1000 (comum em containers)
umask 022 # Define permissões padrão: 755 para diretórios
Links simbólicos (ln -s) são amplamente utilizados em volumes Docker para apontar configurações:
# Link simbólico para volume Docker
ln -s /mnt/nfs/configuracoes/nginx.conf ./nginx.conf
docker run -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx
2. Processos e Monitoramento do Sistema
Identificar gargalos em clusters Kubernetes começa com comandos de monitoramento Linux:
# Visualização de processos
ps aux | grep kubelet # Filtra processos do Kubernetes
top -b -n 1 | head -20 # Snapshot único do topo
htop # Monitor interativo (instalar se necessário)
Gerenciamento de processos com sinais é vital para orquestração:
# Sinais em containers
kill -SIGTERM 1234 # Encerramento gracioso (usado pelo Kubernetes)
killall -9 nginx # Força parada (último recurso)
nice -n 10 backup.sh # Executa com baixa prioridade
renice -n -5 -p 5678 # Aumenta prioridade de processo
Monitoramento de recursos para diagnóstico em clusters:
# Recursos do sistema
free -h # Memória RAM e swap
df -h /var/lib/docker # Espaço em disco do Docker
du -sh /var/log/pods/ # Tamanho dos logs de pods
vmstat 2 5 # Estatísticas de CPU, memória e I/O
iostat -x 1 3 # I/O detalhado por dispositivo
3. Redes e Conectividade
Diagnóstico de rede é crítico para troubleshooting em Kubernetes:
# Diagnóstico básico
ping -c 4 8.8.8.8 # Testa conectividade
traceroute -n 10.96.0.1 # Rastreia rota até service Kubernetes
netstat -tulpn | grep 6443 # Portas listening (API server)
ss -tulpn | grep :443 # Socket statistics moderno
nslookup kubernetes.default.svc.cluster.local # DNS interno
Configuração de interfaces e bridges Docker:
# Interfaces de rede
ip addr show docker0 # Bridge padrão do Docker
ifconfig # Interfaces (legado)
ip route show default # Rota padrão
Firewall e portas para segurança de clusters:
# iptables e netcat
iptables -L -n -v # Regras do firewall (usado pelo kube-proxy)
ufw allow 6443/tcp # Firewall simplificado
nc -zv 10.96.0.1 443 # Testa porta TCP (health check)
nc -lu 1234 # Escuta UDP (útil para logs)
4. Gerenciamento de Pacotes e Repositórios
Para ambientes conteinerizados, o gerenciamento de pacotes no host é necessário para ferramentas auxiliares:
# APT (Debian/Ubuntu)
apt update
apt install -y docker.io kubectl helm
apt remove --purge containerd
add-apt-repository ppa:longsleep/golang-backports
# YUM/DNF (Red Hat/CentOS)
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce kubectl
dnf groupinstall "Development Tools"
Snap e Flatpak são alternativas para ferramentas DevOps:
# Snap para ferramentas
snap install kubectl --classic
snap install helm --classic
snap list
5. Systemd e Gerenciamento de Serviços
Systemd é o sistema de init padrão e controla serviços como Docker e kubelet:
# Controle de serviços
systemctl start docker
systemctl stop kubelet
systemctl restart containerd
systemctl enable docker # Inicia na boot
systemctl disable firewalld # Desabilita firewall
Análise de logs com journalctl:
# Logs de serviços
journalctl -u docker.service --since "1 hour ago"
journalctl -u kubelet -f # Segue logs em tempo real
journalctl -p err -b # Apenas erros desde boot
journalctl --since "2024-01-01" --until "2024-01-02"
Criação de unit personalizada para container:
# /etc/systemd/system/minha-app.service
[Unit]
Description=Minha aplicação containerizada
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/bin/docker run --name minha-app minha-imagem:latest
ExecStop=/usr/bin/docker stop minha-app
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
6. Manipulação de Texto e Logs
Filtros e busca são essenciais para analisar logs de pods:
# grep e sed em logs
kubectl logs pod-xyz | grep ERROR
kubectl logs --tail=100 pod-xyz | sed 's/\[ERROR\]/[CRITICO]/g'
awk '{print $1, $5}' /var/log/syslog | sort | uniq -c
cut -d' ' -f1-3 /var/log/kube-apiserver.log
Visualização e monitoramento de logs:
# Visualização
cat /var/log/pods/default_pod-xyz_*.log
less /var/log/syslog
tail -f /var/log/docker.log | grep error
head -20 /etc/kubernetes/manifests/kube-apiserver.yaml
Redirecionamento e pipes para processamento:
# Pipes e redirecionamento
docker logs container-abc 2>&1 | tee logs.txt
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm
kubectl get pods -o wide > pods.txt
echo "DEBUG=true" >> .env
7. Automação e Scripting Básico
Variáveis de ambiente são configuradas em Dockerfiles e scripts:
# Variáveis de ambiente
export KUBECONFIG=~/.kube/config-prod
env | grep KUBE
printenv PATH
echo "export DOCKER_HOST=tcp://192.168.1.100:2375" >> ~/.bashrc
Comandos condicionais e loops em scripts shell:
# Script de health check
#!/bin/bash
for pod in $(kubectl get pods -o name); do
if kubectl exec $pod -- curl -s http://localhost:8080/health; then
echo "$pod: saudável"
else
echo "$pod: falha"
fi
done
Agendamento de tarefas para clusters:
# Cron job para backup de etcd
0 2 * * * /usr/local/bin/etcd-backup.sh
# Systemd timer para limpeza de imagens Docker
[Unit]
Description=Limpa imagens Docker não utilizadas
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
Referências
- Documentação Oficial do Linux - Comandos Básicos — Referência completa dos comandos GNU coreutils, incluindo ls, cp, mv e chmod
- Docker Documentation - Storage and Volumes — Guia oficial sobre gerenciamento de volumes e permissões em containers Docker
- Kubernetes Documentation - Debugging Pods — Tutorial oficial para diagnóstico de pods usando comandos Linux
- Red Hat - System Administration Guide — Guia de administração de sistemas Red Hat com systemd e journalctl
- Linux Foundation - Networking Commands — Recurso educacional sobre comandos de rede Linux para administradores
- DigitalOcean - Linux Commands for DevOps — Tutorial prático com exemplos de comandos Linux no contexto DevOps
- IBM - Monitoring Linux Performance — Documentação técnica sobre monitoramento de performance com vmstat, iostat e top