Linux Sysadmin : Les Fondamentaux Essentiels
Que vous soyez DevOps, SRE ou développeur, maîtriser les bases de l'administration système Linux est indispensable. Ce guide couvre les concepts et commandes essentiels pour gérer efficacement des systèmes Linux.
Structure du système de fichiers
Hiérarchie FHS (Filesystem Hierarchy Standard)
/
├── bin/ → Binaires essentiels (ls, cp, cat...)
├── boot/ → Fichiers de démarrage (kernel, initrd)
├── dev/ → Fichiers de périphériques
├── etc/ → Fichiers de configuration système
├── home/ → Répertoires utilisateurs
├── lib/ → Bibliothèques partagées essentielles
├── media/ → Points de montage médias amovibles
├── mnt/ → Points de montage temporaires
├── opt/ → Applications tierces optionnelles
├── proc/ → Système de fichiers virtuel (info processus)
├── root/ → Home du superutilisateur
├── run/ → Données runtime (PID, sockets)
├── sbin/ → Binaires système (fdisk, iptables)
├── srv/ → Données de services
├── sys/ → Informations kernel/hardware
├── tmp/ → Fichiers temporaires
├── usr/ → Applications et données utilisateur
│ ├── bin/ → Binaires utilisateur
│ ├── lib/ → Bibliothèques
│ ├── local/ → Logiciels installés localement
│ └── share/ → Données partagées (docs, icons)
└── var/ → Données variables
├── log/ → Logs système
├── cache/ → Cache des applications
└── lib/ → Données persistantes des apps
Commandes essentielles de fichiers
# Navigation
pwd # Afficher le répertoire courant
cd /var/log # Changer de répertoire
cd - # Retour au répertoire précédent
cd ~ # Aller au home
# Listing
ls -la # Liste détaillée avec fichiers cachés
ls -lh # Tailles human-readable
ls -lt # Tri par date de modification
ls -lS # Tri par taille
# Manipulation
cp -r source/ dest/ # Copie récursive
mv ancien nouveau # Renommer/déplacer
rm -rf dossier/ # Suppression récursive (DANGER!)
mkdir -p a/b/c # Créer arborescence
touch fichier # Créer fichier vide / màj timestamp
# Recherche
find /var -name "*.log" -mtime -7 # Fichiers .log modifiés < 7 jours
find . -size +100M # Fichiers > 100MB
find . -type f -exec chmod 644 {} \; # Chmod sur résultats
locate fichier # Recherche rapide (base de données)
updatedb # Mettre à jour la base locate
# Liens
ln -s /chemin/cible lien_symbolique # Lien symbolique
ln /chemin/cible lien_dur # Lien dur
Permissions et propriété
# Format: rwxrwxrwx = user|group|others
# r=4, w=2, x=1
# Voir les permissions
ls -la fichier
stat fichier
# Modifier les permissions
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.conf # rw-r--r--
chmod u+x script.sh # Ajouter execute pour user
chmod g-w fichier # Retirer write pour group
chmod -R 755 dossier/ # Récursif
# Permissions spéciales
chmod 4755 executable # SetUID (exécute avec droits du propriétaire)
chmod 2755 dossier/ # SetGID (nouveaux fichiers héritent du groupe)
chmod 1777 /tmp # Sticky bit (seul proprio peut supprimer)
# Modifier propriétaire
chown user:group fichier
chown -R www-data:www-data /var/www/
# ACL (Access Control Lists) - permissions étendues
getfacl fichier
setfacl -m u:john:rw fichier # Donner rw à john
setfacl -m g:devs:rx dossier/ # Donner rx au groupe devs
setfacl -x u:john fichier # Supprimer ACL de john
Gestion des processus
Visualisation des processus
# Processus en cours
ps aux # Tous les processus (BSD style)
ps -ef # Tous les processus (System V style)
ps auxf # Avec arborescence
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -20 # Top RAM
# Monitoring temps réel
top # Classique
htop # Version améliorée (installer: apt install htop)
atop # Monitoring avancé avec historique
# Raccourcis htop/top
# P : trier par CPU
# M : trier par mémoire
# k : kill processus
# f : filtrer
# t : vue arbre
# Processus spécifiques
pgrep -a nginx # Trouver processus par nom
pidof nginx # PID d'un processus
pstree -p # Arbre des processus avec PIDs
Signaux et contrôle
# Signaux courants
# SIGTERM (15) : Arrêt propre (par défaut)
# SIGKILL (9) : Arrêt forcé (non interceptable)
# SIGHUP (1) : Rechargement config
# SIGSTOP (19) : Pause
# SIGCONT (18) : Reprise
# Envoyer des signaux
kill PID # Envoie SIGTERM
kill -9 PID # Envoie SIGKILL (force)
kill -HUP PID # Recharger config (nginx, apache...)
killall nginx # Tuer tous les processus nginx
pkill -f "python script" # Tuer par pattern de commande
# Jobs en arrière-plan
commande & # Lancer en background
jobs # Lister les jobs
fg %1 # Ramener job 1 au premier plan
bg %1 # Envoyer job 1 en background
disown %1 # Détacher job du terminal
# Ctrl+Z : Suspendre le processus courant
# Ctrl+C : Envoyer SIGINT (interrompre)
# nohup : persister après déconnexion
nohup ./script.sh > output.log 2>&1 &
# screen / tmux : sessions persistantes
screen -S ma_session # Créer session
screen -r ma_session # Rejoindre session
# Ctrl+A, D : détacher
Priorités et ressources
# Nice : priorité CPU (-20 à +19, défaut 0)
# Plus bas = plus prioritaire
nice -n 10 ./script.sh # Lancer avec priorité basse
renice -n 5 -p PID # Modifier priorité d'un processus
renice -n -5 -u www-data # Priorité haute pour un user
# Limites de ressources (ulimit)
ulimit -a # Voir toutes les limites
ulimit -n # Nombre max de fichiers ouverts
ulimit -n 65535 # Augmenter la limite (session)
ulimit -u # Nombre max de processus
# Limites permanentes : /etc/security/limits.conf
# www-data soft nofile 65535
# www-data hard nofile 65535
# www-data soft nproc 4096
# cgroups : contrôle fin des ressources
# Voir /sys/fs/cgroup/
# Utilisé par Docker, systemd, etc.
Systemd et gestion des services
Commandes systemctl
# État des services
systemctl status nginx # État détaillé
systemctl is-active nginx # Active ?
systemctl is-enabled nginx # Activé au boot ?
systemctl list-units --type=service # Lister tous les services
systemctl list-units --failed # Services en échec
# Contrôle des services
systemctl start nginx # Démarrer
systemctl stop nginx # Arrêter
systemctl restart nginx # Redémarrer
systemctl reload nginx # Recharger config (sans interruption)
systemctl enable nginx # Activer au boot
systemctl disable nginx # Désactiver au boot
systemctl enable --now nginx # Activer + démarrer
# Masquer un service (impossible de le démarrer)
systemctl mask nginx
systemctl unmask nginx
# Dépendances
systemctl list-dependencies nginx
systemctl list-dependencies --reverse nginx # Qui dépend de nginx
# Logs (journald)
journalctl -u nginx # Logs de nginx
journalctl -u nginx -f # Follow (temps réel)
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx -p err # Uniquement erreurs
journalctl -b # Logs depuis le boot
journalctl --disk-usage # Espace utilisé
Créer un service systemd
[Unit]
Description=My Application Service
Documentation=https://docs.myapp.com
After=network.target postgresql.service
Wants=postgresql.service
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
# Commande de démarrage
ExecStart=/opt/myapp/bin/server --config /etc/myapp/config.yaml
ExecReload=/bin/kill -HUP $MAINPID
# Redémarrage automatique
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitIntervalSec=60
# Timeouts
TimeoutStartSec=30
TimeoutStopSec=30
# Environnement
Environment=NODE_ENV=production
EnvironmentFile=-/etc/myapp/env
# Sécurité
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/myapp /var/log/myapp
# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
# Recharger la configuration systemd
systemctl daemon-reload
# Activer et démarrer
systemctl enable --now myapp
# Vérifier
systemctl status myapp
journalctl -u myapp -f
Réseau Linux
Configuration réseau
# Informations interfaces
ip addr show # Toutes les interfaces (moderne)
ip a # Raccourci
ifconfig # Ancien (deprecated)
ip link show # État des liens
ip -s link # Avec statistiques
# Configuration IP
ip addr add 192.168.1.10/24 dev eth0 # Ajouter IP
ip addr del 192.168.1.10/24 dev eth0 # Supprimer IP
ip link set eth0 up # Activer interface
ip link set eth0 down # Désactiver
# Routes
ip route show # Table de routage
ip route get 8.8.8.8 # Route vers une IP
ip route add 10.0.0.0/8 via 192.168.1.1 # Ajouter route
ip route del 10.0.0.0/8 # Supprimer route
ip route add default via 192.168.1.1 # Gateway par défaut
# DNS
cat /etc/resolv.conf # Configuration DNS
resolvectl status # systemd-resolved status
dig google.com # Requête DNS
nslookup google.com # Requête DNS (ancien)
host google.com # Requête DNS simple
# Hostname
hostname # Nom de la machine
hostnamectl # Info détaillée
hostnamectl set-hostname serveur01
Diagnostic réseau
# Connectivité
ping -c 4 google.com # Test ICMP
ping6 google.com # Test IPv6
traceroute google.com # Trace le chemin
tracepath google.com # Alternative sans root
mtr google.com # Traceroute amélioré (interactif)
# Ports et connexions
ss -tuln # Ports en écoute (moderne)
ss -tunp # Avec processus associés
netstat -tuln # Ancien (deprecated)
lsof -i :80 # Qui utilise le port 80
lsof -i -P -n # Toutes les connexions réseau
# Test de ports
nc -zv host 80 # Test port TCP
nc -zvu host 53 # Test port UDP
telnet host 80 # Test connexion TCP
curl -v telnet://host:80 # Alternative
# Capture réseau
tcpdump -i eth0 # Capturer tout
tcpdump -i eth0 port 80 # Filtrer par port
tcpdump -i eth0 host 10.0.0.1 # Filtrer par host
tcpdump -w capture.pcap # Sauvegarder
tcpdump -r capture.pcap # Lire capture
# Analyse HTTP
curl -I https://example.com # Headers uniquement
curl -v https://example.com # Verbose
curl -o /dev/null -s -w "Time: %{time_total}s\n" https://example.com
wget --spider https://example.com # Test existence
Firewall (iptables/nftables)
# UFW (Ubuntu Firewall) - simplifié
ufw status verbose # État
ufw enable # Activer
ufw disable # Désactiver
ufw default deny incoming # Politique par défaut
ufw default allow outgoing
ufw allow 22/tcp # Autoriser SSH
ufw allow from 10.0.0.0/8 # Autoriser un réseau
ufw deny 23/tcp # Bloquer telnet
ufw delete allow 22/tcp # Supprimer règle
# iptables (bas niveau)
iptables -L -n -v # Lister les règles
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -j DROP # Drop tout le reste
iptables-save > /etc/iptables/rules.v4 # Sauvegarder
# nftables (moderne, remplace iptables)
nft list ruleset # Lister les règles
nft add rule inet filter input tcp dport 80 accept
Stockage et systèmes de fichiers
Gestion des disques
# Informations disques
lsblk # Arborescence des blocs
lsblk -f # Avec système de fichiers
fdisk -l # Liste des partitions
blkid # UUID et types de FS
df -h # Espace disque utilisé
df -i # Inodes utilisés
du -sh /var/* # Taille des dossiers
du -h --max-depth=1 # Profondeur 1
ncdu /var # Interface interactive (installer: apt install ncdu)
# Partitionnement
fdisk /dev/sdb # Partitionner un disque (interactif)
parted /dev/sdb # Alternative moderne
gdisk /dev/sdb # Pour GPT
# Systèmes de fichiers
mkfs.ext4 /dev/sdb1 # Formater en ext4
mkfs.xfs /dev/sdb1 # Formater en XFS
tune2fs -l /dev/sdb1 # Info sur FS ext4
xfs_info /dev/sdb1 # Info sur FS XFS
# Montage
mount /dev/sdb1 /mnt/data # Monter
umount /mnt/data # Démonter
mount -o remount,rw / # Remonter en read-write
# /etc/fstab - montage automatique
# UUID=xxx /mnt/data ext4 defaults 0 2
findmnt # Voir les montages actuels
LVM (Logical Volume Manager)
# Concepts:
# PV (Physical Volume) → VG (Volume Group) → LV (Logical Volume)
# Visualisation
pvs # Physical Volumes
vgs # Volume Groups
lvs # Logical Volumes
pvdisplay
vgdisplay
lvdisplay
# Création
pvcreate /dev/sdb1 # Créer PV
vgcreate vg_data /dev/sdb1 /dev/sdc1 # Créer VG
lvcreate -L 100G -n lv_app vg_data # Créer LV de 100GB
lvcreate -l 100%FREE -n lv_app vg_data # Utiliser tout l'espace
# Extension
lvextend -L +50G /dev/vg_data/lv_app # Ajouter 50GB
lvextend -l +100%FREE /dev/vg_data/lv_app # Utiliser tout
resize2fs /dev/vg_data/lv_app # Redimensionner FS ext4
xfs_growfs /dev/vg_data/lv_app # Redimensionner FS XFS
# Snapshot (sauvegarde)
lvcreate -s -L 10G -n snap_app /dev/vg_data/lv_app
Logs et monitoring
Journaux système
# Logs traditionnels
tail -f /var/log/syslog # Suivre en temps réel
tail -100 /var/log/auth.log # Dernières 100 lignes
less +F /var/log/syslog # Less avec follow (Ctrl+C pour arrêter)
# Journald (systemd)
journalctl # Tous les logs
journalctl -f # Follow
journalctl -b # Depuis le boot
journalctl -b -1 # Boot précédent
journalctl --since "2024-01-01" --until "2024-01-02"
journalctl -p err # Priorité error et au-dessus
journalctl -k # Messages kernel
journalctl _UID=1000 # Logs d'un user
journalctl -o json-pretty # Format JSON
# Rotation des logs
logrotate /etc/logrotate.conf # Rotation manuelle
cat /etc/logrotate.d/nginx # Config rotation nginx
# Fichiers de logs importants
/var/log/syslog # Logs système généraux (Debian/Ubuntu)
/var/log/messages # Logs système (RHEL/CentOS)
/var/log/auth.log # Authentification
/var/log/kern.log # Messages kernel
/var/log/dmesg # Boot messages
/var/log/apt/ # Logs APT
/var/log/nginx/ # Logs Nginx
Monitoring système
# CPU
uptime # Charge moyenne
mpstat 1 # Stats CPU par seconde
vmstat 1 # Stats virtuelles
# Mémoire
free -h # Mémoire libre/utilisée
cat /proc/meminfo # Détails mémoire
vmstat -s # Statistiques mémoire
# I/O Disque
iostat -x 1 # Stats I/O détaillées
iotop # Top pour I/O (installer: apt install iotop)
dstat # Stats combinées
# Réseau
iftop # Bande passante par connexion
nethogs # Bande passante par processus
sar -n DEV 1 # Stats réseau
# Combiné
dstat -cdngy 1 # CPU, disk, net, page, system
glances # Dashboard complet (installer: apt install glances)
# Historique (sysstat)
sar # System Activity Reporter
sar -u # CPU historique
sar -r # Mémoire historique
sar -b # I/O historique
Troubleshooting courant
Problèmes de performance
# Identifier le goulet d'étranglement
# 1. Charge CPU élevée
top -c # Voir les processus gourmands
ps aux --sort=-%cpu | head
perf top # Profiling CPU
# 2. Manque de mémoire
free -h
cat /proc/meminfo | grep -E "(MemTotal|MemFree|Cached|SwapTotal|SwapFree)"
ps aux --sort=-%mem | head
# OOM Killer logs
dmesg | grep -i "out of memory"
journalctl -k | grep -i oom
# 3. I/O lent
iostat -x 1 5
iotop -oa # Accumulé par processus
# %util proche de 100% = disque saturé
# await élevé = latence disque
# 4. Réseau
ss -s # Statistiques sockets
netstat -s # Statistiques réseau
cat /proc/net/dev # Erreurs interfaces
# 5. Espace disque
df -h
df -i # Inodes
du -sh /* 2>/dev/null | sort -h
lsof +D /var # Fichiers ouverts dans /var
# Fichiers supprimés mais toujours ouverts
lsof | grep deleted
Problèmes de démarrage
# Analyser le boot
systemd-analyze # Temps de boot
systemd-analyze blame # Temps par service
systemd-analyze critical-chain # Chaîne critique
# Services qui échouent
systemctl --failed
systemctl status service_name
journalctl -xeu service_name
# Mode rescue
# Au boot GRUB: ajouter "systemd.unit=rescue.target"
# Ou: ajouter "init=/bin/bash" pour shell root
# Vérifier les logs de boot
journalctl -b -p err
dmesg | grep -i error
# Réparer le système de fichiers
fsck /dev/sda1 # Vérifier FS (démonté!)
# En mode rescue:
mount -o remount,ro /
fsck -y /dev/sda1
mount -o remount,rw /
Commandes de dépannage rapide
# Qui consomme quoi ?
ps auxf | grep -E "(PID|processus)"
top -bn1 | head -20
# Pourquoi le service ne démarre pas ?
systemctl status service
journalctl -xeu service --no-pager | tail -50
# Espace disque ?
df -h && df -i
du -sh /var/* 2>/dev/null | sort -h | tail -10
# Connectivité réseau ?
ip a
ip route
ping -c 1 8.8.8.8 && echo "Internet OK" || echo "Pas d'internet"
cat /etc/resolv.conf
# Ports en écoute ?
ss -tuln
# Qui utilise ce port ?
ss -tulnp | grep :80
lsof -i :80
# Erreurs récentes ?
journalctl -p err --since "10 min ago"
dmesg | tail -50
# Fichier de config valide ?
nginx -t
apache2ctl configtest
Cheat sheet des raccourcis
# Navigation
Ctrl+A # Début de ligne
Ctrl+E # Fin de ligne
Ctrl+U # Effacer avant curseur
Ctrl+K # Effacer après curseur
Ctrl+W # Effacer mot précédent
Ctrl+Y # Coller (après Ctrl+U/K/W)
Alt+B # Mot précédent
Alt+F # Mot suivant
# Historique
Ctrl+R # Recherche dans l'historique
Ctrl+P # Commande précédente
Ctrl+N # Commande suivante
!! # Répéter dernière commande
!$ # Dernier argument
!* # Tous les arguments précédents
# Processus
Ctrl+C # Interrompre
Ctrl+Z # Suspendre
Ctrl+D # EOF / Logout
# Screen/Tmux
Ctrl+A, D # Détacher (screen)
Ctrl+B, D # Détacher (tmux)
Conclusion
L'administration système Linux repose sur la maîtrise de ces fondamentaux :
- Système de fichiers : Navigation, permissions, montages
- Processus : Monitoring, signaux, priorités
- Services : Systemd, journald, dépendances
- Réseau : Configuration, diagnostic, firewall
- Stockage : Disques, LVM, systèmes de fichiers
- Troubleshooting : Logs, monitoring, diagnostic
:::tip
Conseil : Créez-vous un fichier ~/.bashrc avec vos alias préférés et un répertoire ~/scripts avec vos outils de diagnostic. La productivité vient avec l'automatisation des tâches répétitives.
:::
Ressources complémentaires
- Linux Documentation Project
- Red Hat System Administration Guide
- ArchWiki - Excellente documentation
- ExplainShell - Comprendre les commandes
- Linux Journey - Tutoriels interactifs