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.
InSkillCoach
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ério | cron | Timer systemd |
|---|---|---|
| Simplicidade | Uma linha basta | Dois arquivos de unidade |
| Registro de logs | Por sua conta | Integrado ao journalctl |
| Recuperação se a máquina estiver desligada | Não (exceto com anacron) | Sim, com Persistent=true |
| Dependências entre tarefas | Não | Sim (After=, Requires=) |
| Precisão | No minuto | No 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
visudopara 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-reloade depois verifique comsystemctl status. - Prefira
kill(SIGTERM) akill -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.
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+
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão