Appearance
Gestion des fichiers et répertoires
Table des matières
Notion d’inode
Un inode (index node) est une structure de données qui stocke les métadonnées d'un fichier ou répertoire dans un système de fichiers Unix/Linux : permissions, propriétaire, taille, dates de création/modification, et pointeurs vers les blocs de données sur le disque.
Chaque fichier est identifié par un numéro d'inode unique dans le système de fichiers, visible avec ls -i, qui permet au système de localiser et gérer le fichier indépendamment de son nom.
L’inode ne stocke pas le nom du fichier : c’est le répertoire parent qui associe chaque nom de fichier à son numéro d’inode correspondant.
Lister les fichiers et répertoires : ls
La commande ls permet de lister les fichiers et répertoires.
bash
$ ls [OPTION]... [FILE]...Les principales options à connaitre :
l: Utilise le format de sortie long (permissions, propriétaire, groupe, taille, date, nom).a: Affiche tous les fichiers, y compris les fichiers cachés (ceux commençant par.).h: Affiche la taille dans un format lisible par un humain (ex:4,0K,1,2M).r: Trie la sortie dans l’ordre inverse.t: Trie la sortie par date de dernière modification (mtime).c: Trie sur la date de changement de statut (ctime, ex: changement de permissions).R: Liste les sous-répertoires de manière récursive.i: Affiche le numéro d'inode de chaque fichier.
Il est possible de combiner les options :

- Type de fichier et Permissions (
-rwxrwxr-x)- Premier caractère (
-) : Le type de fichier.-: Fichier ordinaire.d: Répertoire (comme pour.et..).l: Lien symbolique.
- Les 9 caractères suivants (
rwxrwxr-x) : Les permissions. Elles sont divisées en trois groupes de trois :rwx(Propriétaire) : Permissions pour le propriétaire du fichier (zil).rwx(Groupe) : Permissions pour le groupe propriétaire (zil).r-x(Autres) : Permissions pour tous les autres utilisateurs.
- Signification des lettres :
r: Read (lecture).w: Write (écriture/modification).x: Execute (exécution, ou accès pour un répertoire).-: Permission absente.
- Premier caractère (
- Type de fichier et Permissions (
- Nombre de liens (6)
- Pour un fichier, c'est le nombre de "liens durs" pointant vers cet inode.
- Pour un répertoire, c'est le nombre de sous-répertoires qu'il contient + 2 (pour lui-même
.et pour le répertoire parent..).
- Propriétaire (zil)
- Le nom de l'utilisateur à qui le fichier appartient.
- Groupe (zil)
- Le nom du groupe à qui le fichier appartient.
- Taille (4,0K)
- La taille du fichier. L'option -h (human-readable) de la commande ls permet d'afficher 4,0K (kilo-octets) au lieu de 4096 (octets).
- Date et heure de dernière modification (sep. 26 14:47)
- Le mois, le jour et l'heure de la dernière fois que le contenu du fichier a été modifié.
- Nom du fichier ou du répertoire (.unFichierCaché)
- Le nom de l'élément. S'il commence par un
., c'est un fichier/répertoire caché par défaut.
Filtrer les fichiers (Globbing)
Le "globbing" permet d’utiliser des motifs pour sélectionner plusieurs fichiers.
*(zéro ou plusieurs caractères)bash$ ls *.txt # Liste les fichiers se terminant par .txt $ ls file* # Liste les fichiers commençant par "file" $ ls *config* # Liste les fichiers contenant "config"?(un seul caractère)bash$ ls file?.txt # Liste file1.txt, fileA.txt, mais pas file10.txt $ ls ??.log # Liste aa.log, b1.log, mais pas a.log[](ensemble de caractères)bash$ ls [fF]* # Liste les fichiers commençant par 'f' ou 'F' $ ls [0-9]* # Liste les fichiers commençant par un chiffre $ ls [^0-9]* # Liste les fichiers ne commençant PAS par un chiffre $ ls [a-c]*.txt # Liste a.txt, b.txt, c.txt
Naviguer dans l'arborescence : cd
La commande cd (change directory) permet de changer de répertoire de travail.
| Commande | Description |
|---|---|
cd ou cd ~ | Va dans le répertoire personnel de l'utilisateur. |
cd .. | Remonte d'un niveau dans l'arborescence. |
cd - | Revient au répertoire précédent. |
cd / | Va à la racine du système de fichiers. |
cd /chemin/absolu | Va à un chemin absolu spécifique. |
cd chemin/relatif | Va à un chemin relatif depuis le répertoire courant. |

Chemins relatifs et absolus
Chemin absolu : Commence par
/(la racine). Il est complet et ne dépend pas du répertoire courant.- Exemple :
/home/zil/Documents
- Exemple :
Chemin relatif : Ne commence pas par
/. Il est calculé à partir du répertoire courant.- Exemple : Si vous êtes dans
/home/zil, pour aller dansDocuments, le chemin relatif est simplementDocuments. Pour remonter et aller dans le répertoiretmp, le chemin serait../../tmp.
- Exemple : Si vous êtes dans
Créer des fichiers et répertoires
mkdir (make directory)
Crée un ou plusieurs répertoires.
bash
$ mkdir MonDossierPour créer une arborescence de répertoires en une seule fois, utilisez l'option -p :
bash
$ mkdir -p Projets/Web/Site1 # Crée Projets, puis Web, puis Site1
pour créer la structure suivante :
-documents/
--personnel/
--travail/
--archives/On peut utiliser la commande suivante avec l'option -p et les accolades {} :
bash
$ mkdir -p documents/{personnel,travail,archives}touch
Crée un fichier vide s'il n'existe pas, ou met à jour sa date de modification s'il existe.
bash
$ touch nouveau_fichier.txtAnalyser les fichiers : file et stat
file : Identifier le type d'un fichier
La commande file examine le contenu d'un fichier et détermine son type, indépendamment de son extension.
bash
$ file [OPTIONS] fichier...Exemples pratiques :
bash
# Identifier le type d'un fichier
$ file document.txt
document.txt: UTF-8 Unicode text
$ file photo_sans_extension
photo_sans_extension: JPEG image data, JFIF standard 1.01
$ file script
script: Bourne-Again shell script, ASCII text executable
# Analyser plusieurs fichiers
$ file *
config: ASCII text
image.jpg: JPEG image data
video.mp4: ISO Media, MP4 Base Media v1
archive.tar: POSIX tar archiveOptions utiles :
-b: Mode bref (affiche seulement le type, pas le nom du fichier)-i: Affiche le type MIME du fichier-z: Tente d'identifier les fichiers compressés
bash
$ file -b document.txt
UTF-8 Unicode text
$ file -i photo.jpg
photo.jpg: image/jpeg; charset=binarystat : Informations détaillées sur les fichiers
La commande stat affiche toutes les métadonnées d'un fichier ou répertoire, incluant les informations stockées dans l'inode.
bash
$ stat [OPTIONS] fichier...Exemple de sortie :
bash
$ stat document.txt
File: document.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 1234567 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/ zil) Gid: (1000/ zil)
Access: 2024-01-15 10:30:25.123456789 +0100
Modify: 2024-01-15 10:25:18.987654321 +0100
Change: 2024-01-15 10:25:18.987654321 +0100
Birth: -Informations affichées :
- File : Nom du fichier
- Size : Taille en octets
- Blocks : Nombre de blocs alloués sur le disque
- IO Block : Taille de bloc pour les E/S
- Device : Identifiant du périphérique
- Inode : Numéro d'inode (rappel : structure de données stockant les métadonnées)
- Links : Nombre de liens physiques vers ce fichier
- Access : Permissions et propriétaires
- Access time : Dernière lecture du fichier
- Modify time : Dernière modification du contenu
- Change time : Dernière modification des métadonnées
Copier, déplacer et renommer
cp (copy)
Copie des fichiers ou des répertoires.
bash
# Copie un fichier
$ cp source.txt destination.txt
# Copie un fichier dans un répertoire
$ cp mon_fichier.txt Documents/
# Copie multiple de fichiers dans un répertoire
$ cp fichier1.txt fichier2.txt Documents/
# Copie un répertoire et son contenu (récursivement)
$ cp -r MonDossier MonDossier_copie
# Préserve les permissions et dates lors de la copie
$ cp -p fichier.txt sauvegarde.txtmv (move)
Déplace ou renomme des fichiers et des répertoires.
bash
# Renomme un fichier
$ mv ancien_nom.txt nouveau_nom.txt
# Déplace un fichier dans un autre répertoire
$ mv mon_fichier.txt Documents/
# Déplace et renomme en même temps
$ mv rapport.docx Archives/rapport_final.docxCréer des liens : ln
La commande ln (link) permet de créer des liens entre les fichiers. Il existe deux types de liens : les liens physiques (ou durs) et les liens symboliques.
Liens Physiques (Hard Links)
Un lien physique est une nouvelle entrée (un nouveau nom) qui pointe directement vers le même inode qu'un autre fichier. Il ne s'agit pas d'une copie, mais d'un second nom pour les mêmes données sur le disque.
Caractéristiques :
- Tous les liens physiques partageant un même inode sont égaux. Il n'y a pas de "fichier original".
- Modifier le contenu via un lien modifie le fichier pour tous les autres liens.
- Supprimer un lien (
rm) ne supprime pas l'inode ni les données tant qu'au moins un autre lien pointe dessus. - On ne peut généralement pas créer de lien physique vers un répertoire.
- Un lien physique ne peut pas pointer vers un fichier situé sur un autre système de fichiers (une autre partition).
Création :
bash
# Crée un lien physique nommé 'lien_dur.txt' vers 'fichier_original.txt'
$ ln fichier_original.txt lien_dur.txtExemple :
bash
# 1. Créer un fichier
$ echo "Contenu original" > fichier.txt
# 2. Créer un lien physique
$ ln fichier.txt lien_dur
# 3. Vérifier les inodes (ils seront identiques) et le nombre de liens (colonne 2)
$ ls -li
131254 -rw-r--r-- 2 user user 17 Aug 20 10:30 fichier.txt
131254 -rw-r--r-- 2 user user 17 Aug 20 10:30 lien_dur
# 4. Si on modifie un des deux fichiers, l'autre est aussi modifiéLiens Symboliques (Symbolic Links)
Un lien symbolique (ou "symlink") est un fichier spécial qui agit comme un raccourci ou un pointeur vers un autre fichier ou répertoire. Il ne pointe pas vers un inode, mais vers le chemin d'un autre fichier.
Caractéristiques :
- C'est un fichier distinct avec son propre inode.
- Il peut pointer vers des fichiers ou des répertoires.
- Il peut traverser les systèmes de fichiers (partitions).
- Si le fichier original est supprimé, le lien symbolique devient "cassé" (il pointe vers une destination qui n'existe plus).
- La suppression du lien symbolique n'affecte pas le fichier original.
Création (avec l'option -s) :
bash
# Crée un lien symbolique nommé 'lien_sym' qui pointe vers 'fichier_original.txt'
$ ln -s fichier_original.txt lien_symExemple :
bash
# 1. Utiliser le même fichier.txt
$ ls -li fichier.txt
131254 -rw-r--r-- 1 user user 35 Aug 20 10:35 fichier.txt
# 2. Créer un lien symbolique
$ ln -s fichier.txt lien_sym
# 3. Vérifier les inodes (ils sont différents)
$ ls -li
131254 -rw-r--r-- 1 user user 35 Aug 20 10:35 fichier.txt
131256 lrwxrwxrwx 1 user user 11 Aug 20 10:36 lien_sym -> fichier.txt
# Le 'l' au début de la ligne de permissions indique un lien symbolique.Tableau comparatif
| Caractéristique | Lien Physique (Dur) | Lien Symbolique |
|---|---|---|
| Pointe vers | Inode (données) | Chemin d'un fichier |
| Inode | Partage le même inode | Possède son propre inode |
| Lien vers répertoire | Non | Oui |
| Multi-partition | Non | Oui |
| Suppression de l'original | Le lien reste valide | Le lien devient "cassé" |
| Commande | ln source cible | ln -s source cible |
Exemple d'utlilisation
À quoi servent les Liens Symboliques (ln -s) ?
Les liens symboliques sont de loin les plus utilisés. Pensez-y comme des raccourcis intelligents.
- Créer des raccourcis pratiques : C'est leur usage le plus courant. Si vous avez un dossier de projet enfoui profondément dans l'arborescence (ex:
/mnt/data/projets/2025/client-X/), vous pouvez créer un lien symbolique dans votre dossier personnel pour y accéder instantanément.
- Créer des raccourcis pratiques : C'est leur usage le plus courant. Si vous avez un dossier de projet enfoui profondément dans l'arborescence (ex:
bash
# Accès rapide à un dossier distant
$ ln -s /mnt/data/projets/2025/client-X/ ~/projet_client- Gérer les versions de logiciels : C'est une pratique très courante en administration système. Plusieurs versions d'un programme (ex: Python, Node) peuvent coexister, et un lien symbolique python pointe vers la version active. Pour changer de version, il suffit de mettre à jour le lien, sans avoir à modifier tous les scripts qui l'utilisent.
bash
# Fait pointer la commande 'node' vers la version 18
$ sudo ln -s /opt/node-v18.17.1/bin/node /usr/local/bin/node- Organiser les fichiers sur plusieurs disques : Si votre disque principal (/) est petit, vous pouvez déplacer des dossiers volumineux (comme ~/Vidéos) sur un autre disque dur et créer un lien symbolique à l'emplacement d'origine. Pour le système et les applications, tout semble être au même endroit.
bash
# Le dossier Vidéos est physiquement sur un autre disque
ln -s /media/disque_externe/Vidéos/ ~/VidéosÀ quoi servent les Liens Physiques (durs) ?
Les liens physiques sont plus spécialisés. Leur utilité découle du fait qu'ils sont des "noms alternatifs" pour les mêmes données.
- Économiser de l'espace pour des sauvegardes (Backups) : C'est leur cas d'usage le plus puissant. Certains outils de sauvegarde créent un "instantané" (snapshot) d'un dossier. Pour les fichiers qui n'ont pas changé depuis la dernière sauvegarde, au lieu de les copier à nouveau, l'outil crée simplement un lien physique. Vous avez une arborescence de sauvegarde complète, mais les fichiers inchangés n'occupent pas d'espace disque supplémentaire.
- Prévenir la suppression accidentelle de données critiques : Tant qu'il reste au moins un lien physique pointant vers les données, celles-ci ne sont pas effacées. Vous pouvez avoir un fichier important dans votre répertoire de travail et créer un lien physique vers celui-ci dans un répertoire "archive". Si vous supprimez accidentellement le fichier de votre répertoire de travail, les données sont toujours en sécurité et accessibles via le lien dans l'archive.
En résumé :
- Utilisez un lien symbolique 99% du temps pour la flexibilité : raccourcis, gestion de versions, liens entre disques.
- Utilisez un lien physique pour des besoins spécifiques où la persistance des données et l'économie d'espace sont critiques, comme dans certains systèmes de sauvegarde.
Supprimer des fichiers et répertoires : rm
La commande rm (remove) supprime des fichiers ou des répertoires.
bash
$ rm fichier.txt # Supprime un fichier
$ rm fichier1.txt fichier2.txt # Supprime plusieurs fichiers
$ rm *.log # Supprime tous les fichiers .logPour supprimer un répertoire, il faut utiliser des options :
-r(recursive) : Supprime le contenu d'un répertoire de manière récursive.-f(force) : Ignore les fichiers non-existants et ne demande jamais de confirmation.-i(interactive) : Demande confirmation avant chaque suppression.
bash
$ rm -r MonDossier # Supprime le répertoire et tout son contenu
$ rm -i *.txt # Demande confirmation pour chaque fichier .txt
$ rm -rf dossier_temporaire/ # Supprime sans confirmation (DANGER)
⚠️ Attention à rm -rf
La commande rm -rf est extrêmement puissante et dangereuse. Elle supprime sans confirmation tout ce que vous lui indiquez. Une erreur de frappe comme rm -rf / peut effacer votre système entier. Utilisez-la avec une extrême prudence.
Sensibilité à la casse
Les systèmes de type Unix sont sensibles à la casse. Fichier.txt, fichier.txt et FICHIER.TXT sont trois fichiers différents.
Résumé des commandes essentielles
| Opération | Commande | Exemple |
|---|---|---|
| Lister | ls [options] [répertoire] | ls -la /home |
| Copier un fichier | cp source destination | cp doc.txt doc_copie.txt |
| Copier un répertoire | cp -r source destination | cp -r dossier/ dossier_copie/ |
| Déplacer/Renommer | mv source destination | mv ancien.txt nouveau.txt |
| Supprimer un fichier | rm fichier | rm document.txt |
| Supprimer un répertoire | rm -r répertoire | rm -r dossier_vide/ |
| Naviguer | cd répertoire | cd Documents/ |
| Créer un répertoire | mkdir répertoire | mkdir nouveau_dossier |
Un peu de pratique !
Exercice pratique : Gestion des fichiers et répertoires
📋 Mise en place
Étape 1 : Création de l'espace de travail
bash
# 1. Placez-vous dans votre répertoire personnel
$ cd ~
# 2. Créez un dossier pour l'exercice
$ mkdir exercice_gestion_fichiers
# 3. Entrez dans ce dossier
$ cd exercice_gestion_fichiers
# 4. Vérifiez votre position
$ pwd
# Résultat attendu : `/home/[votre_pseudo]/exercice_gestion_fichiers`Partie 1 : Construction de l'environnement
1.1 : Création de la structure de base
Essayez de créer l'arborescence suivante en une seule commande 😃 :
exercice_gestion_fichiers/
├── documents/
│ ├── personnel/
│ ├── travail/
│ └── archives/
├── projets/
│ ├── web/
│ ├── python/
│ └── scripts/
└── ressources/
├── images/
├── videos/
└── audio/Commande à utiliser :
bash
$ mkdir -p ...
$ mkdir -p documents/{personnel,travail,archives} projets/{web,python,scripts} ressources/{images,videos,audio}Vérification :
bash
$ ls -R1.2 : Création de fichiers de test
Créez les fichiers suivants :
bash
# Dans documents/personnel/
$ touch documents/personnel/cv.pdf
$ touch documents/personnel/lettre_motivation.docx
$ touch documents/personnel/diplomes.pdf
# Dans documents/travail/
$ touch documents/travail/rapport_janvier.txt
$ touch documents/travail/presentation.pptx
$ touch documents/travail/facture_2024_01.pdf
$ touch documents/travail/facture_2024_02.pdf
# Dans projets/web/
$ touch projets/web/index.html
$ touch projets/web/style.css
$ touch projets/web/script.js
# Dans projets/python/
$ touch projets/python/main.py
$ touch projets/python/utils.py
$ touch projets/python/config.json
# Fichiers cachés (configuration)
$ touch .config
$ touch documents/.backup_info
$ touch projets/.gitignorePartie 2 : Exploration et listage
2.1 : Maîtrise de la commande ls
Exécutez les commandes suivantes et notez ce que vous observez :
bash
# 1. Listage simple du répertoire courant
$ ls
# 2. Listage avec les fichiers cachés
$ ls -a
# 3. Listage détaillé avec permissions et tailles
$ ls -l documents/travail/
# 4. Listage avec tailles lisibles et fichiers cachés
$ ls -lah
# 5. Listage récursif de tout le projet
$ ls -R
# 6. Listage avec numéros d'inode
$ ls -i documents/personnel/
# 7. Tri par date de modification (le plus récent en premier)
$ ls -lt documents/travail/Pourquoi les dossiers ont une taille de 4096 octets (4,0K) ? Sous Linux, un dossier est en fait un fichier spécial qui contient une table de correspondance : noms de fichiers → inodes.
Cette table occupe de l’espace sur le disque.
Par défaut, la plupart des systèmes de fichiers (ext4, xfs, etc.) allouent au minimum 4096 octets = 4 Ko pour un répertoire.
C’est pour ça que tous tes dossiers (Bureau, Documents, etc.) affichent 4096 : ➡️ ce n’est pas la taille des fichiers dedans, mais la taille allouée pour stocker la liste des entrées du dossier.
Si on ajoute énormément de fichiers dans un dossier, cette table va s’agrandir. On pourrait alors voir des tailles comme 8192, 16384, etc. (toujours en multiples de 4096).
2.2 : Filtrage avec globbing
Cherchez à lister les fichiers correspondant à chaque motif.
- Tous les fichiers PDF dans
documents/travail/
- Tous les fichiers PDF dans
- Tous les fichiers commençant par
fdansdocuments/travail/
- Tous les fichiers commençant par
- Tous les fichiers Python dans
projets/et ses sous-dossiers
- Tous les fichiers Python dans
- Tous les fichiers de 4 caractères exactement (sans extension) dans
projets/web/
- Tous les fichiers de 4 caractères exactement (sans extension) dans
- Tous les fichiers contenant
2024dansdocuments/travail/
- Tous les fichiers contenant
- Fichiers commençant par une lettre majuscule ou minuscule dans
documents/personnel/
- Fichiers commençant par une lettre majuscule ou minuscule dans
Partie 3 : Manipulation de fichiers
3.1 : Copie et organisation
- Copiez
cv.pdfvers le dossiertravailavec un nouveau nom
- Copiez
- Copiez tous les fichiers
.pdfversarchives/
- Copiez tous les fichiers
- Copiez tout le dossier
web/versarchives/
- Copiez tout le dossier
- Vérifiez les copies
3.2 : Renommage et déplacement
- Renommez
rapport_janvier.txtenrapport_2024_01.txt
- Renommez
- Déplacez
presentation.pptxversdocuments/archives/
- Déplacez
- Renommez le dossier
scripts/enutilitaires/
- Renommez le dossier
- Déplacez
utils.pyversutilitaires/et renommez-le enhelpers.py
- Déplacez
Partie 4 : Gestion des liens
4.1 : Création de liens symboliques
- Créez un lien symbolique
docspointant versdocuments/
- Créez un lien symbolique
- Créez un lien symbolique
web_devpointant versprojets/web/
- Créez un lien symbolique
- Créez un lien symbolique vers
index.htmldans le répertoire principal
- Créez un lien symbolique vers
- Vérifiez les liens avec
ls -l
- Vérifiez les liens avec
4.2 : Test des liens symboliques
bash
# 1. Supprimez le fichier original
$ rm projets/web/index.html
# 2. Testez le lien (il devrait être cassé)
$ ls -l accueil.html
# 3. Recréez le fichier original
$ touch projets/web/index.html
# 4. Vérifiez que le lien fonctionne à nouveau
$ ls -l accueil.html4.3 : Liens physiques
- Créez un lien physique nommé
cv_lien_dur.pdfverscv.pdf
- Créez un lien physique nommé
- Vérifiez les inodes (ils doivent être identiques)
Partie 5 : Nettoyage et suppression
5.1 : Suppression sélective
- Supprimez tous les fichiers de type
.pdfdansdocuments/archives/
- Supprimez tous les fichiers de type
- Supprimez le dossier
archives/et son contenu
- Supprimez le dossier
- Supprimez tous les fichiers
.jsonavec confirmation
- Supprimez tous les fichiers
Pendant l'exercice
- Utilisez
pwdrégulièrement pour vérifier votre position - Testez
lsaprès chaque modification pour vérifier - N'hésitez pas à utiliser
--helpsi vous avez un doute - Prenez le temps de comprendre chaque résultat
Dépannage
- "No such file or directory" : Vérifiez le chemin et l'orthographe
- "Permission denied" : Vérifiez que vous êtes dans le bon répertoire
- Lien cassé : Normal si le fichier cible a été supprimé
- Commande non trouvée : Vérifiez la syntaxe
🏁 Validation finale
Pour valider votre travail, exécutez cette séquence :
bash
# 1. Retour au répertoire de base
$ cd ~/exercice_gestion_fichiers
# 2. Capture de l'état final
$ ls -la > etat_final.txtLe symbole > redirige la sortie standard d'une commande vers un fichier, écrasant son contenu s'il existe déjà.
Utilisez >> pour ajouter à la fin du fichier sans écraser.
Bravo ! Vous avez terminé l'exercice de gestion des fichiers et répertoires ! 🎉
Quiz 🎉
👋🏾 Cliquez sur la bonne réponse.
1 / 20 👉🏾 Qu'est-ce qu'un inode dans un système de fichiers Unix/Linux ?
A. Un nom de fichier unique
B. Une structure de données contenant les métadonnées d'un fichier
C. Un type de répertoire spécialisé
D. Une commande pour créer des fichiers