Publié le : 10/07/2025 à 10:00 Mis à jour le : 05/08/2026 à 12:09 Vues : 526

Comprenez les différences entre Linux et Unix, explorez les distributions (serveur, desktop, light), la sécurité (SELinux, AppArmor), systemd et maîtrisez les commandes essentielles.

1. Linux vs Unix : Les Origines d'un Géant

Comprendre la filiation et les différences fondamentales entre le système d'exploitation historique Unix et son descendant open-source, Linux.

Qu'est-ce qu'Unix ?

Unix est un système d'exploitation (OS) multi-utilisateurs et multitâche développé dans les années 1970 par les laboratoires Bell d'AT&T. Il a introduit des concepts révolutionnaires comme le système de fichiers hiérarchique et la philosophie des 'petits outils' (chaque programme fait une seule chose, mais la fait bien). Unix est un standard propriétaire ; des systèmes comme macOS, AIX (IBM) ou Solaris (Oracle) sont des descendants certifiés Unix.

Qu'est-ce que Linux ?

Linux est en réalité le nom du noyau (kernel) créé par Linus Torvalds en 1991. Il a été conçu comme une alternative libre et open-source au noyau Unix. Un système d'exploitation complet basé sur le noyau Linux est appelé une distribution GNU/Linux, car il combine le noyau Linux avec les outils et utilitaires du projet GNU (comme le shell Bash).

Tableau des Différences Clés

CritèreUnixLinux
LicencePropriétaire, code source ferméOpen Source (GPL)
CoûtGénéralement payant et lié au matérielGratuit (sauf pour les versions avec support commercial)
PortabilitéLimité à des architectures spécifiquesExtrêmement portable (des serveurs aux smartphones)
ÉcosystèmeContrôlé par un vendeur uniqueCommunautaire, avec des milliers de contributeurs

En résumé, Linux n'est pas Unix, mais un système 'de type Unix' (Unix-like) qui en respecte la philosophie et les standards (POSIX).

2. Le Monde des Distributions Linux

Une distribution Linux est un système d'exploitation complet assemblé autour du noyau Linux. Elle inclut un gestionnaire de paquets, des environnements de bureau et une sélection de logiciels.

Distributions Gratuites vs Payantes

La différence ne réside pas dans le coût du logiciel lui-même (qui reste open-source), mais dans le support commercial.

  • Gratuites (Communautaires) : Développées et maintenues par une communauté. Le support se fait via des forums, des listes de diffusion. Exemples : Debian, Ubuntu, Fedora, Arch Linux.
  • Payantes (Commerciales) : Offrent des contrats de support, des garanties de stabilité, des certifications et des cycles de vie étendus, essentiels pour les entreprises. Exemples : Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES).

Les Grandes Familles de Distributions

Les distributions sont souvent regroupées en familles basées sur leur système de gestion de paquets.

FamilleGestionnaire de PaquetsDistributions Notables
Debianapt / dpkg (fichiers .deb)Debian, Ubuntu, Linux Mint
Red Hatdnf / yum / rpm (fichiers .rpm)Fedora, Red Hat Enterprise Linux (RHEL), CentOS Stream, Rocky Linux
ArchpacmanArch Linux, Manjaro
SUSEzypperopenSUSE, SLES

Serveur vs Desktop

La plupart des distributions majeures proposent des versions optimisées pour deux usages principaux :

  • Version Desktop : Conçue pour les ordinateurs personnels. Elle inclut une interface graphique (environnement de bureau comme GNOME, KDE, ou XFCE), des logiciels de bureautique, des navigateurs web et des outils multimédias. L'accent est mis sur la facilité d'utilisation et l'expérience utilisateur. Exemples : Ubuntu Desktop, Fedora Workstation, Linux Mint.
  • Version Serveur : Optimisée pour héberger des services (web, bases de données, etc.). Elle est généralement dépourvue d'interface graphique par défaut pour économiser les ressources. La stabilité, la sécurité et la performance sur le long terme sont les priorités. Exemples : Ubuntu Server, Debian, RHEL.

Complète vs Light (pour la conteneurisation)

Dans le monde de la conteneurisation (avec Docker par exemple), la légèreté est reine. Une image de conteneur doit être la plus petite possible pour accélérer les déploiements et réduire la surface d'attaque.

  • Distributions Complètes : Une installation standard (même serveur) inclut de nombreux outils, documentations et services qui sont inutiles dans un conteneur.
  • Distributions 'Light' : Des versions minimalistes ont été créées spécifiquement pour les conteneurs. Elles ne contiennent que le strict nécessaire pour exécuter une application. L'exemple le plus célèbre est Alpine Linux, qui est basé sur `musl libc` et `BusyBox`, et dont l'image de base pèse seulement quelques mégaoctets.

3. Sécurité : SELinux et AppArmor

Linux intègre des modules de sécurité avancés (LSM) pour renforcer le contrôle d'accès au-delà des permissions traditionnelles.

SELinux (Security-Enhanced Linux)

Développé à l'origine par la NSA, SELinux est un système de contrôle d'accès obligatoire (MAC) principalement utilisé par les distributions de la famille Red Hat (RHEL, Fedora, CentOS). Il fonctionne sur la base de politiques de sécurité qui définissent précisément ce que chaque processus a le droit de faire. Même un processus `root` peut être bloqué par SELinux.

Commandes de base :

  • Vérifier le statut de SELinux :
    sestatus
    Exemple de sortie de la commande sestatus
  • Changer le mode (temporairement) :
    • sudo setenforce 1 : Mode `Enforcing` (bloque les actions non autorisées).
    • sudo setenforce 0 : Mode `Permissive` (logue les actions non autorisées mais ne les bloque pas).
  • Changer le contexte d'un fichier : Si un serveur web ne peut pas lire un fichier à cause de SELinux, c'est souvent un problème de contexte. On peut le corriger avec `chcon`.
    # Donner le contexte httpd_sys_content_t à un fichier pour qu'Apache puisse le lire
    sudo chcon -t httpd_sys_content_t /var/www/html/index.html

AppArmor (Application Armor)

AppArmor est l'alternative à SELinux, utilisée par défaut dans les distributions de la famille Debian (Debian, Ubuntu). Il est considéré comme plus simple à administrer. AppArmor attache un profil de sécurité à chaque application, listant les fichiers et les permissions autorisés.

Commandes de base :

  • Vérifier le statut d'AppArmor :
    sudo aa-status
  • Exemple de profil (simplifié) pour `/usr/bin/ping` : Un profil AppArmor est un fichier texte qui définit les permissions. Voici un extrait :
    # /etc/apparmor.d/usr.bin.ping
    
    profile /usr/bin/ping flags=(attach_disconnected) {
      #include <abstractions/base>
      
      # Autorise la lecture du binaire ping lui-même
      /bin/ping r,
      
      # Autorise l'utilisation des capacités réseau nécessaires pour ping
      capability net_raw,
      capability setuid,
    
      # ... autres règles
    }
    Ce profil garantit que le programme `ping` ne peut faire que ce pour quoi il est conçu, et rien d'autre.

4. Gestion des Services : systemd et systemctl

Comprendre le rôle de l'init system moderne de Linux et comment interagir avec lui.

Qu'est-ce que systemd ?

systemd est le système d'initialisation (init system) et le gestionnaire de services utilisé par la grande majorité des distributions Linux modernes. Il est le premier processus lancé au démarrage (avec le PID 1) et est responsable du démarrage de tous les autres services (réseau, SSH, base de données, etc.) de manière parallèle et efficace.

Le rôle de systemctl

systemctl est l'outil en ligne de commande principal pour interagir avec `systemd`. Il permet aux administrateurs de gérer les 'units' de systemd (principalement des services, mais aussi des points de montage, des timers, etc.).

Voici les commandes `systemctl` les plus courantes pour un service nommé `nginx.service` :

  • Démarrer un service :
    sudo systemctl start nginx
  • Arrêter un service :
    sudo systemctl stop nginx
  • Redémarrer un service :
    sudo systemctl restart nginx
  • Recharger la configuration sans couper le service :
    sudo systemctl reload nginx
  • Vérifier le statut d'un service (actif, inactif, erreurs) :
    systemctl status nginx
    Exemple de sortie de systemctl status
  • Activer un service au démarrage du système :
    sudo systemctl enable nginx
  • Désactiver un service au démarrage :
    sudo systemctl disable nginx

5. Les Commandes Essentielles à Connaître

Maîtriser la ligne de commande est indispensable pour tout administrateur système. Voici une sélection des commandes les plus utiles. La plupart des commandes partagent aussi des options communes comme `--help` pour afficher l'aide ou `--version` pour connaître leur version.

Comprendre les Options et Paramètres

La plupart des commandes Linux acceptent des options (aussi appelées flags ou switches) qui modifient leur comportement. Il existe deux formats :

  • Options courtes : Précédées d'un seul tiret (-), elles sont composées d'une seule lettre (ex: -l). On peut les combiner : ls -l -a est équivalent à ls -la.
  • Options longues : Précédées de deux tirets (--), elles sont plus descriptives (ex: --all). Elles ne peuvent pas être combinées.

Un paramètre (ou argument) est une information que l'on passe à la commande, comme un nom de fichier ou un répertoire (ex: /var/log dans cd /var/log).

Navigation et Gestion de Fichiers

  • ls : Lister le contenu d'un répertoire.
    Structure : ls [OPTIONS] [CHEMIN]
    Indispensable : La commande elle-même. Le CHEMIN est optionnel (par défaut, le répertoire courant).
    # Lister les fichiers avec détails (permissions, taille, date)
    ls -l
    
    # Lister tous les fichiers, y compris les fichiers cachés
    ls -la
    
    # Lister le contenu d'un répertoire spécifique
    ls /var/log
  • cd : Changer de répertoire.
    Structure : cd [CHEMIN]
    Indispensable : La commande elle-même. Si aucun CHEMIN n'est fourni, la commande redirige vers le répertoire personnel de l'utilisateur.
    # Aller à un chemin spécifique
    cd /var/log
    
    # Aller au répertoire personnel
    cd
    
    # Remonter d'un niveau
    cd ..
    
    # Aller au répertoire précédent
    cd -
  • pwd : Afficher le chemin du répertoire courant.
    Structure : pwd
    Indispensable : La commande ne prend généralement pas d'argument.
    # Affiche le chemin complet du répertoire où vous vous trouvez
    pwd
  • cp : Copier des fichiers ou des répertoires.
    Structure : cp [OPTIONS] SOURCE DESTINATION
    Indispensable : La SOURCE (ce que vous copiez) et la DESTINATION (où vous le copiez).
    # Copier un fichier
    cp source.txt destination.txt
    
    # Copier un répertoire récursivement (indispensable pour les dossiers)
    cp -r /mon/repertoire /ma/destination
    
    # Copier avec une barre de progression (nécessite 'rsync' ou 'pv')
    # Alternative simple : copier en mode verbeux
    cp -v mon_gros_fichier.zip /mnt/backup/
  • mv : Déplacer ou renommer un fichier/répertoire.
    Structure : mv [OPTIONS] SOURCE DESTINATION
    Indispensable : La SOURCE et la DESTINATION. Le comportement (déplacer ou renommer) dépend de la destination.
    # Renommer un fichier (la destination est un nouveau nom dans le même répertoire)
    mv ancien_nom.txt nouveau_nom.txt
    
    # Déplacer un fichier (la destination est un répertoire)
    mv mon_fichier.txt /autre/repertoire/
  • rm : Supprimer des fichiers ou répertoires.
    Structure : rm [OPTIONS] FICHIER...
    Indispensable : Le nom du ou des FICHIER(s) à supprimer. Soyez extrêmement prudent avec cette commande.
    # Supprimer un fichier (demande souvent confirmation)
    rm mon_fichier.txt
    
    # Forcer la suppression sans confirmation
    rm -f mon_fichier.txt
    
    # Supprimer un répertoire et son contenu récursivement (TRÈS DANGEREUX)
    rm -rf /mon/repertoire
  • mkdir : Créer un répertoire.
    Structure : mkdir [OPTIONS] NOM_DU_RÉPERTOIRE...
    Indispensable : Le nom du répertoire à créer.
    # Créer un répertoire simple
    mkdir mon_dossier
    
    # Créer des répertoires parents s'ils n'existent pas
    mkdir -p /chemin/vers/nouveau/dossier

Recherche et Manipulation de Texte

  • grep : Rechercher un motif dans un texte ou un fichier.
    Structure : grep [OPTIONS] MOTIF [FICHIER...]
    Indispensable : Le MOTIF à rechercher. Si aucun FICHIER n'est spécifié, grep lit l'entrée standard (utile avec les pipes |).
    # Rechercher 'error' dans un fichier de log (insensible à la casse)
    grep -i 'error' /var/log/app.log
    
    # Compter le nombre de lignes contenant 'error'
    grep -c 'error' /var/log/app.log
    
    # Afficher les 5 lignes après une correspondance
    grep -A 5 'error' /var/log/app.log
    
    # Utiliser avec un pipe pour filtrer la sortie d'une autre commande
    ps aux | grep 'nginx'
  • find : Rechercher des fichiers et répertoires.
    Structure : find [CHEMIN] [EXPRESSION]
    Indispensable : Le CHEMIN de départ de la recherche (ex: . pour le répertoire courant) et une EXPRESSION de test (ex: -name "*.log").
    # Trouver tous les fichiers .log dans le répertoire courant
    find . -name "*.log"
    
    # Trouver les répertoires (type d) uniquement
    find /home -type d -name "images"
    
    # Trouver les fichiers modifiés il y a moins de 24h
    find . -mtime -1
    
    # Exécuter une commande sur les fichiers trouvés (ici, les supprimer)
    find . -name "*.tmp" -exec rm {} \;
  • cat : Afficher le contenu d'un fichier. Idéal pour les fichiers courts.
    Structure : cat [FICHIER...]
    Indispensable : Le nom du fichier à afficher.
    # Afficher les informations sur la distribution Linux
    cat /etc/os-release
    
    # Concaténer deux fichiers et rediriger la sortie vers un troisième
    cat fichier1.txt fichier2.txt > fichier_combine.txt
  • less / more : Afficher le contenu d'un fichier page par page. `less` est plus moderne et permet de naviguer en avant et en arrière.
    Structure : less [FICHIER]
    Indispensable : Le nom du fichier à parcourir.
    # Parcourir un long fichier de log (quitter avec la touche 'q')
    less /var/log/syslog
  • head / tail : Afficher le début ou la fin d'un fichier.
    Structure : tail [OPTIONS] [FICHIER]
    Indispensable : Le nom du fichier.
    # Afficher les 20 premières lignes d'un fichier
    head -n 20 /var/log/syslog
    
    # Afficher les 10 dernières lignes d'un log en temps réel
    tail -f /var/log/syslog

Utilisateurs et Groupes

Dans un système Linux, la gestion des utilisateurs et des groupes est fondamentale pour la sécurité et l'organisation des permissions. Chaque fichier et processus est associé à un utilisateur et à un groupe, ce qui détermine qui peut y accéder et quelles actions peuvent être effectuées.

  • Utilisateur (User) : Représente une entité individuelle (personne ou service) qui interagit avec le système. Chaque utilisateur possède un identifiant unique (UID) et un répertoire personnel.
  • Groupe (Group) : Une collection d'utilisateurs. Les permissions peuvent être attribuées à un groupe, ce qui simplifie la gestion des accès pour plusieurs utilisateurs ayant les mêmes besoins. Chaque groupe possède un identifiant unique (GID).

Les utilisateurs peuvent appartenir à plusieurs groupes. Un groupe principal est assigné à l'utilisateur lors de sa création, et il peut être membre de groupes secondaires.

  • id : Affiche les identifiants (utilisateur et groupe) d'un utilisateur.
    Structure : id [OPTIONS] [UTILISATEUR]
    Indispensable : La commande elle-même. Si aucun utilisateur n'est spécifié, elle affiche les informations de l'utilisateur courant.
    # Afficher les informations de l'utilisateur courant
    id
    
    # Afficher uniquement l'UID
    id -u
    
    # Afficher les informations d'un autre utilisateur
    id www-data
  • useradd : Crée un nouvel utilisateur.
    Structure : useradd [OPTIONS] LOGIN
    Indispensable : Le nom de l'utilisateur (LOGIN) à créer. Souvent utilisé avec -m pour créer le répertoire personnel.
    # Créer un utilisateur 'newuser' avec son répertoire personnel
    sudo useradd -m newuser
    
    # Créer un utilisateur de service sans shell de connexion
    sudo useradd -r -s /bin/false appuser
    
    # Créer un utilisateur et l'ajouter à des groupes secondaires
    sudo useradd -m -G wheel,docker devuser

    Note : La commande adduser sur les systèmes Debian/Ubuntu est un script interactif plus convivial qui utilise useradd en arrière-plan.

  • usermod : Modifie un utilisateur existant.
    Structure : usermod [OPTIONS] LOGIN
    Indispensable : Le nom de l'utilisateur (LOGIN) et les options de modification.
    # Ajouter un utilisateur au groupe 'sudo' (pour les droits admin)
    sudo usermod -aG sudo martin
    
    # Changer le shell par défaut d'un utilisateur
    sudo usermod -s /bin/zsh martin
    
    # Verrouiller le compte d'un utilisateur
    sudo usermod -L martin
  • userdel : Supprime un utilisateur.
    Structure : userdel [OPTIONS] LOGIN
    Indispensable : Le nom de l'utilisateur (LOGIN) à supprimer.
    # Supprimer un utilisateur sans supprimer son répertoire personnel
    sudo userdel olduser
    
    # Supprimer un utilisateur ET son répertoire personnel
    sudo userdel -r olduser
  • groupadd : Crée un nouveau groupe.
    Structure : groupadd [OPTIONS] GROUPE
    Indispensable : Le nom du GROUPE à créer.
    # Créer un groupe 'developers'
    sudo groupadd developers

Gestion des Permissions

  • chmod : Modifier les permissions d'un fichier/répertoire.
    Structure : chmod [MODE] FICHIER
    Indispensable : Le MODE (notation octale comme 755 ou symbolique comme u+x) et le FICHIER cible.
    # Donner les droits d'exécution au propriétaire
    chmod u+x mon_script.sh
    
    # Utiliser la notation octale (r=4, w=2, x=1)
    # 7 (rwx) pour le propriétaire, 5 (r-x) pour le groupe, 5 (r-x) pour les autres
    chmod 755 mon_script.sh
    
    # Appliquer des permissions récursivement à un répertoire
    chmod -R 644 /var/www/html
  • chown : Changer le propriétaire et le groupe d'un fichier/répertoire.
    Structure : chown [PROPRIÉTAIRE]:[GROUPE] FICHIER
    Indispensable : Le nouveau PROPRIÉTAIRE et le FICHIER. Le groupe est optionnel.
    # Changer le propriétaire et le groupe
    chown www-data:www-data mon_fichier.txt
    
    # Changer uniquement le propriétaire
    chown martin mon_fichier.txt
    
    # Appliquer récursivement à un répertoire
    chown -R www-data:www-data /var/www/html

Gestion des Processus

  • ps : Lister les processus en cours.
    Structure : ps [OPTIONS]
    Indispensable : La commande elle-même. Les options déterminent le format de la sortie.
    # Afficher tous les processus de tous les utilisateurs avec détails
    ps aux
    
    # Afficher une arborescence des processus
    ps axjf
    
    # Filtrer pour trouver un processus spécifique (ex: nginx)
    ps aux | grep nginx
  • kill : Envoyer un signal à un processus (souvent pour le terminer).
    Structure : kill [SIGNAL] PID
    Indispensable : Le PID (Process ID) du processus à cibler. Le signal est optionnel (par défaut -15, ou TERM).
    # Terminer proprement un processus (signal TERM)
    kill 12345
    
    # Forcer la terminaison d'un processus (signal KILL)
    kill -9 12345
    
    # Envoyer un signal pour recharger la configuration (SIGHUP)
    kill -1 6789
  • top / htop : Moniteur de processus interactif. `top` est préinstallé partout. `htop` est une version améliorée, plus visuelle et plus facile à utiliser (il faut souvent l'installer : `sudo apt install htop`).
    Structure : top ou htop
    Indispensable : La commande se lance sans argument.

    Exemple de htop

Réseau et Connectivité

  • ssh : Se connecter à une machine distante de manière sécurisée.
    Structure : ssh [UTILISATEUR]@[HÔTE]
    Indispensable : L'HÔTE (adresse IP ou nom de domaine). L'utilisateur est optionnel (par défaut, l'utilisateur courant).
    # Connexion avec un utilisateur spécifique
    ssh martin@192.168.1.100
    
    # Connexion sur un port différent (ex: 2222)
    ssh -p 2222 martin@serveur.com
  • scp : Copier des fichiers de manière sécurisée via SSH.
    Structure : scp [SOURCE] [DESTINATION]
    Indispensable : La SOURCE et la DESTINATION. L'une des deux doit être distante, au format utilisateur@hote:/chemin.
    # Copier un fichier local vers une machine distante
    scp mon_fichier.txt martin@hote:/home/martin/
    
    # Copier un fichier distant vers la machine locale
    scp martin@hote:/var/log/app.log .
  • ping : Tester la connectivité réseau avec un hôte en envoyant des paquets ICMP.
    Structure : ping [OPTIONS] HÔTE
    Indispensable : L'HÔTE à tester.
    # Envoyer 4 paquets de test à google.com
    ping -c 4 google.com
  • curl : Un outil puissant pour transférer des données avec des URLs. Il est très utilisé pour interagir avec des APIs REST.
    Structure : curl [OPTIONS] URL
    Indispensable : L'URL de la ressource à interroger.
    # Afficher uniquement les en-têtes de réponse HTTP
    curl -I http://api.example.com/status
    
    # Envoyer une requête POST avec des données JSON
    curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com/data

    curl vs grpcurl : Alors que curl est le standard pour les APIs REST (basées sur HTTP), grpcurl est son équivalent pour les APIs gRPC. Il permet d'interagir avec des serveurs gRPC depuis la ligne de commande, sans avoir besoin de générer de client spécifique.

    Pour l'installer, suivez ces étapes :

    # Télécharger la dernière version (exemple v1.9.3)
    curl -sSL https://github.com/fullstorydev/grpcurl/releases/download/v1.9.3/grpcurl_1.9.3_linux_x86_64.tar.gz | tar -xz
    
    # Déplacer le binaire dans le PATH
    sudo mv grpcurl /usr/local/bin/
  • wget : Un utilitaire simple pour télécharger des fichiers depuis le web. Il est moins interactif que curl mais excellent pour le téléchargement direct.
    Structure : wget [OPTIONS] URL
    Indispensable : L'URL du fichier à télécharger.
    # Télécharger un fichier
    wget https://example.com/fichier.zip
    
    # Télécharger un fichier et le renommer
    wget -O mon_archive.zip https://example.com/fichier.zip

6. Conclusion

Linux est un écosystème vaste et puissant. La maîtrise de ces concepts et commandes de base est la première étape indispensable pour devenir un administrateur ou un développeur compétent dans cet environnement.

À propos de cet article

Auteur(s) : Martin LEKPA (Tech Lead et formateur Observabilité)

Mots-clés : Linux Unix Commandes Linux Distributions Linux Debian Ubuntu CentOS Red Hat RHEL Shell Bash ls cd grep find chmod ssh administration système SELinux AppArmor systemd systemctl

Lien copié dans le presse-papiers !