30 min de lecture · 6 396 mots

Linux Serveur – Commandes système et administration

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

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/vg
data/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 $BACKUP
DIR -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/id
ed25519.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é

  • Toujours utiliser SSH avec clés (pas de passwords)
  • Changer le port SSH par défaut
  • Configurer firewall (UFW/iptables)
  • Installer fail2ban
  • Mises à jour régulières
  • Sauvegardes régulières
  • Monitoring actif
  • Permissions appropriées (principe du moindre privilège)
  • Désactiver services inutiles
  • Audits de sécurité réguliers
  • Performance

  • Monitorer régulièrement (CPU, RAM, disque, réseau)
  • Optimiser swappiness
  • Nettoyer logs régulièrement
  • Utiliser logrotate
  • Optimiser services (désactiver inutiles)
  • Utiliser caching approprié
  • Partitionnement approprié
  • Choisir filesystem adapté (ext4, xfs, btrfs)
  • Maintenance

  • Sauvegardes régulières testées
  • Documentation des changements
  • Monitoring et alertes
  • Rotation de logs
  • Nettoyage régulier (/tmp, caches, logs)
  • Vérifier espace disque
  • Tester restauration backups
  • Planifier maintenance préventive
  • Pièges courants à éviter

  • Ne jamais faire rm -rf / ou rm -rf /*
  • Toujours vérifier avant dd (peut effacer disque)
  • Ne pas chmod 777 (insécure)
  • Ne pas désactiver SELinux/AppArmor sans raison
  • Ne pas modifier /etc/fstab sans backup (peut rendre système non bootable)
  • Toujours tester commandes destructives avec –dry-run quand disponible
  • Ne jamais stocker credentials en clair
  • Ne pas exposer services inutiles sur Internet
  • Toujours avoir une stratégie de backup
  • Ne pas ignorer les mises à jour de sécurité
  • 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.

    Une remarque, un retour ?

    Cet article est vivant — corrections, contre-arguments et retours de production sont les bienvenus. Trois canaux, choisissez celui qui vous convient.