

Chapitre 2
Système de fichiers
1. Les fichiers
- Sous Unix un fichier est :
- toujours désigné par un nom.
- possède un unique inode (certaines informations concernant le fichier).
- possède les fonctionnalités suivantes :
- ouverture.
- fermeture.
- lecture (consultation).
- écriture (modification)
- Un fichier peut être :
- ordinaire (on utilise parfois le terme "normal") (-)
- un répertoire (d)
- un lien symbolique (l)
- un pseudo-fichier :
- accès caractère par caractère (c)
- dispositif de communication (p)
- accès par bloc (b)
a. Fichier ordinaire
- Un fichier ordinaire est caractérisé par :
- son contenu vu comme une suite d'octets (i.e. caractères).
- après l'ouverture l'accès s'effectue au niveau du pointeur du fichier.
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
... |
P |
R |
O |
G |
R |
A |
M |
_ |
T |
R |
I |
b. Fonctionnalités supplémentaires
- Positionnement du pointeur de fichier.
- Ecriture en fin de fichier ayant pour effet l'extension du fichier.
c. Noms de fichiers
Unix fait la différence entre les majuscules et les minuscules (la casse). En théorie tous les caractères du clavier sont autorisés. En pratique, il vaut mieux s'abstenir pour certains (comme * ou ?) . Le caractère - est déconseillé au début d'un nom de fichier (certaines commandes pourraient l'interpréter comme une option).
2. Les inodes
- Un UFS est toujours muni d'une table des inodes.
- Tout fichier possède son unique inode.
- L'inode contient la totalité des informations sur le fichier, sauf le nom.
- Les inodes sont tous de même taille.
a. Les informations des inodes
- Type de fichier : -,d, l, c, p, b.
- Droits d'accès : par exemple : rwxr-x---
- Nombre de liens (physiques) : correspond au nombre de références c'est à dire au nombre de noms.
- UID : effectif du processus créateur ou affecté par chown.
- GID : effectif du processus créateur, affecté par chgrp ou hérité du répertoire.
- Taille du fichier.
- atime :date de la dernière lecture.
- mtime :date de la dernière modification.
- ctime :date de la dernière connexion.
- Adresse du fichier.
- Remarque :
- Un fichier peut avoir plusieurs liens donc plusieurs noms. Il suffit pour cela qu'ils pointent sur le même inode (celui du fichier).
b. Adressage des blocs de données
- Une liste de 13 adresses :
- Direct pour les 10 premières adresses.
- Indirect pour la onzième entrée.
- A deux niveaux d'indirection pour la douzième entrée.
- A trois niveaux d'indirection pour la dernière entrée.
Un bloc de données peut contenir jusqu'à 128 adresses.
|
3. Les répertoires
répertoire simple
Comme tout fichier, un répertoire possède son inode.
Le contenu du répertoire représente la correspondance entre les noms de fichiers et les inodes. Les noms " . " et " .. "figurent dans tout répertoire. " . " correspond au répertoire courant et " .. " au répertoire supérieur (ou répertoire parent).
Nom
| Numéro d'inode
|
.
..
bin
dev
home
...
| 2
2
3
5
9 |
- Commande pour ajouter un nouveau lien :
- ln nom nom_supplémentaire
ln ancien nouveau = création d'un nouveau lien
cp ancien nouveau = copie de fichier
mv ancien nouveau = renomme ancien en nouveau (déplacement)
|
- Exemple :
- Répertoire courant /home/linf13
ln /bin/chmod droits
- Lien symbolique : ln -s ancien nouveau
b. Représentation logique du système de fichiers
C'est une arborescence, plus généralement un graphe orienté sans cycle. 
- Convention : le système de fichier commence à l'inode 2.
- A chaque passage dans la table des inodes on trace un arc.
- La désignation d'un chemin peut être :
- absolu :on écrit " / " à chaque passage dans la table des inodes. Par exemple : /home/linf0/dir.
- relatif :par exemple : si le répertoire courant est /home il suffit de taper linf0 pour accéder à /home/linf0.
4. Droits d'accès.
La commande ls -l permet d'avoir une liste détaillée indiquant, entre autres, les droits d'accès.
Spécial
| user
| group
| other
|
Set UID
| Set GID
| Sticky
| r
| w
| x
| r
| w
| x
| r
| w
| x
|
| Fichier
| Répertoire
|
r
| Lecture autorisée
| Lecture de la totalité du répertoire possible mais en absence de ce droit, on peut accéder à une entrée individuelle. Ainsi on peut lire un fichier dans un répertoire privé du droit de lecture.
|
w
| Ecriture autorisée
| On peut créer ou supprimer les fichiers du répertoire.
|
x
| Exécution autorisée
| En absence de ce droit, aucun accès au répertoire et a la sous arborescence issue du répertoire n'est possible.
|
| Fichier
| Répertoire
|
Sticky Bit
| Un programme executable sera maintenu en zone de swap après la fin de son exécution.
| Un fichier du répertoire ne peut être supprimé que par son propriétaire.
|
Set GID
| Set GID si le fichier est exécutable sinon verrouillage obligatoire.
| Les fichiers (y compris les répertoires) créés dans le répertoire héritent du GID du répertoire.
|
Set UID
| Set UID si le fichier est exécutable.
| Les fichiers (y compris les répertoires) créés dans le répertoire héritent du UID du répertoire.
|
- Normalement l'UID d'un processus est l'UID du créateur.
- Si Set UID=1 alors l'UID du processus engendré à partir d'un fichier est l'UID du fichier.
- Si Set UID=0 alors c'est l'UID du root (administrateur système).
- Pour modifier des droits on utilise la commande chmod :
- Options :
- -r descente récursive d'une sous-arborescence.
- -f fonctionnement silencieux.
- Mode :
- numérique : codage en octal de bits de permission.
- symbolique : | u | g | o | a | + | - | = | r | w | x | S | l | t |
- Exemple :
- gauss% chmod 644 fichier
- Autorise la lecture et l'écriture sur le fichier pour le propriétaire, mais n'autorise que la lecture pour les autres.
- gauss% chmod 1777 répertoire
- Autorise la lecture, l'écriture et l'exécution (ici l'accès) du répertoire pour tout le monde. Le premier chiffre correspond à l'octet du Set UID, Set GID, Sticky. Ici on met le Sticky Bit a 1.
gauss% chmod go-rx fichier
- gauss% chmod +t répertoire # identique à u+t, g+t, o+t
- gauss% chmod ug=xs programme
- gauss% chmod +l fichier # identique à u+l, g+l, o+l
- gauss% chmod ug=S programme # illicite
- gauss% chmod g+xl programme # illicite
- gauss% chmod ug+x, o-r fichier
a. Système de fichiers
df : commande utile pour les systèmes de fichiers.
mount : pour ajouter ("greffer ") un système de fichiers supplémentaire.
- Remarque :
- " Greffer " sur un répertoire non-vide fait perdre l'accès au contenu.
- Le montage peut être:
- manuel (mount)
- automatique (automount). Connexion à distance à autre machine par exemple.
Un numéro de système de fichier + un numéro d'inode = un fichier unique.
Structure du système de fichier :
- Remarque :
- Un UFS correspond à une partition.
Type de blocs sur un disque
|
Boot block
|
- Contient le programme de démarrage du système
- Occupe le secteur 0 à 15
|
Superblock
|
- Contient des informations vitales pour le système de fichier (état, table d'inodes, nombre de cylindres par groupe, etc.)
- Est répliqué dans chaque groupe de cylindre (dans un emplacement diffèrent à chaque fois)
|
Inode
| Mis à part le nom, contient toutes les infos sur un fichier
|
Data blocks
| Utilisés pour le stockage du contenu des fichiers
|
Cylindres groupe map
| Liste les blocs libres, leurs tailles, et d'autres informations
|
b. Organisation des groupes de cylindres
Cylindre groupe 0
| Cylindre groupe 1
| Cylindre groupe 2
| Cylindre groupe 3
| .....
|
Boot block
| Superblock
| Cylindre
groupe map
| Inodes
| Data blocks
|
|
Cylindre
groupe map
| Inodes
| Superblock
| Data blocks
| Boot block
|
|
Inodes
| Cylindre
groupe map
| Boot block
| Data blocks
| Superblock
|
|
Data blocks
| Boot block
| Inodes
| Superblock
| Cylindre
groupe map
|
| .....
|



Révisé le :23-Sep-2005| ©2005 www.technologuepro.com