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 4, 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 multiutilisateurs : 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. Notez que ces derniers ont aussi un groupe associé qui correspond initialement au groupe primaire de l'utilisateur propriétaire. Comme nous l'avons déjà mentionné (voir Section 1, « Utilisateurs et groupes »), un utilisateur peut appartenir à plusieurs groupes en même temps.
Cependant, la notion de propriété d'un fichier, prise seule, ne servirait pas à grand-chose. En tant que propriétaire d'un fichier, un utilisateur peut établir des permissions sur ce fichier. Ces permissions sont différentes pour 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 différence 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 la 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. Ces neuf caractères
se divisent 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.
L'information qui suit est 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étail les permissions associées à 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
. Ces utilisateurs n'ont
aucun droit sur ce fichier. Pour eux il est
« invisible ».
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
). 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 des dits fichiers sous GNU/Linux ou sous la
plupart des systèmes d'exploitation. Cependant, ces
« extensions » 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, y compris ceux
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.