Guides
Fundamentos ▾
Versionamento ▾
Deploy ▾

Ubuntu Admin

Monitoramento de recursos, processos, serviços, pacotes e logs em servidores Ubuntu.

Monitoramento de Processos

htop
Monitor interativo de processos com barra de CPU/RAM e navegação por teclado
apt install htop
btop
Monitor moderno com gráficos coloridos de CPU, memória, disco e rede
apt install btop
glances
Overview completo do sistema em uma tela. Suporta modo web (porta 61208)
apt install glances
ps
Snapshot de processos. ps aux + sort por CPU/mem
nativo
lsof
Lista arquivos abertos por processo, usuário ou porta
nativo
# htop
htop                        # interativo
htop -u alfredo             # filtrar por usuário
# F6→ordenar  F9→kill  F4→filtrar  F5→árvore

# ps
ps aux --sort=-%cpu | head  # top CPU
ps aux --sort=-%mem | head  # top memória
ps -ef --forest             # árvore de processos

# lsof
lsof -i :80                 # quem usa porta 80
lsof -p 1234                # arquivos do PID
lsof -u alfredo             # arquivos do usuário

Sinais e controle

-15
SIGTERM
Encerrar graciosamente (padrão do kill)
-9
SIGKILL
Forçar encerramento imediato
-1
SIGHUP
Recarregar config (sem parar)
-19
SIGSTOP
Pausar processo
-18
SIGCONT
Retomar processo pausado
-2
SIGINT
Interrupção (Ctrl+C)
kill 1234                  # SIGTERM
kill -9 1234               # SIGKILL
killall nginx              # matar por nome
pkill -f "python app"      # matar por padrão

nice -n 10 cmd             # iniciar com prioridade baixa
renice 5 -p 1234           # alterar prioridade em execução

nohup cmd &                # imune ao HUP (terminal fechado)

CPU e Memória

# Memória
free -h                    # legível (GB/MB)
# Mem: total  used  free  shared  buff/cache  available

# CPU e sistema
vmstat 2 5                 # 5 amostras a cada 2s
# r=run queue  b=bloqueados  si/so=swap  bi/bo=bloco I/O

# Por núcleo (pacote sysstat)
sudo apt install sysstat
mpstat -P ALL 1            # stats por CPU core a cada 1s

# Histórico (sysstat coleta automaticamente)
sar -u 1 5                 # CPU: 5 amostras
sar -r 1 5                 # memória
sar -b 1 5                 # I/O
sar -n DEV 1 5             # rede por interface

# Load average: 1m 5m 15m — ideal < número de CPUs
uptime
nproc                      # número de CPUs

Disco e I/O

df
Espaço livre por partição. df -h + df -i (inodes)
nativo
du
Uso por diretório. Combinar com sort -rh | head
nativo
ncdu
Navegador interativo de uso de disco. Encontra o que está ocupando espaço
apt install ncdu
iotop
I/O por processo em tempo real. Ver qual processo está lendo/escrevendo
apt install iotop
iostat
Stats de I/O por dispositivo. %util=saturação, await=latência
sysstat
smartctl
Saúde do disco físico via S.M.A.R.T. Detectar falhas iminentes
apt install smartmontools
# Espaço
df -h                          # disco livre por partição
df -i                          # inodes

# Uso por diretório
du -sh /var/log                # tamanho de um dir
du -ah / | sort -rh | head -20 # maiores arquivos
ncdu /                         # navegador interativo

# Block devices
lsblk -f                       # filesystem e UUID

# I/O
sudo iotop -o                  # só processos com I/O ativo
iostat -x 1 5                  # extended, 5 amostras

# Saúde do disco
sudo smartctl -H /dev/sda      # health check
sudo smartctl -a /dev/sda      # relatório completo

Monitoramento de Rede

ss
Sockets e conexões. Substituto moderno do netstat
nativo (iproute2)
iftop
Bandwidth por interface em tempo real
apt install iftop
nethogs
Bandwidth por processo (qual app consome banda)
apt install nethogs
nload
Gráfico de download/upload em tempo real
apt install nload
tcpdump
Captura de pacotes. Debug de tráfego de rede
nativo

ss — flags essenciais

-tTCP
-uUDP
-llistening
-nnumérico
-pprocesso
-sresumo
ss -tulnp               # TCP+UDP listening com PID
ss -tnp                 # TCP estabelecidas com PID
ss -s                   # resumo de sockets
ss -tnp '( dport = :80 or sport = :80 )'
ss dst 192.168.1.1      # conexões para IP específico

# Bandwidth
sudo iftop -i eth0 -n   # sem resolução de nomes
sudo nethogs eth0        # banda por processo

# Captura de pacotes
sudo tcpdump -i eth0 port 80
sudo tcpdump -i eth0 -w captura.pcap
sudo tcpdump -r captura.pcap

Gerenciamento de Serviços (systemctl)

# Operações básicas
systemctl status nginx
systemctl start|stop|restart nginx
systemctl reload nginx         # recarregar config (sem parar)
systemctl enable|disable nginx # habilitar/desabilitar no boot
systemctl is-active nginx
systemctl is-enabled nginx

# Listagem
systemctl list-units --type=service
systemctl list-units --type=service --all
systemctl list-units --failed
systemctl list-unit-files --type=service

# Boot
systemd-analyze                # tempo total de boot
systemd-analyze blame          # serviços mais lentos
systemd-analyze critical-chain

journalctl

journalctl -u nginx                  # logs de um serviço
journalctl -u nginx -f               # follow (live)
journalctl -u nginx -n 100           # últimas 100 linhas
journalctl -u nginx -p err           # só erros
journalctl -u nginx --since "1 hour ago"
journalctl --boot                    # boot atual
journalctl --boot -1                 # boot anterior
journalctl -p err --since "today"    # todos os erros hoje
journalctl --disk-usage
journalctl --vacuum-time=7d          # limpar logs > 7 dias

Criar serviço customizado

# /etc/systemd/system/meu-app.service
[Unit]
Description=Meu App Node.js
After=network.target

[Service]
Type=simple
User=alfredo
WorkingDirectory=/home/alfredo/app
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production PORT=3000
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now meu-app
journalctl -u meu-app -f

Gerenciamento de Pacotes

# Atualizar
sudo apt update                  # atualizar lista
sudo apt upgrade                 # atualizar pacotes
sudo apt full-upgrade            # upgrade + remover obsoletos

# Instalar / remover
sudo apt install htop ncdu iotop
sudo apt remove nginx            # remove (mantém config)
sudo apt purge nginx             # remove + config
sudo apt autoremove              # remover dependências órfãs
sudo apt clean                   # limpar cache

# Busca e info
apt search htop
apt show htop
apt list --installed | grep nginx
apt list --upgradable

# dpkg
dpkg -l | grep nginx             # pacotes instalados
dpkg -L nginx                    # arquivos de um pacote
dpkg -S /usr/sbin/nginx          # qual pacote instalou o arquivo
sudo dpkg -i pacote.deb          # instalar .deb local
sudo dpkg --configure -a         # corrigir instalação quebrada

# Segurar versão
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
sudo apt-mark showhold

# snap
sudo snap install code --classic
snap list
sudo snap refresh
snap info code

Gerenciamento de Logs

# Logs principais
tail -f /var/log/syslog
tail -f /var/log/auth.log
grep "Failed password" /var/log/auth.log | tail -20
grep "Accepted" /var/log/auth.log | tail -20

# Logs comprimidos
zcat /var/log/syslog.1.gz | grep error

# logrotate
logrotate -d /etc/logrotate.conf   # dry run
logrotate -f /etc/logrotate.conf   # forçar rotação
# /etc/logrotate.d/meu-app
/home/alfredo/app/logs/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        systemctl reload meu-app
    endscript
}

Informações do Sistema

uname -a               # kernel, hostname, arch
hostnamectl            # hostname, SO, kernel (formato legível)
cat /etc/os-release    # versão do SO
uptime                 # tempo ligado + load average

lscpu                  # CPUs, cores, threads, cache
nproc                  # número de CPUs disponíveis
cat /proc/meminfo      # memória detalhada

sudo lshw -short       # hardware resumido
lspci                  # dispositivos PCI
lsusb                  # USB

Usuários e Grupos

# Criar
sudo useradd -m -s /bin/bash -G sudo,docker alfredo
sudo passwd alfredo

# Modificar
sudo usermod -aG docker alfredo    # adicionar ao grupo
sudo usermod -s /bin/zsh alfredo   # mudar shell
sudo usermod -L alfredo            # bloquear login
sudo usermod -U alfredo            # desbloquear

# Info
id alfredo                         # UID, GID, grupos
groups alfredo

# Sessões
who                                # logados agora
w                                  # logados + atividade
last -n 10                         # últimos 10 logins
lastb                              # tentativas falhas
lastlog                            # último login de cada usuário

# sudo
sudo visudo                        # editar sudoers com segurança
sudo -l                            # listar permissões do usuário

# /etc/sudoers.d/alfredo
# alfredo ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

Agendamento de Tarefas

crontab -e             # editar crontab
crontab -l             # listar
ExpressãoSignificado
* * * * *todo minuto
*/5 * * * *a cada 5 minutos
0 2 * * *todo dia às 2h
0 0 * * 0domingo à meia-noite
0 9 1 * *dia 1 de cada mês às 9h
@rebootao iniciar o sistema
@dailyuma vez por dia
@weeklyuma vez por semana
# Exemplos
0 2 * * *    /usr/bin/certbot renew --quiet
*/5 * * * *  /home/alfredo/check.sh >> /var/log/check.log 2>&1
0 0 * * 0    /home/alfredo/backup.sh
@reboot      /home/alfredo/app/start.sh

# at — executar uma vez
sudo apt install at
echo "systemctl restart nginx" | at 03:00
at -l          # listar jobs pendentes
atrm 1         # cancelar job 1

Limites do Sistema

ulimit -a              # ver todos os limites
ulimit -n              # max arquivos abertos
ulimit -n 65535        # aumentar para sessão atual

# Permanente: /etc/security/limits.conf
# alfredo  soft  nofile  65535
# alfredo  hard  nofile  65535
# *        soft  nproc   10000

cat /proc/1234/limits  # limites de um processo

# sysctl — parâmetros do kernel
sysctl -a
sudo sysctl -w net.ipv4.ip_forward=1   # temporário
sudo sysctl -p                          # aplicar /etc/sysctl.conf

Diagnóstico Rápido

Processos pesados
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
Disco cheio — onde?
du -sh /* 2>/dev/null | sort -rh | head
ncdu /
Porta em uso
ss -tulnp | grep :80
lsof -i :80
Últimos erros
journalctl -p err --since "1 hour ago"
grep -i error /var/log/syslog | tail
I/O alto
sudo iotop -o
iostat -x 1 5
Serviços com falha
systemctl list-units --failed
journalctl -u SERVIÇO -n 50
Conexões abertas
ss -tulnp
ss -tnp state established
Saúde geral
uptime && free -h && df -h
# Verificar serviços críticos
for svc in nginx ssh ufw fail2ban; do
  echo "$svc: $(systemctl is-active $svc)"
done

# Arquivos modificados recentemente
find /etc -newer /etc/passwd -type f 2>/dev/null
ls -lt /var/log/ | head