Cours Complet – Fondamentaux Linux 🐧
📋 Module 1.1 : Administration Linux – Fondamentaux (40h)
Table des matières
- 1. Introduction à Linux
- 2. Installation et Configuration
- 3. Navigation en Ligne de Commande
- 4. Gestion des Fichiers et Répertoires
- 5. Éditeurs de Texte
- 6. Permissions et Sécurité
- 7. Gestion des Utilisateurs et Groupes
- 8. Scripts Bash
- 9. TP Pratiques (À compléter)
1. Introduction à Linux
1.1 Qu’est-ce que Linux ?
Linux est un système d’exploitation **open source** basé sur Unix, créé par Linus Torvalds en 1991.
Caractéristiques principales
- Open Source : Code source librement accessible et modifiable.
- Multiutilisateur : Plusieurs utilisateurs peuvent travailler simultanément.
- Multitâche : Exécution de plusieurs processus en parallèle.
- Portable : Fonctionne sur diverses architectures matérielles.
- Sécurisé : Système de permissions robuste.
- Stable : Utilisé dans 90% des serveurs web mondiaux.
Architecture Linux
┌─────────────────────────────────────┐
│ Applications │
│ (Firefox, Apache, MySQL) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Shell (Interface) │
│ (Bash, Zsh, Fish) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Noyau Linux │
│ (Kernel - Gestion des ressources) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Matériel │
│ (CPU, RAM, Disques, Réseau) │
└─────────────────────────────────────┘
1.2 Distributions Linux
Une distribution (ou « distro ») est un ensemble comprenant le noyau Linux, des outils système et des applications.
Distributions principales pour serveurs
| Distribution | Caractéristiques | Usage recommandé |
|---|---|---|
| Ubuntu Server | Facile, bien documentée, LTS | Débutants, cloud, Docker |
| Debian | Très stable, conservatrice | Serveurs de production |
| CentOS / Rocky Linux | Clone gratuit de RHEL | Entreprises, compatibilité RHEL |
| Red Hat Enterprise Linux | Support commercial, certifiée | Grandes entreprises |
| Alpine Linux | Très légère (5 MB) | Conteneurs Docker |
Versions LTS (Long Term Support)
- Ubuntu LTS : Support de 5 ans (ex: Ubuntu 22.04 LTS jusqu’en 2027)
- Mises à jour de sécurité garanties.
- Recommandé pour la production.
1.3 Philosophie Unix/Linux
Principes fondamentaux
- Tout est fichier : périphériques, processus, configurations.
- Programmes simples : chaque outil fait une chose et la fait bien.
- Composition : combiner des outils simples via pipes.
- Texte brut : privilégier les formats texte pour la configuration.
Exemple de composition
# Lister les fichiers, filtrer, compter
ls -l | grep ".txt" | wc -l
2. Installation et Configuration
2.1 Installation d’Ubuntu Server
Prérequis matériels minimaux
- CPU : 1 GHz ou plus
- RAM : 2 GB minimum (4 GB recommandé)
- Disque : 25 GB minimum
- Réseau : Carte réseau
Étapes d’installation
1. Téléchargement
- Site officiel : https://ubuntu.com/download/server
- Choisir la version LTS (ex: Ubuntu 22.04 LTS)
- Télécharger l’image ISO (environ 1.4 GB)
2. Création de média bootable
# Sous Linux avec dd
sudo dd if=ubuntu-22.04-server.iso of=/dev/sdX bs=4M status=progress
Ou utiliser Rufus (Windows) / Etcher (multiplateforme)
3. Installation pas à pas
- Démarrer sur le média d’installation
- Choisir la langue : English (recommandé pour les serveurs)
- Configuration réseau : DHCP ou IP statique
- Configuration du disque : Utiliser le disque entier ou partitionnement manuel
- Profil utilisateur : créer un compte administrateur
- Installation OpenSSH Server : OUI (pour l’accès à distance)
- Snaps : facultatif (Docker, etc.)
4. Premier démarrage
# Mise à jour du système
sudo apt update
sudo apt upgrade -y
# Installation d'outils essentiels
sudo apt install -y vim curl wget git htop net-tools
2.2 Configuration initiale
Configuration réseau statique
Méthode moderne avec Netplan (Ubuntu 18.04+)
Fichier : /etc/netplan/00-installer-config.yaml
network:
version: 2
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
Application de la configuration :
sudo netplan apply
Configuration du hostname
# Voir le hostname actuel
hostname
# Changer le hostname
sudo hostnamectl set-hostname mon-serveur
# Vérifier
hostnamectl
Fichier /etc/hosts
# Éditer /etc/hosts
sudo vim /etc/hosts
# Contenu
127.0.0.1 localhost
192.168.1.100 mon-serveur.local mon-serveur
2.3 Connexion SSH
Installation et configuration SSH
# Installation du serveur SSH
sudo apt install openssh-server
# Démarrage du service
sudo systemctl start ssh
sudo systemctl enable ssh
# Vérification
sudo systemctl status ssh
Configuration sécurisée SSH
Fichier : /etc/ssh/sshd_config
# Port personnalisé (optionnel)
Port 2222
# Désactiver root login
PermitRootLogin no
# Authentification par clé uniquement (recommandé)
PasswordAuthentication no
PubkeyAuthentication yes
# Timeout
ClientAliveInterval 300
ClientAliveCountMax 2
Redémarrage du service :
sudo systemctl restart ssh
Connexion depuis un client
# Connexion simple
ssh utilisateur@192.168.1.100
# Avec port personnalisé
ssh -p 2222 utilisateur@192.168.1.100
# Avec clé SSH
ssh -i ~/.ssh/ma_cle utilisateur@192.168.1.100
Génération de clés SSH
# Sur le client ssh-keygen -t rsa -b 4096 -C "mon-email@example.com" # Copier la clé publique sur le serveur ssh-copy-id utilisateur@192.168.1.100 # Ou manuellement cat ~/.ssh/id_rsa.pub | ssh utilisateur@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
3. Navigation en Ligne de Commande
3.1 Structure du système de fichiers Linux
/ (racine)
├── bin → Binaires essentiels
├── boot → Fichiers de démarrage
├── dev → Fichiers de périphériques
├── etc → Fichiers de configuration
├── home → Répertoires utilisateurs
│ ├── user1
│ └── user2
...
└── var → Données variables
├── log → Journaux système
├── www → Sites web
└── mail → Mails
3.2 Chemins absolus vs relatifs
Chemin absolu
Commence par / (racine)
cd /home/user/documents
cd /etc/apache2
Chemin relatif
Relatif au répertoire courant
cd documents # Si on est dans /home/user
cd ../autre_user # Remonte d'un niveau puis descend
Raccourcis importants
.→ Répertoire courant..→ Répertoire parent~→ Répertoire home de l’utilisateur-→ Répertoire précédent
3.3 Commandes de base
pwd (Print Working Directory)
pwd
# Affiche : /home/user/documents
ls (List)
# Liste détaillée + cachés + taille humaine + trié par date
ls -lhta
Sortie de ls -l expliquée :
-rw-r--r-- 1 user group 4096 Oct 17 10:30 fichier.txt
│││││││││ │ │ │ │ │ └─ Nom
│││││││││ │ │ │ └─ Date de modification
│││││││││ │ │ └─ Taille (octets)
...
└─ Type (- fichier, d répertoire, l lien)
cd (Change Directory)
# Aller au home
cd ~
# Répertoire précédent
cd -
mkdir (Make Directory)
# Créer une arborescence
mkdir -p projet/src/main/java
# Avec permissions spécifiques
mkdir -m 755 public_html
rmdir (Remove Directory)
# Supprimer un répertoire vide
rmdir mon_dossier
touch
# Créer un fichier vide
touch fichier.txt
cat (Concatenate)
# Afficher le contenu
cat fichier.txt
# Numéroter les lignes
cat -n fichier.txt
more et less
# Pagination avancée (less - recommandé)
less fichier.txt
head et tail
# Suivre en temps réel (logs)
tail -f /var/log/syslog
# Afficher les 50 dernières lignes et suivre
tail -n 50 -f /var/log/apache2/access.log
4. Gestion des Fichiers et Répertoires
4.1 Copie et déplacement
cp (Copy)
# Copier un répertoire (récursif) avec conservation des attributs
cp -rp dossier_source/ dossier_destination/
# Copie interactive (demande confirmation)
cp -i fichier.txt destination.txt
mv (Move / Rename)
# Renommer un fichier
mv ancien_nom.txt nouveau_nom.txt
# Déplacer un fichier
mv fichier.txt /home/user/documents/
4.2 Suppression
rm (Remove)
# Supprimer un répertoire et son contenu (récursif)
rm -r dossier/
# Supprimer récursivement avec force
rm -rf dossier/
# ⚠️ DANGER : Ne JAMAIS faire
rm -rf /
4.3 Recherche de fichiers
find
# Rechercher par taille (> 100 MB)
find /var -size +100M
# Rechercher par date de modification (modifiés dans les 7 derniers jours)
find /var/log -mtime -7
# Rechercher et supprimer
find /tmp -name "*.tmp" -delete
locate
# Recherche rapide (base de données)
locate fichier.txt
# Mettre à jour la base de données
sudo updatedb
which et whereis
# Trouver l'emplacement d'une commande
which python3
# /usr/bin/python3
4.4 Liens symboliques et durs
ln (Link)
Lien symbolique (symlink)
# Créer un lien symbolique
ln -s /chemin/vers/fichier lien_vers_fichier
Lien dur (hard link)
# Créer un lien dur (même inode)
ln fichier_original lien_dur
5. Éditeurs de Texte
5.1 Vim
Vim est l’éditeur le plus puissant et répandu sur Linux. Il fonctionne avec des modes.
Modes de Vim
- Mode Normal : Navigation et commandes (défaut)
- Mode Insertion : Édition de texte (touche
i) - Mode Commande : Exécution de commandes (touche
:)
Commandes essentielles
# Passer en mode Insertion : i, a, o, O
# Retour en mode Normal : ESC
# Suppression de la ligne : dd
# Copier/Coller la ligne : yy, p
# Sauvegarder et quitter :
:wq → Sauvegarder et quitter
:q! → Quitter sans sauvegarder
Rechercher et remplacer
# Remplacer globalement dans tout le fichier
:%s/ancien/nouveau/g → Remplacer dans tout le fichier
5.2 Nano
Nano est plus simple et intuitif. Les commandes sont affichées en bas (^ signifie Ctrl).
Utilisation de base
# Ouvrir un fichier
nano fichier.txt
# Commandes principales
Ctrl+O → Sauvegarder (WriteOut)
Ctrl+X → Quitter
6. Permissions et Sécurité
6.1 Système de permissions Unix
Types de permissions
r(read) = 4 : Lecturew(write) = 2 : Écriturex(execute) = 1 : Exécution
Catégories
u(user) : Propriétaireg(group) : Groupeo(others) : Autres
Notation octale
| Octal | Permissions | Signification |
|---|---|---|
| 7 | rwx | Tous les droits |
| 6 | rw- | Lecture + Écriture |
| 4 | r– | Lecture |
6.2 Commande chmod
Notation octale
# Donner 755 (rwxr-xr-x)
chmod 755 script.sh
# Récursif
chmod -R 755 /var/www/
Notation symbolique
# Ajouter exécution au propriétaire
chmod u+x script.sh
# Retirer écriture au groupe
chmod g-w fichier.txt
6.3 Commande chown
# Changer propriétaire et groupe (récursif)
sudo chown -R www-data:www-data /var/www/html/
6.5 umask
umask définit les permissions par défaut lors de la création de fichiers (Fichiers : 666 – umask ; Répertoires : 777 – umask).
# Voir umask actuel
umask
# 0022
6.6 Permissions spéciales
- Sticky Bit (
t) : Sur répertoire, empêche la suppression des fichiers par d’autres utilisateurs. - SUID (
s) : Exécuter avec les droits du propriétaire (ex:passwd). - SGID (
s) : Sur répertoire, fichiers créés héritent du groupe.
7. Gestion des Utilisateurs et Groupes
7.1 Fichiers de configuration
/etc/passwd: Infos utilisateur (login:x:UID:GID:comment:home:shell)/etc/shadow: Mots de passe chiffrés (accès root)/etc/group: Infos groupes (nom:x:GID:membres)
7.2 Gestion des utilisateurs
useradd – Créer un utilisateur
# Création complète
sudo useradd -m -s /bin/bash -c "John Doe" -G sudo,developers john
usermod – Modifier un utilisateur
# Ajouter à des groupes
sudo usermod -aG docker,developers john
# Verrouiller le compte
sudo usermod -L john
userdel – Supprimer un utilisateur
# Supprimer l'utilisateur ET son home
sudo userdel -r john
7.3 Gestion des groupes
# Créer un groupe
sudo groupadd developers
# Ajouter un utilisateur au groupe
sudo gpasswd -a john developers
7.4 Commandes de consultation
# Voir ses propres identités
id
# Voir qui est connecté
who / w
# Historique des connexions
last
7.5 Commutations d’utilisateur
su - john: Devenir l’utilisateurjohn(avec environnement complet).sudo commande: Exécuter une commande en tant que root.sudo -i: Devenir root temporairement.
Configuration sudo (/etc/sudoers)
⚠️ Ne jamais éditer directement ! Utiliser :
sudo visudo
Exemple de configuration :
# Donner tous les droits
john ALL=(ALL:ALL) ALL
# Par groupe
%sudo ALL=(ALL:ALL) ALL
8. Scripts Bash
8.1 Introduction aux scripts
Structure de base :
#!/bin/bash
# Shebang : indique l'interpréteur à utiliser
# Commandes
echo "Hello World"
Exécution :
chmod +x mon_script.sh
./mon_script.sh
8.2 Variables
# Déclaration de variables (pas d'espace autour du =)
nom="John"
echo "Bonjour $nom"
# Variables spéciales (Arguments)
echo "Nom du script: $0"
echo "Premier argument: $1"
echo "Nombre d'arguments: $#"
# Code de retour de la dernière commande
echo "Code retour: $?"
8.3 Entrées utilisateur
# Lecture avec prompt
read -p "Votre âge: " age
# Lecture sans affichage (mot de passe)
read -sp "Mot de passe: " password
echo
8.4 Opérations arithmétiques
# Méthode 1: $(( ))
a=10
b=5
somme=$((a + b))
echo "Somme: $somme"
# Incrémentation
i=0
((i++))
9. TP Pratiques
Cette section est réservée aux travaux pratiques basés sur les chapitres 1 à 8.