Skip to content

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 :

commande ls -alrth

    1. 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 :
        1. rwx (Propriétaire) : Permissions pour le propriétaire du fichier (zil).
        2. rwx (Groupe) : Permissions pour le groupe propriétaire (zil).
        3. 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.
    1. 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 ..).
    1. Propriétaire (zil)
    • Le nom de l'utilisateur à qui le fichier appartient.
    1. Groupe (zil)
    • Le nom du groupe à qui le fichier appartient.
    1. 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).
    1. 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é.
    1. 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

La commande cd (change directory) permet de changer de répertoire de travail.

CommandeDescription
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/absoluVa à un chemin absolu spécifique.
cd chemin/relatifVa à un chemin relatif depuis le répertoire courant.

commande cd

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
  • Chemin relatif : Ne commence pas par /. Il est calculé à partir du répertoire courant.

    • Exemple : Si vous êtes dans /home/zil, pour aller dans Documents, le chemin relatif est simplement Documents. Pour remonter et aller dans le répertoire tmp, le chemin serait ../../tmp.

Créer des fichiers et répertoires

mkdir (make directory)

Crée un ou plusieurs répertoires.

bash
$ mkdir MonDossier

Pour 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

commande mkdir

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.txt

Analyser 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 archive

Options 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=binary

stat : 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.txt

mv (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.docx

Cré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.

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.txt

Exemple :

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é

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_sym

Exemple :

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éristiqueLien Physique (Dur)Lien Symbolique
Pointe versInode (données)Chemin d'un fichier
InodePartage le même inodePossède son propre inode
Lien vers répertoireNonOui
Multi-partitionNonOui
Suppression de l'originalLe lien reste valideLe lien devient "cassé"
Commandeln source cibleln -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.

    1. 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.
bash
# Accès rapide à un dossier distant
$ ln -s /mnt/data/projets/2025/client-X/ ~/projet_client
    1. 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
    1. 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.

    1. É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.
    1. 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 .log

Pour 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)

commande rm

⚠️ 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érationCommandeExemple
Listerls [options] [répertoire]ls -la /home
Copier un fichiercp source destinationcp doc.txt doc_copie.txt
Copier un répertoirecp -r source destinationcp -r dossier/ dossier_copie/
Déplacer/Renommermv source destinationmv ancien.txt nouveau.txt
Supprimer un fichierrm fichierrm document.txt
Supprimer un répertoirerm -r répertoirerm -r dossier_vide/
Naviguercd répertoirecd Documents/
Créer un répertoiremkdir répertoiremkdir 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 -R

1.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/.gitignore

Partie 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.

    1. Tous les fichiers PDF dans documents/travail/
    1. Tous les fichiers commençant par f dans documents/travail/
    1. Tous les fichiers Python dans projets/ et ses sous-dossiers
    1. Tous les fichiers de 4 caractères exactement (sans extension) dans projets/web/
    1. Tous les fichiers contenant 2024 dans documents/travail/
    1. Fichiers commençant par une lettre majuscule ou minuscule dans documents/personnel/

Partie 3 : Manipulation de fichiers

3.1 : Copie et organisation

    1. Copiez cv.pdf vers le dossier travail avec un nouveau nom
    1. Copiez tous les fichiers .pdf vers archives/
    1. Copiez tout le dossier web/ vers archives/
    1. Vérifiez les copies

3.2 : Renommage et déplacement

    1. Renommez rapport_janvier.txt en rapport_2024_01.txt
    1. Déplacez presentation.pptx vers documents/archives/
    1. Renommez le dossier scripts/ en utilitaires/
    1. Déplacez utils.py vers utilitaires/ et renommez-le en helpers.py

Partie 4 : Gestion des liens

4.1 : Création de liens symboliques

    1. Créez un lien symbolique docs pointant vers documents/
    1. Créez un lien symbolique web_dev pointant vers projets/web/
    1. Créez un lien symbolique vers index.html dans le répertoire principal
    1. Vérifiez les liens avec ls -l

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.html

4.3 : Liens physiques

    1. Créez un lien physique nommé cv_lien_dur.pdf vers cv.pdf
    1. Vérifiez les inodes (ils doivent être identiques)

Partie 5 : Nettoyage et suppression

5.1 : Suppression sélective

    1. Supprimez tous les fichiers de type .pdf dans documents/archives/
    1. Supprimez le dossier archives/ et son contenu
    1. Supprimez tous les fichiers .json avec confirmation

Pendant l'exercice

  • Utilisez pwd régulièrement pour vérifier votre position
  • Testez ls après chaque modification pour vérifier
  • N'hésitez pas à utiliser --help si 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.txt

Le 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

.