Les fichiers sont un autre domaine où GNU/Linux diffère totalement de Windows® et de la plupart des autres systèmes d'exploitation. Nous n'aborderons ici que les différences les plus visibles. Si vous le souhaitez, vous pouvez lire le chapitre Chapitre 9, Le système de fichiers Linux, qui approfondit ce sujet.
Les différences principales sont des conséquences directes du fait que Linux soit un système multi-utilisateurs : chaque fichier est la propriété exclusive d'un utilisateur et d'un groupe. Un peu plus haut, nous avons parlé des utilisateurs, mais une chose que nous n'avons pas mentionné c'est que chaque utilisateur dispose de son propre répertoire (appelé son répertoire personnel, soit home directory en anglais). Il est le propriétaire de ce répertoire, ainsi que de tous les fichiers qu'il y créera par la suite.
Cependant, la notion de propriété d'un fichier, prise seule, ne servirait pas à grand-chose. Mais il y a plus : en tant que propriétaire d'un fichier, un utilisateur peut établir des droits sur ce fichier. Ces droits sont associés à trois catégories d'utilisateurs : le propriétaire du fichier, tout utilisateur qui est membre du groupe propriétaire associé au fichier (appelé le groupe propriétaire) mais n'est pas le propriétaire lui-même, et les autres, catégorie qui regroupe tout utilisateur qui n'est ni le propriétaire, ni un membre du groupe propriétaire.
On distingue trois types de droits :
Droit de lecture (r Read : permet à un utilisateur de lire le contenu d'un fichier. Pour un répertoire, cela autorise à lister son contenu (c'est-à-dire les fichiers qu'il contient)
Droit d'écriture (w Write : permet la modification du contenu d'un fichier. Pour un répertoire, l'accès en écriture autorise un utilisateur à ajouter et retirer des fichiers de ce répertoire, même s'il n'est pas le propriétaire des-dits fichiers.
Droit d'exécution (x eXecute : permet à un fichier d'être exécuté (par conséquent, seuls les fichiers exécutables devraient normalement avoir ce droit positionné). Pour un répertoire, cela autorise un utilisateur à le traverser (ce qui signifie entrer dans ce répertoire ou passer par celui-ci). Notez bien la séparation avec le droit en lecture : il se peut très bien que vous puissiez traverser un répertoire sans pouvoir lire son contenu !
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. En tant que propriétaire du fichier, vous pouvez en changer le groupe propriétaire (si et seulement si vous êtes aussi membre du nouveau groupe).
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 reine users 0 Jul 8 14:11 un_fichier drwxr-xr-- 2 pierre users 1024 Jul 8 14:11 un_repertoire/ $ |
Les différents champs de sortie de la commande ls -l sont les suivants (de gauche à droite) :
Les dix premiers caractères désignent successivement le type du fichier et les droits qui lui sont associés ; le premier caractère désigne le type du fichier : s'il s'agit d'un fichier ordinaire, c'est un tiret (-). Si le fichier est un répertoire, le caractère de gauche sera un d . Il existe d'autres types de fichiers dont nous parlerons plus tard. Les neuf caractères qui suivent représentent les droits associés au fichier. Les neuf prochains caractères sont séparés en trois groupes de trois permissions. Le premier groupe représente les droits associés au propriétaire du fichier; les trois suivants s'appliquent à tous les utilisateurs appartenant au groupe du propriétaire ; et les trois derniers aux autres. Un tiret (-) signifie que le droit n'est pas octroyé.
Ensuite, le nombre de liens du fichier est affiché. Nous verrons plus loin que l'identifiant unique d'un fichier n'est pas son nom, mais un numéro (le numéro d'inœud), et qu'il est possible pour un fichier sur disque d'avoir plusieurs noms. Pour un répertoire, le nombre de liens a une signification spéciale, que nous aborderons également un peu plus loin.
viennent ensuite le nom de l'utilisateur propriétaire du fichier et le nom du groupe propriétaire ;
enfin sont affichés la taille du fichier (en octets) ainsi que la date de sa dernière modification. Pour finir, vous trouverez également le nom du fichier ou du répertoire lui-même à la fin de la ligne.
Observons maintenant en détails les droits associés à l'accès de chacun de ces fichiers : il faut tout d'abord enlever le premier caractère, qui désigne le type. Donc, pour le fichier un_fichier, les droits accordés sont : rw-r-----. Voici comment les interpréter :
les trois premiers (rw-) sont les droits accordés à l'utilisateur propriétaire de ce fichier, en l'occurrence reine. L'utilisateur reine peut donc lire le fichier (r), le modifier (w) mais ne peut pas l'exécuter (-) ;
les trois suivants (r--) s'appliquent à tout utilisateur qui n'est pas reine mais qui appartient au groupe users : il pourra lire le fichier (r), mais ne pourra ni le modifier ni l'exécuter (--) ;
les trois derniers (---) s'appliquent à tout utilisateur qui n'est pas reine et qui n'appartient pas au groupe users : un tel utilisateur n'a tout simplement aucun droit sur ce fichier.
Pour le répertoire un_répertoire, les droits sont rwxr-xr--, et donc :
pierre, en tant que propriétaire du répertoire, peut en lister le contenu (r), peut ajouter des fichiers dans ce répertoire ou en supprimer (w), et il peut traverser ce répertoire (x) ;
tout utilisateur qui n'est pas pierre mais qui appartient au groupe users pourra lister le contenu de ce répertoire (r) mais ne pourra pas y ajouter des fichiers (-) ; par contre, il aura le droit de le traverser (x) ;
tout autre utilisateur ne pourra que lister les fichiers de ce répertoire (r), mais c'est tout. Il sera incapable de le traverser.
Il existe une exception à ces règles : root. root peut changer les attributs (droits, propriétaire, groupe propriétaire) de tous les fichiers, même s'il n'en est pas le propriétaire. Cela veut dire qu'il peut aussi s'en attribuer la propriété ! Il peut lire des fichiers sur lesquels il n'a pas le droit de lecture, traverser des répertoires auxquels il n'aurait normalement pas accès, et ainsi de suite. Et s'il lui manque un droit, il lui suffit simplement de se le rajouter. root a le contrôle complet du système, ce qui implique un niveau de confiance assez élevé en la personne qui possède le mot de passe root.
Pour conclure, il est utile de mentionner les différences entre les noms de fichiers dans le monde UNIX® et le monde Windows®. UNIX® permet une flexibilité bien plus grande et a moins de limitations :
un nom de fichier peut comporter n'importe quel caractère (à l'exception du caractère ASCII 0, qui dénote la fin d'une chaîne de caractères, et /, qui est le séparateur de répertoires), même des caractères non imprimables. De plus, UNIX® est sensible à la casse : les fichiers readme et Readme sont différents, car r et R sont deux caractères distincts pour les systèmes basés sur UNIX® ;
comme vous avez pu le remarquer, un nom de fichier ne comporte pas forcément une extension, à moins que vous ne souhaitiez nommer vos fichiers ainsi. Les extensions de fichier n'identifient pas le contenu desdits fichiers sous GNU/Linux ou sous la plupart des systèmes d'exploitation. Cependant, ces « extensions » ainsi nommées sont toujours très pratiques. Le caractère point (.) sous UNIX® n'est qu'un caractère comme les autres mais il peut avoir une signification particulière, les noms de fichier commençant avec un point sous UNIX® étant des « fichiers cachés ».[1], ce qui inclut également les répertoires dont le nom commence par un .
[1] Par défaut, les fichiers cachés ne seront pas visibles dans un gestionnaire de fichiers à moins de l'avoir expressément demandé. Dans un terminal, il vous faudra taper la commande ls -a pour voir tous les fichiers cachés. En général, ils contiennent des informations de configuration. Depuis votre répertoire home/ jetez un oeil à .mozilla ou .openoffice pour voir un exemple.