guia linux manual express

(em desenvolvimento)

Yet Another Linux Howto (reconstruído)

Foco: Ubuntu (Debian-family) e Red Hat (RHEL-family)
Dedicado a Evi Nemeth e a Jokka das Trevas

Prólogo

Isto é um curso prático (com teoria na medida certa), pensado para te dar “mão de obra de produção” em ambientes corporativos: servidores, VMs, cloud, containers, automação e troubleshooting.
A regra do jogo: tudo com exemplos reais, e sempre com notas de diferença Ubuntu vs RHEL.


Como montar o laboratório (recomendado)

  • 2 VMs:
    • Ubuntu Server LTS
    • RHEL / Rocky / Alma (equivalentes para treinar)
  • Snapshot antes de cada módulo.
  • Uma rede NAT + uma rede host-only (pra simular “corp” + “mgmt”).
  • Uma pasta compartilhada com scripts e anotações.

Índice (limpo e sem duplicações)

  1. Fundamentos de Linux e linha de comando
  2. FHS, dispositivos e “tudo é arquivo”
  3. Pipes, redirecionamentos e processamento de texto (o “coração Unix”)
  4. Gerenciamento de pacotes e repositórios (APT vs DNF/RPM)
  5. Usuários, grupos, sudo e identidade corporativa (PAM/SSSD/LDAP)
  6. Permissões, ACL, umask, capabilities e (SELinux/AppArmor)
  7. Processos, sinais, prioridades e cgroups (prática de produção)
  8. Boot e systemd: units, targets, timers e troubleshooting de boot
  9. Logs, journald, logrotate e auditoria (auditd)
  10. Rede: IP, rotas, DNS, troubleshooting (Netplan vs NetworkManager)
  11. Firewall e filtragem: UFW/Firewalld, nftables e casos reais
  12. SSH e acesso remoto seguro (chaves, bastion, hardening)
  13. Storage: partições, RAID, LVM, filesystems (ext4/xfs/btrfs)
  14. Backups e recuperação (rsync/tar/borg/snapshots)
  15. Virtualização com KVM/libvirt (o padrão Linux)
  16. Containers: Podman/Docker, rootless, volumes, redes
  17. Automação: Bash “de verdade”, Python utilitário, Ansible
  18. Observabilidade: métricas, iostat/sar, Prometheus node_exporter (visão admin)
  19. Troubleshooting: método, ferramentas e “playbooks”
  20. Segurança operacional: patching, hardening, compliance e resposta a incidentes
  21. “Unix Pipe at the Gates of Dawn”: filosofia aplicada e fluência

1) Fundamentos de Linux e linha de comando

O que você precisa dominar

  • Shell (bash), quoting, globbing, exit codes
  • Navegação e manipulação segura de arquivos
  • Ajuda: man, --help, /usr/share/doc

Exemplos práticos

Quoting (isso separa admin bom de admin perigoso):

# errado (quebra em espaços)
rm -rf $DIR# certo
rm -rf -- "$DIR"

Erros e códigos de saída:

grep -q "PermitRootLogin no" /etc/ssh/sshd_config
echo $? # 0 achou, 1 não achou, >1 erro

Lab

  • Criar estrutura de diretórios de um “app” e manipular com segurança:
mkdir -p ~/lab/app/{bin,conf,logs,data}
touch ~/lab/app/conf/app.conf

Ubuntu vs RHEL: quase tudo igual aqui. Diferenças começam forte em rede, pacotes e segurança mandatory (SELinux/AppArmor).


2) FHS, dispositivos e “tudo é arquivo”

Conceitos-chave

  • /etc = configuração, /var = dados variáveis/logs, /usr = sistema/soft, /home
  • Dispositivos em /dev e pseudo-filesystems: /proc, /sys
  • Links: hardlink vs symlink (impacto em backup e deploy)

Exemplos

ls -l /dev/null
cat /proc/cpuinfo | head
ls -l /sys/class/net

Lab

  • Descobrir “o que é real” vs “o que é virtual”:
df -Th
mount | column -t

3) Pipes e processamento de texto (fluência Unix)

O que importa de verdade

  • Pipe | conecta stdout → stdin
  • Redirecionamentos: >, >>, 2>, &>, <<EOF
  • Grep/sed/awk: quando usar cada um
  • Regex ≠ wildcard

Exemplos (produção)

Achar top 10 IPs em access log:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

Ver erros de um serviço em tempo real:

journalctl -u ssh -f

Lab

  • Criar um “relatório” de login falho (Ubuntu costuma em /var/log/auth.log; RHEL via journald):
sudo grep -i "failed password" /var/log/auth.log | tail -n 50

4) Pacotes e repositórios (APT vs DNF/RPM)

Ubuntu (APT)

  • Atualizar índice e atualizar sistema:
sudo apt update
sudo apt upgrade
  • Buscar e inspecionar:
apt search nginx
apt show nginx
dpkg -L nginx
  • Repositórios:
    • /etc/apt/sources.list e /etc/apt/sources.list.d/*.list
    • Chaves modernas: /etc/apt/keyrings/*.gpg (evitar apt-key)

RHEL-family (DNF/RPM)

  • Atualizar e instalar:
sudo dnf makecache
sudo dnf upgrade
sudo dnf install nginx
  • Investigar:
dnf info nginx
rpm -ql nginx
  • Repos:
    • /etc/yum.repos.d/*.repo

Conflitos e dependências (o que resolve 80% da dor)

  • Ubuntu:
sudo apt -f install
sudo dpkg --configure -a
  • RHEL:
sudo dnf repoquery --requires pacote
sudo dnf clean all

Lab

  • Instalar nginx, subir, validar e remover mantendo config vs removendo tudo.

5) Usuários, grupos, sudo e identidade corporativa

Fundamentos

  • Bases locais: /etc/passwd, /etc/shadow, /etc/group
  • Comandos essenciais: useradd, usermod, groupadd, gpasswd
  • Sudo: regra é mínimo privilégio e auditoria

Exemplos

sudo useradd -m -s /bin/bash alice
sudo passwd alice
sudo usermod -aG sudo alice # Ubuntu (grupo sudo)
sudo usermod -aG wheel alice # RHEL (grupo wheel)

Sudo seguro (via visudo):

sudo visudo
# Exemplo: permitir apenas systemctl restart nginx
alice ALL=(root) NOPASSWD: /bin/systemctl restart nginx

Identidade corporativa (visão prática)

  • PAM é o “pluggable glue”.
  • Em empresas, o comum é SSSD + LDAP/Kerberos/AD.
  • Arquivos/conceitos:
    • /etc/pam.d/*
    • /etc/sssd/sssd.conf (quando usando SSSD)

Lab

  • Criar usuário “deploy”, permitir só systemctl restart app.service, e registrar acesso no log.

6) Permissões, ACL, umask, capabilities, SELinux/AppArmor

Permissões clássicas

  • Dono/grupo/outros: r,w,x
  • chmod, chown, chgrp
  • umask define padrão de criação
umask 027
touch a
mkdir d
ls -l a d

ACL (quando permissão clássica não basta)

sudo setfacl -m u:alice:rwx /srv/app
getfacl /srv/app

Linux capabilities (cirúrgico)

Ex.: permitir bind em porta <1024 sem root:

sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/meuapp
getcap /usr/local/bin/meuapp

Mandatory Access Control

  • Ubuntu: AppArmor (comum por padrão)
  • RHEL: SELinux (forte e presente em corp)

SELinux (RHEL):

getenforce
sudo ausearch -m avc -ts recent | tail
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
sudo restorecon -Rv /srv/site

AppArmor (Ubuntu):

sudo aa-status
sudo aa-logprof

Lab

  • Subir um conteúdo web em diretório “não padrão” e corrigir:
    • No RHEL: context SELinux
    • No Ubuntu: perfil AppArmor (se afetar)

7) Processos, sinais, prioridades e cgroups

Comandos essenciais

ps auxf
top
htop # se instalar
pidof nginx

Sinais (vida real)

  • TERM (15) pede para encerrar com limpeza
  • KILL (9) é “mata e pronto” (último recurso)
sudo kill -TERM <pid>
sudo kill -KILL <pid>

Prioridade

nice -n 10 comando_pesado
sudo renice -n 5 -p <pid>

Cgroups/systemd (controle moderno)

systemctl status nginx
systemctl show -p ControlGroup nginx

8) Boot e systemd (units, targets, timers)

O que você precisa saber

  • systemctl é o painel central
  • Units: service, socket, timer, mount, path
  • Targets ≈ “runlevels modernos”

Exemplos

systemctl status ssh
systemctl enable --now nginx
systemctl list-units --type=service --state=running
systemctl list-dependencies multi-user.target

Timers (substituto “enterprise” de cron em muitas coisas)

Exemplo: rodar script a cada 5 minutos:

  • /etc/systemd/system/meujob.service
  • /etc/systemd/system/meujob.timer
# meujob.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/meujob.sh
# meujob.timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
Unit=meujob.service[Install]
WantedBy=timers.target
sudo systemctl enable --now meujob.timer
systemctl list-timers --all

9) Logs, journald, logrotate e auditoria

Journald (padrão moderno em ambos)

journalctl -xe
journalctl -u nginx --since "1 hour ago"
journalctl -b -1 # boot anterior

Logs “clássicos”

  • Ubuntu: /var/log/auth.log, /var/log/syslog (a depender da config)
  • RHEL: pode ter rsyslog configurado; journald é central

logrotate

  • /etc/logrotate.conf e /etc/logrotate.d/*
sudo logrotate -d /etc/logrotate.conf

auditd (compliance)

sudo systemctl enable --now auditd
sudo auditctl -l

10) Rede: IP, rotas, DNS (Netplan vs NetworkManager)

Ferramentas universais (iproute2)

ip a
ip r
ss -tulpn
ping -c 3 1.1.1.1
traceroute example.com
dig example.com

Ubuntu: Netplan (com backend systemd-networkd ou NetworkManager)

  • Config: /etc/netplan/*.yaml
sudo netplan try
sudo netplan apply

RHEL: NetworkManager (nmcli)

  • Conexões em: /etc/NetworkManager/system-connections/
nmcli dev status
nmcli con show
nmcli con mod "System eth0" ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.method manual
nmcli con up "System eth0"

DNS

  • Hoje, normalmente via systemd-resolved (Ubuntu) ou NM (RHEL).
  • Diagnóstico:
resolvectl status   # Ubuntu comum
cat /etc/resolv.conf

11) Firewall: UFW, Firewalld e nftables

Ubuntu: UFW (interface amigável)

sudo ufw status
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable

RHEL: firewalld

sudo firewall-cmd --state
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Lab

  • Subir nginx e abrir porta 80 com a ferramenta “nativa” de cada distro.

12) SSH seguro (essencial corporativo)

Chaves e hardening básico

ssh-keygen -t ed25519
ssh-copy-id user@server

No servidor (/etc/ssh/sshd_config):

  • PasswordAuthentication no
  • PermitRootLogin no
  • AllowUsers alice deploy
sudo systemctl reload ssh

13) Storage: partições, LVM, RAID

Checklist prático

lsblk -f
blkid
df -Th
mount | column -t

Particionamento

  • fdisk, parted

LVM (produção real)

sudo pvcreate /dev/sdb
sudo vgcreate vgdata /dev/sdb
sudo lvcreate -n lvapp -L 50G vgdata
sudo mkfs.xfs /dev/vgdata/lvapp # xfs muito comum em RHEL
sudo mount /dev/vgdata/lvapp /srv/app

fstab (com UUID)

sudo blkid
sudoedit /etc/fstab

14) Backup e recuperação (sem romantismo)

Tríade do mundo real

  • tar (empacotar)
  • rsync (sincronizar incremental)
  • borg/restic (backup com dedupe + criptografia)

rsync bom:

rsync -aHAX --delete /srv/app/ /backup/app/

tar com preservação:

tar --xattrs --acls -cpf backup.tar /srv/app

Teste de restore (sempre!)

  • Restore parcial em diretório temporário
  • Comparar checksums

15) Virtualização (KVM/libvirt)

Instalação típica

  • Ubuntu: qemu-kvm libvirt-daemon-system virt-manager
  • RHEL: @virtualization group

Comandos:

virsh list --all
virt-install --name vm1 --memory 2048 --vcpus 2 --disk size=20 --cdrom ubuntu.iso

16) Containers (Podman/Docker)

Diretriz atual (muito corp)

  • RHEL: Podman é padrão/primeira classe
  • Ubuntu: Docker ainda comum, Podman crescendo

Exemplos (podman):

podman run --rm -p 8080:80 docker.io/library/nginx
podman ps
podman logs <id>

Volumes e persistência:

podman run -v /srv/site:/usr/share/nginx/html:ro -p 8080:80 nginx

17) Automação: Bash, Python, Ansible

Bash “de produção” (mínimo)

  • set -euo pipefail
  • funções
  • logs e exit codes
  • parsing robusto

Exemplo esqueleto:

#!/usr/bin/env bash
set -euo pipefaillog(){ printf '%s %s\n' "$(date -Is)" "$*" >&2; }main(){
log "iniciando"
# ...
log "ok"
}
main "$@"

Ansible (corporativo de verdade)

  • Inventário limpo
  • idempotência
  • roles
  • vault para segredo

18) Observabilidade (admin)

Ferramentas nativas:

uptime
free -h
vmstat 1
iostat -xz 1
sar -n DEV 1
ss -s

Visão moderna:

  • Prometheus + node_exporter + Grafana (mesmo que “não seja seu time”, você precisa ler o painel)

19) Troubleshooting (método)

O método que não falha

  1. Defina o sintoma (o que está quebrado e desde quando)
  2. Colete evidências (logs, métricas, configs, mudanças recentes)
  3. Isole (rede? disco? permissão? DNS? SELinux/AppArmor?)
  4. Corrija com rollback em mente
  5. Valide (teste + monitoramento)
  6. Documente

Kit rápido

  • Boot: journalctl -b, systemctl --failed
  • Rede: ip r, dig, ss -tulpn
  • Storage: df -Th, lsblk, dmesg -T | tail
  • Segurança: ausearch -m avc (SELinux), aa-status (AppArmor)

20) Segurança operacional (prática corporativa)

  • Patching com janela e rollback
  • Endurecer SSH
  • Firewall mínimo necessário
  • Auditoria (auditd) quando exigido
  • SELinux/AppArmor: aprender a corrigir, não “desligar”

21) Unix Pipe at the Gates of Dawn (síntese)

Pipe é filosofia operacional:

  • Ferramentas pequenas, composição grande
  • Texto como interface
  • Observabilidade via logs e streams

Exemplo “(uma linha que salva incidentes):

journalctl -u nginx --since today | grep -Ei "error|fail|timeout" | tail -n 50

Mini-projetos (pra consolidar)

  1. Servidor web hardenizado (nginx + firewall + logs + backup + user deploy)
  2. Job automatizado (systemd timer que gera relatório e envia pra um diretório seguro)
  3. Ambiente container (app + volume persistente + restart policy via systemd)
  4. Troubleshooting simulado (DNS quebrado, rota errada, SELinux bloqueando, disco cheio)

Minha mais simples matemática: Conhecimento dividido é poder multiplicado!

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Minha mais simples matemática: Conhecimento dividido é poder multiplicado!