Linux Serveur – Commandes système et administration
Guide de référence complet pour l’administration de serveurs Linux : commandes essentielles, gestion des fichiers, processus, réseau, systemd et sécurité.
Table des matières
- Navigation et gestion des fichiers
- Permissions et propriété
- Recherche et manipulation de texte
- Gestion des processus
- Gestion des utilisateurs
- Réseau et connectivité
- Systemd et services
- Logs et monitoring
- Disques et stockage
- Sauvegardes et archives
- Sécurité et firewall
- Performance et optimisation
—
Navigation et gestion des fichiers
Navigation de base
Afficher le répertoire courant
pwd
Lister les fichiers
ls # Liste simple
ls -l # Liste détaillée (long format)
ls -la # Inclure les fichiers cachés
ls -lh # Tailles lisibles (human-readable)
ls -lt # Trier par date de modification
ls -lS # Trier par taille
ls -lR # Récursif
ls -i # Afficher les inodes
Changer de répertoire
cd /path/to/dir # Aller vers un chemin absolu
cd .. # Remonter d'un niveau
cd ~ # Aller au home directory
cd - # Retourner au répertoire précédent
cd # Aller au home (équivalent à cd ~)
Créer des répertoires
mkdir dirname # Créer un répertoire
mkdir -p path/to/nested/dir # Créer avec parents
mkdir -m 755 dirname # Avec permissions spécifiques
Supprimer
rm file.txt # Supprimer un fichier
rm -f file.txt # Force (sans confirmation)
rm -r directory/ # Récursif (répertoire)
rm -rf directory/ # Force récursif
rmdir emptydirectory/ # Supprimer répertoire vide
Copie et déplacement
Copier
cp source.txt dest.txt # Copier un fichier
cp -r sourcedir/ destdir/ # Copier récursivement
cp -p file.txt backup.txt # Préserver attributs
cp -u source.txt dest.txt # Copier si plus récent (update)
cp -v file.txt backup.txt # Verbose
cp -a source/ dest/ # Archive (récursif + permissions)
Déplacer/Renommer
mv old.txt new.txt # Renommer
mv file.txt /path/to/dir/ # Déplacer
mv -n file.txt dest.txt # Ne pas écraser (no-clobber)
mv -u source.txt dest.txt # Déplacer si plus récent
mv -v file.txt new.txt # Verbose
Créer des liens
ln target.txt hardlink.txt # Hard link
ln -s target.txt symlink.txt # Symbolic link
ln -sf target.txt link.txt # Force symbolic link
Affichage de contenu
Lire des fichiers
cat file.txt # Afficher tout le contenu
cat file1.txt file2.txt # Concaténer plusieurs fichiers
tac file.txt # Afficher à l'envers
Pagination
less file.txt # Naviguer dans un fichier (q pour quitter)
more file.txt # Afficher page par page
Début et fin de fichier
head file.txt # 10 premières lignes
head -n 20 file.txt # 20 premières lignes
tail file.txt # 10 dernières lignes
tail -n 50 file.txt # 50 dernières lignes
tail -f /var/log/syslog # Suivre en temps réel (follow)
tail -F /var/log/app.log # Follow avec retry si fichier recréé
Compter
wc file.txt # Lignes, mots, caractères
wc -l file.txt # Nombre de lignes
wc -w file.txt # Nombre de mots
wc -c file.txt # Nombre de caractères
Recherche de fichiers
Find : recherche de fichiers
find /path -name ".txt" # Par nom
find /path -iname ".TXT" # Insensible à la casse
find /path -type f # Fichiers seulement
find /path -type d # Répertoires seulement
find /path -type l # Liens symboliques
find /path -size +100M # Taille > 100MB
find /path -size -1M # Taille < 1MB
find /path -mtime -7 # Modifié dans les 7 derniers jours
find /path -mtime +30 # Modifié il y a plus de 30 jours
find /path -atime -1 # Accédé dans les dernières 24h
find /path -user username # Par propriétaire
find /path -perm 644 # Par permissions
find /path -empty # Fichiers/dossiers vides
Actions sur les résultats
find /path -name ".log" -delete # Supprimer
find /path -name ".txt" -exec chmod 644 {} ; # Exécuter commande
find /path -type f -exec grep "pattern" {} + # Grep sur résultats
Locate (plus rapide, base de données)
updatedb # Mettre à jour la base
locate filename # Rechercher
locate -i filename # Insensible à la casse
locate -c filename # Compter les résultats
locate -e filename # Vérifier existence
Which : trouver l'emplacement d'une commande
which python # Afficher le chemin
which -a python # Tous les chemins
Whereis : localiser binaires, sources, man pages
whereis python
—
Permissions et propriété
Comprendre les permissions
Format: drwxrwxrwx
||||||||└── Other execute
|||||||└─── Other write
||||||└──── Other read
|||||└───── Group execute
||||└────── Group write
|||└─────── Group read
||└──────── Owner execute
|└───────── Owner write
└────────── Owner read
d = directory, - = file, l = link
Tableau des permissions numériques
| Octal | Binaire | Permissions | Description |
|——-|———|————-|————-|
| 0 | 000 | — | Aucun |
| 1 | 001 | –x | Execute |
| 2 | 010 | -w- | Write |
| 3 | 011 | -wx | Write + Execute |
| 4 | 100 | r– | Read |
| 5 | 101 | r-x | Read + Execute |
| 6 | 110 | rw- | Read + Write |
| 7 | 111 | rwx | All |
Commandes chmod
Mode symbolique
chmod u+x script.sh # Ajouter exécution pour user
chmod g+w file.txt # Ajouter écriture pour group
chmod o-r file.txt # Retirer lecture pour others
chmod a+r file.txt # Ajouter lecture pour all
chmod u=rwx,g=rx,o=r file.txt # Définir explicitement
Mode numérique (octal)
chmod 644 file.txt # rw-r--r-- (fichier standard)
chmod 755 script.sh # rwxr-xr-x (script exécutable)
chmod 700 private.txt # rwx------ (privé)
chmod 777 file.txt # rwxrwxrwx (tous accès - À ÉVITER)
chmod 600 ~/.ssh/idrsa # rw------- (clé SSH privée)
chmod 644 ~/.ssh/idrsa.pub # rw-r--r-- (clé SSH publique)
Récursif
chmod -R 755 /var/www/html # Récursif sur répertoire
chmod -R u+w directory/ # Ajouter write récursivement
Permissions spéciales
chmod u+s file # SUID (Set User ID)
chmod g+s directory # SGID (Set Group ID)
chmod +t directory # Sticky bit
chmod 4755 file # SUID + 755
chmod 2755 directory # SGID + 755
chmod 1777 /tmp # Sticky + 777
Commandes chown et chgrp
Changer propriétaire
chown user file.txt # Changer owner
chown user:group file.txt # Changer owner et group
chown -R user:group directory/ # Récursif
chown --reference=ref.txt file.txt # Copier ownership
Changer groupe
chgrp group file.txt # Changer group
chgrp -R group directory/ # Récursif
Exemples pratiques
chown www-data:www-data /var/www/html # Web files
chown -R nginx:nginx /var/www # Nginx
chown mysql:mysql /var/lib/mysql # MySQL
Permissions par défaut (umask)
Afficher umask actuel
umask # Format octal (ex: 0022)
umask -S # Format symbolique (ex: u=rwx,g=rx,o=rx)
Définir umask
umask 022 # Fichiers: 644, Directories: 755
umask 002 # Fichiers: 664, Directories: 775
umask 077 # Fichiers: 600, Directories: 700
Permanent (dans ~/.bashrc ou /etc/profile)
echo "umask 022" >> ~/.bashrc
ACL (Access Control Lists)
Installer ACL
apt install acl # Debian/Ubuntu
yum install acl # RHEL/CentOS
Afficher ACL
getfacl file.txt
Définir ACL
setfacl -m u:username:rwx file.txt # User ACL
setfacl -m g:groupname:rx file.txt # Group ACL
setfacl -m o::r file.txt # Other ACL
setfacl -m d:u:username:rwx directory/ # Default ACL (héritage)
setfacl -R -m u:username:rwx directory/ # Récursif
Supprimer ACL
setfacl -x u:username file.txt # Supprimer entrée
setfacl -b file.txt # Supprimer toutes ACL
—
Recherche et manipulation de texte
Grep : recherche de motifs
Recherche basique
grep "pattern" file.txt # Rechercher pattern
grep -i "pattern" file.txt # Insensible à la casse
grep -v "pattern" file.txt # Inverser (exclure)
grep -n "pattern" file.txt # Afficher numéros de ligne
grep -c "pattern" file.txt # Compter occurrences
grep -l "pattern" .txt # Fichiers contenant pattern
grep -L "pattern" .txt # Fichiers ne contenant pas
Options avancées
grep -r "pattern" /path # Récursif
grep -R "pattern" /path # Récursif + symlinks
grep -w "word" file.txt # Mot entier
grep -x "line" file.txt # Ligne entière
grep -A 3 "pattern" file.txt # 3 lignes après
grep -B 3 "pattern" file.txt # 3 lignes avant
grep -C 3 "pattern" file.txt # 3 lignes contexte
Regex
grep -E "pattern|other" file.txt # Extended regex (OR)
grep -E "^pattern" file.txt # Début de ligne
grep -E "pattern$" file.txt # Fin de ligne
grep -E "[0-9]{3}" file.txt # 3 chiffres
egrep "pattern|other" file.txt # Équivalent à grep -E
Exemples pratiques
grep -r "error" /var/log/ # Chercher erreurs dans logs
grep -i "failed" /var/log/auth.log # Tentatives échouées
ps aux | grep nginx # Processus nginx
netstat -tulpn | grep :80 # Port 80
Sed : édition de flux
Substitution
sed 's/old/new/' file.txt # Remplacer 1ère occurrence par ligne
sed 's/old/new/g' file.txt # Remplacer toutes occurrences
sed 's/old/new/gi' file.txt # Insensible à la casse
sed 's/old/new/2' file.txt # Remplacer 2ème occurrence
sed -i 's/old/new/g' file.txt # Modifier fichier en place
sed -i.bak 's/old/new/g' file.txt # Avec backup
Suppression
sed '/pattern/d' file.txt # Supprimer lignes contenant pattern
sed '1d' file.txt # Supprimer ligne 1
sed '1,5d' file.txt # Supprimer lignes 1-5
sed '/^$/d' file.txt # Supprimer lignes vides
sed '/^#/d' file.txt # Supprimer commentaires
Affichage
sed -n '1,10p' file.txt # Afficher lignes 1-10
sed -n '/pattern/p' file.txt # Afficher lignes avec pattern
Insertion/Ajout
sed '1iNew first line' file.txt # Insérer avant ligne 1
sed '1aNew second line' file.txt # Ajouter après ligne 1
Exemples pratiques
sed 's/127.0.0.1/localhost/g' /etc/hosts
sed -i 's/#Port 22/Port 2222/g' /etc/ssh/sshdconfig
sed 's/^/ /' file.txt # Indenter chaque ligne
Awk : traitement de texte avancé
Basiques
awk '{print}' file.txt # Afficher tout
awk '{print $1}' file.txt # 1ère colonne
awk '{print $1, $3}' file.txt # Colonnes 1 et 3
awk '{print $NF}' file.txt # Dernière colonne
awk 'NR==1' file.txt # Ligne 1
awk 'NR>=1 && NR<=5' file.txt # Lignes 1-5
Avec conditions
awk '$3 > 100' file.txt # 3ème colonne > 100
awk '$1 == "root"' /etc/passwd # 1ère colonne = root
awk 'length($0) > 80' file.txt # Lignes > 80 caractères
Séparateurs
awk -F: '{print $1}' /etc/passwd # Séparateur :
awk -F, '{print $1, $2}' file.csv # CSV
Calculs
awk '{sum += $1} END {print sum}' file.txt # Somme colonne 1
awk '{sum += $1} END {print sum/NR}' file.txt # Moyenne
awk '{if ($1 > max) max = $1} END {print max}' # Maximum
Exemples pratiques
ps aux | awk '{print $1, $2, $11}' # User, PID, command
df -h | awk '$5 > 80 {print $0}' # Disques > 80%
awk -F: '$3 >= 1000 {print $1}' /etc/passwd # Users normaux
netstat -an | awk '/ESTABLISHED/ {count++} END {print count}'
Cut : découper colonnes
cut -d: -f1 /etc/passwd # 1ère colonne, séparateur :
cut -d: -f1,3 /etc/passwd # Colonnes 1 et 3
cut -c1-10 file.txt # Caractères 1-10
cut -f1,3 --output-delimiter=',' file.txt # Changer délimiteur sortie
Sort et uniq
Sort
sort file.txt # Trier alphabétiquement
sort -n file.txt # Trier numériquement
sort -r file.txt # Ordre inverse
sort -k2 file.txt # Trier par colonne 2
sort -u file.txt # Trier et supprimer doublons
sort -t: -k3 -n /etc/passwd # Trier par UID
Uniq (nécessite un sort avant)
sort file.txt | uniq # Supprimer doublons consécutifs
sort file.txt | uniq -c # Compter occurrences
sort file.txt | uniq -d # Afficher seulement doublons
sort file.txt | uniq -u # Afficher seulement uniques
Autres outils texte
Tr : transformer caractères
tr 'a-z' 'A-Z' < file.txt # Minuscules vers majuscules
tr -d '0-9' < file.txt # Supprimer chiffres
tr -s ' ' < file.txt # Squeeze espaces multiples
Paste : fusionner lignes
paste file1.txt file2.txt # Côte à côte
paste -d, file1.txt file2.txt # Avec séparateur
Join : jointure comme SQL
join file1.txt file2.txt
Diff : comparer fichiers
diff file1.txt file2.txt # Différences
diff -u file1.txt file2.txt # Unified format
diff -y file1.txt file2.txt # Side by side
diff -r dir1/ dir2/ # Récursif
—
Gestion des processus
Afficher les processus
PS : liste statique
ps # Processus du shell courant
ps aux # Tous processus (BSD style)
ps -ef # Tous processus (Unix style)
ps -u username # Processus d'un user
ps -C nginx # Processus par nom
ps --forest # Arborescence
ps -eo pid,ppid,cmd,%mem,%cpu # Colonnes personnalisées
Top : liste dynamique
top # Vue interactive
top -u username # Filtrer par user
top -p 1234 # Filtrer par PID
Htop : version améliorée de top
htop # Interface interactive (installer: apt install htop)
Pstree : arborescence des processus
pstree # Tous processus
pstree username # Par user
pstree -p # Avec PIDs
Commandes de gestion
Kill : terminer processus
kill PID # SIGTERM (15) - graceful
kill -9 PID # SIGKILL (9) - force
kill -15 PID # SIGTERM explicite
kill -HUP PID # SIGHUP (1) - reload config
killall nginx # Par nom de processus
killall -u username # Tous processus d'un user
pkill -f "pattern" # Par pattern de commande
Nice et renice : priorité
nice -n 10 command # Lancer avec priorité basse
nice -n -10 command # Lancer avec priorité haute (root)
renice -n 5 -p PID # Changer priorité existant
renice -n 5 -u username # Pour un user
Background et foreground
command & # Lancer en background
jobs # Lister jobs background
fg %1 # Ramener job 1 en foreground
bg %1 # Continuer job 1 en background
Ctrl+Z # Suspendre processus courant
disown # Détacher du shell
Nohup : continuer après déconnexion
nohup command & # Ignorer SIGHUP
nohup command > output.log 2>&1 & # Avec redirection
Monitoring avancé
Pidof : trouver PID par nom
pidof nginx
Pgrep : trouver processus par pattern
pgrep nginx
pgrep -u username
pgrep -f "python script.py"
Watch : exécuter périodiquement
watch -n 2 "ps aux | grep nginx" # Toutes les 2 secondes
watch -d "netstat -an | grep ESTABLISHED" # Highlighter différences
Lsof : fichiers ouverts
lsof # Tous fichiers ouverts
lsof /path/to/file # Qui utilise ce fichier
lsof -u username # Par user
lsof -p PID # Par PID
lsof -i :80 # Port 80
lsof -i TCP:1-1024 # Ports 1-1024
lsof -t -i :80 # Juste les PIDs
Fuser : identifier processus utilisant fichiers
fuser /path/to/file # PIDs utilisant fichier
fuser -k /path/to/file # Kill processus
fuser -v /var/log/syslog # Verbose
fuser 80/tcp # Port 80
Exemples pratiques
Trouver et tuer processus
ps aux | grep nginx | grep -v grep | awk '{print $2}' | xargs kill
Plus simple avec pkill
pkill -f nginx
Redémarrer service zombie
systemctl restart servicename
Processus consommant le plus de CPU
ps aux --sort=-%cpu | head -10
Processus consommant le plus de mémoire
ps aux --sort=-%mem | head -10
Compter processus par user
ps aux | awk '{print $1}' | sort | uniq -c | sort -rn
—
Gestion des utilisateurs
Utilisateurs
Créer utilisateur
useradd username # Créer user minimal
useradd -m username # Avec home directory
useradd -m -s /bin/bash username # Avec shell bash
useradd -m -G sudo,www-data username # Avec groupes
useradd -m -d /custom/home username # Home personnalisé
useradd -m -e 2025-12-31 username # Avec expiration
Modifier utilisateur
usermod -l newname oldname # Renommer
usermod -d /new/home -m username # Changer home
usermod -s /bin/zsh username # Changer shell
usermod -aG sudo username # Ajouter à groupe (append)
usermod -G group1,group2 username # Définir groupes
usermod -L username # Verrouiller (lock)
usermod -U username # Déverrouiller (unlock)
Supprimer utilisateur
userdel username # Supprimer (garde home)
userdel -r username # Supprimer avec home
userdel -f username # Force (même si connecté)
Mot de passe
passwd username # Changer mot de passe
passwd -l username # Verrouiller
passwd -u username # Déverrouiller
passwd -d username # Supprimer mot de passe
passwd -e username # Forcer changement
chage -l username # Voir infos expiration
chage -M 90 username # Expiration 90 jours
chage -E 2025-12-31 username # Date expiration compte
Groupes
Créer groupe
groupadd groupname
groupadd -g 1500 groupname # Avec GID spécifique
Modifier groupe
groupmod -n newname oldname # Renommer
groupmod -g 2000 groupname # Changer GID
Supprimer groupe
groupdel groupname
Gérer membres
gpasswd -a username groupname # Ajouter user
gpasswd -d username groupname # Retirer user
gpasswd -M user1,user2 groupname # Définir membres
Lister groupes
groups username # Groupes d'un user
id username # Infos complètes (UID, GID, groupes)
getent group groupname # Détails d'un groupe
cat /etc/group # Tous les groupes
Informations utilisateurs
Who et w
who # Utilisateurs connectés
who -b # Dernier boot
w # Users + activité
users # Liste simple
Last
last # Historique connexions
last username # Connexions d'un user
last -n 10 # 10 dernières
lastb # Tentatives échouées
lastlog # Dernière connexion de chaque user
Fichiers système
cat /etc/passwd # Base utilisateurs
cat /etc/shadow # Mots de passe (root only)
cat /etc/group # Groupes
cat /etc/gshadow # Passwords groupes (root only)
Su et sudo
Su : changer d'utilisateur
su # Devenir root
su - # Devenir root + env
su username # Devenir user
su - username # Devenir user + env
Sudo : exécuter en tant que root
sudo command # Exécuter commande
sudo -u username command # En tant qu'autre user
sudo -i # Shell root interactif
sudo -s # Shell avec env user
sudo -l # Lister permissions sudo
sudo -k # Invalider cache sudo
sudo !! # Réexécuter dernière commande
Configurer sudo
visudo # Éditer /etc/sudoers (safe)
Ajouter user au groupe sudo
usermod -aG sudo username # Debian/Ubuntu
usermod -aG wheel username # RHEL/CentOS
Exemples /etc/sudoers
username ALL=(ALL:ALL) ALL # Tous privilèges
username ALL=(ALL) NOPASSWD: ALL # Sans password
%sudo ALL=(ALL:ALL) ALL # Groupe sudo
—
Réseau et connectivité
Informations réseau
IP et interfaces
ip addr # Adresses IP
ip addr show eth0 # Interface spécifique
ip link # Interfaces réseau
ip link set eth0 up # Activer interface
ip link set eth0 down # Désactiver interface
ip route # Table de routage
ip route add default via 192.168.1.1 # Ajouter route par défaut
ip neigh # Table ARP
Ifconfig (ancien, mais encore utilisé)
ifconfig # Toutes interfaces
ifconfig eth0 # Interface spécifique
ifconfig eth0 192.168.1.100 # Définir IP
ifconfig eth0 up # Activer
ifconfig eth0 down # Désactiver
Hostname
hostname # Afficher hostname
hostname newname # Changer (temporaire)
hostnamectl set-hostname newname # Changer (permanent)
hostnamectl # Infos système
Tests de connectivité
Ping
ping google.com # Test connectivité
ping -c 4 google.com # 4 paquets seulement
ping -i 0.2 google.com # Interval 0.2s
ping -s 1000 google.com # Taille paquet 1000 bytes
Traceroute
traceroute google.com # Route vers destination
traceroute -n google.com # Sans résolution DNS
tracepath google.com # Alternative (pas besoin root)
MTR : combinaison ping + traceroute
mtr google.com # Interactif
mtr -r -c 10 google.com # Report mode, 10 cycles
Ports et connexions
Netstat (ancien)
netstat -tulpn # Écoute TCP/UDP + programmes
netstat -an # Toutes connexions
netstat -r # Table routage
netstat -i # Statistiques interfaces
netstat -s # Statistiques par protocole
SS (moderne, remplace netstat)
ss -tulpn # Écoute TCP/UDP + programmes
ss -an # Toutes connexions
ss -t # TCP seulement
ss -u # UDP seulement
ss -l # Listening seulement
ss -p # Afficher processus
ss -s # Statistiques
ss state established # Connexions établies
ss dst 192.168.1.100 # Destination spécifique
ss sport :80 # Port source 80
Nmap : scanner de ports
nmap localhost # Scanner local
nmap 192.168.1.0/24 # Scanner réseau
nmap -p 80,443 target.com # Ports spécifiques
nmap -p- target.com # Tous les ports
nmap -sV target.com # Détecter versions
nmap -O target.com # Détecter OS
nmap -A target.com # Scan agressif
Lsof pour réseau
lsof -i # Toutes connexions
lsof -i :80 # Port 80
lsof -i TCP # TCP seulement
lsof -i @192.168.1.100 # Vers IP spécifique
DNS
Nslookup
nslookup google.com # Requête DNS
nslookup google.com 8.8.8.8 # Serveur DNS spécifique
Dig (plus détaillé)
dig google.com # Requête A
dig google.com MX # Requête MX
dig google.com ANY # Tous enregistrements
dig @8.8.8.8 google.com # Serveur DNS spécifique
dig +short google.com # Résultat court
dig -x 8.8.8.8 # Reverse DNS
Host
host google.com # Requête simple
host -t MX google.com # Type spécifique
host 8.8.8.8 # Reverse lookup
Transfert de fichiers
Wget
wget https://example.com/file.zip # Télécharger
wget -O custom.zip https://url # Nom personnalisé
wget -c https://url # Continuer téléchargement
wget -r https://site.com # Récursif (site entier)
wget --limit-rate=200k https://url # Limiter vitesse
wget -b https://url # Background
Curl
curl https://example.com # Afficher contenu
curl -O https://example.com/file.zip # Télécharger (nom original)
curl -o custom.zip https://url # Nom personnalisé
curl -I https://example.com # Headers seulement
curl -L https://example.com # Suivre redirections
curl -u user:pass https://url # Avec authentification
curl -X POST -d "data" https://api.com # POST request
Rsync
rsync -av source/ dest/ # Archive verbose
rsync -avz source/ dest/ # Avec compression
rsync -avz --delete source/ dest/ # Supprimer fichiers extra
rsync -avz -e ssh source/ user@host:/path/ # Via SSH
rsync --progress source/ dest/ # Avec progression
SCP
scp file.txt user@host:/path/ # Copier vers serveur
scp user@host:/path/file.txt . # Copier depuis serveur
scp -r directory/ user@host:/path/ # Récursif
scp -P 2222 file.txt user@host:/path/ # Port personnalisé
Configuration réseau
NetworkManager (Ubuntu/Fedora)
nmcli device status # État interfaces
nmcli connection show # Connexions
nmcli connection up connectionname # Activer connexion
nmcli connection down connectionname # Désactiver
nmcli device wifi list # Réseaux WiFi
nmcli device wifi connect SSID password PASSWORD
Netplan (Ubuntu 18.04+)
Éditer /etc/netplan/.yaml
sudo netplan apply # Appliquer config
Fichiers de configuration
/etc/network/interfaces # Debian/Ubuntu (ancien)
/etc/sysconfig/network-scripts/ # RHEL/CentOS
/etc/netplan/ # Ubuntu moderne
/etc/resolv.conf # Serveurs DNS
/etc/hosts # Résolution locale
—
Systemd et services
Gestion des services
Systemctl : contrôle des services
systemctl start servicename # Démarrer
systemctl stop servicename # Arrêter
systemctl restart servicename # Redémarrer
systemctl reload servicename # Recharger config
systemctl status servicename # État
systemctl enable servicename # Activer au boot
systemctl disable servicename # Désactiver au boot
systemctl is-active servicename # Vérifier si actif
systemctl is-enabled servicename # Vérifier si enabled
Lister services
systemctl list-units --type=service # Tous services actifs
systemctl list-units --type=service --all # Tous services
systemctl list-unit-files --type=service # Tous avec état enabled/disabled
systemctl list-dependencies servicename # Dépendances
Services courants
systemctl status nginx # Nginx
systemctl status apache2 # Apache
systemctl status mysql # MySQL
systemctl status postgresql # PostgreSQL
systemctl status ssh # SSH server
systemctl status cron # Cron daemon
Journalctl : logs systemd
Afficher logs
journalctl # Tous logs
journalctl -u nginx # Service spécifique
journalctl -u nginx -f # Follow (temps réel)
journalctl -b # Boot actuel
journalctl -b -1 # Boot précédent
journalctl --since "2024-12-01" # Depuis date
journalctl --since "1 hour ago" # Depuis 1 heure
journalctl --until "2024-12-31" # Jusqu'à date
journalctl -p err # Priorité error
journalctl -p err -b # Errors du boot actuel
journalctl -k # Kernel messages
journalctl PID=1234 # Par PID
journalctl UID=1000 # Par UID
Options d'affichage
journalctl -n 50 # 50 dernières lignes
journalctl -r # Ordre inverse
journalctl -o json # Format JSON
journalctl -o json-pretty # JSON indenté
journalctl --disk-usage # Utilisation disque
journalctl --vacuum-time=7d # Nettoyer > 7 jours
journalctl --vacuum-size=500M # Limiter à 500M
Créer un service systemd
Créer fichier /etc/systemd/system/myapp.service
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/server.js
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
Activer le service
sudo systemctl daemon-reload # Recharger configuration
sudo systemctl enable myapp # Activer au boot
sudo systemctl start myapp # Démarrer
sudo systemctl status myapp # Vérifier état
Timers systemd (remplace cron)
Créer timer /etc/systemd/system/backup.timer
[Unit]
Description=Backup Timer
[Timer]
OnCalendar=daily
OnCalendar=-- 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Créer service /etc/systemd/system/backup.service
[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
Activer
systemctl enable backup.timer
systemctl start backup.timer
systemctl list-timers # Lister timers
Targets (runlevels)
systemctl get-default # Target par défaut
systemctl set-default multi-user.target # Définir target
systemctl isolate multi-user.target # Changer immédiatement
Targets communs
poweroff.target (runlevel 0)
rescue.target (runlevel 1)
multi-user.target (runlevel 3)
graphical.target (runlevel 5)
reboot.target (runlevel 6)
—
Logs et monitoring
Fichiers de logs standards
Logs système principaux
/var/log/syslog # Messages système (Debian/Ubuntu)
/var/log/messages # Messages système (RHEL/CentOS)
/var/log/auth.log # Authentification (Debian/Ubuntu)
/var/log/secure # Authentification (RHEL/CentOS)
/var/log/kern.log # Messages kernel
/var/log/dmesg # Messages boot kernel
/var/log/boot.log # Boot
Services
/var/log/apache2/ # Apache (Debian/Ubuntu)
/var/log/httpd/ # Apache (RHEL/CentOS)
/var/log/nginx/ # Nginx
/var/log/mysql/ # MySQL
/var/log/postgresql/ # PostgreSQL
Applications
/var/log/cron # Cron jobs
/var/log/mail.log # Mail
/var/log/daemon.log # Daemons
Commandes de lecture de logs
Tail : suivre en temps réel
tail -f /var/log/syslog # Suivre logs système
tail -n 100 /var/log/auth.log # 100 dernières lignes
tail -f /var/log/nginx/access.log # Access log nginx
Grep dans logs
grep "error" /var/log/syslog # Rechercher erreurs
grep -i "failed" /var/log/auth.log # Tentatives échouées
grep "$(date '+%b %e')" /var/log/syslog # Logs du jour
Zgrep : grep dans fichiers compressés
zgrep "error" /var/log/syslog.1.gz
Exemples pratiques
tail -f /var/log/syslog | grep --line-buffered "error" # Filter en temps réel
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn # IPs tentatives échouées
Logrotate : rotation de logs
Configuration globale
cat /etc/logrotate.conf
Configurations spécifiques
ls /etc/logrotate.d/
Exemple de configuration
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload myapp > /dev/null
endscript
}
Tester configuration
logrotate -d /etc/logrotate.conf # Dry run
logrotate -f /etc/logrotate.conf # Forcer rotation
Monitoring système
Uptime : temps de fonctionnement
uptime # Uptime + load average
uptime -p # Pretty format
uptime -s # Date de démarrage
Load average
cat /proc/loadavg # Load 1min, 5min, 15min
Free : mémoire
free # Mémoire disponible
free -h # Human-readable
free -m # En MB
free -g # En GB
free -s 2 # Refresh toutes les 2s
Vmstat : statistiques virtuelles
vmstat # Vue d'ensemble
vmstat 2 # Refresh toutes les 2s
vmstat -s # Statistiques détaillées
vmstat -d # Statistiques disques
Iostat : I/O statistiques
iostat # Vue d'ensemble
iostat -x # Extended
iostat -x 2 # Refresh 2s
iostat -c # CPU seulement
iostat -d # Disques seulement
Mpstat : statistiques CPU
mpstat # Vue d'ensemble
mpstat -P ALL # Tous CPUs
mpstat 2 # Refresh 2s
Sar : System Activity Reporter
sar # Activité CPU
sar -r # Mémoire
sar -d # Disques
sar -n DEV # Réseau
sar -q # Load average
sar -f /var/log/sysstat/sa01 # Fichier spécifique
—
Disques et stockage
Informations disques
Df : espace disque
df # Tous systèmes de fichiers
df -h # Human-readable
df -T # Avec types FS
df -i # Inodes
df -h /var # Partition spécifique
Du : utilisation disque
du -sh /path # Taille totale
du -h /path # Tailles détaillées
du -h --max-depth=1 /path # 1 niveau
du -ah /path | sort -rh | head -20 # 20 plus gros
ncdu /path # Navigateur interactif (installer: apt install ncdu)
Lsblk : périphériques blocs
lsblk # Vue arborescence
lsblk -f # Avec filesystems
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # Colonnes personnalisées
Fdisk : partitions
sudo fdisk -l # Lister toutes partitions
sudo fdisk /dev/sda # Mode interactif
Blkid : UUID et types
sudo blkid # Tous périphériques
sudo blkid /dev/sda1 # Partition spécifique
Montage et démontage
Mount : monter filesystem
mount # Lister montages
sudo mount /dev/sdb1 /mnt # Monter partition
sudo mount -t ext4 /dev/sdb1 /mnt # Avec type
sudo mount -o ro /dev/sdb1 /mnt # Read-only
sudo mount -a # Monter tout (/etc/fstab)
Umount : démonter
sudo umount /mnt # Démonter
sudo umount /dev/sdb1 # Par device
sudo umount -l /mnt # Lazy unmount
sudo umount -f /mnt # Force
Fstab : montages automatiques
cat /etc/fstab
sudo nano /etc/fstab
Exemple ligne fstab
UUID=xxx /mnt/data ext4 defaults 0 2
device mountpoint type options dump pass
Partitionnement
Fdisk : MBR (< 2TB)
sudo fdisk /dev/sdb
Commandes: n (nouvelle), d (supprimer), w (écrire), q (quitter)
Parted : GPT (> 2TB)
sudo parted /dev/sdb
mklabel gpt
mkpart primary ext4 0% 100%
quit
Créer filesystem
sudo mkfs.ext4 /dev/sdb1 # ext4
sudo mkfs.xfs /dev/sdb1 # XFS
sudo mkfs.btrfs /dev/sdb1 # Btrfs
sudo mkfs.ntfs /dev/sdb1 # NTFS
sudo mkfs.vfat -F 32 /dev/sdb1 # FAT32
Vérifier filesystem
sudo fsck /dev/sdb1 # Generic
sudo e2fsck -f /dev/sdb1 # ext2/3/4
sudo xfsrepair /dev/sdb1 # XFS
LVM (Logical Volume Manager)
Physical Volumes
sudo pvcreate /dev/sdb # Créer PV
sudo pvdisplay # Afficher PVs
sudo pvs # Liste courte
Volume Groups
sudo vgcreate vgdata /dev/sdb # Créer VG
sudo vgdisplay # Afficher VGs
sudo vgextend vgdata /dev/sdc # Étendre VG
sudo vgs # Liste courte
Logical Volumes
sudo lvcreate -L 10G -n lvdata vgdata # Créer LV 10GB
sudo lvcreate -l 100%FREE -n lvdata vgdata # Utiliser tout l'espace
sudo lvdisplay # Afficher LVs
sudo lvextend -L +5G /dev/vgdata/lvdata # Étendre +5GB
sudo lvextend -l +100%FREE /dev/vgdata/lvdata # Utiliser espace libre
sudo lvs # Liste courte
Resize filesystem après lvextend
sudo resize2fs /dev/vgdata/lvdata # ext2/3/4
sudo xfsgrowfs /mount/point # XFS
Supprimer
sudo lvremove /dev/vgdata/lvdata # Supprimer LV
sudo vgremove vgdata # Supprimer VG
sudo pvremove /dev/sdb # Supprimer PV
RAID logiciel
Créer RAID
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc # RAID 1
Informations
sudo mdadm --detail /dev/md0
cat /proc/mdstat
Ajouter/retirer disque
sudo mdadm --add /dev/md0 /dev/sdd
sudo mdadm --fail /dev/md0 /dev/sdb
sudo mdadm --remove /dev/md0 /dev/sdb
Sauvegarder configuration
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
—
Sauvegardes et archives
Tar : archives
Créer archive
tar -cvf archive.tar directory/ # Créer
tar -czvf archive.tar.gz directory/ # Créer + gzip
tar -cjvf archive.tar.bz2 directory/ # Créer + bzip2
tar -cJvf archive.tar.xz directory/ # Créer + xz
Extraire
tar -xvf archive.tar # Extraire
tar -xzvf archive.tar.gz # Extraire gzip
tar -xjvf archive.tar.bz2 # Extraire bzip2
tar -xJvf archive.tar.xz # Extraire xz
tar -xvf archive.tar -C /path # Extraire vers path
Lister contenu
tar -tvf archive.tar # Lister
tar -tzvf archive.tar.gz # Lister gzip
Ajouter à archive existante
tar -rvf archive.tar newfile.txt
Extraire fichier spécifique
tar -xvf archive.tar file.txt
tar -xvf archive.tar --wildcards ".txt"
Options:
c = create, x = extract, t = list
v = verbose, f = file
z = gzip, j = bzip2, J = xz
Compression
Gzip
gzip file.txt # Compresser (supprime original)
gzip -k file.txt # Keep original
gzip -9 file.txt # Compression maximale
gunzip file.txt.gz # Décompresser
gzip -d file.txt.gz # Décompresser (alt)
zcat file.txt.gz # Lire sans décompresser
Bzip2
bzip2 file.txt # Compresser
bunzip2 file.txt.bz2 # Décompresser
bzcat file.txt.bz2 # Lire sans décompresser
Xz (meilleure compression)
xz file.txt # Compresser
unxz file.txt.xz # Décompresser
xzcat file.txt.xz # Lire sans décompresser
Zip
zip archive.zip file1.txt file2.txt # Créer zip
zip -r archive.zip directory/ # Récursif
unzip archive.zip # Extraire
unzip -l archive.zip # Lister contenu
unzip archive.zip -d /path # Extraire vers path
Rsync : synchronisation
Local
rsync -av source/ dest/ # Archive mode, verbose
rsync -avz source/ dest/ # Avec compression
rsync -av --delete source/ dest/ # Supprimer fichiers en extra
rsync -av --dry-run source/ dest/ # Simulation
rsync -av --exclude=".tmp" source/ dest/ # Exclure pattern
rsync -av --exclude-from=exclude.txt source/ dest/ # Fichier d'exclusion
Remote (SSH)
rsync -avz source/ user@host:/path/ # Upload
rsync -avz user@host:/path/ dest/ # Download
rsync -avz -e "ssh -p 2222" source/ user@host:/path/ # Port custom
Options utiles
rsync -av --progress source/ dest/ # Avec progression
rsync -av --partial source/ dest/ # Reprendre transferts interrompus
rsync -av --bwlimit=1000 source/ dest/ # Limiter bande passante (KB/s)
rsync -av --backup --backup-dir=../backup source/ dest/ # Backup avant écrasement
Backup incrémental
rsync -av --link-dest=/backup/latest source/ /backup/$(date +%Y%m%d)/
Scripts de backup
#!/bin/bash
backup.sh - Script de backup simple
BACKUPDIR="/backup"
SOURCEDIR="/var/www"
DATE=$(date +%Y%m%d%H%M%S)
BACKUPFILE="backup$DATE.tar.gz"
RETENTIONDAYS=7
Créer backup
tar -czf $BACKUPDIR/$BACKUPFILE $SOURCEDIR
Supprimer anciens backups
find $BACKUPDIR -name "backup.tar.gz" -mtime +$RETENTIONDAYS -delete
Log
echo "Backup created: $BACKUPFILE" >> /var/log/backup.log
—
Sécurité et firewall
SSH sécurisé
Configuration SSH (/etc/ssh/sshdconfig)
sudo nano /etc/ssh/sshdconfig
Recommandations:
Port 2222 # Changer port
PermitRootLogin no # Désactiver root login
PasswordAuthentication no # Désactiver password auth
PubkeyAuthentication yes # Activer key auth
AllowUsers user1 user2 # Whitelist users
MaxAuthTries 3 # Limiter tentatives
Redémarrer SSH
sudo systemctl restart sshd
Générer clé SSH
ssh-keygen -t ed25519 -C "email@example.com" # Ed25519 (recommandé)
ssh-keygen -t rsa -b 4096 -C "email@example.com" # RSA 4096
Copier clé publique vers serveur
ssh-copy-id user@host
ssh-copy-id -i ~/.ssh/ided25519.pub user@host
Se connecter
ssh user@host
ssh -p 2222 user@host # Port custom
ssh -i ~/.ssh/customkey user@host # Clé spécifique
UFW (Uncomplicated Firewall)
Activer/Désactiver
sudo ufw enable # Activer
sudo ufw disable # Désactiver
sudo ufw status # État
sudo ufw status verbose # Détaillé
sudo ufw status numbered # Avec numéros
Règles basiques
sudo ufw allow 22 # Autoriser port 22
sudo ufw allow 80/tcp # Autoriser port 80 TCP
sudo ufw allow ssh # Par nom de service
sudo ufw allow http # HTTP
sudo ufw allow https # HTTPS
sudo ufw deny 23 # Bloquer port 23
Plages de ports
sudo ufw allow 6000:6007/tcp # Plage de ports
Par IP
sudo ufw allow from 192.168.1.100 # IP spécifique
sudo ufw allow from 192.168.1.0/24 # Subnet
sudo ufw allow from 192.168.1.100 to any port 22 # IP vers port
Supprimer règles
sudo ufw delete allow 80 # Par règle
sudo ufw delete 3 # Par numéro
sudo ufw reset # Reset tout
Default policies
sudo ufw default deny incoming # Bloquer entrant par défaut
sudo ufw default allow outgoing # Autoriser sortant par défaut
Exemples pratiques
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 3306/tcp # MySQL (depuis localhost only recommandé)
sudo ufw allow from 192.168.1.0/24 to any port 3306 # MySQL depuis LAN
Iptables (avancé)
Lister règles
sudo iptables -L # Lister
sudo iptables -L -v # Verbose
sudo iptables -L -n # Pas de résolution DNS
sudo iptables -L INPUT --line-numbers # Avec numéros
Autoriser trafic
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Port 22
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # Depuis subnet
sudo iptables -A INPUT -i lo -j ACCEPT # Loopback
Bloquer trafic
sudo iptables -A INPUT -s 192.168.1.100 -j DROP # Bloquer IP
sudo iptables -A INPUT -p tcp --dport 23 -j DROP # Bloquer port
Supprimer règle
sudo iptables -D INPUT 3 # Par numéro
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT # Par spécification
Policies par défaut
sudo iptables -P INPUT DROP # Bloquer entrant
sudo iptables -P FORWARD DROP # Bloquer forward
sudo iptables -P OUTPUT ACCEPT # Autoriser sortant
Sauvegarder/Restaurer
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-restore < /etc/iptables/rules.v4
Flush (tout supprimer)
sudo iptables -F # Flush toutes chaînes
sudo iptables -X # Supprimer chaînes custom
Fail2ban : protection brute force
Installer
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # RHEL/CentOS
Configuration
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Exemple configuration SSH
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
Commandes
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status # État global
sudo fail2ban-client status sshd # État jail SSH
sudo fail2ban-client set sshd unbanip 192.168.1.100 # Débannir IP
Mises à jour de sécurité
Debian/Ubuntu
sudo apt update # Mettre à jour liste
sudo apt upgrade # Installer updates
sudo apt dist-upgrade # Upgrade distribution
sudo apt autoremove # Supprimer paquets inutiles
sudo apt autoclean # Nettoyer cache
Unattended upgrades (auto-updates)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
RHEL/CentOS
sudo yum update # Mettre à jour
sudo yum upgrade # Upgrade
sudo yum clean all # Nettoyer cache
Vérifier si reboot nécessaire
cat /var/run/reboot-required # Ubuntu
sudo needs-restarting -r # RHEL/CentOS 7+
Audit de sécurité
Lynis : audit de sécurité
sudo apt install lynis
sudo lynis audit system # Audit complet
Vérifier ports ouverts
sudo ss -tulpn # Ports en écoute
sudo netstat -tulpn # Alternative
Vérifier utilisateurs sans mot de passe
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
Vérifier fichiers SUID
find / -perm -4000 -type f 2>/dev/null
Vérifier fichiers world-writable
find / -type f -perm -002 2>/dev/null
Dernières connexions
last | head -20
lastb | head -20 # Tentatives échouées
—
Performance et optimisation
CPU et load
Load average
uptime # Load 1, 5, 15 min
cat /proc/loadavg
Nombre de CPU
nproc # Nombre de CPU
lscpu # Infos CPU détaillées
cat /proc/cpuinfo # Toutes infos CPU
Top processus CPU
ps aux --sort=-%cpu | head -10
top -b -n 1 | head -20
Mémoire
Usage mémoire
free -h # Vue d'ensemble
cat /proc/meminfo # Détails
Top processus mémoire
ps aux --sort=-%mem | head -10
Cache
sync # Flush filesystem buffers
echo 3 > /proc/sys/vm/dropcaches # Clear cache (root)
1 = pagecache, 2 = dentries/inodes, 3 = both
Disque I/O
Iostat
iostat -x 2 # Extended, refresh 2s
iostat -xz 2 # Exclure devices inactifs
Iotop : top pour I/O (installer: apt install iotop)
sudo iotop # Interactif
sudo iotop -o # Seulement processus actifs
Identifier processus I/O intensifs
sudo iotop -b -n 1 | head -20
Réseau
Bande passante
ifconfig eth0 # RX/TX bytes
ip -s link show eth0 # Statistiques
Iftop : bandwidth monitoring (installer: apt install iftop)
sudo iftop # Interactif
sudo iftop -i eth0 # Interface spécifique
Nethogs : par processus (installer: apt install nethogs)
sudo nethogs # Usage réseau par processus
Optimisation système
Swappiness (tendance à swapper)
cat /proc/sys/vm/swappiness # Valeur actuelle (défaut 60)
sudo sysctl vm.swappiness=10 # Temporaire
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf # Permanent
File descriptors
ulimit -n # Limite actuelle
sudo nano /etc/security/limits.conf
soft nofile 65536
hard nofile 65536
Kernel parameters
sudo sysctl -a # Tous paramètres
sudo sysctl net.ipv4.ipforward # Paramètre spécifique
sudo sysctl -w net.ipv4.ipforward=1 # Modifier temporaire
sudo nano /etc/sysctl.conf # Permanent
sudo sysctl -p # Recharger config
—
Bonnes pratiques
Sécurité
Performance
Maintenance
—
Pièges courants à éviter
rm -rf / ou rm -rf /*dd (peut effacer disque)/etc/fstab sans backup (peut rendre système non bootable)—
Ressources essentielles
Man pages
man command # Manuel d'une commande
man -k keyword # Rechercher dans man pages
info command # Info pages (alternative)
command --help # Aide rapide
Chemins importants
/etc/ # Configuration système
/var/log/ # Logs
/var/www/ # Web files (défaut)
/home/ # Home directories
/root/ # Home de root
/tmp/ # Fichiers temporaires
/opt/ # Applications optionnelles
/usr/local/ # Programmes installés localement
—
Version : Compatible Linux Kernel 5.x/6.x, systemd, distributions modernes
Dernière mise à jour : Décembre 2024
Ce guide couvre les commandes essentielles et avancées pour l’administration de serveurs Linux en production.