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ère | Unix | Linux |
|---|---|---|
| Licence | Propriétaire, code source fermé | Open Source (GPL) |
| Coût | Généralement payant et lié au matériel | Gratuit (sauf pour les versions avec support commercial) |
| Portabilité | Limité à des architectures spécifiques | Extrêmement portable (des serveurs aux smartphones) |
| Écosystème | Contrôlé par un vendeur unique | Communautaire, 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.
| Famille | Gestionnaire de Paquets | Distributions Notables |
|---|---|---|
| Debian | apt / dpkg (fichiers .deb) | Debian, Ubuntu, Linux Mint |
| Red Hat | dnf / yum / rpm (fichiers .rpm) | Fedora, Red Hat Enterprise Linux (RHEL), CentOS Stream, Rocky Linux |
| Arch | pacman | Arch Linux, Manjaro |
| SUSE | zypper | openSUSE, 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
- 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 :
Ce profil garantit que le programme `ping` ne peut faire que ce pour quoi il est conçu, et rien d'autre.# /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 }
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
- 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 -aest é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/logdanscd /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. LeCHEMINest 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/logcd: Changer de répertoire.Structure :
cd [CHEMIN]
Indispensable : La commande elle-même. Si aucunCHEMINn'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 pwdcp: Copier des fichiers ou des répertoires.Structure :
cp [OPTIONS] SOURCE DESTINATION
Indispensable : LaSOURCE(ce que vous copiez) et laDESTINATION(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 : LaSOURCEet laDESTINATION. 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 desFICHIER(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/repertoiremkdir: 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 : LeMOTIFà rechercher. Si aucunFICHIERn'est spécifié,greplit 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 : LeCHEMINde départ de la recherche (ex:.pour le répertoire courant) et uneEXPRESSIONde 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.txtless/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/sysloghead/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-datauseradd: Crée un nouvel utilisateur.Structure :
useradd [OPTIONS] LOGIN
Indispensable : Le nom de l'utilisateur (LOGIN) à créer. Souvent utilisé avec-mpour 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 devuserNote : La commande
addusersur les systèmes Debian/Ubuntu est un script interactif plus convivial qui utiliseuseradden 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 martinuserdel: 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 oldusergroupadd: Crée un nouveau groupe.Structure :
groupadd [OPTIONS] GROUPE
Indispensable : Le nom duGROUPEà 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 : LeMODE(notation octale comme755ou symbolique commeu+x) et leFICHIERcible.# 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/htmlchown: Changer le propriétaire et le groupe d'un fichier/répertoire.Structure :
chown [PROPRIÉTAIRE]:[GROUPE] FICHIER
Indispensable : Le nouveauPROPRIÉTAIREet leFICHIER. 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 nginxkill: Envoyer un signal à un processus (souvent pour le terminer).Structure :
kill [SIGNAL] PID
Indispensable : LePID(Process ID) du processus à cibler. Le signal est optionnel (par défaut-15, ouTERM).# 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 6789top/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 :
topouhtop
Indispensable : La commande se lance sans argument.
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.comscp: Copier des fichiers de manière sécurisée via SSH.Structure :
scp [SOURCE] [DESTINATION]
Indispensable : LaSOURCEet laDESTINATION. L'une des deux doit être distante, au formatutilisateur@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.comcurl: 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'URLde 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/datacurl vs grpcurl : Alors que
curlest le standard pour les APIs REST (basées sur HTTP),grpcurlest 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 quecurlmais excellent pour le téléchargement direct.Structure :
wget [OPTIONS] URL
Indispensable : L'URLdu 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.