RousselTMLEARNING

Artículo · Administración Linux: del descubrimiento a la maestría

Paquetes, servicios systemd y logs

Este artículo está disponible en francés.

1. Gestion des paquets #

Installer, mettre à jour, retirer.

apt et dnf #

Installation d'un paquet
Toujours lancer apt update avant apt install : l'index local peut être périmé.
ActionDebian / UbuntuRHEL / Rocky / Fedora
Mettre à jour l'indexapt updatednf check-update
Mettre à jour le systèmeapt upgradednf upgrade
Installerapt install nginxdnf install nginx
Supprimerapt remove / purgednf remove
Chercherapt searchdnf search
Infosapt showdnf info
Quel paquet fournit ce fichier ?dpkg -S /usr/bin/ssdnf provides /usr/bin/ss
Paquets installésdpkg -l / apt list --installedrpm -qa
Historique/var/log/apt/history.logdnf history
sudo apt update && sudo apt upgrade -y
apt list --upgradable
sudo apt autoremove            # dépendances devenues inutiles
sudo apt-mark hold postgresql-16   # bloquer une version
cat /var/run/reboot-required 2>/dev/null   # redémarrage nécessaire (noyau, libc)

Dépôts et mises à jour automatiques #

Les paquets viennent de dépôts signés (/etc/apt/sources.list.d/, /etc/yum.repos.d/). Ajoutez un dépôt tiers uniquement depuis l'éditeur officiel, avec sa clé GPG.

sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades   # Debian/Ubuntu
sudo dnf install dnf-automatic && sudo systemctl enable --now dnf-automatic.timer        # RHEL
Bonne Pratique : Appliquez automatiquement les correctifs de sécurité, mais planifiez les mises à jour majeures (et les redémarrages) dans une fenêtre de maintenance, d'abord sur un serveur de test.

2. Les services avec systemd #

Démarrer, arrêter, diagnostiquer.

systemctl #

Cycle de vie d'un service systemd
Un service activé redémarre au boot ; Restart= le relance après un crash.
systemctl status nginx                 # état, PID, derniers logs
sudo systemctl start|stop|restart nginx
sudo systemctl reload nginx            # relire la configuration sans couper
sudo systemctl enable --now nginx      # activer au boot et démarrer
sudo systemctl disable nginx
systemctl is-active nginx ; systemctl is-enabled nginx
systemctl --failed                     # services en échec
systemctl list-units --type=service --state=running
systemctl cat nginx                    # fichier d'unité effectif
sudo systemctl edit nginx              # surcharge (drop-in) sans toucher au paquet
sudo systemctl mask nginx              # empêcher tout démarrage

Écrire une unité #

# /etc/systemd/system/app.service
[Unit]
Description=API de commandes
After=network-online.target
Wants=network-online.target

[Service]
User=app
WorkingDirectory=/srv/app
EnvironmentFile=/etc/app/app.env
ExecStart=/srv/app/bin/server --port 8080
Restart=on-failure
RestartSec=5
# Durcissement
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/lib/app
PrivateTmp=true

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload     # après toute modification d'unité
sudo systemctl enable --now app
systemd-analyze security app     # score d'exposition du service
Bonne Pratique : Ne modifiez jamais les fichiers de /usr/lib/systemd/system (écrasés par les mises à jour) : créez une surcharge avec systemctl edit.

3. Les journaux #

journald et les fichiers de /var/log.

journalctl #

Circuit des journaux
Le journal est persistant si /var/log/journal existe (Storage=persistent).
journalctl -u nginx -f                 # suivre un service
journalctl -u app --since "1 hour ago"
journalctl -p warning -b               # avertissements et pires, depuis le boot
journalctl -k                          # messages du noyau
journalctl _PID=1234
journalctl -o json-pretty -n 1         # champs structurés
journalctl --disk-usage
sudo journalctl --vacuum-size=500M     # limiter la taille

Fichiers classiques #

FichierContenu
/var/log/syslog ou messagesjournal général (rsyslog)
/var/log/auth.log ou secureauthentifications, sudo, SSH
/var/log/kern.lognoyau
/var/log/<service>/logs applicatifs (nginx, postgresql)

logrotate fait tourner, compresse et supprime les anciens fichiers selon /etc/logrotate.d/.

# /etc/logrotate.d/app
/var/log/app/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}
sudo logrotate -d /etc/logrotate.d/app   # simulation

4. Planifier des tâches #

cron et timers systemd.

cron #

Champs d'une ligne crontab
*/5 dans le champ minute signifie « toutes les 5 minutes ».
crontab -e            # tâches de l'utilisateur
sudo crontab -l -u root
ls /etc/cron.d /etc/cron.daily
# min heure jour mois jour_semaine  commande
30 2 * * *   /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
*/5 * * * *  /usr/local/bin/check.sh
0 8 * * 1-5  /usr/local/bin/rapport.sh
Erreur Courante : cron s'exécute avec un environnement minimal (PATH réduit, pas de variables du shell) : utilisez des chemins absolus et redirigez la sortie, sinon les erreurs passent inaperçues.

Timers systemd #

Un timer déclenche un service : on bénéficie des journaux de journald, des dépendances, de Persistent=true (rattraper une exécution manquée pendant un arrêt) et d'un délai aléatoire.

# /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=Planification de la sauvegarde
[Timer]
OnCalendar=*-*-* 02:30
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now backup.timer
systemctl list-timers
systemd-analyze calendar 'Mon..Fri 08:00'   # vérifier une expression

📄 Paquets, services systemd, journaux et tâches planifiées →

Mi seguimiento

  • ⏱ Duración estimada : ≈ 14 min

Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión

✉️ Hacer una pregunta

Artículos recomendados

Buenas Prácticas de Kubernetes

Mejores prácticas para asegurar y optimizar los despliegues de Kubernetes.