[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Guide d'introduction à Debian GNU-Linux
Chapitre 9 Un peu plus sur les fichiers


Dans la partie 7.2, nous avons montré comment déplacer et renommer des fichiers avec mv, comment les copier avec cp, comment les détruire avec rm, comment détruire des répertoires avec rmdir et comment en créer avec mkdir. Ce chapitre va couvrir des aspects un peu plus avancés du traitement de fichiers.


9.1 Permissions

Les systèmes Unix et GNU sont paramétrables pour pouvoir autoriser de nombreuses personnes à utiliser la même machine tout en conservant secrets certains fichiers ou en empêchant certaines personnes de modifier certains fichiers. Vous pouvez le vérifier par vous-même. Loguez-vous en tant que vous-même, c'est-à-dire PAS en root.

     whoami

Ceci pour vérifier que vous n'êtes pas root. Ensuite, entrer la commande suivante:

     rm /etc/resolv.conf

L'ordinateur devrait vous répondre Permission denied [41]. /etc/resol.conf est un des fichiers essentiels de configuration du système. Vous n'êtes pas autorisé à le modifier ou l'effacer si vous n'êtes pas root. Cela préserve le système d'une maladresse accidentelle. Si l'ordinateur est dans un organisme public, comme dans un bureau ou une école, cela le préserve des utilisateurs travaillant dessus.

Maintenant, tapez ls -l /etc/resolv.conf.

Cela devrait vous renvoyer quelque chose comme cela:

     -rw-r--r-- 1 root root 119 Feb 23 1997 /etc/resolv.conf

L'option -l de ls lui demande d'ajouter des informations additionnelles. Les informations sur la partie droite sont faciles à interpréter. La taille du fichier fait 119 octets. La date de dernière modification est le 23 février 1997 et le nom du fichier est /etc/resolv.conf. Sur la partie gauche de l'écran, les choses sont un tout petit peu plus compliquées.

Tout d'abord, une brève explication technique: -rw-r--r-- est le mode du fichier, le 1 correspond au nombre de liens physiques vers ce fichier (ou le nombre de fichiers dans le répertoire) et les deux root sont les propriétaires respectifs du fichier et du groupe auquel appartient le fichier.

Tout ceci est du charabia. Étudions les choses plus calmement.


9.1.1 Les droits de propriété d'un fichier

Tous les fichiers ont deux propriétaires: un utilisateur et un groupe. Le cas précédent peut porter à confusion car il y a un groupe nommé root et en même temps un utilisateur nommé root. Les groupes sont juste un rassemblement d'utilisateurs à qui on donne collectivement le droit d'accéder à une partie du système. Un bon exemple est le groupe games. Vous pouvez créer un groupe games sur votre ordinateur et le paramétrer de façon à ce que seuls les gens appartenant à ce groupe aient l'autorisation de jouer sur la machine.

Il y a des exemples plus pratiques: considérons le cas de la configuration d'une machine pour une école. Il y a certains fichiers dont vous voulez restreindre l'accès aux professeurs seulement, et pas aux élèves. Vous créez donc un groupe dans lequel vous rassemblez tous les professeurs. Ensuite, vous pouvez indiquer au système que certains fichiers appartiennent au groupe professeurs et que personne d'autre n'y a accès.

Explorons les groupes du système. En premier lieu, vous pouvez utiliser la commande groups du shell. Cela vous fournit une liste de groupes auxquels vous appartenez:

     $ groups 
     system-wide configuration!permissions!file
     ownershipusername dialout: cdrom floppy audio

Vous semblez donc n'appartenir qu'à un groupe, qui est identique à votre nom d'utilisateur. Dans tous les cas, root peut vous ajouter dans d'autres groupes. L'exemple suivant montre une personne membre de cinq groupes:

     less /etc/group

Ce fichier contient la liste des groupes disponibles sur votre système. Remarquez bien le groupe root (le seul membre de ce groupe est l'utilisateur root) et le groupe qui correspond à votre nom d'utilisateur. Il y a aussi des groupes comme dialout (les utilisateurs autorisés à lancer le modem) et floppy (les utilisateurs qui ont accès au lecteur de disquette). Il est probable que votre système ne soit pas configuré pour avoir l'usage de ces groupes. Il est préférable que seul root ait accès au lecteur de disquettes ou au modem pour le moment. Pour les détails en ce qui concernent ce fichier, reportez-vous au man group.

     ls -l /home

Cette commande vous montre que tous les répertoires utilisateurs sont la propriété de leur utilisateur et de leur groupe personnel.

Si vous venez d'installer Debian, vous êtes peut-être le seul utilisateur. Vous pouvez ajouter d'autres utilisateur à l'aide de la commande adduser.


9.1.2 Mode

En plus d'être la propriété d'un seul utilisateur et d'un seul groupe, chaque fichier et répertoire possède aussi un mode qui détermine qui a le droit de lire, d'écrire et d'exécuter un fichier (et de le lancer s'il s'agit d'un programme). Il y a d'autre petites fonctionnalités apportées par le mode mais ce sont des réglages avancées et nous les laisserons de côté pour le moment.

Un mode ressemble à cette sortie de ls: -rw-r--r--. À partir de maintenant, nous allons découvrir neuf ensembles: celui qui contrôle les permissions de lecture, d'écriture et d'exécution pour le propriétaire du fichier, pour le groupe auquel se rattache le fichier et pour les autres personnes (others) (tous ceux du système, quelque fois appelé le monde).

Dans la ligne mode, le premier « élément » donne le type de fichier. Le - signifie que c'est un fichier normal (regular file). Si nous avions eu d, cela aurait été un répertoire[42]. Il y a aussi quelques autres possibilités mais qui sont trop complexes pour le cadre de cette partie. Pour plus détails, allez voir la partie 15.2.2.

Les neuf éléments restant sont utilisés pour définir le mode du fichier. Les neuf bits basics (read, write et execute pour l'utilisateur, le groupe et les autres) sont définis en trois blocs de rxw.

Si toutes les permissions sont activées et qu'il s'agit d'un fichier normal, le mode va ressembler à ceci:

     -rxwrxwrxw

Si c'était un répertoire avec toutes les permissions désactivées pour le monde et activées pour tous les utilisateurs et le groupe, cela ressemblerait à:

     drxwrxw---

Le tableau suivant indique la signification des permission de lecture, écriture et exécution pour les fichiers et les répertoires:

      ---------------------------------------------------------------
     |   Code    |  Nom    | Ce que cela permet | Ce que cela permet |
     |           |         | aux fichiers       | aux répertoires    |
      ---------------------------------------------------------------
     |     r     | lecture |  Examen du contenu |   Liste le contenu |
     |           |         |     du fichier     |    du répertoire   |
      ---------------------------------------------------------------
     |           |         |    Modification    |Ajout ou destruction|
     |     w     | écriture|     du fichier     | de fichiers dans le|
     |           |         |                    |    répertoire      |
      ---------------------------------------------------------------
     |     x     |exécution| lancer en tant que |Accéder aux fichiers|
     |           |         |   commande         | du répertoire      |
      ---------------------------------------------------------------

Les modes du répertoire peuvent porter un peu à confusion donc voici une série d'exemples des effets de combinaisons diverses.

     r--

L'utilisateur, le groupe et les autres avec ces permissions peuvent afficher le contenu du répertoire mais ne peuvent rien faire d'autre. Les fichiers contenus dans ce répertoire ne peuvent être lus, modifiés ou manipulés de quelle que façon que ce soit. La seule action autorisée consiste à lire le répertoire en lui-même ce qui revient à afficher ce qu'il contient et donc la liste des fichiers.

     rw-

La permission d'écriture n'a pas d'effet en l'absence de celle d'exécution donc ce mode se comporte exactement comme le mode précédent.

     r-x

Ce mode permet aux fichiers présents dans le répertoire d'être visibles et permet aussi d'accéder à ces fichiers. Dans tous les cas, les fichiers ne peuvent être créés ou détruits. Accéder signifie que vous pouvez voir, changer et exécuter les fichiers suivant leurs permissions respectives.

     --x

Les fichiers de ce répertoire sont accessibles mais le contenu du répertoire ne l'est pas. Il vous faut donc connaître à l'avance le nom du fichier que vous recherchez (à moins d'avoir des talents de devin). Les fichiers ne peuvent être ni créés ni détruits.

     rwx

Vous pouvez faire tout ce que vous voulez avec les fichiers de ce répertoire tant que vous respectez leurs permissions respectives.

Les permissions d'écriture d'un répertoire détermine si vous pouvez détruire des fichiers dans ce répertoire. Un fichier en lecture seule pourra être effacé si vous avez les permissions d'écriture dans le répertoire le contenant. Vous ne pouvez détruire un fichier d'un répertoire en lecture seule même si vous avez les droits d'écriture sur le fichier.

Cela signifie que si vous êtes le propriétaire d'un répertoire, vous pouvez toujours détruire un de ses fichiers, y compris si ce fichier appartient à root.

La permission d'exécution d'un répertoire détermine la possibilité d'avoir accès aux fichiers - si bien sûr leurs permissions respectives l'autorisent. Si vous avez le droit d'exécution d'un répertoire, les droits d'exécution de ses fichiers devraient suivre. Sinon, les permissions des fichiers ne servent à rien: vous y avez accès dans tous les cas.


9.1.3 Les permissions en pratique

Cette partie contient une série d'exemples pour montrer comment utiliser les permissions. Pour changer les permissions, on utilise la commande chmod.

     cd ; touch monfichier

Il y a une série de nouveaux trucs ici. En premier, vous pouvez utiliser ; pour mettre deux commandes sur la même ligne. Vous pouvez entrer la commande précédente comme suit:

     $ cd
     $ touch monfichier

ce qui revient au même que

     $ cd; touch monfichier

Les deux méthodes conduisent au même résultat.

Rappelez-vous que cd employé seul vous renvoie dans votre répertoire personnel. touch est normalement utilisé pour modifier la date de création d'un fichier à la date courante. Mais cela a une autre fonctionnalité intéressante. Si le fichier n'existe pas, touch le crée. Ainsi, vous êtes en train de créer un fichier pour pouvoir faire des expérimentations dessus. Utilisez ls -l pour observer que le fichier a bien été créé et remarquez son mode de permission:

     $ ls -l
     -rw-r--r-- 1 user user 0 Nov 18 22:04 monfichier

Bien-sûr, la date et le nom du groupe et de l'utilisateur seront différents chez vous. La taille du fichier est 0 car touch a créé un fichier vide. -rw-r--r-- est le mode de permission par défaut sous Debian.

     chmod u+x monfichier

Cette commande ajoute (+) des permissions d'exécution (x) pour l'utilisateur (u) à qui appartient le fichier. Utilisez ls -l pour en voir les effets.

     chmod go-r monfichier

Maintenant, vous ôtez (-) les permissions de lecture (r) au groupe (g) à qui appartient le fichier et à tous les autres (o). À nouveau, utilisez ls -l pour voir les modifications.

     chmod ugo=rx monfichier

Ici, vous positionnez (=) les permissions de lecture et d'exécution pour l'utilisateur, le groupe et les autres. Cela positionne les permissions exactement comme vous l'avez spécifié et enlève les autres permissions. Ainsi, seules les permissions rx seront activées, et toutes les permissions w seront retirées. À partir de maintenant, personne ne peut modifier le fichier.

     chmod a-x monfichier

est un raccourci[43] pour ugo. Ainsi, seules les permissions d'exécution vont être retirées.

     rm monfichier

Avec cette commande, nous allons tenter de détruire le fichier mais sans les droits d'écriture. rm va alors s'assurer de votre certitude en affichant le message suivant[44]:

     rm: remove 'monfichier', overriding mode 0444 ?

Vous devrez répondre en tapant y et ensuite en appuyant sur Entrée. Ceci est une fonctionnalité de rm et non une conséquence des permissions. L'autorisation de détruire un fichier vient des droits sur le répertoire et vous avez les droits sur ce répertoire. Dans ce cas, rm essaie d'être le plus convivial possible en se figurant que si vous ne vouliez pas changer les permissions (et a fortiori enlever les droits d'écriture), vous ne vouliez pas plus le détruire et ainsi il vous demande de faire le choix.

Qu'est-ce donc cette affaire 0444 dans la question de rm ? Les modes de permission sont en fait un nombre de 12 bits comme celui-ci: 000100100100. 0444 est représentation octal (i-e en base 8) qui est la base conventionnelle pour écrire un mode. Ainsi, vous pouvez écrire chmod 444 monfichier à la place de chmod ugo=r monfichier.


9.2 Présentation des fichiers et de leurs emplacements

Maintenant que vous êtes capable de naviguer au gré des répertoires, allons faire un tour auprès des fichiers et des répertoires que vous avez créés en installant Debian. Si vous êtes curieux, faîtes un cd dans chacun d'entre eux et tapez ls pour voir leur contenu. Si le résultat ne tient pas dans l'écran, essayez ls | less où | est le caractère tube que l'on trouve généralement au même emplacement que la touche retour arrière[45].

Votre répertoire personnel est l'endroit où vous placez vos travaux personnels, votre courrier électronique et tous les autres documents, ainsi que vos fichiers de configurations personnelles. C'est votre « chez vous » dans le système...

Il y a évidemment bien d'autres répertoires dans votre système, bien trop d'ailleurs pour que l'on puisse tous les décrire ici.

Pour changer quelque chose, vous aurez certainement à vous contenter de votre répertoire personnel et de /etc. Sur un système Debian, il y a rarement une occasion de changer quelque chose d'autre car tout est automatiquement installé pour vous.

/etc est utilisé pour configurer le système comme un tout. Vous n'utiliserez votre propre répertoire personnel que pour configurer votre propre environnement et stocker vos propres données. L'idée de base est de vous confiner dans /home/votrenom pour le travail quotidien et ainsi, vous ne pourrez rien casser ailleurs. À l'occasion, vous vous loguerez en tant que root pour paramétrer quelque chose mais seulement si c'est absolument nécessaire. Bien-sûr, si vous utilisez Debian à l'école ou bien en entreprise et que quelqu'un d'autre est l'administrateur système, vous n'aurez pas accès au compte root et vous ne pourrez changer des choses que dans votre compte personnel (ou dans les comptes où vous avez accès). Ceci limite ce que vous pouvez faire avec le système.


9.3 La compression de fichier avec gzip

Il est souvent bien pratique de réduire la taille d'un fichier - disons, pour le télécharger plus rapidement, ou bien pour gagner de la place sur votre disque dur. Le programme affecté à cette tâche est gzip (GNU zip). Voici comment il fonctionne:

     $ cd; cp /etc/profile ./monfichier

Cela vous renvoie dans votre répertoire personnel et copie un fichier arbitrairement choisi (/etc/profile) dans votre répertoire courant en le renommant monfichier.

     $ ls -l

Affiche le contenu du répertoire courant. Remarquez bien la taille de monfichier.

     $ gzip monfichier

Ceci comprime monfichier.

     $ ls -l

Observez le résultat de cette commande: monfichier s'appelle maintenant monfichier.gz. Il est aussi beaucoup plus petit.

     $ gunzip monfichier.gz; ls -l

Ceci décomprime le fichier. Remarquez bien que monfichier est retourné dans son état d'origine. Et remarquez aussi que pour décomprimer, il faut utiliser gunzip et non gzip.

     $ rm monfichier

Utilisez cette commande pour effacer le fichier puisqu'on ne l'avait créé juste que pour expérimenter.


9.4 Rechercher des fichiers

Il y a deux utilitaires pour rechercher un fichier: find et locate. find recherche vraiment les fichiers dans leur état présent. locate recherche dans un index engendré automatiquement par le système chaque matin à 6h42 (c'est un cron dont on trouvera une explication un peu plus loin dans le livre). locate ne sera jamais capable de trouver un fichier créé après la génération de l'index. Bien-sûr, puisque locate recherche dans un index, il est beaucoup plus rapide - un peu comme rechercher dans l'index d'un livre plutôt qu'effeuiller chaque page.

Pour comparer les deux façons de faire une recherche, on va supposer que l'on ne se rappelle plus où est le fichier de configuration XF86Config du serveur X.

     $ locate XF86Config

Cela devrait être très rapide. Vous allez obtenir une liste de noms de fichier contenant XF86Config, quelque chose comme:

     /etc/X11/XF86Config
     /usr/X11R6/lib/X11/XF86Config
     /usr/X11R6/lib/X11/XF86Config.eg
     /usr/X11R6/man/man5/XF86Config.5x.gz

Maintenant, essayez la commande find:

     $ find / -name XF86Config

Vous allez entendre une activité intense du disque dur, et cela va prendre un temps assez long. Le résultat devrait ressembler à:

     /ect/X11/XF86Config
     /usr/X11R6:lib/X11/XF86Config
     find: /var/spool/cron/atjobs: Permission denied
     find: /var/spool/cron/atspool: Permission denied
     find: /var/lib/xdm/authdir: Permission denied

Remarquez que find n'a trouvé que les fichiers appelés exactement XF86Config et non pas ceux contenant cette chaîne de caractères. find a aussi essayé de rechercher dans tous les répertoires du système - y compris ceux dont vous n'avez pas les droits d'accès. C'est la raison pour laquelle vous avez les messages Permission denied (Permission non accordée).

Leur syntaxe aussi est différente. Avec find, vous devez choisir à partir de quel répertoire effectuer la recherche alors que locate choisit automatiquement le répertoire racine. Et vous devez spécifiez votre recherche en utilisant l'option -name. Vous pouvez aussi rechercher des fichiers avec des tas d'autres critères, comme les dates de modification ou les propriétaires. Pour utiliser find dans une recherche de fichiers dont le nom contient XF86Config, il vous faut utiliser un motif de recherche:

     $ find / -name '*XF86Config*'

Comme la plupart des outils en lignes de commandes, find accepte des motifs comme arguments.

De façon générale, find est un outil beaucoup plus puissant et locate est un outil très rapide pour des recherches journalières. L'intégralité des recherches possible prendrait un temps fou à expliquer. Pour plus de détails, tapez info find qui vous conduira au travers des méandres des subtilités de find et locate.


9.5 Déterminer le contenu d'un fichier

Debian vous offre un utilitaire capable de deviner le contenu d'un fichier à votre place. Bien que cela ne soit pas à 100% sûr, vous pouvez utiliser cette commande pour explorer votre système.

     $ file /bin/cp

Vous devriez avoir quelque chose comme ceci:

     /bin/cp: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped

Si l'on retire les parties techniques, on peut dire que c'est un fichier exécutable pour machine Intel.

     $ file /etc/init.d/boot

La commande précédente vous donne la réponse suivante:

     /etc/init.d/boot: Bourne shell script text

ce qui veut dire que c'est un fichier texte contenant un script écrit en Bourne shell.


9.6 Utiliser un gestionnaire de fichier

Plutôt que manipuler les fichiers à la main, vous pouvez utilisez un gestionnaire de fichiers. Si vous manipulez de nombreux fichiers à la fois, un gestionnaire de fichiers peut rendre votre travail plus efficace. Il y a des gestionnaires de fichiers orienté texte, comme GNU Midnight Commander (mc) et un grand nombre de gestionnaires de fichiers pour X Window (par exemple gmc qui est la version X Window de GNU Midnigt Commander).

Décrire chacun d'entre est hors du propos de ce livre mais vous pouvez les essayer si la ligne de commande ne vous sied pas.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Guide d'introduction à Debian GNU-Linux
Traduction du document du 2 octobre 2000
John Goerzen et Ossama Othman
Traduction française de Patrice Karatchentzeff p.karatchentzeff@free.fr