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

Guide d'introduction à Debian GNU-Linux
Chapitre 15 Pour en savoir plus...


À présent, vous possédez de bonnes bases pour construire votre système GNU-Linux. Dans ce chapitre, nous allons aborder quelques notions très utiles des fonctionnalités avancées de GNU-Linux.


15.1 Les expressions rationnelles

Une expression rationnelle est une description d'un ensemble de caractères. On utilise cette description pour éplucher un fichier à la recherche d'un texte correspondant à cette expression rationnelle. Les expressions rationnelles sont analogues aux motifs de recherche du shell (voir partie 8.6) mais elles sont plus compliquées et beaucoup plus puissantes. elles sont à la fois plus compliquées et plus puissantes.

Une expression rationnelle est formée de texte et de méta-caractères. Un méta-caractère est simplement un caractère avec une signification particulière. Les méta-caractères comprennent les signes suivants:

     . * [] - \ ^ $

Si une expression rationnelle ne comprend que du texte (pas de méta-caractère), cela correspond exactement au texte. Par exemple, l'expression rationnelle mon expression rationnelle correspond exactement au texte mon expression rationnelle et à rien d'autre. Les expressions rationnelles prennent habituellement en compte la casse.

Vous pouvez utiliser la commande egrep pour extraire les lignes d'un fichier qui contiennent une expression rationnelle. Sa syntaxe est la suivante:

     egrep 'regexp' nomdefichier1 ...

Les guillemets simples ne sont pas obligatoires mais cela ne mange pas de pain de les ajouter.

Par exemple, pour trouver toutes les lignes contenant le mot GNU dans la GPL, vous tapez:

     egrep 'GNU' /usr/doc/copyright/GPL

egrep va vous égrener les lignes correspondantes sur la sortie standard. Si vous voulez toutes les lignes contenant freedom (liberté) suivi d'un ensemble quelconque de caractères et suivi du mot GNU, vous pouvez taper:

     egrep 'freedom.*GNU' /usr/doc/copyright/GPL

Le . signifie « n'importe quel caractère » et le * signifie « zéro ou plus de la chose précédente » soit dans ce cas « zéro ou plus de n'importe quel caractère ». Ainsi, .* correspond bien à n'importe quel texte. egrep effectue un traitement ligne par ligne donc freedomet GNU doivent se trouver sur la même ligne.

Voici un récapitulatif des méta-caractères dans expressions rationnelles:

Voici une série d'exemples concrets pour vous aider.


15.2 Notions avancées sur les fichiers

Maintenant que vous avez compris les bases sur les fichiers, il est temps d'apprendre plus de choses à leur sujet.


15.2.1 La véritable nature des fichiers: les liens physiques et les i-noeuds

Chaque fichier de votre système est représenté par un i-noeud (en anglais, inode pour Information Node, prononcez « aïe-node », noeud d'information). un i-noeud contient toutes les informations du fichier. Cependant, l'i-noeud n'est pas directement visible. De plus, chaque i-noeud est lié au système de fichiers par un ou plusieurs liens physiques. Les liens physiques contiennent le nom du fichier et le numéro d'i-noeud. L'i-noeud contient le fichier en lui-même, c'est-à-dire, l'emplacement où l'information est stockée sur le disque, les permissions d'accès, le type de fichier et ainsi de suite. Le système peut trouver n'importe quelle i-noeud s'il a son numéro.

Un simple fichier peut avoir plus d'un lien physique. Cela signifie que tous ces fichiers multiples correspondent au même fichier (c'est-à-dire qu'ils sont associés au même numéro d'i-noeud). Cependant, vous ne pouvez faire de lien physique entre des systèmes de fichiers: tous les liens physiques à un fichier particulier (i-noeud) doivent être dans le même système de fichiers. C'est parce que chaque système de fichiers possède sa propre table d'i-noeuds et que l'on ne peut dupliquer des numéros d'i-noeud sur différents systèmes de fichiers.

Parce que tous les liens physiques à une certaine i-noeud se réfèrent au même fichier, vous pouvez modifier le fichier en l'appelant par un nom et voir ensuite les modifications en l'appelant par un des autres noms. Essayez ceci:

     cd; echo "Bonjour" > premierlien

Vous allez dans votre répertoire personnel et vous créez un premier fichier appelé premierlien contenant le mot « Bonjour ». Ce que vous venez de faire est juste de rediriger la sortie de echo (echo renvoie juste ce que vous lui donnez) en la plaçant dans premierlien. Allez voir le chapitre sur le shell pour de plus amples explications.

     cat premierlien

Pour vérifier le contenu de premierlien.

     ln premierlien secondlien

Crée un lien physique: secondlien pointe maintenant sur le même i-noeud que premierlien.

     cat secondlien

Pour confirmer que secondlien est bien identique à premierlien.

     ls -l

Remarquez bien que le nombre de liens physiques affiché pour premierlien et secondlien est 2.

     echo "change" >> secondlien

C'est une nouvelle redirection du shell (ne vous souciez pas des détails). Vous avez ajouté le mot « change » à secondlien. Confirmez-le avec cat secondlien.

     cat premierlien

premierlien a aussi le mot « change » ! C'est parce que premierlien et secondlien se réfèrent au même fichier. Peu importe comment vous l'appelez lorsque vous le modifiez.

     chmod a+rwx premierlien

Cela modifie les permissions de premierlien. Entrez la commande ls -l pour vérifier que les permissions de secondlien ont aussi été modifiées. Cela signifie que les informations de permission résident dans l'i-noeud, et non dans le lien.

     rm premierlien

Cela détruit le lien. C'est une astuce de rm. Cela détruit en réalité le lien et non le fichier. Maintenant, tapez ls -l et remarquez que secondlien est toujours là. Notez bien aussi que le nombre de liens est passé de 2 à 1.

     rm secondlien

Cela détruit le second lien. Quand il ne reste plus de lien rattaché à un fichier, Linux détruit le fichier lui-même c'est-à-dire son i-noeud.

Tous les fichiers fonctionnent ainsi, et même les fichiers spéciaux comme les périphériques (comme /dev/hda).

Un répertoire n'est qu'une liste de nom de fichiers et de numéros d'i-noeuds, c'est-à-dire une liste de liens physiques. Lorsque vous créez un lien physique, vous ajouter seulement une association numéro-nom à un répertoire. Lorsque vous détruisez un fichier, vous détruisez juste un lien physique d'un répertoire.


15.2.2 Types de fichiers

Nous avons dissimulé jusqu'à présent le fait que le noyau Linux considère presque tout comme un fichier. Cela inclut les répertoires et les périphériques. Ce sont juste des genres de fichiers un peu spéciaux.

Comme vous devez vous le rappelez, le premier caractère dans ls -l renvoie le type du fichier. Pour un fichier ordinaire, cela ne renvoie que - tout simplement. Les autres possibilités sont les suivantes:

Liens symboliques

Les liens symboliques (aussi appelés symlink ou liens logiciels) sont l'autre type de lien avec les liens physiques. Un lien symbolique est un fichier spécial qui « pointe vers » un lien physique de n'importe quel système de fichiers monté. Lorsque vous tentez de lire le contenu d'un lien symbolique, cela vous renvoie le contenu du fichier pointé plutôt que le contenu du lien en lui-même. Puisque les répertoires, les périphériques et autres liens symboliques sont des fichiers, vous pouvez pointer un lien symbolique sur chacun de ces objets.

Pour résumé, un lien physique est un nom de fichier et son numéro d'i-noeud. Un fichier est réellement un i-noeud: un emplacement sur un disque, le type du fichier, les modes de permission, etc... Un lien symbolique est un i-noeud qui contient le nom du lien physique. Un lien symbolique appareille deux noms de fichiers ensemble tandis qu'un lien physique appareille un nom de fichier avec un numéro d'i-noeud.

Tous les liens physiques d'un même fichier ont le même état. Cela veut dire qu'il n'y en a pas un de privilégié. Si vous effectuez une opération sur l'un, c'est comme la faire sur n'importe lequel d'entre eux. C'est parce que le lien physique réfère au même i-noeud. Les opérations sur les liens symboliques, pour leurs parts, affectent parfois le propre i-noeud du lien (celui contenant le nom du lien physique) et parfois affectent le lien physique sur lequel ils pointent.

Il y a un certain nombre de différences importantes entre les liens symboliques et les liens physiques.

Les liens symboliques peuvent traverser des systèmes de fichiers. C'est parce qu'ils contiennent les noms complets des fichier, en partant d'un répertoire racine et que les noms complets de fichiers sont uniques. Puisque les liens physiques pointent vers un numéro d'i-noeud et que les numéros d'i-noeuds sont uniques qu'à l'intérieur d'un système de fichiers, ils deviendraient impossible de les qualifier avec certitude si l'on ne connaissait pas le système de fichiers.

Vous pouvez faire des liens symboliques vers des répertoires mais cela n'est pas possible pour les liens physiques. Chaque répertoire a des liens physiques - son référencement dans son répertoire parent, son entrée . et l'entrée .. dans chacun de ses sous-répertoires - mais pour pouvoir ordonner le système de fichiers, aucun autre lien physique n'est autorisé. En conséquence de quoi, le nombre de fichiers d'un répertoire est égal au nombre de liens physiques du répertoire moins deux (vous retirez le nom du répertoire et le lien . ).

Pour comparer un lien physique et un lien symbolique: vous pouvez uniquement faire un lien physique sur un fichier existant car il doit exister un numéro d'i-noeud sur lequel se référer. Par contre, vous pouvez faire un lien symbolique sur n'importe quel fichier, qu'il existe +réellement ou pas.

Détruire un lien symbolique détruit seulement le lien. Cela n'a pas d'impact sur le fichier anciennement pointé. Détruire le seul lien physique d'un fichier conduit à détruire le fichier.

Essayez ceci:

     cd; ln -s /tmp/moi MonTmp

Vous vous positionnez dans votre répertoire personnel. ls avec l'option -s fabrique un lien symbolique et dans ce cas, ce lien s'appelle MonTmp et pointe sur le fichier /tmp/moi.

     ls -l MonTmp

Vous devriez observer une sortie du genre:

     lrxwrxwrxw 1 havoc havoc 7 Dec 6 12:50 MyTmp -> /tmp/me

La date ainsi que l'utilisateur et le groupe devrait être différents pour vous. Notez le type du fichier: l. Cela indique un lien symbolique. Regardez aussi les permissions. Les liens symboliques ont toujours ces permissions. Si vous tentez de changer les permissions d'un fichier symbolique via chmod, vous allez réellement changer les permissions du fichier sur lequel il pointe.

     chmod 700 MonTmp

Vous devriez obtenir un No such file or directory (pas trouvé de fichier ou de répertoire portant ce nom) car le fichier /tmp/moi n'existe pas. Remarquez que cela n'a pas empêché la création du lien symbolique.

     mkdir /tmp/moi

Cela crée le répertoire /tmp/moi.

     chmod 700 MonTmp

devrait maintenant fonctionner sans problème.

     touch MonTmp/monfichier

Pour créer un fichier dans MonTmp.

     ls /tmp/moi

Le fichier a vraiment été créé dans /tmp/moi.

     rm MonTmp

Détruit le lien symbolique. Remarquez que cela ne retire que le lien et non ce vers quoi il pointe. Ensuite, vous devez utiliser rm et non pas rmdir:

     rm /tmp/moi/monfichier; rmdir /tmp/moi

Cela nettoie tout ce qu'il reste.

Fichiers périphériques

Les fichiers périphériques se réfèrent à un périphérique physique ou virtuel de votre système, comme votre disque dur, votre carte vidéo, votre écran et votre clavier. Un exemple de périphérique virtuel est la console, représentée par /dev/console.

Il y a deux sortes de périphériques: bloc et caractère. On peut avoir accès aux périphériques caractères caractère par caractère. Rappelez-vous que la plus petite unité de données qui peut être écrite ou bien être lue à partir du périphérique est un caractère (octet).

On peut accéder aux périphériques bloc avec des unités plus grandes appelées blocs, qui contiennent un certain nombre de caractères. Votre disque dur est un périphérique bloc.

Vous pouvez lire ou écrire dans des fichiers périphériques comme vous le feriez avec n'importe quelle autre sorte de fichiers, quoique le fichier puisse contenir alors un étrange baragouin incompréhensible à nous autres humains. Écrire n'importe quoi dans ces fichiers n'est pas une bonne idée. Parfois si. Par exemple, vous pouvez envoyer un fichier PostScript dans le périphérique de l'imprimante /dev/lp0 ou bien envoyer des commandes de modem au fichier périphérique idoine à partir du bon port série.

Il existe un fichier particulier appelé /dev/null. Il détruit tout ce qu'il reçoit. Si vous ne voulez pas quelque chose, envoyez-le dans /dev/null. C'est essentiellement un puits sans fond. Si vous tentez de lire /dev/null/, vous obtiendrez un end-of-file (EOF, caractère de fin de fichier) immédiatement. /dev/zero est similaire, à l'exception du fait que sa lecture vous renverra le caractère \0 (pas le même que le chiffre 0).

Tubes nommés (FIFO)

Un tube nommé est un fichier qui agit comme un tube. Vous entrez quelque chose dans le fichier et cela ressort. Ceci est appelé une FIFO (First-In-First-Out, premier entré, premier sorti) car la première chose que vous entrez est aussi la première chose que l'on sort.

Si vous écrivez dans un tube nommé, le processus d'écriture ne s'arrête pas tant qu'il y a quelque chose à lire dans le tube. Si vous lisez dans un tube nommé, le processus de lecture attend qu'il y ait quelque chose à lire avant de s'arrêter. La taille du tube est toujours zéro. Il ne stocke pas de donnée: il lie simplement deux processus à travers le signe « | » du shell. Dans tous les cas, puisque le tube a un nom, les deux processus n'ont pas à appartenir à la même ligne de commandes ou même à être lancé par le même utilisateur.

Vous pouvez essayer ceci:

     cd; mkfifo montube

Activez alors le tube:

     echo "bonjour" > montube &

Cela place le processus qui essaie d'écrire « bonjour » dans le tube en arrière-plan. Remarquez bien que le processus ne rend pas la main: il attend que quelqu'un vienne lire dans le tube:

     cat montube

À ce moment, le processus echo s'achève car cat a lu le tube et le processus cat a affiché bonjour.

     rm montube

Vous pouvez détruire les tubes comme n'importe quel autre fichier.

Les sockets

Les sockets sont similaires aux tubes mais elles ne fonctionnent qu'à travers un réseau. C'est de cette façon que votre ordinateur travaille en réseau. Vous avez peut-être entendu parler de « WinSock », qui sont les sockets de Windows.

Nous n'irons pas plus loin sur ce sujet car vous n'aurez pas l'occasion de vous en servir, à moins de programmer. En tout cas, si vous apercevez un fichier marqué avec un type s sur votre ordinateur, vous saurez de quoi il s'agit.


15.2.3 Le système de fichiers proc

Le noyau Linux fournit un système de fichiers particulier qui est monté sous /proc dans les systèmes Debian. C'est ce que l'on appelle un « pseudo-système de fichiers » parce qu'il n'existe pas réellement sur vos périphériques physiques.

Le système de fichiers proc contient des informations sur le système et sur les processus en cours. Certains des « fichiers » de proc sont raisonnablement compréhensibles par un être humain (essayez cat /proc/meminfo et cat /proc/cpuinfo). Les autres fichiers sont un amas incompréhensible de chiffres. Les utilitaires systèmes traduisent les informations contenues dans ces chiffres et vous les présentent de façon plus compréhensible.

Les gens paniquent souvent lorsqu'ils remarquent qu'un fichier en particulier - /proc/kcore - est souvent énorme, C'est, à un cheval près, une copie du contenu de la mémoire de votre ordinateur. Il est utilisé pour déboguer le noyau. Il n'existe nulle part physiquement donc ne vous préoccupez pas de sa taille.

Si vous désirez en savoir plus sur /proc, tapez man 5 proc.


15.2.4 Copie à grande échelle

Il est parfois nécessaire de recopier un répertoire dans un autre emplacement. Peut-être avez-vous ajouté un nouveau disque dur et vous désirez faire une copie de /usr/local dessus. Il y a plusieurs façons de procéder:

La première est d'utiliser la commande cp. La commande cp -a demande à cp de préserver le maximum d'informations. Vous pourriez ainsi utiliser la commande suivante:

     cp -a /usr/local /destination

Cependant, il existe quelques cas qui ne fonctionnent pas[50]. Dès-lors, la meilleure façon de procéder lors d'une grande copie est d'enchaîner deux commandes tar consécutives, comme ceci:

     tar -cSpf - /usr/local | tar -xvSpf -C /destination

La première commande tar archive le répertoire et l'entube dans le second. La seconde commande déploie l'archive dans l'emplacement spécifié avec l'option -C.


15.3 Sécurité

Dans la partie 9.1, nous avons parlé des permissions sur les fichiers dans Linux. C'est une façon fondamentale de sécuriser votre système. Si vous faîtes tourner un système multi-utilisateurs ou un serveur, il est primordial d'établir des bonnes permissions. Une bonne règle de base consiste à configurer les fichiers avec les permissions les plus basses autorisant leur bon usage.

Si vous faîtes tourner un serveur en réseau, il y a quelques petites bricoles auxquelles il faut faire attention. Premièrement, vous devez désinstaller ou arrêter les services que vous n'utilisez pas. Un bon point de départ est le fichier /ect/inetd.conf. Vous pouvez probablement désactiver quelques services. Pour la plupart des services réseau, vous pouvez contrôler qui y a accès. Les fichiers /etc/host.allow et /etc/hosts.deny (documentés dans man 5 hosts_access) peuvent contrôler qui a accès à quel service. Vous devez aussi être à jour des rustines (patches) ou des mises-à-jour proposées par Debian. Elles sont disponibles dans votre miroir FTP de Debian.

Les règles suivantes de bon sens doivent aussi s'appliquer:

Bien que cela soit de peu d'utilité pour quelqu'un qui ne fait pas tourner un serveur, cela vaut la peine de se renseigner sur les questions de sécurité. Le mécanisme de sécurité de Debian vous protège de la plupart des virus.


15.4 Le développement de logiciels avec Debian

Debian est une plateforme privilégiée pour le développement de logiciels et la programmation. Voici une liste des langages et pseudo-langages supportés: C, C++, Objective-C, Perl, Python, m4, Ada, Pascal, Java, awk, Tcl/Tk, SQL, assembleur, Bourne shell, csh et bien d'autres encore. L'écriture de programmes est hors du propos de ce livre mais voici les programmes de développement parmi les plus populaires que l'on trouve sur Debian:


[ 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