9.2. Notions de base sur les fichiers

Les fichiers sont un autre domaine où Linux diffère totalement de Windows. Nous ne verrons ici que les différences immédiatement visibles.

La première différence, et sans doute la plus importante, est justement liée à la présence d'utilisateurs. Nous aurions pu dire en transition que chaque utilisateur possède son propre répertoire (appelé répertoire personnel, ou home en anglais), mais cela n'explicite qu'une partie de ce qui se passe vraiment, à savoir que tout fichier, sur un système Unix, est la propriété exclusive d'un utilisateur et d'un groupe. Ainsi, chaque utilisateur a bien son répertoire personnel, mais il est de plus le propriétaire de ses fichiers au sens propre du terme.

De plus, des droits sont associés à chaque fichier, que seul l'utilisateur propriétaire peut modifier. Ces droits distinguent trois catégories d'utilisateurs : le propriétaire même du fichier, tous les utilisateurs membres du groupe auquel ce fichier est associé (on dit aussi le groupe propriétaire) mais qui n'est pas l'utilisateur propriétaire, et enfin les autres, c'est-à-dire tout utilisateur qui n'est ni le propriétaire du fichier ni membre du groupe propriétaire. Ces droits sont au nombre de trois :

  1. Droit de lecture (r pour Read, lire) Pour un fichier, cela autorise à en lire le contenu. Pour un répertoire, cela autorise à lister les fichiers contenus dans ce répertoire, si et seulement si le droit d'exécution sur ce répertoire est positionné également;

  2. Droit d'écriture (w pour Write, écrire) Pour un fichier, cela autorise à en modifier le contenu. Pour un répertoire, cela autorise à créer des fichiers et à en effacer, même si l'on n'est pas le propriétaire de ces fichiers;

  3. Droit d'exécution (x pour eXecute, exécuter) Pour un fichier, cela en autorise l'exécution (par conséquent, seuls les fichiers exécutables ont normalement ce droit positionné). Pour un répertoire, cela autorise l'utilisateur à le traverser (c'est-à-dire de s'y rendre ou de se rendre dans l'un de ses répertoires fils).

Toutes les combinaisons de ces droits sont possibles : vous pouvez par exemple autoriser la lecture du fichier à vous seul et l'interdire à tous les autres, et interdire toute autre utilisation du fichier. Vous pouvez même faire l'inverse, même si ce n'est pas très logique à première vue :-) En tant que propriétaire du fichier, vous pouvez même changer le groupe propriétaire (si et seulement si vous êtes aussi membre du nouveau groupe), voire vous en déposséder (changer l'utilisateur propriétaire). Bien sûr, si vous vous en dépossédez, vous perdrez tous vos droits dessus...

Prenons l'exemple d'un fichier et d'un répertoire. L'affichage ci-dessous correspond à la frappe de la commande ls -l depuis une ligne de commande :

$ ls -l
total 1
-rw-r-----   1 francis  users           0 jui  8 14:11 un_fichier
drwxr-xr--   2 gael     users        1024 jui  8 14:11 un_répertoire/
$ 

Les différents champs de sortie de la commande ls -l sont les suivants (de gauche à droite) :

Observons maintenant en détail les droits associés à chacun de ces fichiers : il faut tout d'abord enlever le premier caractère, qui désigne le type, et ainsi pour le fichier un_fichier nous nous retrouvons avec les droits : rw-r-----. L'interprétation de ces droits est la suivante :

Pour le répertoire un_répertoire, les droits sont rwxr-xr--, et donc :

Attention! Il existe une exception à la règle, et de taille : root, encore lui, peut changer les attributs (droits, utilisateur et groupe propriétaires) de tous les fichiers, même s'il n'en est pas le propriétaire. Ce qui veut dire qu'il peut aussi s'en donner la propriété. Il peut lire des fichiers sur lesquels il n'a pas le droit de lecture, traverser des répertoires qui ne lui sont normalement pas accessibles, et ainsi de suite. Et si un droit lui manque vraiment, il lui suffit de se l'offrir...

Pour finir, il est bon de mentionner une autre différence, qui n'est pas négligeable : elle se situe au niveau des noms des fichiers. En effet, ils sont beaucoup moins limités que sous Windows :