dernière modification : 2025

Système de fichiers

Présentation des concepts et commandes relatifs au système de fichiers : la base incontournable pour comprendre la suite.

La commande ls liste les entrées du répertoire courant :

$ ls
Bureau  Documents  Images  Modèles  Musique  Public  Téléchargements  Vidéos

1. Arborescence standard Unix

Voici à quoi ressemble l’arborescence de répertoires typique d’un système Unix :

/
├── bin
├── boot
├── dev
├── etc
├── home
│   ├── linus
│   ├── ken
│   ├── richard
│   └── jacquelin
├── lib
├── mnt
├── root
├── sbin
├── tmp
├── usr
│   ├── bin
│   ├── lib
│   ├── local
│   │   ├── bin
│   │   ├── etc
│   │   ├── lib
│   │   ├── sbin
│   ├── sbin
│   └── tmp
└── var
    ├── lib
    ├── log
    └── tmp

L’arborescence ci-dessus peut être un assemblage de plusieurs partitions. Cet assemblage est invisible à ce niveau de représentation.

2. Répertoire courant

Le répertoire courant est le répertoire dans lequel on se trouve à l’instant présent. On le consulte avec pwd (print working directory) et on le modifie avec cd (change directory).

$ pwd     # indique le répertoire courant
/home/jacquelin

$ ls
Bureau  Documents  Images  Modèles  Musique  Public  Téléchargements  Vidéos

$ cd /    # change de répertoire courant

$ pwd
/

$ ls
boot  bin  etc  dev  lib  home  mnt  root  sbin  tmp  usr  var

$ cd      # on revient chez soi

$ pwd
/home/jacquelin

$ ls
Bureau  Documents  Images  Modèles  Musique  Public  Téléchargements  Vidéos
Si l’on ouvre plusieurs instances de terminal, alors chacune d’elles possède son répertoire courant.

3. Nommage des entrées

Une entrée peut être identifiée de façon absolue, ou bien relativement au répertoire courant.

3.1. Nom absolu

Le nom absolu d’une entrée la référence depuis la racine du système de fichiers. Ce nom énumére les répertoires qui mènent à elle depuis /. Le nom absolu commence donc toujours par /. Par exemple :

/etc
/etc/passwd
/etc/absent
/usr/include
/var/log/wtmp

3.2. Nom relatif

Le nom relatif d’une entrée la référence par rapport au répertoire courant. Par exemple, si le répertoire courant est /etc, alors l’entrée /etc/passwd peut simplement être référencée passwd.

. symbolise le répertoire courant, .. le répertoire parent du répertoire courant, et ~ le répertoire personnel de l’utilisateur (son homedir).

Par exemple, si le répertoire courant est /usr/bin, alors :

  • gcc signifie /usr/bin/gcc

  • . signifie /usr/bin

  • .. signifie /usr

De même, si le répertoire courant est /usr, alors :

  • bin/gcc signifie /usr/bin/gcc

  • . signifie /usr

  • .. signifie /

  • ../lib signifie /lib

3.3. Nom générique

Dans le nom d’une entrée, le caractère * représente n’importe quelle suite de caractères. Par exemple, /etc/a* représente toutes les entrées du répertoire /etc dont le nom commence par a.

De même, le caractère ? représente n’importe quel caractère unique. Par exemple, abcd? représente toutes les entrées dont le nom comporte 5 caractères commençant par abcd.

4. Gestion des entrées

cp (copy), mv (move) et rm (remove) respectivement copie, renomme/déplace et efface des entrées. Exemple :

copie
$ cp src dst            # copie d'un fichier (1)
$ cp src dst/           # copie d'un fichier dans un répertoire (2)
$ cp src1 src2 dst/     # copie de 2 fichiers dans un répertoire
$ cp -r src/ dst/       # copie d'une arborescence
1 le fichier créé est dst
2 le fichier créé est dst/src
renommage ou déplacement
$ mv src dst            # renomme une entrée
$ mv src dst/           # déplace src dans dst/
$ mv src1 src2 dst/     # déplace src1 et src2 dans dst/
suppression
$ rm f1 f2 f3           # efface 3 fichiers
$ rm -r dir/            # efface une arborescence
$ rm -r *               # efface (presque) tout le contenu du répertoire courant
Ce qui est effacé est immédiatement et irrémédiablement perdu (pas de corbeille). Donc bien réfléchir avant de faire rm, et encore plus avant rm -r.

4.1. Fichiers

  • cat affiche le contenu d’un ou plusieurs fichiers

  • more (commande historique) et less affichent le contenu de fichiers page par page

4.2. Répertoires

  • mkdir (make directory) et rmdir (remove directory) respectivement créent et effacent des répertoires

  • du (disk usage) liste les répertoires d’une arborescence et leurs tailles

Un lien symbolique est une entrée qui pointe vers une autre entrée. Il est créé avec la commande ln (link) et l’option -s :

# /tmp/passwd n'existe pas
$ ll /tmp/passwd
ls: cannot access '/tmp/passwd': No such file or directory

# création d'un lien nommé /tmp/passwd vers /etc/passwd
$ ln -s /etc/passwd /tmp

# /tmp/passwd existe maintenant
$ ll /tmp/passwd
lrwxrwxrwx  1 jaclin jaclin 11 20 nov.  17:50 /tmp/passwd -> /etc/passwd

5. La commande find

La commande find effectue des recherches multi-critères sur le système de fichiers. C’est une commande indispensable, ne serait-ce que pour retrouver des fichiers perdus. Quelques exemples :

  • rechercher les entrées dont le nom contient bash (dans le homedir) :

    $ find ~ -name '*bash*'
  • rechercher les entrées nommées lib sur tout le filesystem :

    $ find / -name lib

    Cette commande affiche un message d’erreur à chaque fois qu’un accès est refusé, ce qui est désagréable pour voir le résultat. Pour faire disparaitre ces messages d’erreur :

    $ find / -name lib 2>/dev/null
  • rechercher les fichiers de bill :

    $ find / -type f -user bill 2>/dev/null
  • rechercher les répertoires modifiés il y a moins d’une heure sur son espace personnel :

    $ find ~ -type d -mtime -1
  • effacer tous les fichiers *.bak de son espace personnel :

    $ find ~ -name '*.bak' -delete
  • recopier tous les fichiers *.jpg situés sous /usr dans ~/Images :

    $ find /usr -name '*.jpg' -exec cp {} ~/Images/ \;

6. Attributs

ls -l (alias ll) visualise les attributs d’une entrée :

$ ll ~/.bashrc
-rw-r--r-- 1 linus users 619  1 janv. 22:12 /home/linus/.bashrc

Le champ :

  • #3 (ici linus) est le propriétaire

  • #4 (ici users) est le groupe

  • #5 (ici 619) est la taille (en nombre de caractères)

  • #6 (ici 1 janv. 22:12) est le moment de la dernière modification

Le champ #1 (les 10 premiers caractères, ici -rw-r—​r--) précise le type de l’entrée (le premier caractère) et son mode (les 9 caractères suivants).

6.1. Type d’entrée

Chaque entrée possède un type, que l’on peut identifier via le premier caractère de la ligne renvoyée par la commande ls -l, et dont les correspondances pour les types usuels sont :

  • un - pour un fichier standard :

$ ls -l ~/.bashrc
-rw-r--r-- 1 jaclin jaclin 619  1 janv. 22:12 /home/jaclin/.bashrc
  • un d pour un répertoire (directory) :

$ ls -ld /tmp
drwxrwxrwt 50 root root 1360  8 avril 09:40 /tmp
  • un l pour un lien symbolique :

$ ls -ld /bin
lrwxrwxrwx 1 root root 7 17 juil.  2024 /bin -> usr/bin

6.2. Le mode

Le mode d’une entrée contrôle son accès. Il fixe ce que l’on peut faire de cette entrée (lire son contenu, le modifier, etc.) et qui peut le faire. Il est représenté par les 9 caractères suivant le type sur la ligne renvoyée par ll. Par exemple :

$ ll ~/.bashrc
-rw-r--r-- 1 jaclin jaclin 619  1 janv. 22:12 .bashrc

le mode du fichier .bashrc est rw-r--r--.

Les autorisations sont définis indépendamment pour le propriétaire, le groupe et tous les autres utilisateurs. Plus précisément, sur ces 9 caractères,

  • les 3 premiers spécifient les permissions accordées au propriétaire,

  • les 3 suivantes les permissions accordées à son groupe, et

  • les 3 derniers les permissions accordées aux autres.

Parmi ces 9 caractères :

  • un r (read) signifie que la lecture est autorisée,

  • un w (write) signifie que l’écriture est autorisée,

  • pour un fichier, un x signifie que le fichier est exécutable, et pour un répertoire, que le répertoire est traversable,

  • un - signifie que la permission n’est pas accordée.

Exemples :

  • r--r--r-- indique que l’entrée est lisible par tout le monde et modifiable par personne

  • rw-r----- indique que l’entrée est lisible par son propriétaire et son groupe, et que le propriétaire peut la modifier

  • rwxr-xr-x indique que l’entrée est lisible et exécutable (ou traversable) par tout le monde, et modifiable par son propriétaire.

En interne, le mode est un entier de 3 chiffres compris entre 0 et 7. Exprimé en binaire, chaque chiffre vaut 1 si la permission est accordée, 0 sinon. Par exemple :

  • rwx correspond à 111 donc 7

  • --- correspond à 000 donc 0

  • rw- correspond à 110 donc 6

  • r-x correspond à 101 donc 5

Ainsi :

  • rwxr-x--- correspond à 750

  • rw-r--r-- correspond à 644

  • rwxrwxrwx correspond à 777

La commande chmod (change mode) permet de modifier le mode. Exemple :

# on crée 2 fichiers et 1 répertoire

$ touch /tmp/mon_fichier /tmp/mon_script   # crée 2 fichiers vides
$ mkdir /tmp/mon_dossier

# on modifie le mode du répertoire

$ ll -d /tmp/mon_dossier
rwxr-xr-x 2 jaclin jaclin 40  13 févr. 17:57 /tmp/mon_dossier/
$ chmod 750 /tmp/mon_dossier
$ ll -d /tmp/mon_dossier
-rwxr-x--- 1 jaclin jaclin 0  13 févr. 17:57 /tmp/mon_dossier

# on modifie le mode de mon_fichier

$ ll /tmp/mon_fichier
-rw-r--r-- 1 jaclin jaclin  0 13 févr. 17:57 /tmp/mon_fichier
$ chmod 640 /tmp/mon_fichier
$ ll /tmp/mon_fichier
-rw-r----- 1 jaclin jaclin  0  13 févr. 17:57 /tmp/mon_fichier

# pour mon_script, on ajoute le droit `x` à tous

$ ll /tmp/mon_script
-rw-r--r-- 1 jaclin jaclin  0 13 févr. 17:57 /tmp/mon_script
$ chmod +x /tmp/mon_script   # ajout du droit d'exécution à tous
$ ll /tmp/mon_script
-rwxr-xr-x 1 jaclin jaclin  0  13 févr. 17:57 /tmp/mon_script
Résumé
  • commandes à retenir : cd et pwd --- ls et cat --- cp, mv et rm --- mkdir et rmdir

  • autres commandes utiles : ll, less, find, chmod et ln