0%
Administração de Sistemas Linux: o Guia Completo

Administração de Sistemas Linux: o Guia Completo

Aprenda administração de sistemas Linux: usuários, serviços systemd, processos, monitoramento de disco e memória, logs, cron e backups com rsync.

I

InSkillCoach

· min

Administração de Sistemas Linux: o Guia Completo

Administrar um sistema Linux é muito mais do que digitar alguns comandos em um terminal. É entender como usuários, serviços, processos e armazenamento interagem, e saber intervir rapidamente quando algo deixa de funcionar. Neste guia, cobrimos os sete pilares da administração de sistemas: gerenciamento de usuários, serviços systemd, processos, monitoramento de recursos, logs, agendamento de tarefas e backups. Cada seção contém comandos reais que você pode executar em qualquer distribuição moderna (Debian, Ubuntu, Rocky Linux, Fedora).

1. Gerenciamento de Usuários e Grupos

Criar e modificar usuários

O comando useradd cria um usuário. Na maioria das distribuições, lembre-se da opção -m para criar o diretório pessoal.

# Criar um usuário com seu diretório pessoal e um shell bash
sudo useradd -m -s /bin/bash alice

# Definir sua senha
sudo passwd alice

# Verificar as informações de um usuário
id alice
getent passwd alice

O comando usermod modifica uma conta existente:

# Adicionar alice ao grupo docker (a opção -a é indispensável para não
# sobrescrever os grupos existentes)
sudo usermod -aG docker alice

# Alterar o shell de login
sudo usermod -s /bin/zsh alice

# Bloquear uma conta (impede o login por senha)
sudo usermod -L alice

# Desbloquear a conta
sudo usermod -U alice

# Definir uma data de expiração da conta
sudo usermod -e 2026-12-31 alice

Gerenciar grupos

# Criar um grupo
sudo groupadd developpeurs

# Listar os grupos de um usuário
groups alice

# Remover um usuário de um grupo
sudo gpasswd -d alice docker

# Remover um grupo
sudo groupdel developpeurs

Configurar o sudo corretamente

Nunca modifique /etc/sudoers diretamente com um editor comum: um erro de sintaxe pode cortar seu acesso root. Use sempre visudo, que valida a sintaxe antes de salvar.

# Editar o arquivo sudoers com segurança
sudo visudo

# Boa prática: criar um arquivo dedicado em /etc/sudoers.d/
sudo visudo -f /etc/sudoers.d/alice

Exemplos de regras sudoers:

# Dar todos os direitos a alice (com senha)
alice ALL=(ALL:ALL) ALL

# Autorizar o grupo admin a fazer tudo
%admin ALL=(ALL) ALL

# Autorizar alice a reiniciar o nginx sem senha, e nada além disso
alice ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

2. Serviços systemd

systemctl: o maestro

O systemd é o sistema de init de praticamente todas as distribuições atuais. O comando systemctl controla os serviços (chamados de unidades).

# Iniciar, parar, reiniciar um serviço
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# Recarregar a configuração sem interromper o serviço (se suportado)
sudo systemctl reload nginx

# Ativar a inicialização automática no boot
sudo systemctl enable nginx

# Ativar e iniciar em um único comando
sudo systemctl enable --now nginx

# Verificar o estado detalhado
systemctl status nginx

# Listar todas as unidades com falha
systemctl --failed

# Listar todos os serviços ativos
systemctl list-units --type=service --state=running

Anatomia de uma unidade systemd

As unidades personalizadas ficam em /etc/systemd/system/. Veja um serviço mínimo para uma aplicação:

# /etc/systemd/system/monapp.service
[Unit]
Description=Mon application web
After=network.target

[Service]
Type=simple
User=monapp
WorkingDirectory=/opt/monapp
ExecStart=/opt/monapp/bin/serveur --port 8080
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Após qualquer modificação em um arquivo de unidade, recarregue o daemon:

# Levar em conta os novos arquivos de unidades
sudo systemctl daemon-reload
sudo systemctl enable --now monapp

journalctl: ler os logs dos serviços

# Logs de um serviço específico
journalctl -u nginx

# Acompanhar os logs em tempo real (equivalente ao tail -f)
journalctl -u nginx -f

# Logs desde a última inicialização
journalctl -b

# Logs das últimas duas horas
journalctl --since "2 hours ago"

# Filtrar por nível de gravidade (erros e acima)
journalctl -p err -b

3. Gerenciamento de Processos

Observar os processos

# Visão completa de todos os processos
ps aux

# Árvore de processos (quem iniciou o quê)
ps auxf

# Visão clássica em tempo real
top

# Visão em tempo real aprimorada (instalar com: apt install htop)
htop

# Encontrar o PID de um processo pelo nome
pgrep -a nginx

Prioridades: nice e renice

A prioridade de um processo vai de -20 (prioridade máxima) a 19 (prioridade mínima). Somente o root pode atribuir um valor negativo.

# Iniciar uma compressão com prioridade baixa para não atrapalhar o sistema
nice -n 19 tar -czf /backup/archive.tar.gz /var/www

# Alterar a prioridade de um processo já em execução (PID 4321)
sudo renice -n 10 -p 4321

Encerrar um processo

# Solicitar o encerramento limpo (SIGTERM, sinal 15)
kill 4321

# Forçar o encerramento (SIGKILL, sinal 9): apenas como último recurso
kill -9 4321

# Encerrar todos os processos com um determinado nome
pkill -f "python script_bloque.py"

# Enviar um sinal de recarregamento de configuração
kill -HUP 4321

4. Monitoramento de Disco e Memória

Espaço em disco: df e du

# Ocupação de todos os sistemas de arquivos, em unidades legíveis
df -h

# Ocupação dos inodes (um disco pode estar sem inodes mesmo com espaço livre)
df -i

# Tamanho total de um diretório
du -sh /var/log

# Os 10 maiores subdiretórios de /var
du -h --max-depth=1 /var | sort -rh | head -10

Memória: free

# Estado da memória em unidades legíveis
free -h

# Atualizar a cada 5 segundos
free -h -s 5

Preste atenção à coluna available em vez de free: o Linux usa a memória ociosa como cache de disco, e esse cache é liberado automaticamente quando as aplicações precisam dele. Uma memória “cheia” de cache é um comportamento normal e saudável.

Entrada/saída de disco: iostat

O iostat faz parte do pacote sysstat (sudo apt install sysstat).

# Estatísticas de E/S estendidas, atualizadas a cada 2 segundos
iostat -x 2

# Concentrar-se em um disco específico
iostat -x 2 /dev/sda

As colunas a monitorar: %util (saturação do disco, próximo de 100 % = gargalo) e await (tempo médio de espera das requisições em milissegundos).

5. Logs: journald e logrotate

Controlar o tamanho do journald

Por padrão, o journald pode ocupar um espaço considerável em /var/log/journal. Limite-o em /etc/systemd/journald.conf:

# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
MaxRetentionSec=1month
# Aplicar a configuração
sudo systemctl restart systemd-journald

# Verificar o espaço ocupado pelos logs
journalctl --disk-usage

# Limpar manualmente o que exceder 200 MB
sudo journalctl --vacuum-size=200M

logrotate para arquivos de log tradicionais

As aplicações que gravam em /var/log (nginx, aplicações próprias) devem ser gerenciadas pelo logrotate. Exemplo de configuração em /etc/logrotate.d/monapp:

# /etc/logrotate.d/monapp
/var/log/monapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 monapp monapp
    postrotate
        systemctl reload monapp > /dev/null 2>&1 || true
    endscript
}
# Testar a configuração sem modificar nada
sudo logrotate -d /etc/logrotate.d/monapp

# Forçar uma rotação imediata
sudo logrotate -f /etc/logrotate.d/monapp

6. Tarefas Agendadas: cron e timers systemd

cron: o método clássico

# Editar o crontab do usuário atual
crontab -e

# Listar as tarefas agendadas
crontab -l

Sintaxe de uma linha cron: minuto hora dia_do_mês mês dia_da_semana comando.

# Backup todos os dias às 2h30
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Limpeza todos os domingos às 4h
0 4 * * 0 find /tmp -type f -mtime +7 -delete

# A cada 15 minutos
*/15 * * * * /usr/local/bin/verifier-service.sh

Timers systemd: a alternativa moderna

Os timers oferecem registro de logs via journalctl, gerenciamento de dependências e recuperação de execuções perdidas (Persistent=true). São necessários dois arquivos: um service e um timer.

# /etc/systemd/system/backup.service
[Unit]
Description=Sauvegarde quotidienne

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Déclenche la sauvegarde quotidienne

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target
# Ativar o timer e verificar a próxima execução
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
CritériocronTimer systemd
SimplicidadeUma linha bastaDois arquivos de unidade
Registro de logsPor sua contaIntegrado ao journalctl
Recuperação se a máquina estiver desligadaNão (exceto com anacron)Sim, com Persistent=true
Dependências entre tarefasNãoSim (After=, Requires=)
PrecisãoNo minutoNo segundo

7. Backups: rsync e tar

rsync: sincronização incremental

O rsync transfere apenas as diferenças, o que o torna ideal para backups regulares, tanto locais quanto remotos.

# Backup local: -a preserva permissões, datas e links; -v modo detalhado
rsync -av /var/www/ /backup/www/

# Simulação sem copiar nada (sempre teste primeiro)
rsync -avn --delete /var/www/ /backup/www/

# Espelho exato: --delete remove no destino o que desapareceu da origem
rsync -av --delete /var/www/ /backup/www/

# Backup remoto via SSH com exclusões
rsync -av --delete \
  --exclude 'cache/' \
  --exclude '*.tmp' \
  -e "ssh -p 2222" \
  /var/www/ backup@serveur-backup:/backups/www/

Atenção à barra final: /var/www/ copia o conteúdo do diretório, enquanto /var/www copia o próprio diretório para o destino.

tar: arquivos completos

# Criar um arquivo compactado com data e hora
tar -czf /backup/www-$(date +%Y%m%d).tar.gz /var/www

# Listar o conteúdo sem extrair
tar -tzf /backup/www-20260917.tar.gz

# Extrair em um diretório específico
tar -xzf /backup/www-20260917.tar.gz -C /tmp/restauration

# Arquivo com compressão zstd (mais rápida que gzip)
tar --zstd -cf /backup/www.tar.zst /var/www

Verificar seus backups

Um backup que nunca foi testado não é um backup. Agende testes de restauração regulares:

# Restaurar em um diretório temporário e comparar com a origem
mkdir /tmp/test-restauration
tar -xzf /backup/www-20260917.tar.gz -C /tmp/test-restauration
diff -r /tmp/test-restauration/var/www /var/www

Boas práticas

  • Use sempre visudo para modificar a configuração do sudo e prefira arquivos dedicados em /etc/sudoers.d/.
  • Conceda os direitos sudo mais restritos possíveis: um comando específico em vez de ALL.
  • Após cada modificação de uma unidade systemd, execute systemctl daemon-reload e depois verifique com systemctl status.
  • Prefira kill (SIGTERM) a kill -9: dê aos processos a chance de terminar de forma limpa.
  • Monitore os inodes (df -i) tanto quanto o espaço em disco: um sistema pode ficar travado mesmo com espaço livre.
  • Limite o tamanho do journald e configure o logrotate assim que instalar um novo serviço.
  • Redirecione a saída de suas tarefas cron para um arquivo de log ou use timers systemd para aproveitar o journalctl.
  • Aplique a regra 3-2-1 nos backups: três cópias, dois meios diferentes, uma cópia fora do local.
  • Teste suas restaurações regularmente, e não apenas seus backups.

Conclusão

A administração de sistemas Linux se apoia em um pequeno número de ferramentas fundamentais que você usará diariamente: useradd e visudo para as contas, systemctl e journalctl para os serviços, ps, top e kill para os processos, df, free e iostat para os recursos, cron ou timers systemd para a automação e rsync para os backups. Dominar essas ferramentas permite diagnosticar e resolver a grande maioria dos incidentes em produção.

O próximo passo lógico é automatizar: transforme suas intervenções manuais em scripts, depois em tarefas agendadas e, por fim, em configuração gerenciada por ferramentas como o Ansible. Um bom administrador de sistemas é aquele que nunca refaz a mesma operação à mão duas vezes.

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.6k
335

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!