Le système de fichiers
Reading time45 minEn bref
Résumé de l’article
Dans cet article, nous expliquons ce qu’est un système de fichiers, comment il organise les données sur vos périphériques de stockage, et comment vous pouvez le manipuler à l’aide des commandes vues dans le cours précédent sur le terminal. Nous comparons également les principales différences entre Windows, Linux et MacOS, que ce soit sur la structure de la hiérarchie, les types de systèmes de fichiers ou le montage de volumes.
Points clés
-
Un système de fichiers organise les données sous forme d’une hiérarchie de fichiers et de répertoires (ou dossiers), et cache la complexité du stockage physique sur le disque.
-
Windows utilise une hiérarchie par lecteur (
C:,D:, …) alors que Linux et MacOS utilisent une hiérarchie unique partant d’une racine unique/, sur laquelle les différents volumes sont montés. -
Un chemin (path) peut être absolu (depuis la racine) ou relatif (depuis le répertoire courant), et utilise
\comme séparateur sous Windows contre/sous Linux et MacOS. -
Chaque système d’exploitation privilégie un ou plusieurs formats de système de fichiers natifs (par exemple, NTFS pour Windows, ext4 pour Linux, APFS pour MacOS), qui ne sont pas tous nativement compatibles entre eux.
-
Les commandes que vous avez apprises dans le cours précédent vous permettent de naviguer, consulter, créer, copier, déplacer et supprimer des fichiers et répertoires directement depuis le terminal.
Contenu de l’article
Nous avons vu dans le cours précédent que le terminal nous permet d’interagir avec le système d’exploitation, notamment pour naviguer et manipuler des fichiers. Pour bien comprendre ce que font réellement ces commandes, il est nécessaire de comprendre comment votre système d’exploitation organise et retrouve vos données sur le disque : c’est le rôle du système de fichiers.
1 — Qu’est-ce qu’un système de fichiers ?
Un système de fichiers (File System, souvent abrégé FS) est la méthode et la structure de données qu’un système d’exploitation utilise pour organiser, stocker et retrouver des données sur un support de stockage (disque dur, SSD, clé USB, etc.). Sans lui, un disque ne serait qu’une longue suite d’octets sans aucune organisation : c’est le système de fichiers qui permet de découper cet espace en fichiers nommés et regroupés dans des répertoires (aussi appelés dossiers), et qui associe à chacun des métadonnées (nom, taille, dates de création/modification, propriétaire, permissions, etc.).
1.1 — Fichiers et répertoires
-
Un fichier est un ensemble nommé de données (texte, image, programme, …), généralement accompagné d’une extension (par exemple,
.txt,.pdf,.py) qui donne une indication sur son format.
Notez que, contrairement à Windows, les systèmes Linux et MacOS ne se reposent pas exclusivement sur l’extension pour déterminer le type d’un fichier : elle reste néanmoins une convention largement utilisée pour la lisibilité et pour que les applications sachent quel fichier elles peuvent ouvrir. -
Un répertoire (ou dossier) est un conteneur qui peut contenir des fichiers ainsi que d’autres répertoires, appelés sous-répertoires. Cette organisation en “conteneurs de conteneurs” forme une structure en arbre, appelée hiérarchie du système de fichiers.
Information
Sous les systèmes de type Unix comme Linux et MacOS, tout est fichier (Everything is a file) : les répertoires, mais aussi les périphériques (disques, imprimantes, …) ou certaines ressources système sont représentés comme des fichiers spéciaux. Ce principe simplifie grandement la façon dont les programmes interagissent avec le matériel et les ressources du système.
1.2 — La racine et la hiérarchie
Au sommet de cette hiérarchie se trouve un répertoire particulier appelé la racine (root), à partir duquel on peut atteindre n’importe quel fichier ou répertoire du système en descendant dans l’arborescence. La façon d’organiser cette racine diffère cependant fortement entre Windows d’un côté, et Linux/MacOS de l’autre.
Windows utilise une hiérarchie par lecteur : chaque volume de stockage (disque dur, partition, clé USB, lecteur réseau, …) se voit attribuer une lettre de lecteur suivie de :\ qui constitue sa propre racine (par exemple, C:\, D:\, E:\). Il n’existe donc pas de racine unique pour l’ensemble du système : votre ordinateur peut afficher plusieurs arborescences distinctes, une par lecteur.
Le lecteur C:\ contient généralement le système d’exploitation lui-même, installé dans C:\Windows, ainsi que le répertoire personnel de chaque utilisateur dans C:\Users\<nom_utilisateur>.
Linux utilise une hiérarchie unique, avec une seule racine notée / (et non C:\). Tous les volumes de stockage supplémentaires (autres partitions, disques externes, clés USB, …) sont montés (voir section 4) à un endroit précis de cette même arborescence, plutôt que de recevoir leur propre lettre.
Le Filesystem Hierarchy Standard (FHS) définit des répertoires standards que l’on retrouve sur la quasi-totalité des distributions, par exemple :
/home/<nom_utilisateur>– le répertoire personnel de chaque utilisateur./etc– les fichiers de configuration du système./bin,/usr/bin– les exécutables des programmes./dev– les fichiers spéciaux représentant les périphériques./mnt,/media– les points de montage habituels pour les volumes supplémentaires.
Comme Linux, MacOS est un système de type Unix et utilise donc également une hiérarchie unique avec une seule racine /, sur laquelle les volumes supplémentaires sont montés (généralement sous /Volumes, voir section 4).
MacOS possède sa propre organisation historique héritée de Unix, avec quelques répertoires notables :
/Users/<nom_utilisateur>– le répertoire personnel de chaque utilisateur (équivalent du/homede Linux)./Applications– les applications installées./System– les fichiers du système d’exploitation lui-même (protégé en écriture depuis macOS Catalina par la System Integrity Protection).
1.3 — Chemins absolus et relatifs
Pour désigner l’emplacement d’un fichier ou d’un répertoire dans la hiérarchie, on utilise un chemin (path), c’est-à-dire la suite des répertoires à traverser depuis un point de départ, séparés par un caractère spécial.
-
Un chemin absolu part toujours de la racine et décrit sans ambiguïté l’emplacement complet d’un fichier, quel que soit l’endroit où vous vous trouvez actuellement.
-
Un chemin relatif part du répertoire de travail courant (celui affiché par
cdsans argument sous Windows, ou parpwdsous Linux/MacOS) et ne décrit que les déplacements à effectuer depuis cet endroit.
Deux noms spéciaux de répertoire sont utilisés dans les chemins relatifs sur tous les systèmes :
.– désigne le répertoire courant lui-même...– désigne le répertoire parent, un niveau au-dessus dans la hiérarchie.
Sous Windows, le séparateur de chemin est l’antislash \ (bien que la plupart des outils récents, y compris PowerShell, acceptent aussi /).
Le raccourci ~ n’est pas reconnu nativement par cmd.exe, mais PowerShell le supporte pour désigner votre répertoire personnel. Vous pouvez aussi utiliser la variable d’environnement %USERPROFILE% (par exemple, cd %USERPROFILE%).
Sous Linux, le séparateur de chemin est le slash /.
Le caractère spécial ~ est un raccourci pour votre répertoire personnel (par exemple, cd ~ vous ramène directement dans /home/alice, et ~/documents équivaut à /home/alice/documents).
Comme sous Linux, le séparateur de chemin est le slash /.
Le caractère spécial ~ fonctionne de la même façon que sous Linux et désigne votre répertoire personnel (par exemple, ~/documents équivaut à /Users/alice/documents).
1.4 — Types de systèmes de fichiers
Le système de fichiers n’est pas qu’une organisation logique : c’est aussi un format précis qui définit comment les données sont réellement écrites sur le disque. Chaque système d’exploitation possède un ou plusieurs formats natifs qu’il privilégie.
- NTFS (New Technology File System) – le système de fichiers natif de Windows depuis Windows NT, utilisé par défaut pour le lecteur système. Il supporte les permissions avancées, la journalisation (résistance aux coupures de courant), la compression et le chiffrement natifs.
- FAT32 et exFAT – des formats plus simples, principalement utilisés pour les clés USB et cartes mémoire car ils sont lisibles nativement par la quasi-totalité des systèmes d’exploitation, y compris Linux et MacOS. FAT32 limite néanmoins la taille des fichiers à 4 Go.
- ext4 (Fourth Extended Filesystem) – le système de fichiers le plus répandu sur les distributions Linux, robuste et performant.
- Btrfs, XFS – des alternatives plus modernes offrant des fonctionnalités avancées comme les instantanés (snapshots), utilisées notamment par certaines distributions ou pour des usages serveur spécifiques.
Linux peut également lire et écrire sur des volumes NTFS, FAT32 ou exFAT, ce qui facilite l’échange de données avec des systèmes Windows.
- APFS (Apple File System) – le système de fichiers natif depuis MacOS High Sierra (2017), optimisé pour les SSD, avec chiffrement natif et instantanés.
- HFS+ – l’ancien système de fichiers d’Apple, encore rencontré sur certains disques plus anciens ou périphériques externes.
MacOS peut lire les volumes NTFS et FAT32/exFAT nativement, mais ne peut écrire sur un volume NTFS sans logiciel tiers.
Attention
Un même système de fichiers peut se comporter différemment selon l’OS. Un point particulièrement piégeux est la sensibilité à la casse (case sensitivity) : les systèmes de fichiers Linux (ext4, …) font la différence entre Rapport.txt et rapport.txt, alors que NTFS (Windows) et APFS (MacOS, par défaut) considèrent ces deux noms comme identiques, tout en conservant la casse d’origine à l’affichage. Cela peut par exemple provoquer des surprises lorsque vous clonez un dépôt Git contenant deux fichiers dont les noms ne diffèrent que par la casse.
1.5 — Fichiers et répertoires cachés
Il est parfois utile de cacher certains fichiers de configuration ou système afin de ne pas encombrer l’affichage habituel, sans pour autant les supprimer. Là encore, le mécanisme utilisé diffère selon l’OS.
Sous Windows, un fichier ou répertoire est caché grâce à un attribut dédié, indépendant de son nom. Vous pouvez le définir depuis les propriétés du fichier dans l’explorateur, ou en ligne de commande :
Pour afficher les fichiers cachés dans l’explorateur, vous devez explicitement activer l’option correspondante dans les paramètres d’affichage.
Sous Linux, tout fichier ou répertoire dont le nom commence par un point (.) est considéré comme caché par convention (par exemple, .bashrc, .config), sans qu’aucun attribut spécial ne soit nécessaire.
MacOS suit la même convention que Linux (les noms commençant par un point sont cachés, par exemple, .bashrc, .zshrc), héritée de son socle Unix.
Le Finder cache également certains fichiers systèmes qui ne commencent pas par un point (par exemple, .DS_Store est caché par convention, mais certains autres fichiers sont cachés par une liste dédiée gérée par le système). Vous pouvez basculer l’affichage des fichiers cachés dans le Finder avec le raccourci cmd + shift + ..
2 — Les commandes principales
Nous avons déjà présenté en détail les commandes du terminal dans le cours précédent, nous ne les répéterons donc pas intégralement ici. Le tableau ci-dessous se concentre spécifiquement sur les commandes qui manipulent le système de fichiers, pour vous servir d’aide-mémoire rapide.
| Action | Windows (Batch) | Windows (PowerShell) | Linux / MacOS |
|---|---|---|---|
| Afficher le répertoire courant | cd (sans argument) |
Get-Location (pwd) |
pwd |
| Lister le contenu d’un répertoire | dir |
Get-ChildItem (ls, dir) |
ls |
| Changer de répertoire | cd <chemin> |
Set-Location <chemin> (cd) |
cd <chemin> |
| Créer un répertoire | mkdir (md) |
New-Item -ItemType Directory |
mkdir |
| Supprimer un répertoire | rmdir (rd) |
Remove-Item (rm) |
rmdir (vide) / rm -r |
| Copier un fichier ou répertoire | copy (xcopy) |
Copy-Item (cp, copy) |
cp |
| Déplacer / renommer | move / ren |
Move-Item (mv, move) |
mv |
| Supprimer un fichier | del |
Remove-Item (rm) |
rm |
| Afficher le contenu d’un fichier | type |
Get-Content (cat, type) |
cat |
| Afficher l’arborescence | tree |
– | tree (à installer) |
| Espace disque disponible | chkdsk |
Get-PSDrive |
df |
Astuce
Sous Linux et MacOS, ajoutez l’option -h (human-readable) aux commandes df et du pour afficher les tailles dans une unité lisible (Ko, Mo, Go) plutôt qu’en octets bruts (par exemple, df -h).
3 — Droits d’accès aux fichiers
Un système multi-utilisateurs doit pouvoir restreindre l’accès aux fichiers, afin, par exemple, qu’un utilisateur ne puisse pas lire les documents privés d’un autre utilisateur, ou modifier des fichiers système critiques. C’est le rôle des droits d’accès (permissions), qui définissent qui peut faire quoi sur chaque fichier ou répertoire. Là encore, Windows d’un côté, et Linux/MacOS de l’autre, reposent sur des modèles assez différents.
3.1 — Le modèle Unix : utilisateur, groupe, autres
Sous Linux et MacOS, chaque fichier ou répertoire possède un propriétaire (owner, un utilisateur) et un groupe propriétaire (group), et définit des droits pour trois catégories d’utilisateurs, indépendamment les unes des autres :
u(user) – le propriétaire du fichier.g(group) – les membres du groupe propriétaire.o(others) – tous les autres utilisateurs du système.
Pour chacune de ces catégories, trois droits peuvent être accordés ou refusés séparément :
| Droit | Symbole | Effet sur un fichier | Effet sur un répertoire |
|---|---|---|---|
| Lecture | r (read) |
Lire le contenu du fichier | Lister le contenu du répertoire |
| Écriture | w (write) |
Modifier ou supprimer le contenu du fichier | Créer, renommer ou supprimer des fichiers à l’intérieur |
| Exécution | x (execute) |
Exécuter le fichier comme un programme ou un script | Entrer dans le répertoire (cd) ou accéder aux fichiers qu’il contient |
Information
Sur un répertoire, le droit d’exécution x est indispensable pour pouvoir y accéder, même en lecture seule : sans lui, impossible de faire cd vers ce répertoire, ni de consulter les fichiers qu’il contient, même si ceux-ci sont individuellement lisibles.
3.2 — Afficher les droits d’un fichier
Windows n’utilise pas nativement le modèle utilisateur/groupe/autres de Unix, mais un système de listes de contrôle d’accès (ACL, Access Control List) plus fin, associant des droits variés (lecture, écriture, modification, contrôle total, …) à des utilisateurs ou groupes précis.
Vous pouvez consulter ces droits depuis les propriétés d’un fichier dans l’explorateur (onglet Sécurité), ou en ligne de commande avec icacls ou Get-Acl :
La commande ls -l affiche les droits en tête de chaque ligne, sous la forme d’une chaîne de 10 caractères :
Cette chaîne se décompose ainsi :
- Le 1ᵉʳ caractère indique le type :
-pour un fichier,dpour un répertoire,lpour un lien symbolique. - Les 3 groupes suivants de 3 caractères (
rwx,r-x,r--) donnent respectivement les droits du propriétaire, du groupe, et des autres, chaque-indiquant l’absence du droit correspondant.
Ici, alice (propriétaire) peut lire, écrire et exécuter ; les membres du groupe etudiants peuvent lire et exécuter mais pas écrire ; les autres utilisateurs ne peuvent que lire.
Comme sous Linux, ls -l affiche les droits sous la même forme, puisque MacOS repose sur le même modèle Unix :
Notez que le groupe propriétaire par défaut est généralement staff sous MacOS, contrairement à Linux où il correspond souvent au nom de l’utilisateur ou à un groupe applicatif dédié.
3.3 — Modifier les droits
Vous pouvez modifier les droits d’accès depuis l’onglet Sécurité des propriétés d’un fichier, ou en ligne de commande avec icacls :
La commande chmod (change mode) modifie les droits, selon deux notations possibles.
Notation symbolique, qui ajoute (+), retire (-) ou fixe (=) un droit pour une catégorie donnée :
Notation octale, qui fixe simultanément les trois droits de chaque catégorie en additionnant les valeurs r=4, w=2, x=1 :
La commande chown (change owner) modifie quant à elle le propriétaire et/ou le groupe propriétaire d’un fichier :
MacOS reprend exactement les mêmes commandes chmod et chown que Linux, avec la même syntaxe symbolique et octale :
Vous pouvez également modifier certains droits de base depuis le Finder, via Lire les informations (cmd + I), puis la section Partage et permissions en bas de la fenêtre.
Attention
Évitez d’utiliser chmod 777 (tous les droits pour tout le monde) comme solution rapide à un problème de permissions : cela permet à n’importe quel utilisateur du système de lire, modifier ou supprimer le fichier, ce qui représente un risque de sécurité important, en particulier sur un serveur. Préférez toujours accorder le droit minimal nécessaire.
3.4 — sudo et les droits administrateur
Certaines actions (installer un logiciel, modifier un fichier système, monter un volume, …) nécessitent des droits que votre utilisateur habituel ne possède pas par défaut.
Windows utilise le contrôle de compte d’utilisateur (UAC, User Account Control) : un utilisateur membre du groupe Administrateurs doit explicitement élever ses privilèges, généralement via une invite de confirmation, ou en choisissant Exécuter en tant qu'administrateur sur un programme ou un terminal.
Linux distingue l’utilisateur root (aussi appelé superutilisateur), qui possède tous les droits sans restriction, des utilisateurs classiques. Plutôt que de se connecter directement en tant que root (déconseillé), on utilise généralement la commande sudo (superuser do) pour exécuter ponctuellement une seule commande avec les droits de root, à condition que votre utilisateur y soit autorisé (généralement en faisant partie du groupe sudo ou wheel) :
MacOS, également basé sur Unix, fonctionne de la même façon que Linux avec la commande sudo, à condition que votre compte utilisateur ait le statut Administrateur (visible dans Préférences Système > Utilisateurs et groupes).
Pour aller plus loin
4 — Montage de volumes
Nous avons vu que Linux et MacOS présentent une hiérarchie unique, dans laquelle chaque volume supplémentaire doit être rattaché quelque part dans l’arborescence existante avant de pouvoir être utilisé : c’est ce que l’on appelle le montage (mounting). Monter un volume consiste à associer son contenu à un répertoire vide déjà existant, appelé point de montage, qui devient alors la porte d’entrée vers ce volume. L’opération inverse, qui détache le volume, s’appelle le démontage (unmounting), et doit toujours être effectuée avant de débrancher un périphérique physiquement pour éviter de corrompre des données encore en cours d’écriture.
Windows automatise entièrement le montage : lorsqu’un nouveau volume est détecté (clé USB, disque externe, …), le système lui attribue automatiquement une lettre de lecteur libre (par exemple, E:), qui devient immédiatement accessible depuis l’explorateur de fichiers ou le terminal.
Vous pouvez consulter et gérer manuellement vos volumes via l’outil Gestion des disques (accessible en tapant diskmgmt.msc dans le menu démarrer), qui permet notamment de changer la lettre attribuée à un lecteur, ou plus rarement, de monter un volume comme un simple dossier au sein d’un autre lecteur NTFS.
Sur la plupart des distributions de bureau modernes, le montage des périphériques amovibles est également automatique dès leur branchement, généralement sous un répertoire tel que /media/<nom_utilisateur>/<nom_du_volume>.
Vous pouvez néanmoins monter et démonter manuellement un volume avec les commandes mount et umount (notez l’absence du deuxième “n”) :
Pour qu’un volume soit monté automatiquement à chaque démarrage (par exemple, un second disque interne), son point de montage doit être déclaré dans le fichier de configuration /etc/fstab.
Comme sous Linux, MacOS monte automatiquement les volumes externes dès leur branchement, sous le répertoire /Volumes/<nom_du_volume> (par exemple, /Volumes/CléUSB), et les fait apparaître directement sur le bureau ou dans le Finder.
Vous pouvez gérer vos volumes graphiquement avec Utilitaire de disque (Disk Utility), ou en ligne de commande avec l’utilitaire diskutil :
Pour aller encore plus loin
5 — Partage et accès distants
Jusqu’ici, nous avons considéré des volumes physiquement connectés à votre ordinateur. Cependant, il est également possible d’accéder à un système de fichiers hébergé sur un autre ordinateur à travers le réseau, comme si ce dernier était un volume local. C’est ce que permettent les protocoles de partage de fichiers réseau, dont les plus courants sont SMB/CIFS (utilisé nativement par Windows, mais aussi supporté par Linux et MacOS) et NFS (plus courant entre systèmes Unix-like).
Sous Windows, un dossier partagé sur le réseau est identifié par un chemin UNC de la forme \\<serveur>\<partage>. Vous pouvez y accéder directement depuis l’explorateur, ou l’associer durablement à une lettre de lecteur (lecteur réseau) :
Sous Linux, un partage réseau distant se monte comme n’importe quel autre volume, à l’aide d’un pilote adapté au protocole utilisé :
Il est également possible de monter un système de fichiers distant à travers une simple connexion SSH grâce à SSHFS, sans nécessiter de service de partage dédié côté serveur.
Sous MacOS, utilisez le Finder avec le raccourci cmd + K (Se connecter au serveur...) et indiquez l’adresse du partage, par exemple smb://serveur/partage pour un partage Windows/Samba, ou nfs://serveur/partage pour un partage NFS. Le volume distant apparaît alors automatiquement sous /Volumes, exactement comme un périphérique physique.
Information
Les services de synchronisation dans le cloud que vous utilisez peut-être déjà au quotidien (OneDrive, iCloud Drive, Google Drive, Dropbox, …) reposent sur un principe similaire : ils font apparaître un espace de stockage distant comme un simple répertoire de votre système de fichiers local, tout en synchronisant son contenu en arrière-plan avec les serveurs du fournisseur.