1. Gestion des paquets #
Installer, mettre à jour, retirer.
apt et dnf #
| Action | Debian / Ubuntu | RHEL / Rocky / Fedora |
|---|---|---|
| Mettre à jour l'index | apt update | dnf check-update |
| Mettre à jour le système | apt upgrade | dnf upgrade |
| Installer | apt install nginx | dnf install nginx |
| Supprimer | apt remove / purge | dnf remove |
| Chercher | apt search | dnf search |
| Infos | apt show | dnf info |
| Quel paquet fournit ce fichier ? | dpkg -S /usr/bin/ss | dnf provides /usr/bin/ss |
| Paquets installés | dpkg -l / apt list --installed | rpm -qa |
| Historique | /var/log/apt/history.log | dnf 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 # RHELBonne 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 #
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.targetsudo systemctl daemon-reload # après toute modification d'unité
sudo systemctl enable --now app
systemd-analyze security app # score d'exposition du serviceBonne Pratique : Ne modifiez jamais les fichiers de/usr/lib/systemd/system(écrasés par les mises à jour) : créez une surcharge avecsystemctl edit.
3. Les journaux #
journald et les fichiers de /var/log.
journalctl #
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 tailleFichiers classiques #
| Fichier | Contenu |
|---|---|
/var/log/syslog ou messages | journal général (rsyslog) |
/var/log/auth.log ou secure | authentifications, sudo, SSH |
/var/log/kern.log | noyau |
/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 # simulation4. Planifier des tâches #
cron et timers systemd.
cron #
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.shErreur 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.targetsudo systemctl enable --now backup.timer
systemctl list-timers
systemd-analyze calendar 'Mon..Fri 08:00' # vérifier une expression