Support de cours
Transcription
Support de cours
Conservatoire National des Arts et Métiers Centre associé de Strasbourg — Certificat Professionnel de Technicien Micro Réseau et Internet — UV TMRI-1 - Systèmes en réseaux 1 valeur, 100 heures Introduction au système Linux Rémi LEBLOND ([email protected]) 5 mai 2004 2 Table des matières 1 Introduction 1.1 Qu’est-ce qu’un logiciel libre ? . . . . . . . . . . . . . . . . . . 1.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 L’importance du code source . . . . . . . . . . . . . . . 1.1.3 Les libertés apportées aux utilisateurs de logiciels libres 1.1.4 La FSF et le projet GNU - La licence GPL . . . . . . . 1.2 Concepts de base de Linux . . . . . . . . . . . . . . . . . . . . 1.2.1 Origines : Le système UNIX . . . . . . . . . . . . . . . 1.2.2 Le système Linux . . . . . . . . . . . . . . . . . . . . . 1.2.3 Historique du projet Linux . . . . . . . . . . . . . . . . 1.3 Les distributions de Linux . . . . . . . . . . . . . . . . . . . . 1.3.1 Installation et configuration manuelle . . . . . . . . . . 1.3.2 Les distributions . . . . . . . . . . . . . . . . . . . . . 1.3.3 Standardisation des distributions . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 11 11 14 14 16 17 21 21 22 24 2 Fonctionnalités de Linux 2.1 Fonctionnalités du noyau . . . . . . . . . . 2.1.1 Présentation rapide . . . . . . . . . 2.1.2 Découpage du système . . . . . . . 2.1.3 Le noyau Linux . . . . . . . . . . . 2.1.4 Le couple GNU - Linux . . . . . . 2.1.5 Notion de processus . . . . . . . . 2.1.6 Parallèle avec Windows . . . . . . 2.2 Principe du système de fichiers . . . . . . . 2.2.1 Notion de système de fichier . . . . 2.2.2 Les différents types de fichiers . . . 2.2.3 Structure du système de fichiers . . 2.3 Sécurité et utilisateurs . . . . . . . . . . . . 2.3.1 Notion de système multi-utilisateur 2.3.2 Méta-données sur les fichiers . . . . 2.3.3 Processus de connexion . . . . . . . . . . . . . . . . . . . . . 27 27 27 28 29 32 37 38 39 39 39 40 44 44 45 46 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TABLE DES MATIÈRES 4 3 Arborescence d’un système Linux 3.1 Systèmes de fichier . . . . . . . . . . 3.1.1 Principe . . . . . . . . . . . . 3.2 Présentation des principaux répertoires 3.2.1 / . . . . . . . . . . . . . . . 3.2.2 /bin/ . . . . . . . . . . . . 3.2.3 /sbin/ . . . . . . . . . . . 3.2.4 /home/ . . . . . . . . . . . 3.2.5 /root/ . . . . . . . . . . . 3.2.6 /etc/ . . . . . . . . . . . . 3.2.7 /var/ . . . . . . . . . . . . 3.2.8 /usr/ . . . . . . . . . . . . 3.2.9 /opt/ . . . . . . . . . . . . 3.2.10 /dev/ . . . . . . . . . . . . 3.2.11 /mnt/ . . . . . . . . . . . . 3.2.12 /boot/ . . . . . . . . . . . 3.2.13 /tmp/ . . . . . . . . . . . . 3.2.14 /lib/ . . . . . . . . . . . . 3.2.15 /proc/ . . . . . . . . . . . 3.3 Montage de systèmes de fichier . . . . 3.3.1 Principe . . . . . . . . . . . . 3.3.2 La commande mount . . . . 3.3.3 Le fichier /etc/fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Utilisation de Linux 4.1 Trouver de l’aide . . . . . . . . . . . . . . 4.1.1 Le manuel . . . . . . . . . . . . . . 4.1.2 TexInfo . . . . . . . . . . . . . . . 4.1.3 Les HOWTO . . . . . . . . . . . . 4.1.4 Les documentations . . . . . . . . 4.1.5 Autres sources d’information . . . . 4.2 Les commandes . . . . . . . . . . . . . . . 4.2.1 Principes de base . . . . . . . . . . 4.2.2 Les entrées - sorties de commandes 4.2.3 Redirection de commandes . . . . . 4.3 Entrer et sortir de Linux . . . . . . . . . . . 4.3.1 Connexion à un système Linux . . . 4.3.2 Déconnexion d’un système Linux . 4.3.3 Arrêt et redémarrage du système . . 4.4 Parcours du système de fichier . . . . . . . 4.4.1 Identifier le répertoire courant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 47 47 49 49 49 49 49 50 50 51 52 53 53 54 54 55 55 55 56 56 56 58 . . . . . . . . . . . . . . . . 61 61 61 62 62 63 63 64 64 64 66 67 67 69 70 71 71 TABLE DES MATIÈRES 4.5 4.6 4.7 4.8 4.9 5 4.4.2 Naviguer dans les répertoires . . . . . . . . . . 4.4.3 Créer un nouveau répertoire . . . . . . . . . . 4.4.4 Supprimer un répertoire . . . . . . . . . . . . L’éditeur de texte vi . . . . . . . . . . . . . . . . . . . Manipulation de fichier . . . . . . . . . . . . . . . . . 4.6.1 Visualiser le contenu d’un fichier . . . . . . . 4.6.2 Copie de fichier . . . . . . . . . . . . . . . . . 4.6.3 Déplacement de fichier . . . . . . . . . . . . . 4.6.4 Suppression de fichier . . . . . . . . . . . . . 4.6.5 Liens de fichiers . . . . . . . . . . . . . . . . 4.6.6 Recherche de fichier . . . . . . . . . . . . . . 4.6.7 Recherche de texte dans un fichier . . . . . . . 4.6.8 Compression et décompression des fichiers . . Manipulation de processus . . . . . . . . . . . . . . . 4.7.1 Qu’est-ce qu’un processus . . . . . . . . . . . 4.7.2 Lancer une commande en tâche de fond . . . . 4.7.3 Interaction avec les processus . . . . . . . . . 4.7.4 Planifier l’exécution automatique de processus L’environnement utilisateur . . . . . . . . . . . . . . . 4.8.1 Les variables d’environnement . . . . . . . . . 4.8.2 Les alias . . . . . . . . . . . . . . . . . . . . 4.8.3 Portée de l’environnement . . . . . . . . . . . 4.8.4 Les fichiers de définition de l’environnement . Définition des droits d’accès . . . . . . . . . . . . . . 4.9.1 Identification des utilisateurs . . . . . . . . . . 4.9.2 Le fichier des utilisateurs du système . . . . . 4.9.3 Le fichier des groupes d’utilisateurs . . . . . . 4.9.4 Droits élémentaires sur les fichiers . . . . . . . 4.9.5 Définition des droits d’accès . . . . . . . . . . 5 Installation de Linux 5.1 Avant de commencer l’installation . . . . . . . . . . 5.1.1 Configuration minimale . . . . . . . . . . . 5.1.2 Récupération des informations sur le matériel 5.1.3 Sauvegarde des données . . . . . . . . . . . 5.1.4 Amorçage . . . . . . . . . . . . . . . . . . . 5.1.5 Partitionnement du disque . . . . . . . . . . 5.2 Déclaration des utilisateurs locaux . . . . . . . . . . 5.2.1 Création des utilisateurs . . . . . . . . . . . 5.2.2 Création des groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 76 77 77 82 83 83 84 84 84 86 88 90 91 91 91 93 94 94 94 94 96 96 97 97 98 98 99 102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 105 105 105 107 108 109 115 115 116 TABLE DES MATIÈRES 6 6 Mise en réseau 6.1 Principes généraux des réseaux . . . . . . . . . . . . 6.1.1 Les classes de réseau IP . . . . . . . . . . . 6.2 Configuration de base . . . . . . . . . . . . . . . . . 6.2.1 Affectation d’adresse . . . . . . . . . . . . . 6.2.2 Définition de règles de routage . . . . . . . . 6.2.3 Test de la configuration . . . . . . . . . . . . 6.2.4 Résolution des noms de machines . . . . . . 6.3 Centralisation de configuration . . . . . . . . . . . . 6.3.1 Installation d’un serveur NIS . . . . . . . . . 6.3.2 Mise en oeuvre d’un serveur de noms (DNS) 6.3.3 Partage de configuration réseau via DHCP . . 6.4 Partage de ressources . . . . . . . . . . . . . . . . . 6.4.1 Accès distant par telnet . . . . . . . . . . . . 6.4.2 Partage de fichiers par NFS . . . . . . . . . . 6.4.3 Publication de fichier via FTP . . . . . . . . 6.4.4 Publication Web via HTTP . . . . . . . . . . 7 Compilation du noyau 7.1 Principe . . . . . . . . . . . . . . . . . 7.2 Installation des fichiers sources . . . . . 7.3 Paramétrage de la compilation . . . . . 7.4 Compilation et installation du noyau . . 7.5 Compilation et installation des modules 8 Les scripts shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 119 119 119 119 121 121 122 122 122 125 125 125 125 125 125 125 . . . . . 127 127 128 129 130 133 135 Présentation du cours Objectifs du cours Le cours systèmes informatiques en réseau vise à fournir aux auditeurs les compétences suivantes : Pour chacun des deux systèmes Windows et Linux, être capable de les installer, les administrer, créer et gérer un réseau dans ces environnements, installer des logiciels bureautiques. Ce document ne traite uniquement le système Linux. Admission et pré-requis Cette formation s’adresse à toute personne en situation d’emploi ou de recherche d’emploi. Elle est ouverte aux bénéficiaires d’emplois-jeunes ou aux aides éducateurs préparant leur insertion professionnelle future. Aucun diplôme en informatique n’est à priori exigé. Il est cependant souhaitable d’avoir déjà utilisé un ordinateur et d’avoir une certaine pratique de son système d’exploitation. Des connaissances générales correspondant au niveau Baccalauréat sont exigées. Un entretien préalable à l’inscription permettra, le cas échéant, de s’assurer du niveau d’entrée du candidat. 7 8 TABLE DES MATIÈRES Chapitre 1 Introduction Dans ce chapitre, nous introduirons la notion de logiciel libre, nous aborderons ensuite le système Linux sous un angle historique, puis technique. A l’issue de ce chapitre, nous devrions avoir une vision globale de Linux nous permettant d’aborder la manipulation du système. 1.1 Qu’est-ce qu’un logiciel libre ? 1.1.1 Introduction Il est difficile de parler du système Linux sans aborder une de ses principales caractéristiques : il s’agit d’un logiciel libre. Mais qu’entend-on par logiciel libre ? Dans cette section, nous introduirons la notion de logiciel libre afin de bien comprendre son esprit et les possibilités qu’elle offre à ses utilisateurs. 1.1.2 L’importance du code source Pour comprendre le concept de logiciel libre, il faut d’abord comprendre ce qu’est un logiciel (ou encore un programme, ou une application). Du point de vue de l’utilisateur, un logiciel est souvent vu comme une application qui répond à l’un de ses besoins (traitement de textes, programme de dessin, jeu, etc... ). Nous l’envisageons sous une perspective un peu plus large, prenant en compte son mode d’élaboration, pour nous permettre d’évaluer les libertés que nous pouvons prendre à son égard. Pour créer un logiciel, un programmeur l’écrit dans un langage de programmation (C, Perl, Python, Java, ...) compréhensible et utilisable par les programmeurs. Un outil appelé compilateur permet ensuite de convertir ce langage en un code binaire (dit langage machine) qui est le seul que puisse interpréter un ordinateur. 9 CHAPITRE 1. INTRODUCTION 10 Le logiciel dans sa forme compréhensible par les programmeurs est appelé “code source”, et dans sa version en langage machine “binaire”. Le passage du code source au binaire est réalisé à l’aide d’un compilateur. Code source Binaire #include<stdio.h> int main(void) { int a=0, pid; pid = fork(); if (pid == 0) { // Programme du fils printf("Je suis le fils\n"); } else { // Programme du père int i,j; // Attente de la fin du fils //wait(); for (i=0; i<10; i++) Compilation 01000111101101101 00010101001011110 01101010111100000 01101101001001100 0011011101010110 011110110110110 0110110111011010 Exécution 1 0 F IG . 1.1 – Processus de création d’une application Si le code source est facilement compréhensible par un humain (pour peu qu’il connaisse le langage utilisé), le binaire n’est réellement exploitable que par une machine. Ainsi, s’il est très difficile de comprendre les rouages d’un logiciel si on ne dispose que du fichier binaire, l’analyse du code source dévoile tous les mécanismes mis en oeuvre par le logiciel1 . Le code source est donc essentiel en matière de logiciel, car sa connaissance permet d’examiner le fonctionnement d’une application et éventuellement de l’améliorer ou d’en corriger les bogues. C’est aussi, par exemple, le garant de l’absence de porte dérobée compromettant la sécurité d’un système informatique ou de fonctionnalité malicieuse. [APR] 1 Ce qui explique que bien des éditeurs de logiciel soient opposés à la divulgation des codes sources de leurs applications, au titre compréhensible de la protection de leurs “secrets de fabrication”. 1.1. QU’EST-CE QU’UN LOGICIEL LIBRE ? 11 1.1.3 Les libertés apportées aux utilisateurs de logiciels libres Un logiciel libre est un logiciel garantissant un certain nombre de libertés à ses utilisateurs. Nous allons procéder par analogie en comparant le code source d’un logiciel à une recette de cuisine. Imaginons que vous vous trouvez dans un restaurant et que vous mangez un excellent plat. Peut-être aurez vous l’envie de pouvoir le cuisiner chez vous pour vos amis ? C’est impossible si vous n’avez pas la recette du plat. Vous pouvez toujours le manger dans le restaurant, mais même si vous connaissez le goût, vous ne savez comment le reproduire. La liberté d’échanger des recettes de cuisines est essentielle pour les cuisiniers comme pour les simples gourmets. En informatique, il en va de même pour un un logiciel. Le code source est la recette, le binaire est le plat déjà cuisiné. La plupart des logiciels dits logiciels propriétaires sont distribués sans leur code source, et il est interdit d’essayer de comprendre leur fonctionnement. Il est interdit de les partager avec vos amis, et il est interdit d’essayer de les modifier pour les adapter à vos besoins. A l’opposé un logiciel libre garantit aux utilisateurs quatre libertés : – la liberté d’utiliser le logiciel, pour quelque usage que ce soit, – la liberté d’étudier le fonctionnement du programme, et de l’adapter à vos propres besoins, – la liberté de redistribuer des copies de façon à pouvoir aider votre voisin, – la liberté d’améliorer le programme, et de diffuser vos améliorations au public, de façon à ce que l’ensemble de la communauté en tire avantage. Ce sont ces libertés fondamentales à l’utilisation de l’informatique, à la création et au partage des informations, que l’APRIL2 entend protéger et développer. Les logiciels libres sont avant tout porteurs de liberté de partage et d’accès à la connaissance. Elles sont bien sûr essentielles aux informaticiens, mais aussi aux utilisateurs, pour lesquelles elles garantissent la capacité de maîtriser les outils et les informations sans risque de dépendance vis-à-vis d’un quelconque éditeur de logiciels. Les logiciels libres ont connu un succès planétaire grâce à l’effort de développement entrepris voilà plus de 15 ans dans le cadre du projet GNU. 1.1.4 La FSF et le projet GNU - La licence GPL Richard STALLMAN, considéré par tous comme le père des logiciels libres a commencé à penser au logiciel libre lorsqu’il travaillait au laboratoire d’intelligence artificielle au MIT dans les années 1980. 2 APRIL : Agence pour la Promotion de l’informatique Libre 12 CHAPITRE 1. INTRODUCTION F IG . 1.2 – Logo des applications Open Source En 1983, Richard M. STALLMAN initie le projet GNU (GNU est un jeu de mots récursif signifiant GNU’s Not Unix). Ce projet vise à concevoir un système d’exploitation complet et entièrement libre. Ce système sera compatible avec UNIX, mais sera différent car il n’exploitera pas les sources originales d’AT&T. Pour soutenir le développement du projet GNU, la Free Software Foundation (http ://www.fsf.org) est créée en 1985. F IG . 1.3 – Logo du projet GNU Pour valider ce système, une base légale est nécessaire. Cette base légale, créée de toutes pièces, est la licence GNU GPL (pour GNU General Public License). La GNU GPL est la licence des logiciels libres par excellence. Elle détermine des conditions de distribution qui garantissent les libertés de l’utilisateur. Un programme protégé par la GPL est libre, mais la GPL impose aussi que tout travail dérivé de ce logiciel reste libre. On peut estimer à plus de 70% le nombre de logiciels libres qui son protégés par la GNU GPL. [APR] Il faut distinguer les logiciels libres de logiciels du domaine public (freeware). En effet, les logiciels libres sont systématiquement livrés avec leur code source, qu’il est possible de modifier à condition de redistribuer les sources modifiées. 1.1. QU’EST-CE QU’UN LOGICIEL LIBRE ? 13 Cette obligation n’existe pas pour les logiciels du domaine public, dont seule la version binaire est gratuite. L’utilisation de logiciels du domaine publique pour un usage professionnel est stratégiquement risquée car il est impossible de s’assurer que les mises à jour ultérieures du logiciel resteront gratuites. On peut ainsi imaginer un éditeur distribuant gratuitement son logiciel pour faciliter sa diffusion et, une fois le marché acquit ferait payer les nouvelles versions3. Ce scénario est impossible avec des logiciels libres exploitant la licence GPL, car cette dernière oblige chaque contributeur à diffuser librement les sources de toute adaptation d’un logiciel libre. Même si une nouvelle version devenait propriétaire, ce qui est tout à fait envisageable4 , il serait toujours possible de poursuivre le développement de l’application dans sa version “libre” à partir des sources de l’avant dernière version (qui était libre). Il existe d’autres licences qualifiées de libres, bien que souvent moins contraignantes quant à la divulgation des sources (la licence BSD, la licence Mozilla... ). Il faut toutefois souligner que la licence GPL, véritable clef de voûte d’un grand nombre de logiciels libres (dont Linux), n’a jamais été éprouvée devant la justice5 . La question de sa validité juridique reste donc levée. Bien que cela puisse paraître contradictoire, il est tout à fait possible de commercialiser une solution exploitant la licence GPL, à condition de rendre disponibles les sources des programmes. Par exemple, si une société A développe une solution basée sur un logiciel libre adapté par ses soins, il peut la commercialiser et en tirer des bénéfices financiers. Par contre, elle est tenue de rendre les sources de ses adaptations disponibles gratuitement. De ce fait, une société concurrente B peut reprendre ces sources, les modifier et les commercialiser à son tour. La société A peut alors se sentir lésée par cette divulgation de son travail, mais comme la société B est aussi tenue de publier les sources de ses modifications, elle peut à son tour profiter des améliorations apportées pour les intégrer à son offre. De plus, la société A n’est plus contrainte d’assurer seule la maintenance et l’évolution de sa solution, elle est désormais aidée par la société B. Pour que ce modèle soit rentable, il faut bien entendu que la société A garde une plus value par rapport à la société B, autre que le code source de sa solution. Ce fonctionnement nous oblige à revoir notre façon d’envisager l’approche commerciale de l’industrie informatique. La plus value d’une entreprise choisissant de commercialiser du logiciel libre ne réside plus dans la rétention du code 3 Ceci est une simple supposition, nous savons bien que le marché de l’informatique n’est pas aussi perfide... 4 Le propriétaire d’un programme peut changer à tout moment la licence le protégeant. Par contre, la licence GPL interdit l’intégration de code protégé par la GPL dans des programmes ne répondant pas à cette licence. 5 Du moins au moment de la rédaction de ce document... 14 CHAPITRE 1. INTRODUCTION source de ses programmes, jusqu’alors considéré comme le patrimoine le plus précieux de l’éditeur. L’enjeu se situe sur le service rendu à ses clients afin de proposer les solutions les plus adaptées en se basant sur un ensemble de briques de bases puisées parmi les logiciels libres. Cette approche permet d’optimiser le travail des différents acteurs qui, au lieu de redévelopper maintes fois le même code source, peuvent s’appuyer sur un travail existant en l’améliorant si besoin, pour le plus grand bien de la communauté. A titre d’exemple, essayez d’imaginer les ressources financières et humaines qui ont été gaspillées à développer les fonctionnalités communes des différents traitements de texte que nous avons connu jusqu’à présent. N’aurait-il pas été plus fructueux de capitaliser ce travail dans le développement d’une solution libre ? Bien évidement, cette réflexion ne convient pas du tout à des acteurs ayant réussi à verrouiller un marché autour d’une situation de monopole comme l’a fait Microsoft dans le domaine de la bureautique. Le logiciel libre est aussi une solution permettant d’éviter ce genre de situation. Il constitue en ce sens un gardefou précieux pour le futur. D’une autre façon, une entreprise ayant développé une application pour ses besoins internes peut trouver un intérêt évident à publier les sources de cette dernière sous une licence GPL. En effet, si la solution proposée est adoptée par d’autres utilisateurs, l’ensemble de ces derniers peut collaborer à la maintenance et l’évolution de l’application et, ainsi, se partager les coûts inhérents. 1.2 Concepts de base de Linux 1.2.1 Origines : Le système UNIX Linux est le noyau d’un système d’exploitation libre de type Unix, écrit initialement par Linus Torvalds en 1991 et auquel un grand nombre de programmeurs ont contribué par Internet depuis. [GIC02] Les origines de tous les systèmes Unix remontent à la première version d’un système d’exploitation expérimental développé par Denis Ritchie et Ken Thompson dans les laboratoires AT&T’s Bell Laboratories en 1969. Ce système a avant tout été développé par des programmeurs, pour des programmeurs, et reprenait un certain nombre de concepts qui avaient été développés auparavant pour le système d’exploitation Multics (abréviation de “Multiplexed Information and Computing Service”), dont le rôle était de fournir des services informatiques centralisés à un grand nombre de personnes. Multics n’a jamais réellement vu le jour car il était trop ambitieux par rapport aux moyens de l’époque, en revanche, le système Unix initial a engendré un grand nombre d’autres systèmes plus ou moins compatibles, du fait notamment de son mode de distribution original. 1.2. CONCEPTS DE BASE DE LINUX 15 Pour l’anecdote, la dénomination “Unix” provient de la contraction de “Unics” (abréviation de “Uniplexed Information and Computing Service”), terme forgé ironiquement pour bien signaler qu’Unix était une version allégée de ce que Multics aurait dû être. Unix a été développé en utilisant le langage de programmation C. Ce langage a la particularité d’être portable6 sur un grand nombre d’architectures différentes, ce que ne permet pas l’utilisation d’un langage de programmation de bas niveau comme l’assembleur7, alors largement utilisé pour la réalisation de systèmes d’exploitation. La particularité d’Unix, comparé à d’autres systèmes comme Windows par exemple, tient du fait qu’il a été développé puis distribué sous la forme de code source et de spécifications8 . A partir de ce code source, chaque éditeur pouvait mettre au point sa propre version d’Unix, afin de l’adapter à son besoin. Ce mode de distribution a permis une rapide expansion d’Unix, puisque chaque constructeur s’est empressé de porter Unix sur ses machines, ce que n’aurait pas pu faire AT&T9 . Il n’existe donc pas une unique version d’Unix, mais toute une famille de systèmes Unix. L’utilisation du langage C donna à Unix une de ses caractéristiques les plus importantes : son universalité. Unix n’a, aujourd’hui encore, pas d’équivalent dans ce domaine et il y a fort peu de familles d’ordinateurs ne disposant pas d’au moins une version d’Unix10 . Il existe différentes versions commerciales d’Unix, il faut signaler que seules celles qui sont positionnées dans le haut de gammes survivent à la confrontation avec Linux : Solaris : L’Unix de Sun, AIX : L’Unix d’IBM, HP/UX : L’Unix de Hewlett Packard, QNX : Un Unix destiné aux systèmes embarqués, 6 Un programme est dit portable s’il peut s’exécuter, moyennant de faibles adaptations, sur différents environnements. 7 L’assembleur est un langage de programmation très proche du langage machine, il décompose finement chaque opération, ce qui le rend difficilement lisible. Un programme en assembleur est fortement lié à l’architecture de la machine pour laquelle il est écrit. Il permet donc de réaliser des programmes fortement optimisés mais très peu portables. Lorsque l’on utilise un langage de programmation plus évolué, comme le langage C, le programme est généralement transformé automatiquement en assembleur lors de la compilation. Le même programme C peut donc être facilement transformé en différents programmes assembleurs adaptés à de diverses architectures, simplement en utilisant des compilateurs différents. 8 L’utilisation du code source d’AT&T nécessitait le payement d’une licence 9 En tout cas, pas aussi rapidement et, certainement, pas aussi bien, puisque chaque constructeur est le mieux placé pour adapter un système sur ses machines. 10 Ce qui est loin d’être le cas de Windows, qui ne fonctionne réellement que sur des architectures de type PC. CHAPITRE 1. INTRODUCTION 16 IRIX : L’Unix destiné aux stations Silicon Graphics, SCO Unix : Un Unix bas de gamme pour PC (qui souffre actuellement de la concurrence de Linux). Il existe aussi différentes versions non commerciales d’Unix (hormis Linux) : FreeBSD une variante libre de l’Unix BSD, Minix basé sur une architecture à micro noyau et uniquement destiné à l’étude des systèmes d’exploitation. Du fait de ses importantes limitations, ce système ne peut pas être utilisé en production. L’inconvénient du mode de distribution d’Unix est la divergence des solutions proposées par les différents fournisseurs. Ainsi, même s’ils exploitent des racines communes, les différentes améliorations apportées par les distributeurs de systèmes Unix ont aboutis à des systèmes de moins en moins compatibles. Pour éviter une trop grande divergence, les différents fournisseurs de systèmes Unix se sont récemment accordés pour définir l’ensemble des fonctionnalités que tous les systèmes Unix doivent supporter, et ce afin de résoudre les problèmes engendrés par les incompatibilités existantes entre ces différents systèmes. Unix est donc un terme générique pour représenter l’ensemble de tous ces systèmes, dont Linux fait partie. Linux apparaît aujourd’hui comme un Unix universel que tout le monde appelait de ses voeux, par contre, il risque aussi de subir la même dérive que les systèmes Unix si l’on y prend pas garde. 1.2.2 Le système Linux Bien que compatible avec les dernières spécifications Unix, Linux ne contient pas une ligne du code source du système Unix original, ce qui en fait ce que l’on appelle un clone11 . Cela dit, il s’agit réellement d’un système Unix à part entière. En tant que tel, il dispose des fonctionnalités fournies par les systèmes Unix : il est multitâche, multi-utilisateur et orienté réseau. Vous aurez donc, avec Linux, un système fiable, fonctionnel et performant. Installé sur un poste de travail, Linux vous permettra de réaliser les opérations les plus classiques, comme effectuer un travail bureautique, naviguer sur Internet, réaliser l’acquisition, la capture et le retraitement d’images, réaliser des animations 3D ou encore programmer12 . C’est toutefois installé sur un serveur que Linux révèle toute sa puissance : c’est un système fiable, qui peut fonctionner plusieurs mois en continu. En temps que système Unix, il s’intègre parfaitement 11 Et évite le payement de la licence AT&T. Créé par des programmeurs passionnés, Linux offre un choix unique d’outils de développement 12 1.2. CONCEPTS DE BASE DE LINUX 17 F IG . 1.4 – Tux : La “mascotte” de Linux dans un réseau et il permet de faire fonctionner un grand nombre d’outils très performants et disponibles gratuitement (base de données, serveur Web, serveur d’applications, serveur de messagerie, serveur d’authentification... ). Enfin, il s’intègre parfaitement dans un environnement Windows dans lequel il peut remplacer avantageusement un serveur Windows NT. De plus, contrairement à l’installation de Linux sur les postes clients, son installation sur un serveur n’est pas ressentie directement13 par les utilisateurs, ce qui permet une migration en douceur et évite de se confronter à un problème culturel (surtout lié à l’utilisation de la suite bureautique Office de Microsoft). 1.2.3 Historique du projet Linux 1991 : une naissance dans l’anonymat Linus Torvalds, étudiant à l’université d’Helsinki (Finlande) installe le système Minix14 sur son i386. Le système s’avérant trop limité pour lui, il décide d’aller plus loin sur la base de ce qui existe. Linux (Linus’ Unix, l’Unix de Linus) 0.0.1 est né au mois d’août 1991. Afin de poursuivre les développements, Linus lance un appel à contribution sur le forum de discussion comp.os.minix en 13 Un indice tout de même : Si vous remplacez un serveur Windows par un serveur Linux, les utilisateurs se rendrons peut-être compte que ce dernier plante moins souvent... 14 Minix est un petit Unix développé par M. TANNENBAUM dans un but éducatif et pouvant fonctionner sur tout PC équipé au minimum de processeurs Intel 8086. CHAPITRE 1. INTRODUCTION 18 F IG . 1.5 – Linus TORVLADS ces termes : Bonjour à tous les utilisateurs de minix. Je développe un système d’exploitation (gratuit) (c’est juste un passe-temps, je ne prétends pas à un système aussi important et professionnel que GNU) pour les clones AT 386(486). Dépendant au départ du système Minix, Linux devient autonome le 5 octobre 1991, lors de la sortie officielle de la version 0.0.2. Cette version permet de faire tourner quelques applications GNU (logiciels libres) essentielles comme le compilateur gcc15 ou le shell bash. Linus prend la décision de mettre le code source sous licence GPL : tout le monde peut alors participer au développement de Linux. C’est certainement une des principales clefs du succès de Linux... Une maîtrise originale de l’ensemble du développement en permet l’accès au plus grand nombre, sans aucune restriction de contenu. Ainsi, nul cahier des charges, nulle équipe isolée (et restreinte) de développeurs : ce sont les échanges d’idées et de bouts de codes qui vont améliorer le système. Afin de garder l’homogénéité globale du système, Linus se charge de valider les apports réalisés par les contributeurs du projet. C’est donc lui qui valide la sortie de chaque nouvelle version du noyau16 . C’est de là qu’est né le succès actuel de Linux. En effet, l’apport constant des développeurs toujours plus nombreux, avec leurs améliorations ou leurs idées 15 gcc : GNU cross compilator. Aujourd’hui ce mode de validation semble arriver à un point de saturation, Linus TORVALDS n’ayant plus suffisamment de disponibilité pour valider efficacement toutes les modifications apportées au noyau par les nombreux contributeurs (ce n’est qu’un homme après tout). 16 1.2. CONCEPTS DE BASE DE LINUX 19 nouvelles, permet à Linux d’être toujours plus proche des besoins de ses utilisateurs. [2LI] Lien avec le projet GNU Un des objectifs du projet GNU est le développement d’un système complet basé sur Unix. Pour cela, vu l’ampleur de la tâche à accomplir, les développeurs GNU se ont commencé à développer les outils périphériques (compilateurs, éditeurs de texte, client réseau... ) en se basant sur des systèmes Unix existants (FreeBSD ou Minix le plus souvent), l’étape suivante étant le développement du noyau du système. Il existe depuis longtemps un projet GNU visant à réaliser un système complet architecturé autour du micro-noyau Mach17 : Ce projet très ambitieux s’appelle Hurd18 et il commence seulement aujourd’hui à devenir exploitable. Le projet Hurd a été rattrapé par le développement du noyau Linux qui, associé aux outils GNU, constitue le premier système d’exploitation entièrement libre. On parle donc couramment de système GNU/Linux. 1991-1994 : un développement original Le développement anarchique de Linux ne lui permet pas, au départ, de devenir un système compétitif face aux autres systèmes du marché. Son principal point faible réside dans son système de fichiers hérité de Minix. Seule l’intégration à Linux du Second Extended Filesystem (ext2fs), conçu par Rémi CARD à partir du système de fichiers du système Unix BSD, permet d’en faire un système fiable. Ext2fs offre enfin les performances et les services de systèmes de fichiers professionnels. Il devient naturellement un standard. La présence dans le processus de développement de développeurs venant de nombreux horizons permet à Linux d’exister sur de nombreuses plates-formes (Mac, Atari, Amiga, Alpha) autres que sa plate-forme d’origine (Intel). Petit à petit, Linux devient un système Unix complet compatible avec les autres systèmes Unix, offrant toujours plus de services de qualité professionnelle au plus grand nombre. [2LI] 1995 : une année charnière L’explosion d’Internet donne un second souffle au développement de Linux : non seulement pour permettre à la communauté des développeurs de Linux de 17 Ce micro noyau est aussi utilisé pour des systèmes comme MacOsX. ‘Hurd’ stands for ‘Hird of Unix-Replacing Daemons’. And, then, ‘Hird’ stands for ‘Hurd of Interfaces Representing Depth’. We have here, to my knowledge, the first software to be named by a pair of mutually recursive acronyms. 18 CHAPITRE 1. INTRODUCTION 20 continuer à s’étendre, mais aussi et surtout pour donner à Linux une existence réelle sur le marché des systèmes d’exploitation. Ainsi, ses qualités d’OS libre (et gratuit), robuste et performant font qu’il est choisi par de plus en plus de fournisseurs d’accès à Internet. Il est ainsi devenu aujourd’hui le leader sur le marché de l’hébergement de sites Web. Parallèlement, l’apparition et le développement de sociétés privées telles que RedHat, Caldera ou VA Linux donne une envergure jusqu’alors inconnue à Linux : les distributions deviennent de plus en plus conviviales et simples à installer, et des services professionnels sont mis en place pour faciliter l’implantation de Linux dans les entreprises. [2LI] 1996 : l’année du décollage – RedHat Linux est élu meilleur OS par InfoWorld, – Linux commence à faire parler de lui dans les média, – Netscape et Corel commencent à distribuer des versions Linux de leurs produits, – Début de la guerre anti-Microsoft menée par Netscape, – Échec d’OS/2 Warp d’IBM (Linux semble alors constituer la seule alternative crédible à l’hégémonie de Windows dans le domaine des systèmes pour PC), – Les administrateurs système se familiarisent avec Linux, – Début du projet KDE19 : on commence à développer des projets conviviaux pour le grand public. [2LI] 1997 : une reconnaissance "professionnelle" – Des clusters (grappes) d’ordinateurs sous Linux sont utilisés pour les effets spéciaux de Titanic ou du Pic de Dante, – Linux est utilisé pour le système de tri de courrier de la poste américaine, – Linux fait son apparition dans les systèmes embarqués (téléphones cellulaires, navettes spatiales), – Linux s’impose dans les milieux scientifiques et professionnels spécialisés. [2LI] 1998 : Linux aux portes du grand public – Oracle, Sun ou Informix adoptent Linux et fournissent des versions de leurs produits phare adaptées pour ce système20 , 19 20 KDE : Killer Desktop Environment. Ces versions sont généralement vendues moins chères que pour les autres plates-formes. 1.3. LES DISTRIBUTIONS DE LINUX 21 – De grandes sociétés commencent à déployer Linux sur une partie de leur parc informatique (France Télécom, Cisco), – Linux commence à faire peur aux éditeurs d’autres systèmes d’exploitation (documents d’Halloween de Microsoft21), – Linux est présent sur 25% des serveurs d’entreprises. [2LI] 1999 : la reconnaissance du marché des entreprises et des marchés financiers – Linux est présent sur 35% des serveurs d’entreprises, – Les salons Linux se multiplient (LinuxExpo, EuroLinux... ), – Début de la médiatisation de Linux dans les média traditionnels (télévision, radio), – Linux est largement présenté comme une alternative au système Windows de Microsoft dans le domaine des serveurs, – Multiplication des revues spécialisées, – Entrée en bourse de certains des principaux acteurs de Linux (RedHat, VA Linux). [2LI] Le système GNU/Linux est aujourd’hui réputé pour sa fiabilité et sa robustesse. Ceci est dû en partie à la liberté des logiciels qui le composent : l’accès aux sources permettant de corriger très facilement et rapidement une erreur de programmation. GNU/Linux est aujourd’hui utilisé aussi bien par les entreprises que par les utilisateurs finaux (on estime actuellement le nombre d’utilisateurs à plusieurs dizaines de millions). Les plus grandes sociétés informatiques (IBM, Sun, HP, ...) conscientes des qualités des logiciels libres existants, rejoignent le nombre des partisans de ce système, et contribuent à son développement. [APR] 1.3 Les distributions de Linux 1.3.1 Installation et configuration manuelle Initialement, l’installation de Linux était une opération fastidieuse et relativement compliquée (comparée à celle d’un système Windows, par exemple) et l’usage d’un système Unix “brut” n’est pas à la portée de tout le monde. Traditionnellement, pour installer un système Linux, il fallait récupérer sur internet les codes sources, les compiler sur sa machine et assembler le tout manuellement. La 21 Il s’agit d’un mail interne de la société Microsoft faisant part de son inquiétude vis à vis de l’essor de Linux et précisant sa stratégie de lutte contre les logiciels libres. Ce document avait alors été intercepté et largement diffusé sur Internet. 22 CHAPITRE 1. INTRODUCTION complexité de ces opérations est telle qu’elle réservait l’installation de Linux à des experts. Linux doit en grande partie sa réputation de système complexe à installer à cette époque que certains qualifient avec nostalgie “d’héroïque”. Heureusement, les choses se sont grandement simplifiées depuis. 1.3.2 Les distributions Pour faciliter l’installation et l’utilisation de systèmes Linux, on a vu apparaître des “distributions”, intégrant dans un environnement homogène l’ensemble des outils nécessaires à une utilisation courante et automatisant au maximum l’installation et le paramétrage du système. Ces distributions facilitent grandement l’installation de Linux et leur qualité s’est grandement accrue ces derniers temps, au point que n’importe qui peut aujourd’hui installer un système Linux viable sans trop de problème. La plupart des distributions de linux sont l’oeuvre de sociétés commerciales, ce qui peut sembler en contradiction avec la notion de logiciel libre. Il faut souligner que la licence GPL n’interdit pas la vente de logiciels libres, par contre elle oblige de rendre publiques et librement utilisables le code source de tout logiciel basé sur un logiciel libre. Voici les principales distributions qu’il est possible de rencontrer : RedHat est l’une des distributions les plus connues dans le milieu professionnel (au moins aux USA), même si ce n’est pas la plus standard. C’est la première distribution dont l’entreprise a été introduite en bourse. Un grand nombre de logiciel est disponible prêt à l’emploi pour cette version de Linux. Mandrake est une distribution française, certainement la version la plus diffusée en France. Très agréable à utiliser, surtout sur un poste client, elle est très bien traduite en Français et bénéficie de mises à jours très régulières. Cette réactivité est peut-être même un défaut de cette distribution dans le cadre d’un usage professionnel. Il est en effet difficile de suivre le rythme de mise à jour imposé et la migration d’une version à l’autre est souvent problématique22. Il faut signaler que la société Mandrake a été placé en redressement judiciaire en janvier 2003 et qu’elle en est ressortie en mars 2004. Aujourd’hui, l’entreprise semble être repartie sur des bases saines. 22 Des régressions ont même été constatées lors du lancement de versions majeures, du fait de l’introduction hâtive d’outils non stabilisés (comme le compilateur gcc 3.0 dans la Mandrake 8.0, par exemple). Mandrake a tenu compte de ses erreurs et a mis en place des procédures de tests plus rigoureuses pour la version 9 de sa distribution. 1.3. LES DISTRIBUTIONS DE LINUX 23 Suse est une distribution allemande. Une des distributions les plus utilisées en Europe (surtout en Allemagne, où Linux est très populaire). Très complète en terme de nombre de logiciels disponibles, elle a connu récemment des problèmes financiers (qui semblent depuis être résolus, notamment grâce à l’appui de certains gros acteurs du marché informatique). Debian est complète, puissante et disponible sur un grand nombre de platesformes. Cette distribution est reconnue pour sa stabilité et la rigueur des tests d’intégration (chaque modification est soigneusement réceptionnée et testée sur l’ensemble des plates-formes supportées avant d’être intégrée). De ce fait, ses mises à jour sont relativement rares mais chacune d’elle peut être utilisée avec sérénité dès sa sortie. Ce rythme de mise à jour s’adapte bien à un usage professionnel, d’autant plus que, du fait de la rigueur des tests de non régression, le passage d’une version à une autre ne pose généralement pas de difficultés. C’est une des distribution favorite des utilisateurs avancés de Linux, par contre, son installation reste relativement complexe. SlackWare est une des premières distributions de Linux. Elle bénéficie d’une forte expérience mais peut paraître relativement rustique. C’est la distribution des nostalgiques du Linux de la première heure. Lindows OS , comme son nom l’indique, se positionne en concurrence de Windows pour le poste client. Il a été annoncé à grand renfort de polémiques comme étant un système révolutionnaire, capable de faire tourner indifféremment des applications Windows ou Linux. Le plus grand coup de pousse médiatique a été apporté par Microsoft lui même23 lorsqu’il a porté plainte contre l’éditeur pour violation de sa marque déposée "Windows" susceptible d’induire le consommateur en erreur. Tout ce battage médiatique s’est calmé depuis la sortie commerciale de la distribution : En fait de système révolutionnaire, il s’agit d’une distribution classique24 destinée au poste de travail, dont le “look’n feel” est très largement inspiré de celui de Windows. Elle utilise l’émulateur Wine pour faire fonctionner les applications Windows, ce que propose la quasi totalité des distributions Linux. Cette déception n’empêche pas Lindows de s’améliorer progressivement et de marquer des points sur le plan commercial. La chaîne de distribution Woolmark propose, par exemple, des PC bas de gamme équipés de ce Lindows en lieu et place de Windows. Une version spécifique va même être lancée pour concurrencer l’édition Tablet PC de Windows XP. Corel-Linux était proposée comme une alternative à Windows pour les postes clients (pas pour les serveurs). Elle privilégiait donc la facilité d’utilisation 23 24 Les deux éditeurs sont d’ailleurs presque voisins. Et très pauvre en matière d’applications fournies, d’ailleurs... 24 CHAPITRE 1. INTRODUCTION et d’installation. Corel a abandonné le développement des distributions Linux pour se recentrer sur son coeur de métier, à savoir l’édition de logiciels. Les distributions actuelles éprouvent encore quelques difficultés pour optimiser les périphériques exotiques, et souvent seules les fonctionnalités de base sont correctement configurées après une installation classique. Les outils de configuration des distributions vous permettront sans doute de configurer votre système de base simplement, mais pour aller au-delà, il faudra sans doute intervenir manuellement. Néanmoins, il faut reconnaître que celui qui installe Linux à partir d’une distribution récente sur un ordinateur assez vieux (c’est-à-dire un ordinateur qui ne dispose pas des derniers périphériques et cartes graphiques à la mode), ou dont les constituants sont de marque courante, obtient rapidement un système fonctionnel et capable de réaliser la plupart des opérations qu’il désire. En particulier, celui qui utilise son ordinateur dans un cadre professionnel (pour écrire des lettres, les imprimer, naviguer sur Internet pour récupérer des informations, programmer... ) peut parfaitement se contenter de l’installation par défaut. Ce problème de configuration apparaît principalement pour les particuliers, qui souvent disposent de machines hétéroclites et absolument non standards (carte son, cartes vidéo... ). 1.3.3 Standardisation des distributions Pour faire le poids vis à vis des autres Unix et de Red Hat, plusieurs éditeurs de distributions Linux ont signé un accord visant à développer un OS commun pour les serveurs. Il s’agit des éditeurs suivants : – Suse Linux, – Caldera, – Turbolinux – Conectiva. Si chaque distributeur proposera une distribution quelque peu différente, le coeur de l’OS, c’est-à-dire la version du noyau Linux retenue, ainsi que les applications de base, formeront un standard commun pour l’industrie, espèrent les quatre entreprises. Concrètement, les prochaines distributions pour serveurs de Caldera, Turbolinux, Suse et Conectiva seront estampillées "United Linux". Elles posséderont un CD commun intégrant le noyau, les librairies et les modules d’installation. La création de ce label commun a pour but de faire tomber les deux principales critiques formulées par les entreprises à l’encontre de Linux : 1.3. LES DISTRIBUTIONS DE LINUX 25 – le manque de certification pour développer des applications professionnelles compatibles, – la fragmentation du code des composants de base. But moins avouable de ce regroupement, elle permet de profiter de l’implantation complémentaire des participants sur différents marchés pour concurencer l’actuel leader des distributions Linux : RedHat. 26 CHAPITRE 1. INTRODUCTION Chapitre 2 Fonctionnalités de Linux Dans ce chapitre, nous aborderons les différentes fonctionnalités d’un système Linux. Nous verrons comment celles-ci sont prises en charge par le système. 2.1 Fonctionnalités du noyau 2.1.1 Présentation rapide Le noyau LINUX a les caractéristiques techniques suivantes : – Multi-tâches et multi-utilisateur, – Multi-plate-forme (Intel x86 et Itanium, Alpha, MIPS, PowerPC, SPARC, etc.) – Espace mémoire pour applications en mode protégé 32 bits. Support de la gestion de la mémoire virtuelle (64 bits en cours de développement), – Architecture SMP (Symetric Multi-Processing) sur plate-forme Intel et Sun, – Support de plusieurs systèmes de fichiers : FAT16, FAT32, NTFS, Ext2FS, Ext3FS, ReiserFs, XFS, JFS, HPFS... – Performance élevée en réseau : Support de la grande majorité des protocoles actuels (TCP/IP 4 et 6, IPX/SPX, AppleTalk... ), partage de ressources (NFS, SMB... ), – Gestion évoluée du stockage sur disque (Striping-RAID 0, mirroring-RAID 1 logiciel et RAID 5 logiciel, gestion de volumes logiques), – Interface graphique : XFree86 qui est une implantation libre de l’architecture standard X. Il fonctionne sur une trés grande diversité de plate-formes matérielles, depuis les PDA1 jusqu’aux systèmes centraux IBM, en passant par les super-calculateurs 1 IBM a même présenté plusieurs prototypes de montres fonctionnant avec Linux. Au delà de la prouhesse technologique, on est en droit de s’interroger sur l’utilité pratique de telles réalisations, 27 28 CHAPITRE 2. FONCTIONNALITÉS DE LINUX SGI. Ce système est largement utilisé dans les milieux universitaires, il est donc très souvent à la pointe de la recherche : Ainsi, Linux a été le premier système à supporter le protocole IP v6 ou le processeur 64bits Itanium d’Intel. Aujourd’hui, Linux occupe une place de choix dans les serveurs d’infrastructure (routeurs, serveur de nom, serveur DHCP, serveur Web, serveur FTP... ) et commence à obtenir ses lettres de noblesse au coeur des solutions d’entreprise. Par contre, il butte encore assez nettement dans sa conquête du poste client, souffrant de la position dominante de Windows et sur la difficulté de changer les habitudes des utilisateurs. En effet, autant le changement de l’OS d’un serveur est imperceptible par les utilisateurs, autant il est très sensible dès qu’il touche le poste de travail. 2.1.2 Découpage du système Comme tout logiciel d’une certaine taille, Linux est d’une grande complexité. Cette complexité implique un grand nombre d’erreurs, d’anomalies et de dysfonctionnement potentiels. En effet, pour qu’un système informatique fonctionne correctement, il faut implémenter un très grand nombre de fonctionnalités et prévoir une action appropriée pour chaque événement possible. Un programme aussi complexe est quasiment impossible à appréhender dans sa globalité par un développeur. De plus, une erreur de programmation touchant une fonction donnée peut avoir des répercussions difficilement prévisibles sur d’autres fonctions du système (effet de bord). Pour résoudre ce problème, il est courant de subdiviser le système en composants indépendants, dont le mauvais fonctionnement potentiel ne peut perturber que partiellement les autres parties du système. Il va de soi que, lorsqu’un composant du système rencontre une avarie, ceux qui l’utilisent risquent fort de se retrouver dans un état d’erreur assez difficile à gérer. Cela peut souvent provoquer leur propre perte. Par conséquent, plus un composant est utilisé, plus il doit être fiable. Or il est un composant à la base de tout dans Linux : le noyau (“kernel” en anglais). C’est le coeur du système et, en fait, c’est précisément le système Linux. Heureusement, ce composant est d’une très grande fiabilité, et il n’est pas rare de voir un système Linux fonctionner plusieurs mois ou années sans rencontrer de problème. Lorsque l’on parle de Linux en temps que système d’exploitation, on désigne en fait le noyau Linux accompagné d’outils permettant d’utiliser ce dernier. Ces même si elle prouve la grande souplesse du système Linux. 2.1. FONCTIONNALITÉS DU NOYAU 29 outils sont en grande partie issus du projet GNU. Tous ces outils mis bouts à bouts représentent bien plus que le noyau Linux lui même. Pour simplifier, on peut dire qu’il y a plus de GNU que de Linux dans un système Linux fonctionnel. C’est pour cette raison qu’il est plus correct de parler d’un système GNU/Linux, bien qu’il soit courant de ne citer que le nom du noyau. 2.1.3 Le noyau Linux Le noyau Unix joue le rôle d’intermédiaire entre les programmes et le matériel du système. Il a pour buts : – de partager équitablement et efficacement les ressources entre les différents processus. Il gère la mémoire pour tous les programmes en cours d’exécution (processus), et s’assure qu’ils occupent tous une part équitable (ou non) du temps processeur. – de faciliter l’utilisation du système informatique. Pour cela, il fournit une interface simple à utiliser aux programmes pour leur permettre de communiquer avec le matériel (appels système). Généralement, le noyau est constitué d’un seul fichier binaire comportant l’ensemble des fonctions. Ce fichier est issu de la compilation du noyau. On parle alors d’un noyau monolithique car toutes les fonctions du noyau se retrouvent dans un seul fichier binaire. Tout changement du noyau nécessite alors une nouvelle compilation de ce dernier et un redémarrage du système (voir figure 2.1, page 30). Il est possible d’obtenir plus de souplesse en utilisant le mécanisme des modules. Ces derniers sont des entités indépendantes prenant en charge des services généralement assurés par le noyau (pilotes de périphériques, généralement). On peut les compiler séparément, les insérer et les retirer2 du noyau à n’importe quel moment. Ce mécanisme permet d’obtenir un noyau à géométrie variable, dont ont peu étendre ou réduire les fonctionnalités en fonction des besoins (voir figure 2.2, page 31). En raison de cette souplesse, l’utilisation des modules est devenu la méthode préférée pour coder certaines fonctionnalités du noyau. Bon nombre de pilotes de périphériques utilisés occasionnellement, tels que PCMCIA et les gestionnaires de cartouches QIC-80/40, sont des modules chargeables. L’utilisation de modules chargeables rend également possible la réalisation d’un noyau générique fonctionnel et relativement efficace. Ce type de noyau est capable de fonctionner correctement sur différents types de configurations. 2 Il semble que les prochaines versions de Linux ne permettront plus de retirer des modules du noyau, en raison de la trop grande complexité de ce mécanisme. La suppression de cette fonctionnalité devrait permettre de gagner en fiabilité et en facilité de maintenance. CHAPITRE 2. FONCTIONNALITÉS DE LINUX 30 Noyau du système Fonction A Fonction B Fonction C Fonction D Fonction E Fonction H Fonction F Fonction G Fonction I Contour fonctionnel du noyau F IG . 2.1 – Prise en charge de fonctions par un noyau monolythique 2.1. FONCTIONNALITÉS DU NOYAU 31 Module A Fonction A Contour fonctionnel du noyau Module B Fonction B Noyau du système Fonction C Fonction D Module F Fonction F Fonction E Fonction H Fonction G Module I Fonction I F IG . 2.2 – Prise en charge de fonctions par un noyau modulaire CHAPITRE 2. FONCTIONNALITÉS DE LINUX 32 Les noyaux fournis avec les distributions font largement appel aux modules pour pouvoir s’adapter aux multiples configurations différentes sur lesquelles elles sont susceptibles de pouvoir être installées. Ces noyaux peuvent donc être qualifiés de “passent-partout”. Ceci explique pourquoi il est préferable de recompiler soit-même le noyau de son système pour l’adapter au mieux à sa configuration (et supprimer du noyau tout ce qui n’a pas lieu d’y être). 2.1.4 Le couple GNU - Linux Le noyau gère quasiment tout (mémoire, disques, systèmes de fichiers, réseau, clavier, droits des utilisateurs, etc.), mais il n’est pas exploitable tel quel. Il est par exemple incapable de proposer à l’utilisateur une interface lui permettant d’indiquer interractivement les commandes qu’il doit exécuter. Ces opérations sont du ressort d’autres modules développés par la Free Software Foundation. Parmi ces modules, on trouve le “shell” (ce qui signifie grosso modo “environnement utilisateur”). Le shell est capable de lire des commandes saisies au clavier, de les exécuter et d’afficher leurs résultats à l’écran. En général, les programmes capables de réaliser ces opérations sont appelés des interpréteurs de commandes. Mais le shell est bien plus que cela, car il peut être programmé, et il peut gérer les processus (en arrêter un, en lancer un autre, etc.). En fait, les commandes que le shell peut exécuter sont en nombre très réduit. La plupart des commandes sont tout simplement d’autres programmes (voir figure 2.3). Utilisé comme seule interface utilisateur, le shell permet d’exécuter directement des programmes en ligne de commande, basés sur une interface utilisateur en mode caractères3 . Ces programmes sont souvent développés sous la licence GNU, soit par la Free Software Foundation, soit par des bénévoles. On retrouve ici l’ensemble des commandes Unix courantes. Ces commandes sont absolument essentielles pour pouvoir utiliser le système, mais elles sont assez rébarbatives et peu d’utilisateurs acceptent de s’en contenter4 . C’est pour cela qu’une couche supplémentaire a été développée, pour introduire une interface graphique plus conviviale : XWindow. Encore une fois, cette couche logicielle est constituée de plusieurs composants dont les plus importants sont : – Le serveur X, capable de fournir les services graphiques aux autres applications. – Le gestionnaire de fenêtre (“Window Manager” en anglais) est le composant qui se place juste au-dessus du serveur X. Il est en charge, comme son nom l’indique, de gérer les fenêtres des applications graphiques sous X. 3 4 Comme on le fait avec MS-DOS, par exemple. Surtout ceux qui sont habitués aux systèmes Windows ou Macintosh... 2.1. FONCTIONNALITÉS DU NOYAU 33 Applications Utilisateur Utilisateur Compilateur gcc Editeur de texte vi, emacs Serveur Web apache Noyau linux Interpréteurs de scrips perl, python Interface graphique X11 Interpréteur de commandes shell bash... F IG . 2.3 – Architecture d’un système GNU/Linux CHAPITRE 2. FONCTIONNALITÉS DE LINUX 34 C’est le gestionnaire de fenêtres qui prend en charge la gestion des décorations des fenêtres de premier niveau (c’est-à-dire des fenêtres principales des programmes). Par exemple, il s’occupe d’afficher les bords, la barre de titre, les boutons de réduction et de restauration, etc. des fenêtres. C’est également lui qui s’occupe du positionnement des fenêtres, et qui donc permet à l’utilisateur de déplacer et de réduire les fenêtres des applications graphiques. L’utilisateur est libre d’utiliser le gestionnaire de fenêtre qu’il désire, selon ses propres goûts et ses désirs, pouvant ainsi personnaliser son environnement de travail5 . – Il existe des environnements graphiques complets qui, en plus d’un gestionnaire de fenêtre souvent extrêmement puissant, fournissent la plupart des outils classiques que l’on est en droit d’attendre d’un système graphique moderne. Ainsi, ces environnements comprennent des éditeurs, des outils de configuration, des navigateurs Internet, des logiciels multimédia... En plus de ces applications, ils fournissent un cadre standard pour les applications graphiques qui savent communiquer avec eux. Ce cadre permet d’améliorer l’intégration des diverses applications entre elles, et c’est la raison pour laquelle on appelle souvent ces environnements des gestionnaires de bureau. KDE et Gnome sont des exemples de tels environnements de travail. – Enfin, au-dessus de toutes ces couches logicielles, on trouve les applications X, qui sont aussi diverses que variées (traitement de texte, tableurs, logiciels de dessin...). Quelques-unes de ces applications sont simplement des habillages (“front-end” en anglais) d’applications en ligne de commande, c’est-à-dire des interfaces graphiques à des programmes non graphiques existants. Ce concept permet : – d’avoir un composant métier unique utilisé par plusieurs interfaces différentes (réutilisation de code), – de rendre indépendante le code métier de celui de l’interface utilisateur. Encore une fois, la stabilité en est d’autant plus accrue. En résumé, un système GNU/Linux est structuré de la manière suivante (voir figure 2.6, page 37) : – le noyau Linux, – le shell, – les programmes en ligne de commande, dont le serveur XWindow, – le gestionnaire de fenêtre, 5 Contrairement à des systèmes comme Windows ou MacOs, Linux n’est pas lié à une interface graphique bien définie. Il est ainsi facilement possible d’utiliser une interface ressemblant à celle de Windows, de MacOs ou issue de votre imagination. Il est même possible, dans certaines conditions, de changer radicalement d’interface graphique sans quitter les programmes en cours d’exécution. 2.1. FONCTIONNALITÉS DU NOYAU 35 F IG . 2.4 – Exemple d’interface utilisateur graphique utilisant WindowMaker 36 CHAPITRE 2. FONCTIONNALITÉS DE LINUX F IG . 2.5 – Exemple d’interface utilisateur graphique utilisant KDE 2.1. FONCTIONNALITÉS DU NOYAU 37 – le gestionnaire de bureau, – les applications XWindow. Application XWindow Gestionnaire de bureau Gestionnaire de fenêtres Programmes en ligne de commande Utilisateur d’application graphique Serveur X Interpréteur de commandes Noyau Linux Matériel Utilisateur d’application en ligne de commande F IG . 2.6 – Structure du système GNU/Linux 2.1.5 Notion de processus Un processus est un programme en exécution. Chaque processus est une entité indépendante disposant de son propre espace mémoire. Tout travail réalisé par Linux est pris en charge par un processus. Le principal rôle du noyau consiste à gérer les processus pour leur fournir les ressources nécessaire à leur déroulement et leur permettre d’interagir avec le monde extérieur. Dès son lancement, le noyau lance un premier processus (init) qui est l’ancêtre de tous les processus lancés sur le système par la suite (appels systèmes fork et exec). Chaque processus peut lancer d’autres processus, il est alors le père de ces derniers (et ces processus sont ses fils). Le système maintient une table des processus en fonctionnement avec tous les attributs caractérisent chacun d’eux. Cette table peut être représentée sous la CHAPITRE 2. FONCTIONNALITÉS DE LINUX 38 forme d’un arbre généalogique, puisque tout processus à un père (sauf init) et peut avoir des fils (voir figure 2.7, page 38). Init Demons lpd crond getty 1 getty 2 login login shell shell Le processus "login" est le père du processus "shell" Ce processus à deux fils ls Les deux processus sont distincts meme s’ils sont basés sur le meme programme ("shell") programme 1 F IG . 2.7 – Exemple d’arborescence de processus 2.1.6 Parallèle avec Windows Il n’est pas évident d’établir un parallèle avec MS Windows du fait de la structuration très différentes des deux systèmes. Cependant, on peut considérer que le noyau Linux correspond aux modules KERNEL ou IO.SYS de Windows, que le shell correspond aux interpréteurs de commandes COMMAND.COM ou CMD.EXE, que les programmes en ligne de commande correspondent aux programmes DOS ou console classiques (xcopy, fdisk, format...), que le serveur X correspond au couple pilote de carte graphique (GDI), que le gestionnaire de fenêtre correspond au module USER, et le gestionnaire de bureau à l’explorateur, les fonctionnalités d’OLE et aux programmes fournis avec Windows. 2.2. PRINCIPE DU SYSTÈME DE FICHIERS 39 La différence essentielle vient de la grande souplesse de Linux qui permet de se constituer un système sur mesure en fonction de ses besoins. En effet, pourquoi allourdir un serveur d’une interface graphique si cette dernière n’est jamais utilisée ? Avec Linux, il est possible de ne garder que les composants utiles à la destination du système, ce qui explique grandement l’efficacité observée sur des configurations modestes. 2.2 Principe du système de fichiers Il est nécessaire de définir rapidement les termes qui vont être utilisés dans cette section, car les systèmes de fichiers Unix sont très différents des systèmes de fichiers du DOS et de Windows. La connaissance de ce vocabulaire est nécessaire pour la compréhension de la structure du système de fichiers de Linux. 2.2.1 Notion de système de fichier Toute l’information maintenue par le système est enregistrée dans des fichiers organisés dans une structure hiérarchique de répertoires. Comme pour les processus, chaque fichier possède des attributs qui peuvent être modifiés par les utilisateurs par l’intermédiaire des commandes du système. Linux étant un système multi-utilisateurs, certains attributs des processus et des fichiers déterminent les droits des utilisateurs à les utiliser ou à les modifier. Ces droits sont associés à une identification de chaque utilisateur pour le système. 2.2.2 Les différents types de fichiers Linux reprend le principe général des systèmes Unix suivant lequel “tout est fichier” (ou presque). En effet, la quasi-totalité des composants du système est représentée sous la forme de fichiers. Cela peu surprendre de prime abord, mais dès que l’on a compris le principe, cela facilite énormement la programmation et la maintenance du système. Les différents types de fichiers sous Linux sont : les fichiers normaux : ce sont des collections d’octets. Il n’existe pas de différence entre les fichiers texte et les fichiers binaires. les répertoires : ce sont des fichiers contenant les noms des fichiers et leurs numéros d’inode. Un répertoire contient toujours deux sous répertoires spéciaux ’.’ et ’..’ qui correspondent respectivement au répertoire courant et au répertoire père. CHAPITRE 2. FONCTIONNALITÉS DE LINUX 40 les liens symboliques : permettent de présenter une image d’un fichier sous un autre nom ou à un autre endroit sans dupliquer les données. Un lien symbolique “pointe” vers un autre fichier, appelé fichier cible. La notion de lien symbolique peut être comparée à celle de raccourcis sous Windows, à la différence qu’ici, cette notion est prise en charge dans le système de base alors que, sous Windows, il s’agit d’un ajout tardif qu’il est assez facile de contourner6 . les fichiers spéciaux en mode bloc : sont les portes sur les périphériques fonctionnant par blocs de données (ex : disques). L’accès à un périphérique en mode bloc peut se faire aléatoirement (accès à n’importe quel emplacement du fichier). les fichiers spéciaux en mode caractère : sont les portes vers les périphériques fournissant ou consommant les données octet par octet. L’accès à un périphérique en mode caractère ne peut se faire que séquentiellement (accès successif à chaque emplacement du fichier), si bien qu’il est impossible d’accéder au bloc n avant de parcourir le bloc n-1. Ce type d’accès séquentiel est assez bien illustré par le fonctionnement d’un lecteur de bande. les tubes nommés "FIFO" 7 : permettent à deux processus sans relation de parenté de s’échanger des données comme par un tube. L’écriture et la lecture dans un tube sont nécessairement séquentielles. L’écriture rempli le tube, la lecture le vide. On dit que la lecture des données d’un tube est destructive (voir figure 2.8, page 40). Essai Essai Tube FIFO Ecriture i a s s E Lecture F IG . 2.8 – Exemple de tube nommé FIFO 2.2.3 Structure du système de fichiers Comme la plupart des systèmes de fichiers, les systèmes de fichiers Unix sont structurés hiérarchiquement, et regroupent les fichiers dans des répertoires. Il 6 Il suffit d’éditer le contenu d’un raccourci Windows avec un éditeur de texte pour ce rendre compte qu’il s’agit en fait d’un fichier texte interprété par le système. 7 FIFO : First In First Out (premier arrivé, premier sorti). 2.2. PRINCIPE DU SYSTÈME DE FICHIERS 41 existe un répertoire racine, d’où débutent tous les chemins possibles dans le système de fichiers. Chaque fichier ou répertoire a un nom qui permet aux utilisateurs du système de l’identifier. Le seul répertoire qui n’a pas de nom est le répertoire racine. Les systèmes de fichiers Unix n’ont pas les mêmes limitations sur les noms que les systèmes de fichiers FAT et FAT32 utilisés par Windows. Les noms des fichiers et des répertoires peuvent être très longs (jusqu’à 256 caractères par nom), et ils prennent en compte la casse des lettres8 . Les fichiers contiennent des données au sens large, ce peut être des données (texte, image, film, son, paramètres de programmes ou du système... ), ou des programmes. En fait, Unix (et donc Linux) manipule généralement l’ensemble de ses composants sous la forme de fichiers. Les répertoires sont eux-mêmes des fichiers spéciaux, interprétés par le système différemment des autres fichiers. Nous verrons plus loin (voir 3.2.10, page 53) que les périphériques du système sont, eux aussi, représentés sous la forme de fichiers. Cette orientation “fichier” systématique facilite grandement l’utilisation avancée d’un système Unix, mais peut dérouter les habitués des systèmes Windows. Les noms de répertoires et de fichiers sont séparés par un caractère spécial. Ce caractère est traditionnellement, sous Unix, la barre oblique de division (nommée “slash” en anglais) : “/”. Comme le répertoire racine n’a pas de nom, il peut être accédé directement avec un simple “slash”. La qualification complète d’un fichier se fait en précisant le nom du répertoire à chaque niveau et en séparant par des slashes chacun de ces noms. Cette qualification porte le nom de “chemin” d’accès (“path” en anglais). L’exemple suivant vous montre l’allure d’un chemin d’accès typique sous Unix : /home/remi/CNAM/linux/linux.tex Les utilisateurs du DOS et de Windows prendront garde ici au fait que Microsoft a préféré la barre oblique inverse (nommée “backslash” en anglais) “backslash”, rendant ainsi tous ses systèmes incompatibles avec les systèmes Unix, et générant ainsi beaucoup de problèmes supplémentaires là où il n’était pas nécessaire d’en avoir9 . Les utilisateurs du DOS et de Windows constateront ici que les chemins d’accès Unix ne comportent pas de spécification de lecteurs. Les systèmes de fichiers 8 Ce qui signifie qu’il fait une différence entre les caractères majuscules et minuscules. Ainsi, trois fichiers nommés “Fichier”, “fichier” et “FICHIER” seront distingés par le système de fichiers, alors qu’ils seraient confondus sur un système Windows. 9 Le coût de cette ânerie, ainsi que celle des marqueurs de fin de ligne dans les fichiers textes, doit atteindre des sommes astronomiques dans tous les projets de portage ou de développement d’applications portables. 42 CHAPITRE 2. FONCTIONNALITÉS DE LINUX Unix sont dits mono-tête, ce qui signifie qu’ils n’ont qu’un seul point de départ : le répertoire racine (voir figure 2.10, page 44). Les systèmes Microsoft sont multitêtes, puisqu’ils ont un point de départ par lecteur et par partition (voir figure 2.9, page 43). Le fait de n’avoir qu’un seul point de départ est beaucoup plus simple, et permet, encore une fois, d’écrire les programmes plus simplement et donc avec moins de bogues potentiels. Les habitués du DOS ne manquerons pas de se poser la question : “Mais alors, comment spécifie-t-on le lecteur que l’on veut utiliser ?” Cette question a deux réponses : – Premièrement, on n’accède pas aux lecteurs, mais aux systèmes de fichiers. Les utilisateurs du DOS devront donc réapprendre qu’un lecteur représente un périphérique physique, et qu’il est possible qu’il contienne plusieurs systèmes de fichiers. Il est, par exemple, très courant qu’un disque dur de grande capacité soit divisé en plusieurs partitions indépendantes, considérés comme des entités distinctes (même par windows). Ils devront également se rendre compte qu’un système de fichiers n’est pas nécessairement stocké sur un lecteur : il peut être stocké dans un fichier10 , accessible par le réseau11 , ou encore généré par un composant du système12. – Cependant, le problème de l’accès aux systèmes de fichiers se pose malgré tout. Pour accéder à un système de fichiers, il faut réaliser une opération que l’on nomme le “montage”. Cette opération associe le répertoire racine de ce système de fichiers à l’un des répertoires de l’arborescence existante. Ce répertoire est couramment appelé “point de montage”. Par exemple, il est courant de monter le lecteur de disquette dans le répertoire /mnt/floppy/. Ainsi, si la disquette contient le fichier linux.tex, ce fichier sera accessible grâce au chemin suivant : /mnt/floppy/ventes1999.sdw Cette solution permet d’accéder à tous les systèmes de fichiers de la même manière, à partir d’un seul répertoire racine, que ces systèmes de fichiers soient EXT2, FAT, ISO9660, NTFS ou Amiga... En pratique, c’est nettement plus souple. Cela permet, par exemple, de déplacer la localisation physique de fichiers sans modifier leur emplacement logique dans l’arborescence (pour stocker sur un volume réseau des informations qui étaient stockées sur un disque local, par exemple). Ce type de modification est totalement transparente pour l’utilisateur final, qui ne se rend généralement pas compte de l’emplacement physique des données 10 C’est le cas par exemple pour les images disques de CD-ROM. C’est le cas des systèmes de fichiers réseau, “Network File System” en anglais. 12 C’est le cas des systèmes de fichiers virtuels du noyau (voir 3.2.15, page 55). 11 2.2. PRINCIPE DU SYSTÈME DE FICHIERS 43 qu’il manipule. Il ne connait que l’emplacement logique de ses données, c’est à dire leur emplacement dans l’arborescence des répertoires. Poste de travail |_ A: |_ C: | |_ Mes Documents | |_ Program Files | |_ Windows |_ D: | |_ Programmes Perso | |_ Documents Perso |_ E: (disquette) (disque dur 1, partition 1) (disque dur 1, partition 2) (cdrom 1) F IG . 2.9 – Répertoires et points de montage sous Windows On prendra garde à toujours démonter les systèmes de fichiers pour les lecteurs amovibles. Linux utilise en effet des zones de la mémoire que l’on appelle les tampons (“buffers” en anglais), pour y stocker des données des systèmes de fichiers montés, et il n’écrit ces données que lorsque c’est nécessaire. Ce mécanisme permet d’accélérer les lectures et les écritures sur les disques, mais a l’inconvénient de nécessiter une requête de vidange des tampons (opération que l’on appelle “sync”) avant de retirer le lecteur ou avant d’éteindre le système. Si on ne le fait pas, des données seront certainement perdues. Le système effectue le sync lorsqu’il s’arrête (par l’une des commandes halt, shutdown ou reboot), mais il ne le fait pas si on coupe le courant brutalement. C’est pour cela qu’il faut toujours arrêter le système proprement. De manière similaire, Linux empêche l’éjection des CD-ROM tant qu’ils sont montés. En revanche, il ne peut rien faire pour les lecteurs de disquettes, c’est à l’utilisateur de prendre garde à les démonter avant de retirer la disquette. Deux derniers points auxquels les utilisateurs de DOS et Windows devront faire attention : – Les fichiers ne sont pas identifiés par leur extension. Un nom de fichier peut contenir un ou plusieurs points, et une extension peut être arbitrairement longue. En particulier, un nom de fichier peut commencer par un point. Dans ce cas, ce fichier sera considéré comme caché par les programmes, et on ne les verra que si on le demande explicitement, – Les systèmes de fichiers Unix font la distinction entre les majuscules et les minuscules. Il faut donc prendre garde à la manière dont on écrit les noms 44 / |_ |_ |_ | | | | | | | | | |_ |_ CHAPITRE 2. FONCTIONNALITÉS DE LINUX (disque dur 2, partition 1) etc home mnt |_ floppy |_ cdrom |_ disque_C | |_ Mes Documents | |_ Program Files | |_ Windows |_ disque_D |_ Programmes Perso |_ Documents Perso opt usr (disque dur 2, partition 2) (disquette) (cdrom 1) (disque dur 1, partition 1) (disque dur 1, partition 2) F IG . 2.10 – Répertoires et points de montage sous Linux de fichiers et de répertoires. Cependant, la plupart des répertoires et des fichiers ont un nom écrit complètement en minuscules. 2.3 Sécurité et utilisateurs 2.3.1 Notion de système multi-utilisateur Linux est un système multi-utilisateur. Cela signifie que plusieurs personnes peuvent utiliser l’ordinateur, simultanément ou les unes à la suite des autres. Le système se charge de faire respecter les droits de chaque utilisateur. Les ressources de la machine sont ainsi partagées équitablement, tant au niveau de la puissance de calcul qu’au niveau de la mémoire, du disque, des imprimantes... Évidemment, une question se pose : comment plusieurs utilisateurs peuventils se partager le clavier et l’écran ? La réponse est simple : en pratique, ils ne le peuvent pas. Par conséquent, il n’y a que trois solutions possibles : – Soit on connecte à l’ordinateur d’autres claviers et d’autres écrans (on appelle un couple clavier/écran un “terminal”), – Soit on accède au système par l’intermédiaire d’un autre ordinateur via le réseau, – Soit les utilisateurs lancent tour à tour leurs programmes. La dernière solution nécessite que les programmes ne soient pas interactifs : ils doivent être 2.3. SÉCURITÉ ET UTILISATEURS 45 capable de fonctionner sans intervention de celui qui les a lancés. Pour être multi-utilisateur, le système doit satisfaire certains critères : – Il doit être multitâche, c’est-à-dire qu’il doit être capable de faire fonctionner plusieurs programmes simultanément sur la même machine, en partageant les ressources de celle-ci, – Il doit être fiable, Car un arrêt du système peut déranger un nombre arbitraire de personnes, y compris celles qui ne sont pas à proximité de l’ordinateur, – Il doit être sûr, car il ne faut pas que les erreurs ou les malveillances d’un utilisateur ne puissent déranger les autres. Les droits d’accès de chaque utilisateur doivent donc pouvoir être définis et respectés. Le multitâche est assuré au niveau du noyau. Chaque programme en cours d’exécution (on les appelle “processus”) fonctionne dans sa propre zone de mémoire, qui est complètement contrôlée par le noyau. Les ressources du processeur sont partagées entre les processus, et il est impossible à l’un d’entre eux de monopoliser la mémoire, le disque ou quoi que ce soit. Les processus doivent toujours passer par le noyau pour effectuer une opération, ce qui permet un contrôle absolu. La fiabilité est également assurée au niveau du noyau. Les zones de mémoire utilisées par chaque processus (encore appelées “espaces d’adressage”) sont bien distinctes et bien identifiées par le noyau. Cela implique qu’il est impossible à un processus de perturber le fonctionnement d’un autre processus. Ainsi, si un processus fait une faute, il est purement et simplement terminé par le noyau. Cela est sans appel : le noyau est le seul maître à bord. Enfin, la sécurité est assurée par le noyau et par le système de fichiers. Le noyau centralise tous les accès aux périphériques, il peut donc contrôler qui a le droit d’utiliser chaque péripherique en se référant aux droits d’accès définis par l’administrateur du système. 2.3.2 Méta-données sur les fichiers Au niveau du système de fichiers, la sécurité est assurée par le stockage d’informations additionnelles pour chaque fichier ou répertoire. Ces informations permettent de connaître : – le numéro de l’utilisateur qui possède le fichier ou le répertoire. En général, le propriétaire est simplement celui qui l’a créé. Cependant, l’administrateur peut changer le propriétaire d’un fichier à tout moment. – le numéro du groupe auquel appartient le fichier ou le répertoire. Tout fichier ou répertoire appartient à un groupe unique, qui est utilisé pour calculer les droits des utilisateurs faisant partie de ce groupe. Par défaut, un fichier nouvellement créé par un utilisateur appartient au groupe de base de 46 CHAPITRE 2. FONCTIONNALITÉS DE LINUX l’utilisateur (attention, ce comportement varie selon les systèmes). L’utilisateur peut toutefois donner ses fichiers à n’importe quel groupe dont il fait partie. – les droits d’accès au fichier ou au répertoire pour le propriétaire, pour les utilisateurs faisant partie du groupe auquel appartient le fichier ou le répertoire, et pour tous les utilisateurs en général. Ces droits comprennent le droit de lecture (représenté par la lettre ’r’, pour “Read”), le droit d’écriture (représenté par la lettre ’w’, pour “Writeable”), le droit d’exécution (représenté par la lettre ’x’, pour “eXecutable”) et quelques attributs supplémentaires (qui seront détaillés plus loin - voir 4.9.4, page 99). 2.3.3 Processus de connexion Lorsqu’un utilisateur désire se connecter à un système Linux, le système lui présente une mire de connexion lui demandant de décliner son identité. L’utilisateur entre alors son nom de connexion (appelé communément “login”). Le système recherche alors dans le fichier passwd s’il trouve une entrée correspondant au login saisi par l’utilisateur. Si ce n’est pas le cas, il retourne une erreur, sinon, il demande éventuellement13 la saisie d’un mot de passe. Nous avons vu que, pour des raisons évidentes de sécurité, le mot de passe ne figure pas en clair dans fichier passwd, qui ne contiennent qu’un mot de passe crypté. Le cryptage se fait à l’aide de la fonction de cryptage à sens unique crypt. Cette fonction permet de crypter une chaîne de caractère pour obtenir une autre chaîne à partir de laquelle il est impossible de retrouver la chaîne initiale. Le système crypte donc le mot de passe saisi par l’utilisateur et compare la chaîne obtenue avec celle qui est contenue dans le fichier passwd. Si les deux chaînes correspondent, c’est que le mot de passe est correct, sinon, la connexion est refusée. Lors de l’établissement de la connexion, l’utilisateur est placé dans son répertoire de base et le programme de base est lancé. La session de l’utilisateur se terminera avec ce dernier. 13 Tous les comptes utilisateur ne sont pas forcement protégés par un mot de passe, bien que cela ne soit pas recommandé. Chapitre 3 Arborescence d’un système Linux Les informations données ici peuvent ne pas être correctes pour votre distribution. En effet, certaines distributions utilisent une structure légèrement différente. Les informations données ici sont conformes à la norme de hiérarchie de systèmes de fichiers version 2.0 (“FHS” en anglais). Vous pouvez consulter ce document pour une description exhaustive du système de fichiers de Linux. 3.1 Systèmes de fichier 3.1.1 Principe Il n’existe pas de norme d’organisation du système de fichiers, mais un standard est à peu près suivi par les différentes distributions de Linux. L’organisation traditionnelle du répertoire racine est décrite dans le tableau suivant (voir tableau 3.1, page 48). Le répertoire de base / s’appelle : répertoire racine (root) par analogie avec la racine d’un arbre représentant le système de fichiers. Il n’est pas standard d’ajouter des répertoires au niveau de la racine. Ce système de fichiers peut résider sur différentes partitions, différents supports physiques ou sur d’autres machines sur le réseau. Ce découpage est complètement transparent pour les utilisateurs du système de fichiers. Les différentes parties peuvent être connectées au démarrage du système ou à la demande, en cours d’utilisation. 47 48 Répertoire /bin /boot /dev /etc /home /lib /lost+found /mnt /proc /root /sbin /tmp /usr /var CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX Description du contenu Fichiers exécutables nécessaires à l’initialisation Noyau et fichiers nécessaires au démarrage Fichiers spéciaux décrivant les périphériques du système Fichiers de configuration du système Répertoires personnels des utilisateurs Librairies système et modules Fichiers retrouvés par fsck. On retrouve ce répertoire au point de montage de toutes les partitions montées avec le droit d’écriture. Points de montage des systèmes de fichiers non permanents (CD-ROM, disquettes... ) Système de fichiers virtuel décrivant le fonctionnement du système (utilisation des ressources, état des processus... ) Répertoire personnel de l’administrateur du système (super utilisateur) Fichiers exécutables réservés à l’administration du système Fichiers temporaires Programmes, librairies et fichiers accessibles en lecture seule Données variables liées à la machine (spool, traces... ) TAB . 3.1 – Présentation rapide des principaux répertoires d’un système de fichier Linux 3.2. PRÉSENTATION DES PRINCIPAUX RÉPERTOIRES 49 3.2 Présentation des principaux répertoires 3.2.1 / Répertoire racine. Point de départ de toute la hiérarchie du système de fichiers. Le système de fichiers contenant ce répertoire est monté automatiquement par le noyau pendant l’amorçage du système. Ce système de fichiers est appelé système de fichiers racine (“root” en anglais). 3.2.2 /bin/ Répertoire contenant les commandes générales nécessaires à l’utilisation courante du système. Tous les utilisateurs peuvent utiliser les commandes de ce répertoire. Exemple de commandes de /bin/ : – bash : l’interpréteur de commandes (shell), – ls : permet de lister le contenu d’un répertoire, – cd : permet de changer de répertoire courant, – cat, more : permet d’afficher le contenu d’un fichier, – vi : l’éditeur de texte... 3.2.3 /sbin/ Répertoire contenant les commandes nécessaires à l’administration du système. Seuls les administrateurs ont accès à ces programmes, les autres utilisateurs n’y ont pas accès. Exemple de commandes de /sbin/ : – reboot : permet de redémarrer le système, – halt : permet d’arrêter le système, – fdisk : permet de modifier le partitionnement des disques, – fsck : permet de vérifier l’état des systèmes de fichiers, – mkfs : création de systèmes de fichier... 3.2.4 /home/ Le répertoire /home/ contient les répertoires des utilisateurs disposant d’un compte sur la machine. Chaque utilisateur possède généralement son propre répertoire. Le répertoire personnel de chaque utilisateur contient ses fichiers personnels et les fichiers de configurations qui lui sont propres. 50 CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX Les répertoires personnels se retrouvent généralement tous au même niveau (exemple : /home/util1 pour celui de util1), mais il est possible de créer des structures de groupes de travail en organisant les sous-répertoires (exemple : /home/compta/util1 si util1 fait partie du service comptabilité et /home/info/util2 si util2 fait partie du service informatique). Il est bon de placer ce répertoire dans un système de fichiers indépendant, afin d’éviter que sa saturation ne perturbe le fonctionnement du système complet. Il peut être judicieux de placer ce répertoire sur un système de fichier réseau (NFS, par exemple), ce qui permet à un utilisateur de retrouver son répertoire personnel sur toutes les machines du réseau sur lesquels il se connecte (profil flottant). Exemples de fichiers de configuration présents dans le répertoire personnel d’un utilisateur : – .bashrc : script exécuté à chaque connexion de l’utilisateur. Il permet de définir des alias, d’exécuter des commandes ou de positionner des variables d’environnement, par exemple, – .bash_logout : idem pour la déconnexion, – .bash_history : historique des commandes utilisées, – GNUstep/, KDE/ : répertoires contenant les fichiers de configuration personnels pour les environnements graphiques WindowMaker et KDE... 3.2.5 /root/ Répertoire contenant le répertoire personnel de l’administrateur. Même s’il serait tout à fait envisageable de placer ce répertoire sous /home/, il est recommandé de le placer au plus près de la racine pour éviter qu’un problème sur le système de fichiers des utilisateurs (utilisation de NFS et lien réseau cassé, par exemple) ne l’empêche de travailler. Ce répertoire est généralement uniquement accessible à l’administrateur système. 3.2.6 /etc/ Ce répertoire contient les fichiers de configuration du système. Exemples de fichiers situés dans /etc/ : – /etc/passwd contient la liste des utilisateurs du système, – /etc/group contient la liste des groupes du système, – /etc/fstab contient la définition des montages de systèmes de fichiers, – /etc/lilo.conf contient la définition des paramètres d’amorçage (utilisé pour configuré un double boot, par exemple), – /etc/exports description des répertoires exportés par NFS, – /etc/hosts traduction d’adresses IP en noms d’hôte, 3.2. PRÉSENTATION DES PRINCIPAUX RÉPERTOIRES 51 – /etc/resolv.conf règles de résolution des noms de domaine... On trouve les sous-répertoires suivants : – /etc/X11/ contient les fichiers de configuration de XWindow, – /etc/rc.d/ contient les scripts de démarrage du système, – /etc/init.d/ contient les scripts de démarrage des différents services (deamons) du systèmes (apache, MySql. . .), – /etc/cron/ contient les tâches à effectuer à la périodicité donnée (daily, hourly, monthly, weekly), – /etc/skel/ contient les fichiers à recopier dans le répertoire d’un nouvel utilisateur, – /etc/sysconfig/ contient les fichiers de configuration des périphériques. Le répertoire /etc/opt/ contient les fichiers de configuration des applications. 3.2.7 /var/ Répertoire contenant toutes les données variables du système, c’est à dire les données pouvant être modifiées lors de l’utilisation courante du système ou de ses applications. – /var/opt/ contient les données variables des applications. – /var/log/ contient les fichiers de trace de fonctionnement du système1. – /var/spool/ contient les données en attente de traitement. Les travaux d’impression en cours, les mails et les fax en attente d’émission, les travaux programmés en attente d’exécution sont tous stockés dans ce répertoire. Le répertoire spool contient des sous-répertoires de gestion des files d’impression (lpd), de courriers (mail), de forums (news), etc. Ces sous-répertoires peuvent contenir, momentanément, des fichiers de taille importante. – /var/locks/ contient les verrous sur les ressources système. Certaines ressources ne peuvent être utilisées que par une seule application (par exemple, un modem). Les applications qui utilisent de telles ressources le signalent en créant un fichier de verrou dans ce répertoire. – /var/cache/ contient les données de résultats intermédiaires des applications. Les applications qui doivent stocker des résultats intermédiaires doivent les placer dans ce répertoire. – /var/catman contient les fichiers d’aide mis en forme. Ce répertoire contient les pages de manuel mises en forme pour un accès plus rapide lors 1 Une grande partie du travail d’administration consiste à suivre les enregistrements afin de détecter les mauvais fonctionnements. Le programme logrotate permet de conserver un historique des fichiers. Il existe des outils de gestion des fichiers de trace pour permettre, entre autres, la détection des intrusions sur le système. CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX 52 d’une deuxième utilisation. – /var/lib contient quelques fichiers de configuration /var/lock les fichiers de verrous des applications /var/run les fichiers contenant les "pid" des processus du système 3.2.8 /usr/ Répertoire contenant les fichiers du système partageables en réseau et en lecture seule. Le répertoire /usr contient de nombreux sous-répertoires. On retrouve presque la même organisation que sous la racine, mais le contenu est destiné aux utilisateurs plus qu’au système lui-même. La structure de /usr est la suivante : – /usr/X11R6/ contient la hiérarchie des fichiers XWindow 2 . Ce répertoire contient des sous-répertoires bin/, lib/ et include/, où se trouvent les exécutables de XWindow, les bibliothèques et les fichiers d’en-têtes pour créer des programmes pour XWindow en C et C++. On retrouve, dans ce répertoire, une hiérarchie de fichiers ressemblant à celle de la racine, mais dédiée à l’environnement XWindow. – /usr/bin/ contient les commandes utilisateurs supplémentaires 3 du système, – /usr/doc/ contient les documentations en ligne, – /usr/etc/ contient la configuration des commandes utilisateurs, – /usr/games/ contient les (éventuels) jeux, – /usr/include/ contient les fichiers d’en-têtes du système pour le compilateur C/C++. Les fichiers de ce répertoire sont utilisés pour réaliser des programmes dans les langages de programmation C et C++. – /usr/lib/ contient les bibliothèques partagées de tous les programmes de /usr/bin/ et /usr/sbin/ et les bibliothèques statiques pour la création de programmes. – /usr/local/ contient les outils installés en dehors du contexte de la distribution. “local” ne signifie pas ici que les programmes qui se trouvent dans ce répertoire ne peuvent pas être partagés sur le réseau, mais plutôt que ce sont des extensions du système qu’on ne trouve donc que localement sur un site donné. Ce sont donc les extensions qui ne font pas partie de la distribution de Linux utilisée, et qui doivent être conservées lors des mises à jour ultérieures de cette distribution. Ce répertoire contient les sous-répertoires bin, lib, include et src, qui ont la même signification que les répertoires du 2 3 Protocole X, version 11 révision 6. C’est à dire les commandes autres que les commandes de base. 3.2. PRÉSENTATION DES PRINCIPAUX RÉPERTOIRES 53 même nom de /usr/. – /usr/man/ contient les fichiers des pages du manuel en ligne, – /usr/sbin/ contient les commandes d’administration supplémentaires. Ces commandes ne sont normalement utilisées que par l’administrateur système. – /usr/share/ contient les fichiers de configuration partagés, – /usr/src/ contient les fichiers sources du noyau et des applications de la distribution. Normalement, ce répertoire ne doit contenir que le code source des applications dépendantes de la distribution que vous utilisez. Il est vivement recommandé de conserver les sources du noyau de Linux4 sur son disque, afin de pouvoir changer la configuration du système à tout moment. Il est recommandé que ce répertoire soit placé sur un système de fichiers en lecture seule, et que les applications utilisent le répertoire /var/opt/ pour travailler. 3.2.9 /opt/ Répertoire contenant les applications complémentaires (add-on) n’appartenant pas à la distribution installée. 3.2.10 /dev/ Répertoire contenant tous les fichiers spéciaux permettant d’accéder aux périphériques. Sous Linux, la plupart des périphériques sont accessibles au travers de fichiers spéciaux, grâce auxquels l’envoi et la réception des données vers les périphériques peuvent être réalisés de manière uniforme. Il existe un tel fichier pour chaque périphérique. Ce répertoire peut être géré de deux façons : – dans un système de fichier classique. Dans ce cas, il est nécessaire de créer un fichier spécial pour chaque périphérique installé. Cette solution présente l’avantage de permettre un contrôle précis des droits d’accès aux périphériques. – une autre possibilité est d’utiliser un système de fichiers virtuel de type devfs, géré directement par le noyau. Le répertoire /dev/ ne contient dans ce cas que les fichiers spéciaux des périphériques pour lesquels le noyau dispose d’un gestionnaire intégré ou chargé dynamiquement. Cette dernière solution présente l’avantage de gérer correctement les périphériques branché à chaud sur le système (sur le bus USB, par exemple). 4 Elles se trouvent dans le répertoire /usr/src/linux/ CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX 54 Le répertoire /dev/ contient beaucoup de fichiers spéciaux pour des périphériques qui ne sont pas physiquement présents dans la machine (disques IDE ou ports série, par exemple). Dans ce cas, les opérations sur les fichiers spéciaux des périphériques non installés seront tout simplement refusées par le noyau ou ne produisent pas de résultat. Exemples de fichiers du répertoire /dev/ : – /dev/hda désigne le premier disque dur IDE du système, – /dev/hda1, la première partition de ce disque. – /dev/cdrom désigne le lecteur de CD-ROM. – /dev/usb/scanner0 désigne le premier scanner USB. – /dev/console désigne la console du système. 3.2.11 /mnt/ Répertoire réservé au montage des systèmes de fichiers non-permanents (CDROM, disquettes, etc.). Ce répertoire peut contenir plusieurs sous-répertoires pour chaque périphérique amovible, afin de permettre d’en monter plusieurs simultanément. Notez qu’il est assez courant de disposer de liens symboliques dans la racine référençant les principaux systèmes de fichiers, afin d’en simplifier l’accès. Par exemple, il est courant5 , bien que peu élégant, d’avoir un répertoire /floppy/ référençant le lecteur de disquette et un répertoire /cdrom/ référençant le lecteur de CD-ROM. 3.2.12 /boot/ Ce répertoire contient le noyau6 de Linux et ses informations de symboles7. Ce répertoire est souvent le point de montage d’un système de fichiers de très petite taille, dédié au noyau. Dans ce cas, il est recommandé de monter ce dernier en lecture seule. On notera que sur certains systèmes, le noyau reste placé dans le répertoire racine. Cette technique n’est pas recommandée, car on ne peut pas monter en lecture seule la partition racine en utilisation normale du système. 5 Ce principe est appliqué sur la distribution Debian, par exemple. Il s’agit généralement d’un fichier dénommé vmlinuz et contenant le Noyau comprimé de Linux. Les noyaux comprimés se décompriment automatiquement lors de l’amorçage du système. Ils ont l’avantage de pouvoir être stocké sur une disquette, une carte flash de faible capacité ou derrière un lien réseau bas débit. 7 Dans le fichier /boot/System.map 6 3.2. PRÉSENTATION DES PRINCIPAUX RÉPERTOIRES 55 3.2.13 /tmp/ Ce répertoire permet de stocker des données temporaires. Il dispose généralement de droits d’accès particuliers permettant à chaque utilisateur d’y créer des fichiers sans pouvoir consulter les fichiers des autres utilisateurs. 3.2.14 /lib/ Répertoire contenant les bibliothèques partagées (“DLL” en anglais, pour “Dynamic Link Library”) utilisées par les programmes du système. /lib/modules contient les modules additionnels du noyau. Ces modules sont des composants logiciels du noyau, mais ne sont pas chargés immédiatement pendant l’amorçage. Ils peuvent en revanche être chargés et déchargés dynamiquement, lorsque le système est en fonctionnement. Il est fortement recommandé que ce répertoire soit placé dans le système de fichiers racine. 3.2.15 /proc/ Ce répertoire représente le point de montage du pseudo système de fichiers du noyau. Ce dernier contient des fichiers permettant d’accéder aux informations sur le matériel, la configuration du noyau et sur les processus en cours d’exécution. On retrouvera, par exemple, un répertoire par processus actif. Chacun porte le numéro du processus décrit et contient les fichiers suivants : – cmdline contient la ligne de commande qui a créé le processus, – status contient des informations sur l’état du processus (en attente, en exécution, propriétaire... ), – exe est un lien vers le fichier exécutable utilisé par le processus... Dans le répertoire /proc/, on retrouve des fichiers contenants des informations générales sur le système. Par exemple : – uptime contient le temps de fonctionnement du système, – stat contient diverses statistiques sur l’utilisation des ressources du système (CPU, mémoire... ), – meminfo contient un récapitulatif de l’utilisation de la mémoire. – cpuinfo contient une description des CPU du système... [root@rapido root]# cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 6 model name : AMD Athlon(tm) XP 1600+ 56 CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX stepping cpu MHz cache size fdiv_bug hlt_bug f00f_bug coma_bug fpu fpu_exception cpuid level wp flags bogomips : : : : : : : : : : : : 2 1394.455 256 KB no no no no yes yes 1 yes fpu vme de tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow : 2778.72 3.3 Montage de systèmes de fichier 3.3.1 Principe Nous avons vu que la hiérarchie des fichiers de Linux était monotête, c’est à dire qu’il partait d’un racine unique, contrairement à Windows qui présente une racine par système de fichier (une pour chaque partition du disque dur, pour la disquette, le CD-ROM, les lecteurs réseaux... ). Tout fichier accessible par un système Unix est inséré dans une grande arborescence, la hiérarchie des fichiers, commençant à la racine /. Les fichiers de cette arborescence peuvent résider sur différents périphériques et ce, de façon transparente pour l’utilisateur. Ainsi, pour pouvoir exploiter plusieurs systèmes de fichier différents, nous devons rattacher ces derniers à l’arborescence des fichiers du système. Cette opération s’appelle le montage de systèmes de fichiers. Elle permet de rattacher la racine d’un système de fichier à un emplacement de l’arborescence des fichiers du système, nommé “point de montage”. 3.3.2 La commande mount La commande mount permet d’attacher un système de fichiers trouvé sur un périphérique quelconque à l’arborescence des fichiers du système. A l’inverse umount le détachera à nouveau. La syntaxe de cette commande est la suivante : mount -t <type de système de fichier> <nom fichier> <emplacement> 3.3. MONTAGE DE SYSTÈMES DE FICHIER 57 Où : – Type de système de fichier, décrit le format utilisé par le système de fichier à monter. Voir la liste des principaux types (voir tableau 3.2, page 57). Si l’option “-t” n’est mentionnée, ou si le type “auto” est précisé, la recherche de type est effectuée sur le superblock (dans l’ordre : minix, ext, ext2, xia, iso9660 sont supportés). Si cette recherche échoue, et si /proc/filesystems existe, alors tous les types de systèmes de fichiers listés seront essayés successivement. Type ext2 ext3 fat vfat iso9660 ntfs nfs smb Signification Système de fichier standard de Linux Système de fichier journalisé de Linux Système de fichier FAT (DOS) Système de fichier FAT32 (depuis Windows 95r2) Système de fichier des CD-ROM Système de fichier de Windows NT (lecture seule) Système de fichier réseau (Unix) Système de fichier réseau (Windows) TAB . 3.2 – Principaux types de systèmes de fichiers supportés par la commande mount – Nom fichier est le nom du fichier contenant le système de fichier à monter. Il s’agit généralement de fichiers du répertoire /dev/. Par exemple : – /dev/hda1 pour la première partition du premier disque dur (le disque A), – /dev/hdb3 pour la troisième partition du deuxième disque dur (le disque B), – /dev/fd0 pour le premier lecteur de disquette, – /dev/scd0 pour le premier lecteur de CD-ROM SCSI. – Emplacement est le repertoire de la hiérarchie des fichiers où sera monté le système de fichiers. Le contenu précédent du répertoire (s’il n’était pas vide), ainsi que son propriétaire et ses modes d’accès initiaux deviennent invisibles tant que le nouveau système de fichiers reste monté. Le chemin d’accès du répertoire représente alors la racine du système de fichiers se trouvant sur le périphérique. 58 CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX 3.3.3 Le fichier /etc/fstab Nous avons vu comment utiliser monter des systèmes de fichiers à l’aide de la commande mount mais il est évident qu’il serait fastidieux de recourir systématiquement à cette commande pour monter les systèmes de fichiers utilisés couramment. Le fichier /etc/fstab, contient des lignes décrivant les systèmes de fichiers habituellement montés, leurs répertoires, et leurs options. Ce fichier est utilisé dans trois buts : – Le montage automatique des systèmes de fichiers couramment utilisés. La commande mount -a [-t type] (généralement exécutée dans un script de démarrage) monte tous les systèmes de fichiers indiqués dans fstab (ou uniquement ceux du type indiqué), à l’exception de ceux dont la ligne contient le mot-clé “noauto”. – La simplification du montage des systèmes de fichiers. Lorsque l’on monte un système de fichiers mentionné dans la fstab, il suffit d’indiquer le point de montage, ou le périphérique (exemple : mount /mnt/cdrom pour monter le CD-ROM). – La “démocratisation du droit de montage des systèmes de fichiers”. Normalement, seul le Super-Utilisateur peut monter des systèmes de fichiers. Néanmoins, si la ligne de la fstab contient l’option user, n’importe quel utilisateur peut monter le système de fichiers correspondant. Ainsi, avec une ligne : /dev/cdrom /cd iso9660 ro,user,noauto,unhide dans le fichier /etc/fstab, n’importe quel utilisateur peut monter le système iso9660 se trouvant sur son CDROM en utilisant la commande mount /dev/cdrom. 3.3. MONTAGE DE SYSTÈMES DE FICHIER 59 /dev/hda5 / ext2 defaults 1 1 /dev/hda7 /home ext2 defaults 1 1 /dev/hda8 /var ext2 defaults 1 1 /dev/hdb2 /tmp ext2 defaults 1 1 none /dev/pts devpts mode=0620 0 0 none /dev/shm tmpfs defaults 0 0 /dev/scd0 /mnt/cdrom auto user,iocharset=iso8859-15, umask=0,exec,codepage=850, ro,noauto 0 0 /dev/fd0 /mnt/floppy auto user,iocharset=iso8859-15, umask=0,sync,exec,codepage=850, noauto 0 0 /dev/hda1 /mnt/windows vfat iocharset=iso8859-15,umask=0, codepage=850 0 0 none /proc proc defaults 0 0 /dev/hda6 none swap exec,dev,suid,rw 1 1 F IG . 3.1 – Exemple de fichier fstab 60 CHAPITRE 3. ARBORESCENCE D’UN SYSTÈME LINUX Chapitre 4 Utilisation de Linux Dans ce chapitre, nous allons aborder la manipulation courante d’un système Linux correctement installé. Pour les auditeurs du TMRI, il s’agit de PC sur lesquels sont installés des systèmes Mandrake Linux 8.1. Dans un premier temps, les manipulations se feront en mode texte afin de bien comprendre le fonctionnement du système, puis nous aborderons le mode graphique. 4.1 Trouver de l’aide Il existe plusieurs types d’aide en ligne : – le manuel de référence – les "HOWTO" – les documents du "Linux Documentation Project", alias LDP – les fichiers de documentation des paquetages 4.1.1 Le manuel Le manuel en ligne est accessible par la commande man. Il est organisé en différentes sections : La syntaxe de la commande man est : man {options} {section} commande Par défaut, les sections sont parcourues dans l’ordre des numéros. Il est possible de préciser le numéro de section lors de l’ouverture du manuel : man kill man 2 kill 61 CHAPITRE 4. UTILISATION DE LINUX 62 Section 1 2 3 4 5 6 7 8 9 Intitulé les commandes utilisateur les appels système les bibliothèques de programmation les fichiers spéciaux les formats de fichiers les jeux divers les commandes d’administration le noyau TAB . 4.1 – Sections du manuel (commande man) Lors de la lecture du manuel, il est possible de rechercher un motif à l’aide de la commande /motif. Cette commande positionne le curseur sur la première occurrence du motif. Pour se positionner sur l’occurrence suivante, on utilisera la touche n, pour l’occurrence précédente, N. Pour quitter le manuel, on utilisera la touche Q. La variable d’environnement MANPATH donne le chemin de recherche des pages de manuel : MANPATH=/usr/man:/usr/local/man Il existe une base de mots clés pour la recherche dans les pages de manuel. Cette base est construite par la commande /usr/sbin/makewhatis. Les commandes apropos et whatis permettent d’effectuer des recherches dans cette base de données. [ATR] 4.1.2 TexInfo C’est un projet de la FSF (Free Software Foundation) pour remplacer les pages de manuel classiques. La base de données d’informations est répartie et accessible par la commande info. Cette commande permet de visualiser en mode interactif des documents hypertexte. Le système est auto renseigné, il suffit de lancer info et de naviguer dans cet environnement pour avoir l’aide en ligne. [ATR] 4.1.3 Les HOWTO Les HOWTO sont des documents expliquant comment effectuer une tâche donnée comme : "Installer Linux sur le même disque que Windows NT". Ils 4.1. TROUVER DE L’AIDE 63 sont disponibles dans plusieurs formats (texte, PostScript, HTML) et sont installés dans le répertoire /usr/doc/HOWTO. Ce sont les premiers documents à consulter lorsqu’on recherche une information pouvant s’exprimer par Comment faire pour ? ”. Il existe des traductions françaises de ces documents à l’adresse suivante : http://www.freenix.fr/linux/HOWTO/ [ATR] 4.1.4 Les documentations A partir du répertoire /usr/doc, on trouve les documentations des paquetages installés. Le contenu est assez inégal et dépend du concepteur du paquetage. C’est néanmoins une ressource importante en terme de documentation. [ATR] 4.1.5 Autres sources d’information Les sites Web Certains sites Web proposent de la documentation en ligne ou téléchargeable sur le système Linux (voir tableau 4.2, page 63). Nom Linux Center Unix Guru Universe LDP Le guide du ROOTard URL http ://linux-center.org/fr/ http ://www.ugu.com/ http ://sunsite.unc.edu/mdw/linux.html/ http ://www.freenix.fr/linux/Guide TAB . 4.2 – Sites Web de documentation sur Linux D’autres sites proposent des nouvelles concernant Linux et les logiciels libres en général. Ce sont de bonnes sources pour se tenir informé des nouvelles versions de logiciels (voir tableau 4.3, page 63). Nom Freshmeat Da Linux French Page URL http ://www.freshmeat.net http ://linuxfr.org/ TAB . 4.3 – Sites Web de nouvelles sur Linux 64 CHAPITRE 4. UTILISATION DE LINUX Les forums Un grand nombre de forums existe traitant en totalité ou partie de Linux. Les plus importants et les plus fréquentés sont : – fr.comp.os.linux.configuration – fr.comp.os.linux.annonce – fr.comp.os.linux.moderated – comp.os.linux.answers – comp.os.linux.security – comp.os.linux.setup 4.2 Les commandes 4.2.1 Principes de base Nous allons voir les commandes utilisateur principales de Linux (il en existe plusieurs centaines). Les commandes sont des programmes écrits avec n’importe quel langage informatique pour résoudre un problème donné. Le système est évolutif et il est facile d’ajouter de nouvelles commandes. Toutefois, avant d’écrire une commande, il faut vérifier qu’il n’existe pas quelqu’un ayant déjà effectué ce travail par une recherche sur le système ou sur le Web. Une commande Linux est toujours composée de la même façon : nom_commande {options} liste_de_paramètres Les options sont généralement composées du signe - et d’un caractère ou d’un mot. Elles modifient, ou précisent, le fonctionnement de la commande. La liste des paramètres permet de spécifier la cible de la commande. Les options et les paramètres sont séparés par des caractères blancs (espace ou tabulation). 4.2.2 Les entrées - sorties de commandes Nous avons constaté jusqu’à présent que les commandes utilisaient l’écran et le clavier pour communiquer avec l’utilisateur. Ce mode de fonctionnement est tout à fait adapté à une utilisation interactive du système, dans laquelle l’utilisateur transmet des ordres au système à l’aide du clavier et lit les réponses du système sur l’écran. Tous les programmes Linux sont lancés avec trois flux de données ouverts : l’entrée standard (stdin), la sortie standard (stdout) et la sortie des erreurs (stderr). Par défaut, l’entrée standard est le clavier et les sorties sont dirigées sur l’écran. Il est possible de rediriger l’entrée ou la sortie vers un fichier ou vers une autre commande. Ceci permet d’enchaîner des traitements sur un flot de données. 4.2. LES COMMANDES 65 D’une façon générale, on retrouve donc trois flux pour toutes les commandes : – La sortie standard, sur laquelle la commande va envoyer les réponses obtenues. La commande ls, par exemple, va envoyer sur la sortie standard la liste des fichiers du répertoire courant, – La sortie erreur, sur laquelle la commande va envoyer ses messages d’erreur. La commande ls, par exemple, va envoyer sur la sortie erreur ses messages indiquant les erreurs rencontrées (un fichier qui n’existe pas, un problème de droit d’accès, une erreur de syntaxe dans les options... ), – L’entrée standard, dans laquelle la commande va lire les réponses à ses questions. Quand la commande rm, par exemple, demande de confirmer la suppression de fichier, elle lit la réponses (“y” ou “n”) sur l’entrée standard. Par défaut, les sorties standard et erreur sont redirigées sur l’écran et l’entrée standard est prise sur le clavier (voir figure 4.1, page 65). Sortie standard Entrée standard Clavier Commande Sortie erreur F IG . 4.1 – Les entrées-sorties de commandes Exemple : [remi@pc1 essai]$ rm a toto rm: remove write-protected file ‘a’? y (sortie standard, réponse lue sur entrée standard) rm: cannot remove ‘toto’: Aucun fichier ou répertoire de ce type (sortie erreur) [remi@pc1 essai]$ ls . toto ls: toto: Aucun fichier ou répertoire de ce type (sortie erreur) .: (sortie standard) bilan1999 bilan2001 prévision2000 prévision2002 bilan2000 prévision1999 prévision2001 CHAPITRE 4. UTILISATION DE LINUX 66 4.2.3 Redirection de commandes Nous avons vu que, par défaut, les entrées de commandes proviennent du clavier et les sorties (standard et erreur) sont envoyées sur l’écran, ce qui convient généralement dans le cadre d’une utilisation interactive du système. Il est toutefois possible de rediriger les entrées comme les sorties vers ou depuis (voir tableau 4.4, page 68) : – un fichier, – une autre commande. Redirection vers un fichier Pour rediriger la sortie standard d’une commande vers un fichier, on ajoute le symbole > suivi du nom du fichier vers lequel on désire rediriger le flux de sortie. La ligne de commande ls > toto permet de créer1 un fichier nommé toto contenant la liste des fichiers du répertoire courant. On obtient un résultat légèrement différente en utilisant ». Ici le flux de la sortie standard est ajouté à la fin du fichier et ne remplace plus l’ensemble du contenu du fichier. De ce fait, si le fichier “toto” contient le texte “Ceci est mon texte”, la commande ls >> toto ajoutera la liste des fichiers à la fin du texte “Ceci est mon texte”, alors que ls > toto aurait écrasé le contenu du fichier toto. [remi@pc1 essai]$ cat toto Ceci est mon texte [remi@pc1 essai]$ ls >> toto [remi@pc1 essai]$ cat toto Ceci est mon texte bilan1999 bilan2000 bilan2001 prévision1999 prévision2000 prévision2001 prévision2002 toto Nous savons maintenant rediriger la sortie standard des commandes dans un fichier. Pour rediriger la sortie des erreurs, nous utilisons 2> ou 2», de la même façon que > ou ». 1 Si le fichier “toto” existe, il sera écrasé. 4.3. ENTRER ET SORTIR DE LINUX 67 Ainsi, ls > toto 2> erreurs2 permet d’obtenir la liste des fichiers du répertoire courant dans le fichier “toto” et de stoker les éventuelles erreurs générées par la commandes dans le fichier “erreurs”. Pour rediriger l’entrée standard d’une commande depuis un fichier, on utilise < après la commande. Ainsi, rm fichier1 < fichier2 permet d’utiliser “fichier2” pour l’entrée standard de la commande rm fichier1. Redirection vers une autre commande Pour rediriger la sortie standard d’une commande vers l’entrée standard d’une autre commande, on ajoute le symbole | suivi du nom de la commande vers laquelle on souhaite rediriger le flux de données. Ce dernier sera reçu par l’entrée standard de la commande réceptrice et traité de la même façon que si elle avait été saisie au clavier. Lorsque l’on réalise ce type de redirection, il faut noter que les processus producteur et consommateur du flux de données sont automatiquement synchronisés (le consommateur se met en attente si le producteur n’émmet plus de données, le producteur fait de même si le consommateur n’est pas en mesure de traiter les données envoyées sur son entrée standard). Pour rediriger la sortie erreur, on utilise le symbole 2|. 4.3 Entrer et sortir de Linux 4.3.1 Connexion à un système Linux Nous avons vu que Linux est un système multi-utilisateur, ce qui signifie que plusieurs personnes différentes sont susceptibles d’utiliser une même machine. Il est donc nécessaire que chacun s’identifie clairement auprès du système. Cette opération est réalisée lors de l’opération dite de login (du verbe anglais “to log in”, qui signifie “s’enregistrer” dans le système). Chaque utilisateur d’un système Linux est identifié par un nom unique : son login. Lorsqu’un utilisateur veut se connecter à un système Linux, il doit préciser son login lorsque le système lui présente sa mire de connexion. Certains login peuvent être associés à un mot de passe, dans ce cas, le système le demandera à l’utilisateur après qu’il ait saisi son login. La mire de connexion peut être graphique ou en mode texte. Une fois que l’utilisateur a été identifié, il peut accéder au système. Pour cela, le système vous donne accès à un “interpréteur de commandes”, positionné à un 2 Ce qui équivalent à ls 2> erreurs > toto, l’ordre des redirection n’ayant pas de signification. CHAPITRE 4. UTILISATION DE LINUX 68 Saisie commande commande & commande > fichier commande >> fichier commande < fichier commande1 | commande2 Signification La commande est exécutée normalement, le symbole d’invite sera affiché lorsqu’elle se terminera. La commande est exécutée en arrière-plan, ce qui signifie qu’elle n’a en principe pas accès au terminal. Le shell reprend donc la main immédiatement, et affiche son symbole d’invite alors que la commande continue à s’exécuter en tâche de fond. Bash affiche une ligne du type [1] 2496 indiquant le numéro du job à l’arrière-plan suivi du PID c’est-à-dire de l’identifiant de processus. Lorsque la commande se termine, Bash affichera une ligne : [1]+ Done commande juste avant de proposer un nouveau symbole d’invite. La commande est exécutée, mais sa sortie standard est dirigée vers le fichier indiqué. Seule la sortie d’erreur s’affiche à l’écran. La sortie standard est ajoutée en fin de fichier sans en écraser le contenu. La commande est exécutée, mais ses informations d’entrée seront lues depuis le fichier qui est indiqué plutôt que depuis le terminal. Les deux commandes sont exécutées simultanément, l’entrée standard de la seconde étant connectée par un tube (pipe) à la sortie standard de la première. TAB . 4.4 – Syntaxe de redirection de sortie standard vers une autre commande 4.3. ENTRER ET SORTIR DE LINUX 69 endroit particulier du système de fichier : le répertoire de base de l’utilisateur, encore appelé “home directory” (pour répertoire “maison”). Comme son nom l’indique, ce répertoire peut être utilisé comme bon lui semble par son propriétaire : il est libre d’y enregistrer ses données personnelles, d’y donner accès aux autres utilisateurs ou, au contraire, de le protéger. Il est aussi utilisé pour y placer des fichiers de configuration propres à l’utilisateur. Il y a généralement un répertoire de base par utilisateur. Généralement, le répertoire de base des utilisateur a la forme suivante : /home/<login de l’utilisateur> Sur tout système Linux, il existe un utilisateur bien particulier qui bénéficie de tous les droits sur le système : l’administrateur du système, communément appelé utilisateur “root”. Cet utilisateur se connecte comme tous les autres, mais nécessite de respecter certaines précautions évidentes : – l’accès à ce compte devra être soigneusement contrôlé puisqu’un utilisateur connecté sur le compte root dispose de tous les droits sur le système, – les manipulations réalisées sous le compte root doivent soigneusement réfléchies, car elles sont faites “sans filet” et toute erreur de manipulation peut avoir de graves conséquences sur le système. 4.3.2 Déconnexion d’un système Linux Il est très important de se déconnecter et de ne jamais laisser une session ouverte sans surveillance, car une personne mal intentionnée pourrait très bien utiliser ce terminal à vos dépends. Il aurait tous vos droits, et effectuerait ses opérations en votre nom. La sécurité du système garantissant que vous seul pouvez vous connecter sous ce nom, grâce au mot de passe, vous seriez donc responsable des agissements de l’intrus. Le problème est d’autant plus sensible pour les sessions de l’utilisateur “root”. Pour quitter l’interpréteur de commande, vous pouvez utiliser : – la commande logout, qui ne fonctionne qu’avec l’interpréteur de commandes de connexion, – la combinaison de touches CTRL + D, – la commande exit. Ces deux dernières commandes ont pour effet de sortir de l’interpréteur de commande courant3 . Si ce dernier se trouve être le shell de connexion, alors l’utilisateur est déconnecté de la machine. 3 Nous verrons par la suite comment il est possible d’ouvrir en cascade plusieurs interpréteurs de commande. 70 CHAPITRE 4. UTILISATION DE LINUX 4.3.3 Arrêt et redémarrage du système Il faut bien comprendre que Linux, tout comme la plupart des systèmes d’exploitation modernes, ne peut pas être arrêté en éteignant directement l’ordinateur, comme on le faisait autrefois avec le DOS. En effet, la plupart des systèmes d’exploitation utilisent une partie de la mémoire de l’ordinateur pour y stocker temporairement les données qui ont été lues à partir du disque et celles qui doivent y être écrites. Cette zone de mémoire constitue ce qu’on appelle un tampon (“buffer” en anglais), et elle sert à accélérer les accès aux périphériques plus lents, que sont les disques durs et lecteurs de CD-ROM. Il va de soi qu’une requête de lecture sur des données déjà situées en mémoire est infiniment plus rapide que si elles ne s’y trouvaient pas. Il est en revanche plus difficile de comprendre pourquoi les requêtes d’écriture doivent être différées. La raison est la suivante : le système préfère différer l’écriture physique sur le disque parce qu’une autre requête d’écriture dans la même zone du disque peut très bien avoir lieu ultérieurement. Si les données qui n’ont pas été écrites sont ainsi modifiées par une requête ultérieure, il n’est plus nécessaire de les écrire, et ainsi le système peut économiser un temps précieux en ne le faisant pas. Si les données à écrire sont contiguës à celles d’une requête précédente, le système peut les écrire en bloc, ce qui est toujours plus rapide que de faire plusieurs écritures partielles (notamment parce que les têtes de lecture du disque n’ont pas à être déplacées). Enfin, si les données qui doivent être écrites font l’objet d’une requête de lecture, il va de soi qu’elles sont immédiatement accessibles. On voit que cette stratégie permet de travailler beaucoup plus vite. De facto, Linux utilise toute la mémoire vive libre pour ses tampons d’entrées / sorties, ce qui en fait un système extrêmement performant. Le gain en performances peut facilement atteindre un facteur 3 ou 4. Le problème majeur est évidemment que si on éteint l’ordinateur brutalement, les données dont l’écriture a été différée sont perdues. Pire, parmi ces données, il est probable qu’il y ait des informations vitales pour le système de fichiers, ce qui fait qu’il risque fort d’être endommagé. L’arrêt du système est une opération qui est du ressort de l’administrateur. On ne peut normalement le réaliser que sous le compte root, mais il est possible de déléguer ce droit à d’autres utilisateurs. Plusieurs commandes sont disponibles, les plus simples sont données ci-dessous : halt Permet d’arrêter le système, reboot Permet de le redémarrer le système, shutdown Permet de réaliser les opérations précédentes avec plus de souplesse (par exemple, il est possible de différer l’arrêt du système et d’envoyer préalablement un message d’avertissement aux utilisateurs.). 4.4. PARCOURS DU SYSTÈME DE FICHIER 71 Remarquez qu’un système Linux bien configuré4 peut fonctionner en continu pendant de très longues périodes (plusieurs mois ou années) sans nécessiter d’être arrêter ou redémarré régulièrement. Dans le cadre d’une entreprise, l’arrêt d’un système est donc rare (normalement, uniquement pour des opérations de maintenance, mais il s’agit le plus souvent d’économiser de l’électricité). 4.4 Parcours du système de fichier Commande cd pwd mkdir rmdir Syntaxe cd repertoire_destination pwd mkdir nom_repertoire rmdir repertoire Description Change de répertoire courant. Retourne au répertoire personnel si on ne précise pas de répertoire de destination. L’option ’-’ permet de retourner au répertoire précédent. Retourne le nom du répertoire courant. Crée un nouveau répertoire. Supprime un répertoire vide. On peut également utiliser la commande rm. TAB . 4.5 – Commandes de manipulation de répertoire 4.4.1 Identifier le répertoire courant La commande pwd (pour “Print Working Directory”) permet d’afficher le chemin complet du répertoire courant : [remi@pc1 remi]$ pwd /home/remi Vous remarquerez que le nom du répertoire courant (“remi”, ici) appairait dans l’invite de commande (aussi appelé le “prompt”). Ce comportement est paramétrable, il serait envisageable de faire apparaître le chemin complet dans l’invite de commande5 . 4 5 Et disposant d’une alimentation électrique stable, c’est à dire équipée d’un onduleur. Ce ne serait pas forcement judicieux, vu la longueur moyenne des chemins. CHAPITRE 4. UTILISATION DE LINUX 72 Lister le contenu d’un répertoire La commande ls permet de lister le contenu du répertoire courant. [remi@pc1 remi]$ ls C/ GNUstep/ CNAM/ guide.zip Desktop/ Guide.zip email/ IMAGES/ emap_264.exe kvirc-2.0.0/ Lettres/ Mail/ mbox memoire/ MIDI/ Nautilus/ nohup.out nsmail/ portable/ prog/ remi.leblond.free.f RPMS/ sciemat/ src/ tmp/ Dans la liste retournée par ls, nous distinguons les répertoires, dont le nom se termine par /, des autres fichiers. Nous remarquons que le nom des fichier est sensible à la case (les fichiers guide.zip et Guide.zip sont distincts, ce qui n’aurait pas été possible avec Windows). Il faudra donc prendre garde à l’utilisation des majuscules lors du nommage des fichiers. Il est possible de préciser en argument de la commande ls le nom d’un fichier ou d’un répertoire6 : [remi@pc1 remi]$ ls guide.zip guide.zip [remi@pc1 remi]$ ls email/ photo1.jpg photo3.jpg photo5.jpg photo2.jpg photo4.jpg photo6.jpg photo7.jpg photo8.jpg photo9.jpg Cela permet de lister uniquement un élément du répertoire (dans le cas d’un fichier, il s’agit du fichier lui même, pour un répertoire, il s’agit des fichiers qu’il contient). Il est possible de préciser un motif de recherche (voir tableau 4.6, page 73) pour faire porter la commande sur tous les fichiers que la commande ne retourne que les noms de fichiers répondant à ce motif. Par exemple, si on désire afficher les noms des fichiers commençants par p : [remi@pc1 remi]$ ls e* emap_264.exe email: photo1.jpg photo2.jpg photo3.jpg photo4.jpg photo5.jpg photo6.jpg photo7.jpg photo8.jpg photo9.jpg Exemple d’utilisation des symboles de substitution : 6 Certains interpréteurs de commandes, comme le bash, offre une fonctionnalité d’aide à la saisie des noms de commande et de fichier. Ainsi, après avoir tapé les premières lettres d’une commande ou d’un nom de fichier, le système vous proposera la suite si vous appuyez sur la touche TAB. 4.4. PARCOURS DU SYSTÈME DE FICHIER Symbole ∗ ? {a, b, toto} [abc] [a − c] 73 Signification Ensemble de caractères quelconques Un caractère quelconque Un caractère ou un mot valant a, b ou toto Un caractère valant a, b ou c Un caractère compris entre a et c TAB . 4.6 – Symboles de substitution [remi@pc1 essai]$ ls bilan1999 bilan2001 prévision2000 prévision2002 bilan2000 prévision1999 prévision2001 [remi@pc1 essai]$ ls bilan* bilan1999 bilan2000 bilan2001 [remi@pc1 essai]$ ls *2001 bilan2001 prévision2001 [remi@pc1 essai]$ ls bilan{1999,2001} bilan1999 bilan2001 [remi@pc1 essai]$ ls prévision200[12] prévision2001 prévision2002 [remi@pc1 essai]$ ls bilan200? bilan2000 bilan2001 [remi@pc1 essai]$ ls prévision200[0-2] prévision2000 prévision2001 prévision2002 Il est possible d’obtenir plus de renseignement de la commande ls en l’utilisant avec l’option -l. Cette option permet de faire apparaître : – les droits d’accès au fichier, – les nombre de liens existants sur ce fichier, – le nom du propriétaire de ce fichier, – le groupe de propriétaire du fichier, – la taille du fichier, – la date de dernière modification. [remi@pc1 remi]$ ls -l total 2196 drwxrwxr-x 2 remi ... drwx-----2 remi remi 4096 fév 24 23:42 aide/ remi 4096 fév 20 22:55 tmp/ Cet affichage présente beaucoup d’informations : CHAPITRE 4. UTILISATION DE LINUX 74 – Le premier caractère donne le type du fichier : – ‘-‘ pour un fichier normal – ‘p’ pour un FIFO – ‘b’ pour un fichier spécial en mode bloc – ‘c’ pour un fichier spécial en mode caractère – ‘d’ pour un répertoire – Les neuf caractères suivants donnent les droits d’accès – Le champ suivant donne le nombre de liens sur le fichier – On trouve ensuite le nom du propriétaire et du groupe du fichier – Le champ suivant donne la taille en octets du fichier – La date de la dernière modification est indiquée selon deux formats : – avec l’année pour les fichiers vieux de plus de 6 mois ou de plus d’une heure dans le futur, – avec l’heure pour les autres cas. – Enfin, le nom du fichier. La commande stat permet d’afficher la "fiche signalétique" du fichier, regroupant les principales méta-données de ce dernier. bash$ stat file1 File: "file1" Size: 3562 Filetype: Regular File Mode: (0777/-rwxrwxrwx) Uid: ( 500/ sandra) Device: 8,0 Inode: 2043 Links: 1 Access: Wed Nov 18 18:52:42 1997(00000.00:26:18) Modify: Wed Nov 18 18:52:42 1997(00000.00:26:18) Change: Wed Nov 18 18:52:59 1997(00000.00:26:01) Gid: ( 500/ sand En plus des attributs déjà vus, cette commande affiche : – le type du fichier en toutes lettres – les droits d’accès en numérique (voir plus loin) – la référence du périphérique physique (device) – le numéro d’inode – les dates de dernier accès, dernière modification et dernier changement. L’option -a de la commande ls permet de faire apparaître les fichiers cachés du répertoire. Les fichiers cachés ont simplement un nom dont la première lettre est ’.’. Ces fichiers n’ont pas d’autre caractéristiques que de ne pas apparaître par défaut lors de la consultation des répertoires. Il ne bénéficient pas de droits d’accès particuliers et peuvent être manipulés comme tout autre fichier. Pour les rendre visibles, il suffit de les renommer. [remi@pc1 remi]$ ls -a 4.4. PARCOURS DU SYSTÈME DE FICHIER ./ ../ .AbiSuite/ aide/ .ArmageTronrc .aumixrc .bash_history .bash_logout .bash_profile .bash_profile~ .bashrc C/ 75 .gimp-1.2/ .gnome/ .gnome-desktop/ .gnome_private/ .gnucash/ .gnupg/ GNUstep/ .gphoto/ .grip .gtkrc .gtoasterrc .ICEauthority Enfin, l’option -R (pour Récursif) de la commande ls permet de parcourir les éventuels sous répertoires. 4.4.2 Naviguer dans les répertoires La commande cd permet de changer de répertoire courant. Utilisée seule, elle permet de revenir au répertoire de connexion de l’utilisateur courant. Suivi d’un nom de répertoire, elle permet de descendre dans ce répertoire. Suivi de ’..’, elle permet de remonter dans le répertoire précédant. Suivi de ’/’, elle permet de remonter à la racine du système de fichier (voir 4.7, page 75 pour les autres symboles utilisables). Symbole .. . / ~ ~util Signification Répertoire précédant Répertoire courant Racine du système de fichier Répertoire de connexion de l’utilisateur courant Répertoire de connexion de l’utilisateur "util" TAB . 4.7 – Symboles de définition des chemins d’accès Exemple d’utilisation de la commande cd : [remi@pc1 remi]$ pwd /home/remi [remi@pc1 remi]$ ls C/ essai/ CNAM/ GNUstep/ latex2e.ps Lettres/ MIDI/ Nautilus/ prog/ remi.leblond.free.fr/ CHAPITRE 4. UTILISATION DE LINUX 76 Desktop/ guide.zip email/ IMAGES/ emap_264.exe kvirc-2.0.0/ [remi@pc1 remi]$ cd essai [remi@pc1 essai]$ pwd /home/remi/essai [remi@pc1 essai]$ cd .. [remi@pc1 remi]$ pwd /home/remi Mail/ mbox memoire/ nohup.out nsmail/ portable/ RPMS/ sciemat/ src/ La commande cd peut être utilisée avec des chemins de différents types : Des chemins absolus , c’est à dire définis depuis la racine du système de fichier. Exemple : cd /home/remi Des chemins relatifs au répertoire courant. C’est à dire définissant le déplacement nécessaire pour atteindre le répertoire voulu depuis le répertoire courant. Exemple : cd ../../etc permet d’atteindre le répertoire /etc depuis le répertoire /home/remi 4.4.3 Créer un nouveau répertoire La commande mkdir (“Make Directory”) suivie d’un nom permet de créer un nouveau répertoire en dessous du répertoire courant. Exemple d’utilisation de la commande mkdir : [remi@pc1 essai]$ ls bilan1999 bilan2001 prévision2000 prévision2002 bilan2000 prévision1999 prévision2001 [remi@pc1 essai]$ mkdir "Mon répertoire" [remi@pc1 essai]$ ls bilan1999 bilan2001 prévision1999 prévision2001 bilan2000 Mon répertoire/ prévision2000 prévision2002 [remi@pc1 essai]$ cd "Mon répertoire" [remi@pc1 Mon répertoire]$ ls [remi@pc1 Mon répertoire]$ pwd /home/remi/essai/Mon répertoire 4.5. L’ÉDITEUR DE TEXTE VI 77 4.4.4 Supprimer un répertoire La commande rmdir, ou rd (“Remove Directory”) permet de supprimer un répertoire vide. S’ils existent, les fichiers contenus dans le répertoire à effacer devront être supprimés au préalable. Exemple d’utilisation de la commande rmdir : [remi@pc1 essai]$ ls bilan1999 bilan2001 prévision1999 prévision2001 bilan2000 Mon répertoire/ prévision2000 prévision2002 [remi@pc1 essai]$ rmdir Mon\ répertoire [remi@pc1 essai]$ ls bilan1999 bilan2001 prévision2000 prévision2002 bilan2000 prévision1999 prévision2001 [remi@pc1 essai]$ cd .. [remi@pc1 remi]$ rmdir essai rmdir: ‘essai’: Le répertoire n’est pas vide. Comme nous avons vu que les répertoires étaient des fichier d’un type particulier, il est également possible d’utiliser la commande rm pour les supprimer, mais à condition d’utiliser l’option -R afin de permettre une suppression récursive des fichiers contenus dans le répertoire (il y a toujours au moins . et ..). 4.5 L’éditeur de texte vi L’éditeur de texte utilisé le plus souvent sous Unix est vi, c’est un éditeur de texte pleine page qui, derrière ses apparences rustiques, est très puissant pour qui maîtrise sont utilisation. Il existe sous Unix un très grand nombre d’éditeurs de texte, dont certains reprennent une copie conforme de l’ergonomie Windows, mais aucun n’est aussi rependu que vi. vi présente l’avantage d’être présent sur tous les systèmes Unix et fonctionne généralement même sur un système en mauvaise forme7 , son apprentissage est donc essentiel à qui veut utiliser correctement un système Unix. Par contre, son ergonomie particulière risque fortement de perturber les habitués des éditeurs de texte sous Windows. Oubliez ici votre souris, elle ne vous sera que d’une faible utilité. Ne cherchez pas les commandes dans un quelconque menu ou une barre d’icône, il n’y en a pas... Après ce petit lavage de cerveau, nous allons pouvoir nous pencher sur la question. Utilisez la commande vi suivi éventuellement du nom du fichier à éditer pour entrer dans l’éditeur. Vous voyez alors apparaître le contenu de votre fichier et 7 Très utile pour intervenir sur un système saturé et pour rétablir rapidement une situation saine. CHAPITRE 4. UTILISATION DE LINUX 78 Commande cp Syntaxe cp sources destination mv mv sources destination rm rm fichier(s) ln ln -s fichier nom_lien Description Copie les fichiers source vers la destination. Il peut y avoir plusieurs sources, mais il n’y a toujours qu’une seule destination. S’il y a plusieurs sources, la destination est nécessairement un répertoire. Déplace les fichiers source vers la destination. Supprime un ou plusieurs fichier(s). L’option ’-R’ permet de parcourir le contenu des éventuels répertoires. Crée un lien vers un fichier existant. L’option ’-s’, qui permet de créer un lien symbolique au lieu d’un lien physique, est a privilégier car la gestion des liens physiques peut très vite devenir complexe. TAB . 4.8 – Commandes de manipulation de fichiers 4.5. L’ÉDITEUR DE TEXTE VI 79 l’interface utilisateur de vi (voir figure 4.2, page 79). En fait, l’interface utilisateur de vi se résume à la dernière ligne, en bas de l’écran. Austère non ? Ceci est le bilan de l’année 2000 : L’année 2000 a vraiment été une bonne année !!! ~ ~ ~ "bilan2000" 3L, 85C 1,35 Tout F IG . 4.2 – Interface utilisateur de vi L’éditeur vi permute régulièrement entre deux modes différents (voir figure 4.4, page 81) : – Le mode édition, qui permet la saisie de texte, – Le mode de commande, qui permet de faire appel aux commandes de vi. Pour passer du mode “édition” au mode “commande”, il faut presser la touche ECHAP. Pour passer du mode “commande” au mode “édition”, il faut entrer une commande d’édition (voir tableau 4.9, page 80). Généralement, vi se lance en mode “édition”. Il est possible de se déplacer dans le texte à l’aide des touches de direction, aussi bien en mode “édition”8. qu’en mode “commande”. O : Ajout d’une ligne avant la line courante i : Ajout de texte avant la position courante a : Ajout de texte après la position courante Ceci est une ligne de texte A : Ajout de texte en fin de ligne Position courante I : Ajout de texte en début de ligne o : Ajout d’une ligne après la line courante F IG . 4.3 – Exemple d’utilisation des commandes d’insertion de vi Voici les commandes nécessaires pour ajouter une ligne en fin de fichier : 8 Certaines versions de vi ne permettent pas les déplacements en mode “édition” CHAPITRE 4. UTILISATION DE LINUX 80 Commande a A i I o O x r R dd dw d$ cw c$ cˆ J <numéro>G G :q :q ! :w :wq ou :x /<texte> ?<texte> n u . m<car> ’<car> Explication Ajoute du texte après la position courante Ajoute du texte à la fin de la ligne courante Ajoute du texte avant la position courante Ajoute du texte au début de la ligne courante Ajoute une nouvelle ligne après la ligne courante Ajoute une nouvelle ligne avant la ligne courante Supprime le caractère courant Remplace le caractère courant Remplace les caractères suivants (mode "refrappe") Efface la ligne courante Efface le mot courant Efface la fin de la ligne courante Change le mot courant Change la fin de la ligne courante Change le début de la ligne courante (de la position courante au début de la ligne) Joint la ligne courante et la ligne suivante Atteint un numéro de ligne Atteint la fin du fichier Quitte l’éditeur (provoque une erreur si le fichier a été modifié depuis le dernier enregistrement). Quitte l’éditeur en ignorant les modifications apportées au fichier Enregistre le fichier courant Quitte l’éditeur en enregistrant les modifications du document Recherche le texte à partir de la position courante en descendant dans le fichier Recherche le texte à partir de la position courante en remontant dans le fichier Atteint la prochaine occurrence du texte recherché (dans le sens défini pour la recherche) Annule le résultat de la dernière commande Recommence la dernière commande Marque la ligne courante. La marque porte le nom du caractère suivant “m” Retourne à une ligne marquée. TAB . 4.9 – Commandes de l’éditeur vi 4.5. L’ÉDITEUR DE TEXTE VI Mode "commande" 81 Mode "édition" Saisie d’une commande d’insertion Saisie de texte Session d’édition Exemple de commande : a, i, cw, A, I Touche "Echap" F IG . 4.4 – Basculement entre les deux modes de vi – Tapez la commande vi suivie du nom du fichiers à modifier, – Passer en mode “commande” en frappant ECHAP (facultatif car vi se trouve généralement déjà en mode “commande” au moment du lancement), – Se déplacer sur la dernière ligne du fichier à l’aide des flèches de direction ou en frappant “G” pour y accéder directement, – Frappez “O” pour ajouter une nouvelle ligne après la ligne courante, ou “A” suivi de la touche “ENTRÉE”, – Saisissez la nouvelle ligne, – Repasser en mode “commande” en frappant la touche ECHAP, – Entrez la commande “ :wq” pour sauvegarder les modifications et quitter l’éditeur. Motif ^ $ . [abc] [a-z] * + Signification Début de la ligne Fin de la ligne Caractère quelconque Un caractère parmi a, b et c Un caractère entre "a" et "z" Répétition quelconque du motif précédant (de 0 à n fois) Répétition du motif précédent (de 1 à n fois) TAB . 4.10 – Motifs de recherche utilisables avec vi Pour effectuer une recherche, il est possible d’utiliser des motifs de recherche (voir tableau 4.10, page 81). Ainsi, pour rechercher toutes les lignes contenant les CHAPITRE 4. UTILISATION DE LINUX 82 mots “toto” et “tutu” dans cet ordre, nous utiliserons la commande : /toto.*tutu De même, pour rechercher toutes les lignes commençant par “toto”, nous utilisons la commande suivante : /^toto De même, pour rechercher les lignes commençant par “toto” et finissant par un numéro, nous utiliserons la commande suivante : /^toto.*[0-9]$ 4.6 Manipulation de fichier Commande cp Syntaxe cp sources destination mv mv sources destination rm rm fichier(s) ln ln -s fichier nom_lien Description Copie les fichiers source vers la destination. Il peut y avoir plusieurs sources, mais il n’y a toujours qu’une seule destination. S’il y a plusieurs sources, la destination est nécessairement un répertoire. Déplace les fichiers source vers la destination. Supprime un ou plusieurs fichier(s). L’option ’-R’ permet de parcourir le contenu des éventuels répertoires. Crée un lien vers un fichier existant. L’option ’-s’, qui permet de créer un lien symbolique au lieu d’un lien physique, est a privilégier car la gestion des liens physiques peut très vite devenir complexe. TAB . 4.11 – Commandes de manipulation de fichiers 4.6. MANIPULATION DE FICHIER 83 4.6.1 Visualiser le contenu d’un fichier La commande cat suivi d’un nom de fichier permet d’afficher l’ensemble du contenu d’un fichier. Si on indique le nom de plusieurs fichiers, la commande cat concatène le contenu de ces fichiers (d’où le nom de la commande). [remi@pc1 essai]$ cat bilan2000 Ceci est le bilan de l’année 2000 : L’année 2000 a vraiment été une bonne année !!! Un problème se pose lorsque l’ensemble du fichier ne peut pas s’afficher à l’écran : seule la fin du fichier est alors visible. Dans ce cas, la commande more permet d’afficher le contenu d’un fichier écran par écran (l’utilisateur doit appuyer sur la touche ESPACE pour faire défiler le texte d’un écran ou ENTRÉE pour faire défiler d’une ligne. La commande more s’utilise de la même façon que cat. Lors de l’affichage du contenu d’un fichier à l’aide de la commande more, l’utilisateur dispose d’outils de navigation et de recherche de texte comparables à ceux que propose l’éditeur de texte vi (voir 4.5, page 77) : Commande /<texte> ’n’ et ’N’ “<n>G” Action Permet de recherche le texte <texte> dans le fichier affiché (/<texte>/i permet de ne pas tenir compte de la différence entre les majuscules et les minuscules). Permettent respectivement de rechercher la prochaine et la précédente occurrence du texte recherché avec la commande précédente. Permet d’atteindre la nême ligne du fichier. Utilisé seul, G permet d’atteindre la fin du fichier. 4.6.2 Copie de fichier La commande cp (comme “CoPy”) permet de copier des fichiers. La syntaxe à utiliser est la suivante : cp cible destination La cible peut être un fichier à copier ou un ensemble de fichiers défini en saisissant une liste de nom séparée par des espaces ou en utilisant des motifs (voir tableau 4.6, page 73). Si le dernier argument correspond à un nom de répertoire, cp copie dans ce répertoire chaque fichier indiqué en conservant le même nom. Sinon, s’il n’y a 84 CHAPITRE 4. UTILISATION DE LINUX que deux fichiers indiqués, il copie le premier sur le second. Une erreur se produit si le dernier argument n’est pas un répertoire, et si plus de deux fichiers sont indiqués. Voici quelques exemples d’utilisation de la commande cp : – cp fichier1 fichier2 : Duplication de “fichier1” vers “fichier2”, – cp fichier1 fichier2 mon_répertoire/ : Copies des fichiers “fichier1” et “fichier2” dans le répertoire “mon_repertoire”, – cp fichier[12] mon_répertoire/ : Idem, mais en utilisant un motif de substitution. Il est possible d’utiliser l’option -R pour effectuer une copie récursive de fichiers (par exemple, pour recopier tous les fichiers d’un répertoire, avec les sous répertoires qu’il contient. L’option -i permet d’interroger l’utilisateur avant d’écraser des fichiers existants. 4.6.3 Déplacement de fichier La commande mv (comme “MoVe”) permet de déplacer des fichiers. Elle utilise la même syntaxe que la commande cp. Elle peut être utilisée pour renommer un fichier lorsque la source et la cible se trouvent dans le même répertoire. Exemples d’utilisation de la commande mv : – mv fichier1 fichier2 : Renom-mage “fichier1” en “fichier2”, – cp fichier1 fichier2 mon_répertoire/ : Déplacement des fichiers “fichier1” et “fichier2” dans le répertoire “mon_repertoire”, – cp fichier[12] mon_répertoire/ : Idem, mais en utilisant un motif de substitution. 4.6.4 Suppression de fichier La commande rm (comme “ReMove”) suivie du nom d’un ou plusieurs fichier permet de supprimer des fichiers. Il est possible d’utiliser l’option -R pour effectuer une suppression récursive de fichiers (par exemple, pour supprimer tous les fichiers d’un répertoire, avec les sous répertoires qu’il contient). L’option -i permet d’interroger l’utilisateur pour confirmer chaque suppression. 4.6.5 Liens de fichiers Il est possible de définir des liens pointant vers un fichier unique. Tous les liens sont alors manipulés comme pourraient l’être le fichier pointé. Pour l’utilisateur, il 4.6. MANIPULATION DE FICHIER 85 n’y a pas de différence entre le lien et le fichier pointé et il utilisera le lien comme s’il s’agissait du fichier original. On distingue deux types de liens : – Les liens physiques, – Les liens symboliques. Les liens physiques Ils correspondent à un référencement multiple d’un même fichier du disque. Généralement, il n’y a qu’une seule référence par fichier du disque, mais Linux permet d’en créer plusieurs. Dans ce cas, aucun des liens n’est plus important qu’un autre, qu’il ait été créé en premier ou en dernier. Il n’y a pas de notion de généalogie. Un lien physique ne peut être définis qu’au sein du même système de fichier. Il est alors impossible de distinguer le fichier original d’un autre lien. Lors de la suppression d’un fichier lié plusieurs fois, le fichier du disque n’est réellement détruit qu’après la suppression du dernier lien y faisant référence (voir figure 4.5, page 85). La création d’un lien physique se fait à l’aide de la commande ln sans paramètres : ln nom_du_fichier nom_du_lien L’utilisation des liens physiques peut être périlleuse, du fait qu’il est impossible de distinguer le fichier orignal (ou maître) de ses références. Elle doit donc être évitée dans la mesure du possible. On utilisera donc de préférence des liens symboliques. Fichier Fichier Disque F IG . 4.5 – Lien physique CHAPITRE 4. UTILISATION DE LINUX 86 Les liens symboliques Un lien symbolique correspond à un pointeur vers un autre fichier. Contrairement aux liens physiques, on distingue ici clairement le fichier référencé du lien y faisant référence (voir figure 4.6, page 86). La suppression du lien n’a aucune conséquence sur le fichier référencé. De même, la suppression d’un fichier n’a aucune conséquence sur les liens y faisant référence (les liens sont alors “cassés” car ils pointent vers un fichier qui n’existe pas). Les liens symboliques peuvent être comparés aux raccourcis de Windows, à la différence qu’il s’agit ici d’une fonction de base du système de fichier et non d’une verrue qu’il est facile de contourner (en éditant directement un fichier raccourci “Windows” à l’aide d’un éditeur de texte vous remarquerez qu’il s’agit en fait d’un fichier ASCII contenant, entre autre, le nom du fichier pointé). La création d’un lien symbolique se fait à l’aide de la commande ln en utilisant l’option ’-s’ : ln -s nom_du_fichier nom_du_lien Fichier Lien vers "fichier" Disque F IG . 4.6 – Lien symbolique 4.6.6 Recherche de fichier Il existe plusieurs commandes permettant de rechercher des fichiers dans un système Linux. Traditionnellement, la commande find permet de retrouver un fichier en parcourant l’arborescence des répertoires. La commande locate permet d’accélérer très sensiblement les recherches en exploitant une base de données des fichiers du système. 4.6. MANIPULATION DE FICHIER Commande find Syntaxe find "répertoire initial" locate locate motif_recherche 87 Description Permet de rechercher, suivant de nombreux critères, des fichiers à partir d’un répertoire de base. L’option -name permet, par exemple, de filtrer la recherche sur le nom des fichiers. Permet de rechercher un fichier en se basant sur une base de donnée et non sur un parcours de l’ensemble du système de fichiers (beaucoup plus rapide). La base de donnée doit être tenue à jour à l’aide de la commande updatedb. TAB . 4.12 – Commandes de recherche de fichiers La commande find Il vous sera sans doute nécessaire de rechercher des fichiers selon un critère donné dans toute une arborescence de répertoires. Pour cela, vous utiliserez la commande find. Cette commande est très puissante, mais dispose d’une syntaxe assez compliquée, du fait des nombreuses possibilités qu’elle offre. Pour rechercher un fichier en se basant sur son nom, la syntaxe de la commande est la suivante : find répertoire -name nom où répertoire est le répertoire à partir duquel la recherche doit commencer et nom est le nom du fichier à rechercher. Ce nom peut contenir des caractères génériques du shell (des espaces, par exemple), mais dans ce cas il doit être placé entre guillemets afin d’éviter que ce dernier ne les interprète. [remi@pc1 remi]$ find . -name toto ./CNAM/IA/DONNEES/toto ./essai/toto find accepte d’autre options de recherche que le nom (partie -name de la ligne de commande), et peut effectuer d’autres actions que l’affichage du chemin des fichiers trouvés. Consultez les pages de manuel pour plus d’information à ce sujet [GIC02]. CHAPITRE 4. UTILISATION DE LINUX 88 La commande locate La commande locate9 fournit une façon sécurisée d’indexer et de rechercher rapidement des fichiers sur votre système. Elle exploite une base de données des fichiers du système sur laquelle elle effectue ses recherches, ce qui lui permet d’être beaucoup plus rapide que la commande find, qui recherche dans l’arborescence des fichier même. Ainsi, pour rechercher le fichier “toto” dans l’arborescence des fichiers du système, nous utiliserons la commande suivante : locate toto La constitution de la base de données des fichiers du système est réalisée à l’aide de la commande slocate -c -u (-c pour lire le fichier de paramétrage /etc/updatedb.conf et -u pour créer un base de données). Cette commande doit être lancée régulièrement pour maintenir une base de données à jour. 4.6.7 Recherche de texte dans un fichier Commande cat Syntaxe cat fichier more more fichier grep grep motif (fichiers) Description Affiche le contenu du fichier sur la sortie standard. Affiche le contenu d’un fichier ou de l’entrée standard sur la sortie standard en faisant une pause à chaque écran. Recherche un motif dans des fichiers ou dans l’entrée standard. On utilise les mêmes motifs que pour les recherches dans vi. TAB . 4.13 – Commandes de manipulation du contenu des fichiers Recherche La recherche d’une chaîne de caractères dans un ou plusieurs fichiers peut se faire à l’aide de la commande rep. Cette commande prend en premier paramètre le texte à rechercher, puis la liste des fichiers dans lequel ce texte doit être trouvé : grep texte fichiers grep "texte" fichiers 9 En fait, il s’agit de la commande slocate, version sécurisée de locate 4.6. MANIPULATION DE FICHIER 89 Le texte peut être placé entre guillemets si nécessaire (en particulier, s’il contient des espaces ou des caractères interprétés par le shell, comme * et ?. Utilisé sans préciser de nom de fichier, grep recherche le texte sur l’entrée standard (par défaut, le clavier). [remi@pc1 essai]$ grep année * bilan2001:Ceci est le bilan de l’année 2001 : bilan2001:L’année 2001 a vraiment été une bonne année !!! grep accepte un grand nombre d’options, qui ne seront pas décrites ici. Par exemple, l’option -i permet de ne pas distinguer les majuscules des minuscules lors de la recherche. Consulter les pages de manuel pour plus d’information à ce sujet. Remplacement de texte Le remplacement de texte dans un fichier peut être effectué de manière automatique, c’est-à-dire sans avoir à ouvrir le fichier dans un éditeur, grâce à la commande sed (abréviation de l’anglais “Stream Editor”). Cette commande est en fait un utilitaire de manipulation de flux de données, qui permet d’effectuer des traitements plus généraux que le simple remplacement de texte, mais c’est malgré tout pour cette opération qu’elle reste la plus utilisée. sed peut travailler à la volée sur un flux de données textuelles, que ce flux provienne de l’entrée standard ou d’un fichier. Par défaut, il écrit le résultat de son travail sur le flux de sortie standard. Les opérations qu’il doit effectuer sur le flux de données peuvent être spécifiées de différentes manières, soit en fournissant un fichier script à l’aide de l’option -f, soit directement sur la ligne de commande, avec l’option -e. La syntaxe utilisée pour appeler sed est donc typiquement la suivante : sed -e "commandes" fichier > résultat ou : sed -f script fichier > résultat où fichier est le fichier sur lequel sed doit travailler, et résultat est le fichier devant recevoir le flux de données modifiées. Notez que cette commande utilise une redirection du flux de sortie standard dans un fichier. sed peut effectuer un grand nombre de commandes différentes et est réellement un outil très puissant. Cependant, nous ne verrons ici que la commande qui permet d’effectuer un remplacement de texte. Cette commande utilise la syntaxe suivante : s/texte/remplacement/options 90 CHAPITRE 4. UTILISATION DE LINUX où texte est le texte à rechercher, remplacement est le texte de remplacement, et options est un jeu d’options exprimant la manière dont le remplacement doit être fait. Les options sont spécifiées à l’aide de simple caractères, les plus utiles étant sans doute g, qui permet d’effectuer un remplacement global (au lieu de ne remplacer que la première occurrence sur la ligne du texte rencontrée), et I, qui permet d’effectuer une recherche sans tenir compte de la casse des caractères. Par exemple, la ligne de commande suivante : sed -e "s/bonjour/bonsoir/g" test.txt > modif.txt permet de remplacer toutes les occurrences de la chaîne de caractères “bonjour” par la chaîne de caractères “bonsoir” dans le texte du fichier test.txt, et d’enregistrer le résultat dans le fichier modif.txt. Il ne faut pas utiliser le même nom de fichier pour le fichier source et le fichier de résultat. En effet, sed lit le fichier source à la volée, et effectuer une redirection sur ce fichier pendant son traitement provoquerait la perte irrémédiable de son contenu. Pour résoudre ce problème, on pourra utiliser un nom de fichier temporaire, et écraser le fichier original par ce fichier une fois la commande sed exécutée [GIC02]. 4.6.8 Compression et décompression des fichiers Linux fournit un grand nombre de programmes de compression de fichiers. Le meilleur est sans doute bzip2, et le plus compatible sans doute compress. Cependant, le plus utilisé et le plus courant, surtout pour la distribution des sources, reste incontestablement gzip. Nous allons décrire brièvement comment comprimer et décomprimer des fichiers avec gzip et bzip2 dans ce paragraphe. La compression d’un fichier se fait de manière élémentaire : gzip fichier où fichier est le fichier à comprimer. Après avoir effectué son travail, gzip renomme le fichier comprimé en fichier.gz. La compression d’un fichier avec bzip2 utilise exactement la même syntaxe, à ceci près qu’il faut remplacer gzip par bzip2. De plus, le nom du fichier comprimé porte l’extension .bz2 au lieu de .gz. Le fichier obtenu est donc nommé fichier.bz2. La décompression d’un fichier se fait à l’aide de la commande suivante : gunzip fichier.gz qui est équivalent à gzip -d fichier.gz ou bunzip2 fichier.bz2 selon qu’il a été comprimé avec gzip ou bzip2. Après décompression, l’extension complémentaire .gz ou .bz2 est supprimée du nom de fichier [GIC02]. 4.7. MANIPULATION DE PROCESSUS 91 4.7 Manipulation de processus Commande ps Syntaxe ps kill kill -signal pid jobs jobs top top Description Permet de consulter la liste des processus en cours. Par défaut, seuls les processus lancés depuis l’interpréteur de commande courant sont listés. L’option ’-edf’ permet de retourner la liste exhaustive des processus actifs dans le système. Permet de demander l’arrêt de l’exécution d’un processus. L’option ’-9’ est plus violente et force l’arrêt immédiat du processus, sans passer par la procédure de sortie éventuellement prévue dans le programme. Cette option est à utiliser lorsque le processus ne répond pas à la première "sommation". Permet de consulter la liste des travaux lancés en arrière plan depuis l’interpréteur de commande courant. Application permettant de surveiller en temps réel l’activité du système (processus actifs, utilisation mémoire et processeur... ). TAB . 4.14 – Commandes de gestion des processus 4.7.1 Qu’est-ce qu’un processus Un processus est un programme qui s’exécute. Chaque processus est indépendant des autres dans la mesure où il dispose d’une zone mémoire qui lui est propre et qui reste inaccessible aux autres. L’ensemble des processus actifs du sytème se dispute l’accès aux ressources disponibles (au moins la CPU). Chaque processus est nécessairement créé par un autre processus (son processus père), à l’exception du processus “init”, lancé au démarrage du systéme et, de ce fait, ancêtre de tous les autres. 4.7.2 Lancer une commande en tâche de fond Par défaut, lorsqu’un processus crée un processus fils, il se met en attente de la fin de ce dernier. Par exemple, lorsqu’on lance la compression d’un gros fichier à 92 CHAPITRE 4. UTILISATION DE LINUX l’aide de la commande gzip mon_gros_fichier, il est impossible d’utiliser l’interpréteur de commande avant la fin de la compression. Pour récupérer la main avant la fin du processus fils, il est possible de lancer ce dernier en arrière plan. Il suffit pour celà de finir la ligne de commande par le caractère “&”. Le système affiche alors le numéro du processus fils et redonne la main à l’utilisateur. Lorsque le processus fils se termine, le processus père est averti par un message. Exemple : [remi@rapido remi]$ gzip mon_gros_fichier & [1] 3515 [remi@rapido remi]$ ls ... [remi@rapido remi]$ [1]+ Done gzip mon_gros_fichier Il est possible de passer un traitement à l’arrière plan ou, au contraire, à l’avant plan, au cours de son exécution à l’aide des commandes bg (pour background : arrière-plan) et fg (pour foreground : premier plan). Pour utiliser ces commandes, vous devez avoir la main sur le shell. Si vous ne l’avez pas, vous devez interompre le processus fils qui s’exécute en premier plan à l’aide de la combinaison de touches CTRL + Z, qui a pour effet de mettre le processus courant en veille. La commande jobs La commande jobs permet d’afficher la liste des travaux pris en charge par l’interpréteur de commande sur lequel elle est lancée. Exemple : [remi@rapido remi]$ gzip mon_gros_fichier (appui sur CTRL + Z) [1]+ Stopped gzip mon_gros_fichier [remi@rapido remi]$ bg [1]+ gzip mon_gros_fichier & [remi@rapido remi]$ jobs [1]+ Running gzip mon_gros_fichier & Il est alors possible de repasser un travail donné au premier plan en tapant fg suivi du numéro de travail (fg 1 pour repasser le premier travail, par exemple). Autre exemple d’utilisation de la commande jobs : 4.7. MANIPULATION DE PROCESSUS [remi@rapido remi]$ jobs [1] Running [2]- Running [3]+ Running [4]+ Stopped 93 emacs CNAM/linux/utilisation.tex & xdvi & gv & vi Où ou peut lire les informations suivantes : – [1] représente le numéro de job, – Running représente l’état du job (Running ou Stopped), – Le nom de la commande correspondant au job. Ou peut intervenir sur les jobs à l’aide des commandes suivantes : – fg [numéro de jobs] permet de faire passer un jobs au premier plan. – bg [numéro de job] permet de faire passer un job en tâche de fonds. Comme nous venons de le voir, la notion de “job” est propre à chaque interpréteur de commande. Ainsi, il pourra y avoir un job 1 dans chacun d’entre eux. La commande ps La commande top 4.7.3 Interaction avec les processus Principes des signaux Numéro de signal 15 9 19 18 Signification Terminaison “douce 10 ” de processus Destruction “violente 11 ” de processus Suspension de processus Reprise d’exécution de processus suspendu TAB . 4.15 – Principaux signaux de contrôle de processus Envoi de signal à un processus La commande kill permet d’envoyer un signal à un processus du système. La syntaxe de cette commande est la suivante : kill -<numéro de signal> <numéro du ou des processus Ainsi, la commande kill -9 1245 permet de stopper “violemment” le processus 1245. CHAPITRE 4. UTILISATION DE LINUX 94 4.7.4 Planifier l’exécution automatique de processus Il existe plusieurs façons de programmer l’exécution automatique de processus. Une des plus connues est utilise la commande crontab, qui permet de planifier le lancement d’une commande. La commande crontab est propre à chaque utilisateur. Elle utilise un fichier de paramétrage, couramment appelé “crontab”, dont chaque ligne désigne une commande programmée. Chaque ligne est composée de six champs, séparés par des espaces : – Les minutes (de 0 à 6012 ), – Les heures (de 0 à 2413 ), – Le jour du mois (de 0 à 31), – Le mois (de 0 à 12), – Le jour de la semaine (de 0 à 7, 0 et 7 désignant le dimanche). – La commande à lancer. Pour les cinq premiers champs, il est possible d’utiliser14 : – Des plages de valeurs : 1-4, – Des énumérations de valeurs : 1,2,3,4, – Toutes les valeurs possibles : *, – Tous les multiples d’une valeur : */2 pour désigner les valeurs paires. La commande passée dans le sixième champ peut éventuellement contenir des valeurs à passer sur l’entrée standard (pour répondre à des questions, par exemple) en utilisant le caractère ’%’. Exemple : rm -i fichier%y% permet de répondre ’y’ à la demande de confirmation de destruction de fichier. 4.8 L’environnement utilisateur 4.8.1 Les variables d’environnement 4.8.2 Les alias Principe Les alias permettent à chaque utilisateur de définir ses propres commandes 12 0 et 60 étant confondus. 0 et 24 étant confondus. 14 Les deux pouvant être combinés (exemple : 1,4,6-10,12). 13 4.8. L’ENVIRONNEMENT UTILISATEUR 95 Définition d’un alias [remi@pc1 essai]$ alias toto="ls -l" [remi@pc1 essai]$ toto total 4 -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi -rw-rw-r-1 remi remi 0 0 85 0 0 0 0 fév fév fév fév fév fév fév 22 22 22 22 22 22 22 18:27 18:26 18:54 18:27 18:27 18:27 18:26 Liste des alias existants Utilisée seule, la commande alias permet de lister les alias définis pour l’utilisateur courant. [remi@pc1 essai]$ alias alias cd..=’cd ..’ alias cp=’cp -i’ alias d=’ls’ alias df=’df -h -x supermount’ alias du=’du -h’ alias l=’ls’ alias la=’ls -a’ alias ll=’ls -l -k’ alias ls=’ls -F --color=auto’ alias lsd=’ls -d */’ alias md=’mkdir’ alias mv=’mv -i’ alias p=’cd -’ alias rd=’rmdir’ alias rm=’rm -i’ alias s=’cd ..’ alias toto=’ls -l’ Suppression d’un alias La commande unalias permet de supprimer un alias. [remi@pc1 essai]$ unalias toto bilan1999 bilan2000 bilan2001 prévision1999 prévision2000 prévision2001 prévision2002 CHAPITRE 4. UTILISATION DE LINUX 96 [remi@pc1 essai]$ toto bash: toto: command not found 4.8.3 Portée de l’environnement 4.8.4 Les fichiers de définition de l’environnement Lorsque l’on utilise le shell bash, ce qui correspond à la plupart des cas, l’environnement utilisateur est défini dans les deux fichiers suivants : .bash_profile est un script interprété lors de la connexion de l’utilisateur. Il est chargé de mettre en place l’environnement de l’utilisateur (voir figure 4.7, page 96). Par convention, ce fichier se contente de définir les variables d’environnement, les définitions d’alias et de fonctions sont définies dans le fichier .bashrc, # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin CVSROOT=/home/sources export PATH unset USERNAME F IG . 4.7 – Exemple de fichier .bash_profile .bashrc contient la définition des alias et fonctions propres à l’utilisateur. Ce fichier fait souvent appel à un fichier global au système (voir figure 4.8, page 97, qui fait appel au fichier /etc/bashrc). 4.9. DÉFINITION DES DROITS D’ACCÈS 97 # .bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi F IG . 4.8 – Exemple de fichier .bashrc 4.9 Définition des droits d’accès 4.9.1 Identification des utilisateurs Au niveau du noyau, chaque utilisateur est identifié de manière unique par un numéro dans le système : son uid (User IDentifier). Ce numéro est utilisé pour vérifier les droits de l’utilisateur, ou, autrement dit, ce qu’il peut faire. Les droits des utilisateurs comprennent la possibilité de lire ou écrire un fichier, d’accéder ou non à une ressource ou d’exécuter un programme. Il est possible de définir plusieurs utilisateurs ayant le même uid. Ceux-ci auront les mêmes droits d’accès, mais pourront bénéficier de mots de passe, de répertoires de départ ou d’interpréteur de commandes différents. Il est également possible de créer un ou plusieurs “groupes” d’utilisateurs, et de leur donner des droits particuliers. Chaque groupe est aussi identifié par un numéro : gid (Group IDentifier). Tous les utilisateurs qui font partie de ce groupe recevront les droits du groupe. Ainsi, des classes d’utilisateurs peuvent être facilement définies, et ces classes peuvent se voir attribuer un peu plus de privilèges que les utilisateurs normaux selon les nécessités. Il existe toutefois un utilisateur spécial, qui a tous les droits : l’administrateur du système (“root” en anglais). Aucune restriction ne s’applique à cet utilisateur, car il doit être capable de gérer le système, l’installer, l’arrêter, le mettre à jour si nécessaire, et de définir les utilisateurs et leurs droits. Il existe plusieurs façon de gérer les utilisateurs et les groupes : Les fichiers locaux situés dans le système de fichier et utilisés par les outil de connexion et de vérification de droits d’accès. Un serveur d’authentification a qui le système s’adresse pour identifier de façon centralisée les utilisateurs, groupes et leurs droits. L’identification par fichier locaux se base principalement sur deux fichiers : – Le fichier /etc/passwd qui contient la liste des utilisateurs du système, CHAPITRE 4. UTILISATION DE LINUX 98 – Le fichier /etc/group qui contient la liste des groupes d’utilisateur du système. Le rôle du serveur d’autentification est donc de fournir à ses clients les informations équivalentes à celles qui auraient été stockées dans les fichiers locaux de chacun d’eux. 4.9.2 Le fichier des utilisateurs du système Par exemple, un utilisateur est représenté par une ligne du type : remi:*:500:500:Rémi LEBLOND:/home/remi:/bin/bash Cette ligne comporte les champs suivants séparés par le caractère ‘ :’ : – nom de l’utilisateur pour l’identification sur le système (login), – mot de passe crypté, – numéro d’utilisateur (uid), – numéro de groupe d’utilisateur par défaut (gid). Tout utilisateur est affecté à un et un seul groupe de base. Il peut, par ailleurs, faire partie d’un grand nombre d’autres groupes. – nom complet ; ce champ peut contenir de nombreuses informations, il correspond à un champ de remarque, – répertoire de base de l’utilisateur, – programme à lancer au démarrage (programme de base), généralement un interpréteur de commande (shell). La durée de vie de ce processus correspond à celle de la session utilisateur, c’est à dire que la session de l’utilisateur se terminera avec le processus. Il est possible de préciser ici tout type de programme, ce qui permet de limiter le champ d’action d’un utilisateur (en le connectant directement au programme qu’il doit utiliser, par exemple). 4.9.3 Le fichier des groupes d’utilisateurs /etc/group est un fichier ASCII qui définit les groupes auxquels appartient chaque utilisateur. Il y a une ligne par groupe, et chaque ligne a le format : nom_du_groupe:mot_de_passe:GID:liste_utilisateurs Par exemple : actrices:*:400:sandra,meg,michelle Une ligne de ce fichier comporte les champs suivants, séparés par des caractères ‘ :’ : 4.9. DÉFINITION DES DROITS D’ACCÈS 99 – Le nom du groupe, – Le mot de passe encrypté du groupe. Si ce champ est vide (presque toujours), aucun mot de passe n’est nécessaire. – numéro du groupe (gid), – liste des utilisateurs appartenant au groupe séparés par des virgules. Lors de la connexion, un utilisateur est associé à tous les groupes dans lesquels il est inscrit. Il peut le vérifier à l’aide de la commande id, ou groups. [remi@pc1 remi]$ id uid=501(remi) gid=501(remi) groupes=501(remi),100(users), 101(cvs),200(compta) [remi@pc1 remi]$ groups remi users cvs compta Nous voyons ici que le groupe principal de l’utilisateur “remi” est le groupe “remi” et qu’il fait également partie des groupes “users”, “cvs” et “compta”. 4.9.4 Droits élémentaires sur les fichiers Les droits d’accès peuvent être décomposés en droits élémentaires définissant les droits d’accès aux fichiers. Ces droits élémentaires sont décrits plus loin (voir tableau 4.16, page 100 et voir tableau 4.17, page 100). Le droit de lecture correspond à la possibilité d’ouvrir et de consulter un fichier, ou de lister le contenu d’un répertoire. Le droit d’écriture correspond à la possibilité de modifier un fichier, ou de créer ou supprimer un fichier d’un répertoire. Enfin, le droit d’exécution correspond à la possibilité d’exécuter un fichier contenant un programme, ou d’entrer dans un répertoire. On notera par exemple qu’il est possible d’obtenir la liste des fichiers d’un répertoire sans pouvoir s’y déplacer, ou encore de modifier un fichier sans pouvoir le lire. On prendra garde également que le fait d’avoir le droit d’écriture sur un fichier ne donne pas le droit de le supprimer (cependant, on peut le vider !). Pour cela, il faut avoir le droit d’écriture sur le répertoire contenant ce fichier. Comme on le voit, les droits d’accès aux fichiers et aux répertoires sont très souples. Ces droits sont attribués séparément pour le propriétaire, le groupe et les autres utilisateurs (c’est-à-dire les utilisateurs qui ne font pas partie du groupe auquel appartient le fichier). Il est donc possible de donner par exemple tous les droits au propriétaire d’un fichier, et seulement le droit de lecture aux autres utilisateurs. Cette configuration est celle qui est choisie par défaut lors de la création d’un fichier, elle assure que seul le propriétaire peut modifier ou exécuter ce fichier, tout en laissant la possibilité aux autres de le lire. Ce choix privilégie la sécurité des données de chacun en laissant le maximum de liberté aux autres. Si plusieurs CHAPITRE 4. UTILISATION DE LINUX 100 personnes doivent travailler sur les mêmes fichiers, il suffit de les regrouper dans un groupe, de donner les fichiers sur lesquels ils doivent travailler à ce groupe, et de donner les droits d’écriture aux membres de ce groupe sur ces fichiers. Abrév. r w x Nom Droit de lecture (“r” pour Read) Droit d’écriture (“w” pour Write) Droit d’exécution (“x” pour eXecutable) Signification Droit de consulter le contenu d’un fichier Droit de modifier le contenu d’un fichier Droit d’exécuter un fichier contenant un programme TAB . 4.16 – Droit d’accès élémentaires aux fichiers Abrév. r Nom Droit de listage w Droit de modification x Droit d’accès Signification Droit de consulter la liste des fichiers d’un répertoire Droit de modifier la liste des fichiers d’un répertoire. Cela signifie donc ajouter de nouveaux fichiers ou en supprimer d’anciens. Droit d’accéder au contenu du répertoire. TAB . 4.17 – Droit d’accès élémentaires aux répertoires La sécurité du système est transitive, cela signifie que tout programme lancé par un utilisateur s’exécute en son nom et reçoit donc les droits de cet utilisateur. Le processus correspondant se voit donc attribuer les mêmes restrictions que l’utilisateur qui l’a lancé. Il dispose également des droits du groupe auquel le fichier du programme appartient. Il existe toutefois quelques exceptions à cette règle, pour les programmes dont le comportement est bien connu et qu’il est impossible de détourner de leur fonction initiale. C’est notamment le cas de quelques commandes systèmes (comme passwd, qui permet de changer de mot de passe), qui peuvent être lancées par les utilisateurs et qui s’exécutent toutefois au nom du système (dans le compte root). Il est donc impossible à un utilisateur de violer les règles de sécurité du système. Pour parvenir à ce comportement, il faut utiliser des attributs spéciaux sur les fichiers de ces programmes. 4.9. DÉFINITION DES DROITS D’ACCÈS 101 Le premier attribut spécial est le bit “setuid” (qui est l’abréviation de l’anglais “SET User IDentifier”. Il ne peut être placé qu’au niveau des droits du propriétaire sur le fichier. Il permet d’indiquer que le fichier est exécutable, et que lorsque le programme qu’il contient est lancé par un utilisateur, le processus correspondant s’exécute avec les droits du propriétaire du fichier et non pas avec ceux de l’utilisateur qui l’a lancé. Cependant, le système conserve tout de même le numéro de l’utilisateur réel qui a lancé le processus, ce qui fait que le programme peut savoir par qui il a été lancé et au nom de qui il s’exécute. Un processus dispose donc toujours de deux numéros d’utilisateur : – le numéro de l’utilisateur réel (“real user id” en anglais), qui est le numéro de l’utilisateur qui a lancé le programme, – le numéro de l’utilisateur effectif (“effective user id” en anglais), qui est le numéro de l’utilisateur avec les droits duquel le processus fonctionne. Le bit setuid permet donc simplement d’affecter le numéro du propriétaire du fichier au numéro d’utilisateur effectif du processus lorsqu’il est lancé. Le fait de conserver le numéro de l’utilisateur réel permet au programme de réaliser des vérifications de sécurité additionnelles. Par exemple, la commande passwd, qui permet de changer le mot de passe d’un utilisateur, a besoin des droits de l’utilisateur root pour enregistrer le nouveau mot de passe. Il dispose donc du bit setuid pour que tous les utilisateurs puissent l’utiliser. Cependant, même s’il s’exécute au nom de l’utilisateur root, il ne doit pas permettre à n’importe qui de changer le mot de passe des autres utilisateurs : seul l’utilisateur root a le droit de faire cette opération. Il utilise donc le numéro de l’utilisateur réel qui a lancé la commande pour savoir si c’est bien l’utilisateur root qui l’a lancé. Le bit setuid est l’attribut le plus couramment utilisé, essentiellement pour certaines commandes systèmes. Il est représenté par la lettre ’s’ (comme “Setuid”), et il remplace le droit d’exécution (’x’) des fichiers pour le propriétaire des fichiers (rappelons que le bit setuid implique que le fichier est exécutable). Il n’a aucune signification pour les répertoires. Le deuxième attribut spécial est le bit “setgid” (qui est l’abréviation de l’anglais “SET Group IDentifier”). Ce bit fonctionne un peu de la même manière que le bit setuid, à ceci près qu’il fixe le numéro de groupe effectif du processus lancé à celui de son fichier exécutable. Cet attribut est également représenté par la lettre ’s’, et remplace le droit d’exécution (’x’) pour les utilisateurs du groupe auquel appartient le fichier exécutable. Contrairement au bit setuid cependant, il a une signification pour les répertoires. Un répertoire disposant du bit setgid permet de faire en sorte que tous les fichiers qui sont créés dans ce répertoire se voient automatiquement attribués le même groupe que le répertoire. Ce bit est relativement peu utilisé. Enfin, le troisième et dernier attribut spécial est le bit “sticky”. Cet attribut remplace l’attribut exécutable pour les autres utilisateurs que le propriétaire du 102 CHAPITRE 4. UTILISATION DE LINUX fichier ou du répertoire et les membres du groupe auquel il appartient. Contrairement aux bits setuid et setgid, il est représenté par la lettre ’t’ (pour “sTickky”). Sa signification est assez spéciale : elle permet de faire en sorte que les programmes restent chargés en mémoire après leur terminaison, ce qui permet de les relancer plus rapidement. Afin de ne pas consommer la mémoire de manière permanente, le code du programme est placé automatiquement dans le swap s’il n’est toujours pas relancé après un certain temps, mais même dans ce cas, tous les calculs de chargement sont déjà effectués. Le lancement des programmes marqués de ce bit sera donc toujours accéléré. Sachez cependant ne pas abuser du bit sticky car la mémoire (même virtuelle) est encore une ressource rare. Pour les répertoires, sa signification est totalement différente : elle permet de restreindre les droits des utilisateurs sur les répertoires ayant ce bit positionné. Ce bit fait en sorte que même si un utilisateur dispose des droits d’écriture sur le répertoire, il ne peut pas supprimer tous les fichiers de ce répertoire. Les seuls fichiers qu’il est autorisé à supprimer sont ses propres fichiers. Bien entendu, il est toujours possible d’ajouter des fichiers dans le répertoire en question. En résumé, on a donc deux symboles supplémentaires, ‘s’ et ‘t’, pouvant prendre la place du ‘x’ dans la liste des droits. Ces symboles signifient : ‘s’ : dans le cas d’un fichier exécutable, celui-ci sera exécuté avec les droits du propriétaire ou du groupe en fonction de la place du symbole. Dans le cas d’un répertoire, tous les fichiers créés dans ce répertoire appartiendront au même groupe que celui du répertoire. ‘t’ (sticky bit) : pour les fichiers exécutables, demande de garder le code en mémoire après l’exécution. Pour les répertoires, permet de limiter la destruction des fichiers au propriétaire du répertoire, du fichier ou au super utilisateur . 4.9.5 Définition des droits d’accès Changement de propriétaire Les commandes chown et chgrp permettent de changer, respectivement le propriétaire et le groupe d’un fichier. Changement de la matrice des droits La commande chmod permet de modifier les droits d’un ou plusieurs fichiers en utilisant le mode numérique ou le mode littéral. La commande umask permet de fixer les droits qui seront enlevés par défaut pour la création de nouveaux fichiers. Cette commande est généralement lancée 4.9. DÉFINITION DES DROITS D’ACCÈS 103 une fois lors de l’ouverture de session, elle est intégrée à l’interpréteur de commandes et sa syntaxe varie en fonction de celui que l’on utilise. Il est conseillé de positionner le masque en numérique pour s’affranchir des différences syntaxiques. 104 CHAPITRE 4. UTILISATION DE LINUX Chapitre 5 Installation de Linux Dans cette partie, nous allons apprendre à installer Linux sur une machine de type PC faisant également fonctionner le système Windows NT. La distribution utilisée est une Mandrake 8.1. Le but est d’obtenir une configuration conforme à celle utilisée dans les chapitres précédents. 5.1 Avant de commencer l’installation 5.1.1 Configuration minimale La configuration minimale supportée par Linux est un 386 avec au minimum 12 Mo de mémoire vive. Il va de soi qu’avec un tel foudre de guerre, vous ne pourrez pas aller bien loin, une configuration raisonnable serait plutôt un 486DX2 66MHz avec au moins 32Mo de mémoire. La quantité de mémoire est de loin le facteur le plus important, et si vous voulez utiliser l’environnement graphique X11, il faut au minimum compter sur 64 Mo de mémoire vive. Vous pourrez donc parfaitement transformer un vieux 486 ou Pentium en routeur ou en Firewall avec partage de connexion à Internet par exemple. Vous n’aurez donc certainement aucun problème avec les ordinateurs puissants qui se vendent actuellement. 5.1.2 Récupération des informations sur le matériel Avant de commencer quoi que ce soit, vous devriez récupérer le maximum de données concernant votre matériel. En effet, ces informations peuvent être particulièrement utiles pour diagnostiquer la cause des éventuels problèmes de configuration du matériel que vous pourriez rencontrer. Bien que les distributions récentes soient capables de détecter le matériel le plus courant, vous aurez aussi peut être à spécifier certains paramètres matériels lors de l’installation et, dans 105 106 CHAPITRE 5. INSTALLATION DE LINUX le pire des cas, lors du premier démarrage de Linux. Les informations dont vous aurez certainement besoin sont les suivantes : – type de processeur, avec sa marque et éventuellement sa vitesse, – type de carte mère, avec sa marque et impérativement son chipset, – type de branchement de la souris (série, PS/2, interface bus propriétaire), – nombre de ports série, ainsi que leurs paramètres (ports d’entrée/sortie, lignes d’interruption), – nombre de ports parallèle, ainsi que leurs paramètres (ports d’entrée/sortie, lignes d’interruption), – si vous disposez d’un contrôleur SCSI, marque et modèle de ce contrôleur (modèle du chipset de la carte SCSI), – sinon, nom du contrôleur de disque IDE (regardez sur le chipset de la carte mère), – types de disques durs (IDE, IDE UltraDMA 33, 66 ou 100, SCSI), ainsi que leurs taille et leur position dans le système (contrôleurs auxquels ils sont connectés, numéros d’unités logiques SCSI), – type de lecteur de CD-ROM (IDE, ATAPI, SCSI, connecté sur carte son) et le type de leur branchement s’ils sont externes (port parallèle, SCSI ou USB), – nom, modèle et marque de la carte graphique, type de chipset utilisé par cette carte et taille de sa mémoire vidéo, – nom, modèle et marque de l’écran, avec ses fréquences de balayage horizontales et verticales, sa bande passante et les fréquences recommandées par le constructeur pour les différentes résolutions, – type de carte son (ISA, PCI, PnP) ainsi que le nom du chipset utilisé par cette carte, – type de carte réseau (ISA, PCI, PnP) ainsi que le nom de son chipset, – type de modem (interne, externe) et, si le modem est interne, sa nature (modem complet ou émulation). Vous pouvez obtenir ces informations en consultant la documentation fournie avec votre ordinateur, les sites Web des constructeurs des différents composants, les informations fournies par le programme de configuration du BIOS ou affichées directement par le BIOS au démarrage de la machine, ou tout simplement en ouvrant le boîtier de la machine et en regardant ce qu’il y a à l’intérieur. Vous pouvez également récupérer les informations indiquées dans la configuration de MS Windows si celui-ci est installé. Il se peut que vous n’ayez pas besoin de ces informations et que l’installation se passe sans problème. Cependant, si d’aventure Linux exige que vous les connaissiez, mieux vaut pouvoir lui répondre. Bien que cela soit assez rare, certains composants ou périphériques additionnels peuvent ne pas être gérés par Linux, faute d’avoir un gestionnaire de péri- 5.1. AVANT DE COMMENCER L’INSTALLATION 107 phérique adéquat (cet état de fait est en général dû à une rétention d’information de la part des fabricants, qui empêchent ainsi les développeurs de Linux d’écrire les gestionnaires de périphériques dans de bonnes conditions). C’est en particulier le cas de nombre de périphériques bas de gamme conçus pour ne fonctionner qu’avec MS Windows, ou de quelques périphériques exotiques. Les Win-modems ont une triste réputation à ce sujet (il s’agit de modems incomplets, dont une partie du traitement de signal est reporté dans un logiciel spécifique à Windows), ainsi que des imprimantes dites “GDI”, qui ne comprennent que les commandes graphiques de Windows. Vous pourrez également avoir des problèmes avec des cartes de numérisation vidéo analogiques ainsi que certaines cartes de décompression MPEG. Certaines marques se distinguent par le fait qu’elles refusent obstinément de développer des gestionnaires de périphérique pour leur matériel ou, pire encore, de fournir les informations nécessaires aux développeurs de Linux pour écrire ces gestionnaires sous licence libre. Mais il est toujours recommandé, de manière générale, de bien se renseigner auprès des vendeurs et des groupes de discussion avant tout achat de matériel... Vous pourrez trouver une liste (non exhaustive) de matériel testé sous Linux dans la liste de matériel compatible (http ://www.linuxdoc.org/HOWTO/Hardware-HOWTO/). La Linux Hardware Data base (http ://lhd.datapower.com/) vous permettra également d’effectuer une recherche sur n’importe quel type de matériel et sur n’importe quel modèle très facilement. Il existe d’autres sites réalisant périodiquement des tests sur le matériel récent, comme par exemple Linux-Hardware (http ://www.linuxhardware.org). 5.1.3 Sauvegarde des données L’installation du système de base est l’opération la plus délicate, puisqu’il faut travailler au niveau le plus bas. La moindre erreur peut provoquer une catastrophe, ce qui peut aller jusqu’à recommencer complètement l’installation. Si vous installez Linux pour la première fois sur votre ordinateur, ou s’il n’y a pas d’autre système d’exploitation installé dessus, vous en serez quitte pour quelques heures perdues. Sinon, ce qui est le plus à craindre, c’est la perte totale de vos données, y compris celles des autres systèmes installés ! Donc : IL FAUT DONC FAIRE UNE SAUVEGARDE DE VOS DONNÉES Si vous disposez d’un lecteur de bande, le problème de la sauvegarde est très simple : vous n’avez qu’à faire une sauvegarde complète. Dans le cas contraire, vous allez sans doute devoir trier vos fichiers afin d’identifier ceux auxquels vous tenez réellement, et les recopier sur un support physique fiable (évitez absolument les disquettes, ils sont lents et n’ont jamais été fiables). Vous pouvez par exemple faire un CD de sauvegarde si cous disposez d’un graveur de CD. 108 CHAPITRE 5. INSTALLATION DE LINUX En fait, l’idéal est tout simplement de disposer d’un autre disque dur, que l’on pourra consacrer complètement à l’installation de Linux. Ainsi, vous pourrez expérimenter tout à loisir, sans craindre de perdre vos précieuses données. De plus, l’installation de Linux sur un disque vierge est nettement plus facile que sur un disque où Windows est déjà installé, parce que vous n’avez pas à dégager de la place pour son installation. Prenez toutefois garde au fait que Linux restera capable d’accéder aux données de votre premier disque dur, et que toute erreur de manipulation peut détruire les données qui s’y trouvent. Par exemple, si vous ne spécifiez pas le bon disque dur lors de la création des systèmes de fichiers, vous perdrez à nouveau toutes vos données. L’achat d’un tiroir peut être la vraie solution, car vous n’aurez qu’un seul disque à un instant donné dans votre ordinateur. Toutefois, cette technique a l’inconvénient de ne pas vous permettre d’accéder aux données de votre disque Windows à partir de Linux. 5.1.4 Amorçage Pour commencer votre installation, vous devez avant tout démarrer votre ordinateur sous Linux. La méthode la plus simple est certainement de mettre le CD d’amorçage de votre distribution dans le lecteur de CD et de redémarrer l’ordinateur. Il faut que votre BIOS soit configuré pour amorcer le système sur le lecteur de CD pour que cette solution fonctionne. Si votre BIOS ne vous permet pas de le faire, il ne vous reste plus qu’à utiliser l’une des disquettes fournies avec votre distribution. Dans tous les cas, Linux doit se lancer, et le programme d’installation doit démarrer. Suivez les indications fournies avec votre distribution pour cette étape. En général, les distributions fournissent un petit utilitaire DOS nommé RAWRITE.EXE qui permet de créer une disquette d’amorçage à partir d’un noyau très simplement. Il s’utilise avec la ligne de commande suivante : rawrite image lecteur: où image est l’image d’une des disquettes d’amorçage (que vous trouverez sur le CD d’amorçage de votre distribution), et lecteur est le lecteur de disquette utilisé (en général, A:). Vous pouvez aussi consulter la documentation de votre distribution pour savoir comment indiquer au noyau les modules qu’il doit charger, ou comment créer une disquette de démarrage pour un autre noyau. Dans la majorité des distributions, les outils nécessaires à l’installation sont placés sur un disque virtuel en mémoire après le démarrage de Linux. C’est en particulier le cas du programme d’installation. Cela est normal, puisque Linux n’est pas encore installé, d’une part, et que ces outils ne tiennent pas facilement sur une disquette, d’autre part. Ces outils sont donc souvent comprimés. Vous devez malgré tout avoir déjà accès aux périphériques de votre ordinateur, en particulier aux disques, pour poursuivre votre installation. 5.1. AVANT DE COMMENCER L’INSTALLATION 109 5.1.5 Partitionnement du disque La deuxième opération après le démarrage du système est le partitionnement du disque dur. Cette étape est de loin la plus dangereuse, mais elle est absolument nécessaire. Elle ne pose pas de problème lorsqu’on installe Linux sur une machine neuve, mais peut être délicate si un autre système d’exploitation est déjà installé ou doit être installé en parallèle. Cette section décrit les principes de base du partitionnement, la manière de récupérer de la place sur un disque dur et l’opération de partitionnement proprement dite. Notion de partition Une “partition” est, comme son nom l’indique, une partie d’un disque dur. Les partitions permettent de diviser l’espace de stockage des disques durs en zones indépendantes de taille restreinte, et dans lesquelles différents systèmes ou différentes données peuvent être stockées de manière totalement indépendante. L’opération de “partitionnement” est l’opération de création des différentes partitions d’un disque dur. L’installation de plusieurs systèmes d’exploitation nécessite souvent d’allouer une partition à chaque système, car les systèmes d’exploitation ne comprennent généralement pas le format des systèmes de fichiers les uns des autres. Il également est parfois nécessaire, pour un même système, de définir plusieurs partitions, qui seront utilisées à des fins spécifiques. Par exemple, Linux fonctionne nettement mieux si on lui attribue une partition de “swap” (dite aussi “partition d’échange”) pour stocker des données peu utilisées qui se trouve en mémoire lorsqu’il a besoin de plus de mémoire qu’il n’en est physiquement installée sur la machine. De même, il est possible de créer plusieurs partitions pour séparer les données utilisateurs des programmes, ce qui permet de faciliter les mécanismes de sauvegarde d’une part, et d’assurer une plus grande sécurité des données lors des opérations de maintenance du système d’autre part. Sur les machines de type PC, chaque disque dur peut être découpé en quatre partitions dites “primaires”. La position, la taille et le type de ces partitions sont enregistrées dans le premier secteur du disque dur, que l’on appelle souvent le “Master Boot Record” (“MBR” en abrégé). Le MBR ne contient que quatre entrées pour la définition des partitions, d’où la limite de quatre partitions primaires. Le type des partitions est un code numérique qui indique le système d’exploitation capable de l’utiliser et sa nature (partition de swap ou système de fichiers par exemple). À titre d’exemple, Linux utilise principalement deux types de partition : les partitions de swap (numéro 82) et les partitions pour les systèmes de fichiers (type 83). Bien entendu, la limitation à quatre partitions seulement est extrêmement contrai- CHAPITRE 5. INSTALLATION DE LINUX 110 gnante, aussi la notion de partition étendue a-t-elle été introduite. Une “partition étendue” est une partition primaire spéciale, dans laquelle il est possible de définir jusqu’à 64 sous-partitions. Ces sous-partitions sont appelées des “partitions logiques”. Les données ne sont jamais stockées dans la partition étendue elle-même, mais dans ses partitions logiques (voir figure 5.1, page 110). Partition primaire Partition étendue Partitions logiques F IG . 5.1 – Exemple de partitionnement de disque On ne peut définir qu’une seule partition étendue sur un disque donné, mais cela n’empêche pas d’avoir des partitions primaires normales à côté de celle-ci. Il est donc recommandé, lorsque l’on crée la quatrième partition, de créer une partition étendue et non une partition primaire, afin de se réserver la possibilité de créer de nouvelles partitions ultérieurement. Il faut toutefois savoir que certains systèmes ne peuvent pas être installés sur des partitions logiques (notamment DOS et Windows 9x/Millénium), bien qu’ils soient capables d’y accéder une fois qu’ils ont démarré. Outre la table des partitions primaires, le MBR contient un petit programme, appelé le “bootstrap loader”, qui permet de charger le premier secteur d’une des partitions primaires. Ce secteur est communément appelé le “secteur de boot”, parce qu’il contient le programme capable de charger le système d’exploitation. La partition dont le secteur de boot est chargé par le bootstrap loader est appelée la “partition active”. Il ne peut y avoir qu’une seule partition active à chaque instant : celle du système d’exploitation principal. Amorçage du système Généralement, le programme stocké sur le secteur de boot d’une partition a pour but de charger le système d’exploitation qui y est installé. Cependant, pour certains systèmes d’exploitation, ce programme est très évolué et permet de lancer 5.1. AVANT DE COMMENCER L’INSTALLATION 111 d’autres systèmes d’exploitation, éventuellement installés sur d’autre partitions ou d’autres disques durs. Ces programmes sont alors appelés des “gestionnaires d’amorçage”. Linux dispose de deux gestionnaires d’amorçages très puissants : le GRUB et LILO. Windows NT, 2000 ou XP disposent également d’un gestionnaire d’amorçage capable de lancer d’autres systèmes d’exploitation : NTLDR. Pour résumer, lors du démarrage d’un PC, le BIOS charge le MBR du premier disque dur en mémoire et exécute le bootstrap loader. Celui-ci cherche ensuite à charger le secteur de boot de la partition active, et exécute le gestionnaire d’amorçage qui s’y trouve. Ce gestionnaire peut donner accès aux différents systèmes d’exploitation, qu’ils soient situés sur d’autres partitions ou même d’autres disques durs. La manière dont chaque système est lancé dépend bien sûr du système. Il faut donc, en général, lancer chaque système d’exploitation avec son propre chargeur. Cependant, on peut toujours utiliser un gestionnaire d’amorçage d’un autre système en rusant quelque peu : il suffit d’indiquer à ce gestionnaire de charger le secteur de boot de la partition d’installation du système que l’on désire lancer si celui-ci n’est pas pris en charge directement. Dans ce cas, le gestionnaire d’amorçage ne fait que passer la main au chargeur de l’autre système. Plan de partitionnement Avant de se lancer dans l’opération de partitionnement proprement dite, il faut établir un plan de partitionnement. Cela consiste tout simplement à déterminer la taille et la nature de chaque partition dans le système. Il est normal, sur un système où seul Linux sera utilisé, de disposer d’au moins trois partitions : – une partition de swap, que Linux utilisera pour y stocker temporairement des données lorsqu’il aura besoin de récupérer un peu de place en mémoire. Il est recommandé de placer cette partition au début du disque (c’est à dire au plus près du cylindre 0, là où le taux de transfert est le plus rapide), – une partition pour le système de fichiers racine (point de montage /, dans laquelle doit se trouver l’ensemble des fichiers du système. Cette partition doit se trouver dans les 1024 premiers cylindres pour que le BIOS puisse y accéder et charger le gestionnaire d’amorçage du système, – une partition devant contenir les données des utilisateurs (point de montage /home/. L’avantage d’avoir une partition séparée pour toutes les données des utilisateurs est considérable, puisque dans ce cas on peut mettre à jour le système ou le réinstaller complètement sans avoir à faire de sauvegarde de ces données. De plus, les fichiers de configuration importants peuvent être sauvegardés sur cette partition avant la réinstallation, ce qui est extrêmement pratique. Ce type de partitionnement est à prendre sérieusement en considération, surtout pour les machines 112 CHAPITRE 5. INSTALLATION DE LINUX de particuliers, sur lesquels un grand nombre de programmes peuvent être installés simplement pour les tester. Il n’est donc pas rare, dans ces conditions, d’avoir à refaire une installation complète pour ń nettoyer ż rapidement le système. Toutefois, si l’on ne dispose pas de beaucoup de place sur le disque, il est possible de regrouper la partition racine et la partition contenant les données utilisateurs. Un mauvais dimentionnement de ces partitions aura dans ce cas de moins lourdes conséquences (si une partition est pleine, on ne peut pas facilement utiliser l’espace restant sur les autres partitions). Si votre machine est destinée à accueillir plusieurs systèmes d’exploitation, il est vivement recommandé de créer au moins une partition FAT ou FAT32. Cette partition permettra en effet d’échanger des données entre Linux et les autres systèmes d’exploitation, car les systèmes de fichiers FAT sont reconnus par tous les systèmes d’exploitation courants. Notez que si Windows NT4 doit être installé, vous devrez créer une partition FAT plutôt qu’une partition FAT32, car Windows NT ne reconnaît pas, sans programme additionnel, les partitions FAT32. Ce problème ne se pose plus pour Windows 2000 et pour XP. Notez également que bien que Linux sache parfaitement lire les partitions NTFS (utilisées par Windows NT4, Windows 2000 et par XP), l’écriture sur ces partitions est expérimentale et n’est donc pas conseillée. Inversement, aucun système Windows ne sait lire les systèmes de fichiers Linux, quels qu’ils soient. Avoir une partition FAT est donc incontournable dans ce cas de configuration. Si la machine doit être d’une fiabilité absolue ou si vous êtes soumis à des contraintes d’exploitation fortes, vous pouvez opter pour des solutions radicales qui consistent à séparer les données d’exploitation (normalement situées dans le répertoire /var/) des fichiers des programmes, et de les placer dans une partition dédiée. Vous pourrez alors ne monter que cette partition en lecture/écriture. Ainsi, en cas de crash système, seule la partition contenant les données d’exploitation devra être réparée, ou à l’extrême rigueur réinitialisée complètement par les scripts de démarrage. Rien ne vous empêche de créer d’autres partitions si vous le désirez. Sachez cependant que les systèmes de fichiers de Linux ne sont pas aussi limités que les systèmes de fichiers FAT et FAT32 en ce qui concerne les tailles maximales des partitions, et que par conséquent, créer une multitude de partitions n’est pas nécessaire et n’est certainement pas une bonne idée. La création de partitions supplémentaires peut malgré tout s’avérer nécessaire, par exemple pour y installer d’autres systèmes d’exploitation. Dans ce cas, vous aurez certainement à créer une partition étendue et des partitions logiques. La grande difficulté dans l’établissement du plan de partitionnement est de bien déterminer ses besoins en place disque, aussi bien pour les programmes que pour les données et le swap. Cependant, d’une manière générale, on peut considérer que ce qui est le plus important pour un particulier, ce sont ses données, et que 5.1. AVANT DE COMMENCER L’INSTALLATION 113 le système ne va pas prendre des dizaines de giga-octets sur le disque ! Si vous décidez de placer les programmes et les données utilisateurs dans deux partitions séparées, vous pouvez envisager le plan de partitionnement suivant : Une partition de swap deux fois la mémoire vive de l’ordinateur si vous ne disposez pas de beaucoup d’espace disque, 256 Mo sinon. Il est inutile de consacrer plus de place que cela, car il est très rare d’avoir besoin de plus de 384 Mo de mémoire virtuelle (la mémoire virtuelle est la somme de la mémoire libre et de la taille des partitions ou fichiers d’échange). Notez que la règle du double de la mémoire vive est tout à fait empirique. Elle se base sur le principe que si le système a besoin de plus de swap, c’est que de toutes façons il n’est pas dimensionné pour ce qu’on lui demande de faire. Cela dit, vous pouvez mettre autant de swap que vous le désirez si vous en avez réellement besoin (par exemple pour manipuler de très grandes photos ou des fichiers de très grande taille). Si vous avez un gros disque, vous pouvez utiliser une très grande partition de swap : elle ne sera quasiment pas utilisée, mais le jour où vous en aurez besoin, elle sera là. Après tout, abus de bien ne nuit pas... Sachez que de toutes façons, si un jour il fallait plus de mémoire virtuelle, vous pourriez créer un fichier d’échange temporaire. une partition racine contenant le système, les programmes et les fichiers de configuration : environ 2 Go. Il est possible de travailler avec 1 Go, mais on n’est vraiment pas à l’aise avec XWindow ou si l’on désire compiler des programmes récupérés sur Internet (ce qui est assez courant). Il est inutile de dépasser les 3 Go pour cette partition, si l’on a besoin de plus de place, c’est que le répertoire des données de travail /var/ devient trop gros et dans ce cas on a intérêt à le placer sur une partition qui lui est dédiée. Notez que l’on a intérêt à placer cette partition au début du disque pour deux raisons : premièrement, c’est à cet endroit que le disque dur est le plus rapide, et deuxièmement, certains BIOS ne sont pas capables d’accéder aux cylindres de numéro supérieur à 1024 et ne peuvent donc pas accéder au gestionnaire d’amorçage du système s’il est installé sur cette partition, une partition pour les répertoires personnels des utilisateurs le reste de l’espace disponible sur le disque moins, bien entendu, l’espace nécessaire aux partitions des autres systèmes d’exploitation et celui d’une éventuelle partition de sauvegarde ou d’échange de données, une partition de sauvegarde ou d’échange de données , éventuellement. Elle sera utilisée pour échanger des données entre systèmes dans le cas d’une configuration multi-boot. Cette partition devra être en FAT16 si les autres systèmes ne supportent pas les partitions de type FAT32 (par exemple DOS, Windows 95 première édition ou Windows NT4), mais on préférera tout de même la FAT32 si possible (Windows 95 OSR2 ou plus, ou Windows CHAPITRE 5. INSTALLATION DE LINUX 114 2000 ou XP). Cette partition pourra faire environ 1 Go, soit la taille nécessaire pour stocker une image disque de CD-ROM plus quelques fichiers complémentaires. Elle pourra être de taille supérieure si un autre système d’exploitation y est installé. La partition du système dont on utilise le gestionnaire d’amorçage doit être placée de préférence avant le cylindre 1024. En effet, certains BIOS ne peuvent pas accéder aux cylindres suivants, et le bootstrap loader ne peut donc pas charger le gestionnaire d’amorçage du système dans ce cas. Cela signifie que la deuxième partition doit être la partition du système d’exploitation principal (cela a en plus l’avantage de donner les accès disque les plus rapides pour les fichiers de ce système). Notez que ce plan de partitionnement utilise les quatre entrées de la table des partitions, et ne permet donc pas d’en ajouter une complémentaire. Si l’on désire installer un autre système d’exploitation, on pourra le faire sur la partition FAT (auquel cas on pourra lui consacrer plus d’un giga-octets), soit sur un deuxième disque dur. Si cela ne s’avère pas possible (par exemple parce que l’on veut installer Windows NT, Windows 2000 ou XP sur une partition NTFS tout en conservant la partition FAT), on devra créer une partition étendue. Je préconise dans ce cas de placer les deux dernières partitions (la partition d’échange et la partition des répertoires personnels des utilisateurs) dans des partitions logiques de cette partition étendue, ce qui laisse libre la troisième partition primaire pour un autre système d’exploitation. Bien entendu, ce plan de partitionnement est une suggestion et vous êtes absolument libre d’en choisir un autre. Je ne le fournis que pour aider ceux qui ne savent pas comment effectuer leur partitionnement précisément. Il devrait convenir pour tous les disques de plus de 4 Go, qui sont monnaie courante à présent. Utilisation de parted L’utilitaire GNU parted est le standard en ce qui concerne les manipulations de partitions sous Linux. Cet outil s’utilise en ligne de commande, et peut donc être utilisé à partir d’un terminal en mode texte pendant la phase d’installation, si votre distribution l’inclut avec ses outils d’installation standards. Vous pourrez lancer parted avec la simple commande suivante : parted disque 5.2. DÉCLARATION DES UTILISATEURS LOCAUX 115 5.2 Déclaration des utilisateurs locaux 5.2.1 Création des utilisateurs Modification des fichiers de configuration Le fichier /etc/passwd contient la définition des utilisateurs locaux du système, chaque utilisateur y est décrit par une entrée (voir 4.9.2, page 98 pour la structuration des enregistrements de ce fichier). Ainsi, pour créer un nouvel utilisateur, il suffit de rajouter une ligne dans le fichier /etc/passwd. Par exemple, pour créer l’utilisateur nommé “Rémi LEBLOND”, utilisant le login “remi’, ayant le répertoire de connexion /home/remi, utilisant l’interpréteur de commande bash, ayant un identifiant numérique 500 et faisant partie du groupe 500, nous ajouterons la ligne suivante au fichier /etc/passwd : remi:*:500:500:Rémi LEBLOND:/home/remi:/bin/bash Le deuxième champs de cette ligne indique le mot de passe de l’utilisateur. Il peut être : – Vide, si l’utilisateur n’a pas de mot de passe, – le mot de passe crypté par l’algorithme à sens unique crypt1 , Exemple de mot de passe crypté : “jn37OT0surAy.” – le caractère ’*’ pour indiquer que le mot de passe crypté est stocké dans le fichier /etc/shadow. Utilisation d’outils système Généralement, la plupart des distributions Linux propose des outils facilitant la manipulation du fichier des utilisateurs. Il s’agit, soit d’outils en commandes en ligne de commande, soit d’outils graphiques. La commande useradd permet de créer de nouveaux utilisateurs. Exemple d’utilisation : Création d’un nouvel utilisateur “util1”. # useradd util1 # passwd util1 Changing password for user util1. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. 1 La fonction crypt est celle utilisée pour le cryptage des mots de passe. Elle est basée sur l’algorithme DES (Data Encryption Standard) avec des variantes prévues entre autres choses pour éviter l’implémentation matérielle d’un casseur de code. 116 CHAPITRE 5. INSTALLATION DE LINUX Le nouveau compte utilisateur sera inséré dans les fichiers du système quand c’est nécessaire, le répertoire personnel sera créé, et les fichiers initiaux copiés à partir du répertoire /etc/skel, cela dépendant des options présentes en ligne de commandes. La commande crée un groupe pour chaque utilisateur ajouté au système, à moins que l’option -n ne soit fournie. Comme la grande majorité des commandes Linux, useradd accepte un grand nombre d’options permettant, par exemple, de spécifier l’emplacement du répertoire personnel ou le groupe principal. Se reporter à la page de manuel pour plus d’informations. A l’inverse, la commande userdel permet de supprimer des comptes utilisateur. La distribution Mandrake dispose d’un outil graphique permettant de gérer les utilisateurs et les groupe : userdrake (voir figure 5.2, page 116). F IG . 5.2 – Exemple de fenêtre UserDrake 5.2.2 Création des groupes Modification des fichiers de configuration Le fichier /etc/group contient la définition des groupes locaux du système, chaque groupe y est décrit par une entrée (voir ??, page ?? pour la structuration des enregistrements de ce fichier). Ainsi, pour créer un nouveau groupe, il suffit de rajouter une ligne dans le fichier /etc/group. 5.2. DÉCLARATION DES UTILISATEURS LOCAUX Utilisation d’outils système 117 118 CHAPITRE 5. INSTALLATION DE LINUX Chapitre 6 Mise en réseau Dans ce chapitre, nous allons aborder la configuration d’un système Linux pour l’intégrer à un réseau local. 6.1 Principes généraux des réseaux 6.1.1 Les classes de réseau IP Classe A B C Plage disponible 10.0.0.0 172.16.0.0 à 172.31.0.0 192.168.0.0 à 192.168.255.0 TAB . 6.1 – Classes de réseaux IP disponibles pour une utilisation privée 6.2 Configuration de base 6.2.1 Affectation d’adresse La commande ifconfig permet de configurer (et maintenir ensuite) les interfaces réseau. La configuration d’une interface réseau consiste à lui attribuer une adresse IP et à indiquer à quel type de réseau elle est raccordée. Ainsi, pour déclarer une nouvelle interface réseau, la syntaxe de la commande ifconfig est la suivante : ifconfig [nom de l’interface] [adresse IP] options up|down. 119 CHAPITRE 6. MISE EN RÉSEAU 120 Les nouvelles interfaces sont activées par défaut, mais il est possible de les désactiver à l’aide du paramètre “down”. Le nom de l’interface peut généralement prendre les valeurs suivantes : lo : pour loopback, l’interface de réseau virtuel local à la machine, eth0 : la première carte Ethernet installée. La deuxième carte Ethernet porterait le nom eth1, <nom d’une interface> :1 : le premier alias de l’interface. Il est possible de définir des alias des interfaces existantes. Chacun d’entre eux peut être configuré indépendamment à l’aide de la commande ifconfig. Les options les plus courantes sont : netmask : Définit le masque de réseau IP pour cette interface. La valeur par défaut de cette valeur correspond au masque réseau usuel pour les classes A, B ou C (déduite de l’adresse IP), mais toute autre valeur peut être définie selon les besoins en sous- réseaux. up : Cette option active l’interface. Elle est implicitement spécifiée si une nouvelle adresse est affectée à l’interface (voir plus loin). down : Cette option arrête le fonctionnement du pilote pour cette interface, et est utilisée lorsque les choses commencent à aller mal. pointopoint adresse : Ce mot clé valide le mode point à point d’une interface, signifiant qu’il existe un lien direct entre 2 machines, sans que personne d’autre ne puisse être à l’écoute. Si aucun argument n’est donné, ifconfig affiche simplement l’état des interfaces actuellement définies. Si seul le paramètre interface est donné, il affiche seulement l’état de l’interface correspondante. Si seul le paramètre -a est fourni, il affiche l’état de toutes les interfaces, même celles qui ne sont pas actives. [root@rapido remi]# ifconfig eth0 Lien encap:Ethernet HWaddr 00:50:FC:49:D0:FB inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:1663 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:100 RX bytes:0 (0.0 b) TX bytes:112830 (110.1 Kb) Interruption:11 Adresse de base:0x9000 lo Lien encap:Boucle locale inet adr:127.0.0.1 Masque:255.255.255.0 6.2. CONFIGURATION DE BASE 121 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:13989 errors:0 dropped:0 overruns:0 frame:0 TX packets:13989 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:805767 (786.8 Kb) TX bytes:805767 (786.8 Kb) 6.2.2 Définition de règles de routage La commande route manipule la table de routage IP du noyau. Son utilisation première consiste à configurer des routes statiques vers des hôtes ou des réseaux via une interface, après sa configuration par le programme ifconfig. Utilisée seule, la commande route permet d’afficher la table de routage active du système. [root@rapido remi]# route Table de routage IP du noyau Destination Passerelle 192.168.0.0 * 127.0.0.0 * Genmask 255.255.255.0 255.255.255.0 Indic Metric Ref U 0 0 U 0 0 Use If 0 et 0 lo Pour définir une nouvelle route à l’aide de la commande route, il faut : – Choisir l’action : – del pour supprimer une route, – add pour ajoute une route. – Choisir la destination de la route : – -net pour ajouter une route dont la cible est un réseau, – -host si la cible est un hôte. – Choisir la cible de la route : l’hôte ou le réseau destination. – Définir les éventuelles options : – netmask spécifie le masque réseau de la route à ajouter, – gw suivi de l’adresse de la passerelle signifie que tout paquet IP envoyé à cette adresse sera routé par la passerelle spécifiée. 6.2.3 Test de la configuration Commande ping permet de tester la communication vers un hôte spécifié par son adresse ou son nom. Par défaut, la commande ping s’exécute en boucle, il faut donc l’interrompre par CTRL-C. [root@rapido remi]# ping brouette PING brouette (192.168.0.10) from 192.168.0.1 : 56(84) bytes of data. 122 CHAPITRE 6. MISE EN RÉSEAU 64 bytes from rapido (192.168.0.1): icmp_seq=0 ttl=255 time=80 usec 64 bytes from rapido (192.168.0.1): icmp_seq=1 ttl=255 time=46 usec 64 bytes from rapido (192.168.0.1): icmp_seq=2 ttl=255 time=51 usec --- rapido ping statistics --3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/mdev = 0.046/0.059/0.080/0.015 ms 6.2.4 Résolution des noms de machines Jusqu’à présent, nous avons désigné les différents composants du réseaux par leur adresse IP. Si cette désignation convient parfaitement à un système informatique, elle n’est pas naturelle pour un être humain normalement constitué. Aussi, pour des raisons de commodité, nous allons voir comment attribuer de véritables noms aux machines du réseau. Le fichier /etc/hosts permet de nommer les machines du réseau, ce qui permet de traduire une adresse IP en nom et vice versa. Chaque ligne du fichier permet de nommer une adresse IP. Elles commence donc par l’adresse IP suivie des différents noms associés à cette adresse. Par exemple : [root@rapido root]# cat /etc/hosts 127.0.0.1 rapido localhost.localdomain localhost 192.168.0.10 brouette 192.168.0.1 rapido 6.3 Centralisation de configuration 6.3.1 Installation d’un serveur NIS Présentation Lorsqu’un réseau partage des informations entre différentes machines, il est intéressant de centraliser la gestion des mots de passe pour permettre aux utilisateurs de se connecter de n’importe où. Pour cela, il faut installer un serveur NIS sur le réseau. NIS signifie Network Information System. L’intérêt de NIS repose donc sur une bibliothèque de données à consulter. Ce système de pages jaunes (Yellow Pages en anglais, à l’origine du yp débutant les commandes NIS) repose sur RPC, au même titre que NFS. Le partage d ?informations permet de mettre en commun des fichiers tels que /etc/passwd ou /etc/hosts pour partager les mots de passe ou les alias de machines. 6.3. CENTRALISATION DE CONFIGURATION 123 La configuration d’une connexion NIS demande un rien de maîtrise, et se décompose en deux étapes distinctes : – La mise en oeuvre du serveur, – La configuration des clients. La première phase porte sur la mise en place d’un serveur et la génération de cartes, bases de données issues des données en partage. La seconde phase concerne chacun des clients. Le serveur Le serveur NIS s’appelle ypserv. Nous allons utiliser la centralisation des mots de passe comme support de notre exemple et nous supposerons que le paquetage ypserv a été installé. Pour cela, on peut vérifier la présence de l’exécutable ypserv dans le répertoire /usr/sbin et l’existence d’un répertoire /var/yp dans lequel se trouve un fichier Makefile. Pour faire les choses proprement et bien séparer les données, il faut créer un répertoire /etc/NIS dans lequel nous allons placer une copie des fichiers passwd, shadow et group du répertoire /etc/. Nous allons retirer tous les utilisateurs qui doivent être exportés des fichiers originaux, et ne laisser que ceuxci dans les copies (i.e. on supprime dans les copies les utilisateurs et groupes ayant un identificateur supérieur à 500). Dans le fichier /var/yp/Makefile, il faut mettre les variables YPSRCDIR et YPPWDDIR valant /etc/NIS, et de même ne laisser sur la ligne “all :” que les services nécessaires, c’est à dire passwd, shadow et group. On doit donc retrouver les lignes suivantes dans le fichier /var/yp/Makefile : ... YPSRCDIR = /etc/NIS YPPWDDIR = /etc/NIS ... all: passwd group shadow Il reste à fixer un nom de domaine NIS par la commande domainname <nom domaine>, puis lancer la commande make dans le répertoire /var/yp. Par cette manipulation, on génère la bibliothèque de données accessibles. Finalement, il ne reste plus qu’à lancer le serveur par la commande ypserv et le démon yppasswdd -D /etc/NIS pour activer la partie serveur. Il peut être utile de mettre ces étapes dans un script de démarrage tout comme la définition du nom de domaine NIS. Pour cela, il suffit de rajouter ces quelques lignes dans le fichier /etc/rc.d/rc.inet2 (ou son équivalent suivant les distributions), après avoir écrit le nom de domaine NIS dans le fichier /etc/nisdomainname : if [ -r /etc/nisdomainname ]; then nisdomainname ?cat /etc/nisdomainname? fi 124 CHAPITRE 6. MISE EN RÉSEAU if [ -x ${NET}/ypserv ]; then echo -n " ypserv? ${NET}/ypserv fi if [ -x ${NET}/rpc.yppasswdd ]; then echo -n " yppasswdd? ${NET}/rpc.yppasswdd fi Après un redémarrage, le serveur NIS sera en place. Le client Pour la configuration du client, il faut rajouter l’adresse IP (ou son nom s’il est défini dans /etc/hosts) du serveur dans le fichier /etc/yp.conf. La ligne à rajouter sera la suivante : ypserver nom_du_serveur Il faut également changer dans le fichier nsswitch.conf l’ordre de recherche sur les fichiers partagés par le serveur NIS. Typiquement, on retrouve une ligne du genre : passwd: nis files Finalement il ne reste plus qu’à lancer ypbind, la configuration est terminée et l’accès au serveur NIS est désormais possible. Pour le vérifier, nous allons récupérer le fichier passwd.byname ou passwd.byuid qui a été généré après la commande make sur le serveur. Pour ce faire, nous appelons la commande ypcat passwd.byname. Enfin, la gestion des mots de passe ne se fait plus par la commande passwd mais par yppasswd, aussi est-il judicieux de remplacer passwd par un lien symbolique vers la commande yppasswd par la ligne suivante : ln -s yppasswd passwd 6.4. PARTAGE DE RESSOURCES 6.3.2 Mise en oeuvre d’un serveur de noms (DNS) 6.3.3 Partage de configuration réseau via DHCP 6.4 Partage de ressources 6.4.1 Accès distant par telnet 6.4.2 Partage de fichiers par NFS 6.4.3 Publication de fichier via FTP 6.4.4 Publication Web via HTTP 125 126 CHAPITRE 6. MISE EN RÉSEAU Chapitre 7 Compilation du noyau Le but de ce chapitre est de confectionner un noyau adapté au mieux à nos besoins afin de remplacer celui qui a été installé par la distribution. Nous nous basons pour cela sur l’installation qui a été réalisée lors du précédant chapitre, en partant du principe que le compilateur gcc et l’outil make fonctionnent correctement. 7.1 Principe Le noyau de Linux qui est fourni avec votre distribution est un noyau qui a été spécialement conçu pour démarrer correctement sur le plus grand nombre de machines possibles. Il ne s’agit donc pas d’un noyau optimal, d’où l’intérêt de compiler un noyau plus adapté. La compilation du noyau est une spécificité des systèmes libres, qui n’est possible que parce que l’on dispose des sources du noyau. Cependant, même pour certains Unix commerciaux, il est possible d’effectuer une édition de liens, les modules du noyau étant fournis sous la forme de fichiers objets. La compilation ou l’édition de liens du noyau est une opération technique qui peut surprendre un habitué des systèmes fermés que sont par exemple Windows ou OS/2. Cependant, elle permet d’obtenir un noyau très petit, optimisé pour la machine sur laquelle il tourne, et donc à la fois économe en mémoire et performant. Il est donc recommandé d’effectuer cette compilation : pourquoi conserver un monstre capable de gérer des périphériques qui ne sont pas et ne seront jamais installé sur votre système ? La compilation du noyau de Linux nécessite de disposer des dernières sources du noyau (version 2.4.17. au 22/10/2001) et d’un compilateur. Il est évident que le compilateur idéal est le compilateur GNU C/C++ GCC. On utilisera la version la plus stable actuellement, à savoir la version 2.95.3. Je supposerai dans la suite 127 128 CHAPITRE 7. COMPILATION DU NOYAU de ce document que vous disposez de la dernière version du noyau, à savoir la version 2.4.17 [GIC02]. La compilation du noyau n’est pas très difficile, cependant, elle nécessite de répondre correctement aux questions de configuration. Les erreurs peuvent être multiples, et seront fatales. Il est donc fortement conseillé de disposer d’une disquette de démarrage afin de réparer le système en cas d’erreur. Par ailleurs, il faut toujours conserver le dernier noyau utilisable en sauvegarde dans le répertoire /boot/. Il faut également ajouter une entrée spécifiant ce noyau dans le programme de démarrage (lilo), afin de pouvoir sélectionner l’ancien noyau en cas d’erreur. Ces opérations seront également décrites en détail plus loin [GIC02]. La compilation du noyau se passe en quatre étapes : – installation des fichiers sources, – réponse aux questions de configuration, – compilation du nouveau noyau, – installation du nouveau noyau, – compilation des modules, – installation des modules. 7.2 Installation des fichiers sources Les sources les plus récentes du noyau peuvent être trouvées sur le site “http ://www.kernel.org”. Il est possible de récupérer les sources complètes, sous la forme d’une archive comprimée d’environ 24 Mo. Toutefois, dans un soucis de commodité, nous utiliserons dans ce chapitre les sources fournies avec notre distribution. Généralement, les sources du noyaux Linux sont installés dans le répertoire /usr/src/linux/. On devra donc renommer temporairement le répertoire originel avant d’installer les sources du nouveau noyau, ou au moins en faire une sauvegarde. Une autre solution est d’installer les fichiers du noyau dans un répertoire /usr/src/linux_version/ et d’utiliser un lien symbolique /usr/src/linux/ pour sélectionner la version que l’on veut compiler. Cela permet de conserver plusieurs jeux de sources de versions différentes, et de travailler sur la version courante dans le répertoire /usr/src/linux/ facilement. Les commandes suivantes permettront d’extraire les sources dans le répertoire dédié au sources de Linux. Elles supposent qu’il existe déjà un lien symbolique /usr/src/linux/ vers le répertoire des fichiers sources actuels de Linux : cd /usr/src rm linux mkdir linux-2.4.17 ln -s linux-2.4.17 linux 7.3. PARAMÉTRAGE DE LA COMPILATION 129 tar xvfz linux-2.4.17.tar.gz [GIC02] 7.3 Paramétrage de la compilation Pour pouvoir paramétrer votre compilation, il est nécessaire de ce placer dans le répertoire contenant les sources du noyau. Pour cela, utilisez la commande : cd /usr/src/linux La configuration du noyau peut se faire “à l’ancienne” avec la commande suivante : make config Cette commande pose une série de questions auxquelles il faut pouvoir répondre correctement du premier coup. On n’a pas le droit à l’erreur ici, faute de quoi il faut tout reprendre à zéro. Il est nettement plus convivial d’utiliser la version Tcl/Tk sous X11. Cette version donne l’accès aux différentes options sans un ordre quelconque, et ne présente que les options réalisables étant données celles déjà fixées. Cette méthode est évidemment la méthode conseillée (voir figure 7.1, page 129). Pour l’utiliser, il suffit de taper la commande suivante : make xconfig F IG . 7.1 – Le résultat de la commande make xconfig sous XWindow Si l’on ne dispose pas encore de X11 on peut utiliser la version texte avec menu en tapant la commande suivante : 130 CHAPITRE 7. COMPILATION DU NOYAU make menuconfig Quelle que soit la méthode utilisée, il faut répondre par “Y” (pour “Yes”), “N” (pour “No”) ou “M” (pour “Module”) lorsque c’est possible. “Y” et “M” incluent la fonctionnalité courante dans le noyau ou sous la forme d’un module, “N” la supprime. “M” permet d’utiliser la fonctionnalité en tant que module du noyau. En général, l’utilisation des modules permet d’alléger le noyau car les fonctionnalités sont chargées et déchargées dynamiquement. Cependant, les fonctionnalités nécessaires au démarrage de Linux, comme les gestionnaires de disques et systèmes de fichiers par exemple, ne doivent en aucun cas être placées dans des modules, car alors le système ne pourrait pas démarrer. Quand vous avez configuré votre compilation, sortez de l’utilitaire en sauvegardant vos modifications (“Save and Exit”). [GIC02] Remarque : Si vous voulez retrouver le paramétrage initial, vous pouvez utiliser la commande make mrproper. Il est possible de sauvegarder un état de configuration à l’aide de la commande make backup. 7.4 Compilation et installation du noyau Une fois la configuration du noyau réalisée, la compilation peut être lancée. Pour cela, il suffit de lancer les trois commandes suivantes dans le répertoire /usr/src/linux : make dep make clean make bzImage La première commande génère les dépendances entre les fichiers du noyau. Ces dépendances sont utilisées par les fichiers makefile. La deuxième commande effectue le ménage nécessaire pour supprimer tous les fichiers objets pouvant résulter d’une précédente compilation. Cette opération est nécessaire afin d’éviter de mélanger des fichiers ayant été compilés avec des options de configuration différentes. Enfin, la troisième commande lance la compilation et l’édition de lien proprement dite. Une fois la compilation achevée, il faut installer le nouveau noyau. Cette opération nécessite beaucoup de prudence, car si le noyau nouvellement créé n’est pas bon, le système ne redémarrera plus. C’est pour cela qu’il est conseillé de conserver toujours deux versions du noyau, dont on est sûr que l’une d’entre elle fonctionne parfaitement. En pratique, cela revient à conserver la version originale du noyau installé par votre distribution. Pour cela, il faut en faire une copie de sauvegarde. 7.4. COMPILATION ET INSTALLATION DU NOYAU 131 En général, le noyau est installé dans le répertoire /boot/. Il porte souvent le nom de “vmlinuz”, pour le sauvegarder, il suffit donc de taper par exemple la commande suivante : cp vmlinuz vmlinuz.old Il faut également indiquer au gestionnaire d’amorçage qu’il faut qu’il donne maintenant la possibilité de démarrer l’ancienne version du noyau sous ce nouveau nom. Pour LILO, il suffit d’éditer le fichier /etc/lilo.conf et d’y ajouter une nouvelle configuration. En pratique, cela revient à dupliquer la configuration du noyau actuel et à changer simplement le nom du noyau à charger (paramètre “image” de la configuration dans /etc/lilo.conf) et le nom de la configuration (paramètre “label”). Vous devrez aussi rajouter l’option “prompt” si elle n’y est pas déjà, afin que LILO vous demande la configuration à lancer à chaque démarrage. Dans notre exemple, le nom du noyau à utiliser pour la configuration de sauvegarde sera “vmlinuz.old”. De même, si la configuration initiale de Linux porte le nom “linux”, vous pouvez utiliser le nom “VieuxLinux” pour la configuration de sauvegarde (voir figure 7.2, page 132). Une fois le fichier /etc/lilo.conf mis à jour, il faut réinstaller LILO, ce qui se fait simplement en invoquant la commande lilo. [root@pc1 linux]# lilo Added Linux * Added VieuxLinux Added Windows Si l’on otient un message différent, il faut corriger son fichier /etc/lilo.conf et ne sourtout pas tenter de redémarrer le système avant la résolution du problème (il ne redemarrerait probablement pas et il faudrait utiliser la disquette de secour). L’image du nouveau noyau a été créée dans le répertoire /usr/src/linux/arch/i386/boot/, sous le nom bzImage. L’installation se fait donc simplement par une copie dans /boot/ en écrasant le noyau actuel vmlinuz : cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz Il faut également copier le fichier System.map du répertoire /usr/src/linux/ dans le répertoire /boot/ : cp System.map /boot Ce fichier contient la liste de tous les symboles du nouveau noyau, il est utilisé par quelques utilitaires systèmes. Si vous utiliser LILO, il vous faudra le réinstaller à nouveau pour qu’il prennent en compte le nouveau noyau. Cela se fait avec la même commande que celle utilisée précédemment : lilo. Il faut ensuite redémarrer la machine avec la commande reboot et vérifier que le nouveau noyau fonctionne bien. S’il ne se charge pas correctement, c’est 132 CHAPITRE 7. COMPILATION DU NOYAU boot=/dev/hda map=/boot/map install=/boot/boot.b default=linux keytable=/boot/fr-latin1.klt lba32 prompt timeout=50 message=/boot/message menu-scheme=wb:bw:wb:bw image=/boot/vmlinuz label=Linux root=/dev/hdb1 append=" devfs=mount" read-only image=/boot/vmlinuz.old label=VieuxLinux root=/dev/hdb1 append=" devfs=mount" read-only other=/dev/hda1 label=Windows table=/dev/hda F IG . 7.2 – Exemple de fichier lilo.conf 7.5. COMPILATION ET INSTALLATION DES MODULES 133 que les options de configuration choisies ne sont pas correctes. Il faut donc utiliser le noyau sauvegardé, vérifier ses choix et tout recommencer. Attention cependant, cette fois, il ne faut pas recommencer la sauvegarde du noyau, puisque cette opération écraserait le bon noyau avec un noyau défectueux. Si le nouveau noyau démarre correctement, il ne reste plus qu’à installer les modules [GIC02]. 7.5 Compilation et installation des modules Si le système a redémarré correctement, on peut compiler les modules et les installer. Il n’est pas nécessaire de prendre les mêmes précautions pour les modules que pour le noyau. Il suffit donc ici de lancer la commande suivante dans le répertoire /usr/src/linux/ : make modules Les modules sélectionnés lors de la configuration sont alors compilés, il ne reste plus qu’à les installer. Avant toute installation de nouveaux modules, il est recommandé de décharger tous les modules présents en mémoire. Cette opération peut être réalisée à l’aide de la commande modprobe -ar, qui va tenter de décharger les modules non utilisés. Vous pouvez consulter la liste des modules chargés à l’aide de la commande lsmod. S’il reste des modules chargés, vous pouvez les supprimer à l’aide de la commande rmmod suivie du nom du module à supprimer. Pour pouvoir supprimer un module, il faut que ce dernier ne soit plus utilisé par le système. Par exemple, pour pouvoir supprimer le module isofs, chargé de la gestion du système de fichier ISO9660 utilisé pour les CD-ROM, il faut démonter préalablement tous les CD-ROM du système. Une fois que tous les modules sont déchargés (la commande lsmod retourne une liste vide), l’installation des modules est alors très simple, puisqu’il suffit de lancer la commande make modules_install suivante dans le répertoire /usr/src/linux/. Les modules sont installés dans le répertoire /lib/module/version/, où version est le numéro de version du noyau courant. Il est possible que des modules d’autres versions du noyau existent dans leurs répertoires respectifs. Si vous n’en avez plus besoin, vous pouvez les effacer. Attention cependant si vous avez installé des modules additionnels non fournis avec le noyau dans ces répertoires, vous pourriez encore en avoir besoin. Les modules sont utilisés par le chargeur de module du noyau, grâce à la commande modprobe. Cette commande a besoin de connaître les dépendances entre les modules afin de les charger dans le bon ordre. Il faut donc impérativement mettre à jour le fichier /lib/modules/version/modules.dep à chaque 134 CHAPITRE 7. COMPILATION DU NOYAU [root@pc1 linux]# lsmod Module Size es1371 26528 ac97_codec 9248 soundcore 3440 af_packet 11984 nls_iso8859-15 3392 nls_cp850 3632 vfat 9744 fat 30240 floppy 46608 nls_iso8859-1 2880 isofs 17104 Used by 0 0 [es1371] 4 [es1371] 0 (autoclean) 3 (autoclean) 3 (autoclean) 3 (autoclean) 0 (autoclean) [vfat] 1 (autoclean) 1 (autoclean) 1 (autoclean) F IG . 7.3 – Exemple d’utilisation de la commande lsmod fois que l’on installe les modules, à l’aide de la commande depmod -a. Les modules doivent être installés après avoir installé le noyau et redémarré le système, faute de quoi la commande depmod peut ne pas trouver trouver tous les symboles utilisés par les modules dans le noyau en court d’exécution [GIC02]. Chapitre 8 Les scripts shell Commande ls (-a, -l, expressions générales - glob * [], redirection vers un fichier) Fichiers et répertoires : même chose, type différents Commande cat Suppression de fichier (rm) Création de répertoire (mkdir) Suppression de répertoire (rmdir, rm -R) Copie de fichier (cp) Déplacement de fichier (mv) Liaison de fichiers (ln statique ou physique) Editeur vi Recherche de fichiers (find, locate - updatedb) : -type [df], -name, -size Recherche et manipulation internes aux fichiers (More, grep, sort, wc... ) Utilisation de pipes pour communication inter-processus (exemple cat|more) Mise en pratique : recherche des commandes utilisées (ls, cd... ) Principe du PATH Droits sur les fichiers et répertoires Essayer de créer un fichier ou un répertoire dans /etc ou /bin Commande id : voir le groupe de l’utilisateur Ls -l : Insister sur propriétaire et groupe Expliquer la signification du champ rwxrw-r– 135 136 CHAPITRE 8. LES SCRIPTS SHELL Table des figures 1.1 1.2 1.3 1.4 1.5 Processus de création d’une application Logo des applications Open Source . . Logo du projet GNU . . . . . . . . . . Tux : La “mascotte” de Linux . . . . . . Linus TORVLADS . . . . . . . . . . . . . . . . 10 12 12 17 18 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 Prise en charge de fonctions par un noyau monolythique . . . . . Prise en charge de fonctions par un noyau modulaire . . . . . . . Architecture d’un système GNU/Linux . . . . . . . . . . . . . . . Exemple d’interface utilisateur graphique utilisant WindowMaker Exemple d’interface utilisateur graphique utilisant KDE . . . . . . Structure du système GNU/Linux . . . . . . . . . . . . . . . . . Exemple d’arborescence de processus . . . . . . . . . . . . . . . Exemple de tube nommé FIFO . . . . . . . . . . . . . . . . . . . Répertoires et points de montage sous Windows . . . . . . . . . . Répertoires et points de montage sous Linux . . . . . . . . . . . . 30 31 33 35 36 37 38 40 43 44 3.1 Exemple de fichier fstab . . . . . . . . . . . . . . . . . . . . . 59 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 Les entrées-sorties de commandes . . . . . . . . . . . . Interface utilisateur de vi . . . . . . . . . . . . . . . . . Exemple d’utilisation des commandes d’insertion de vi Basculement entre les deux modes de vi . . . . . . . . Lien physique . . . . . . . . . . . . . . . . . . . . . . . Lien symbolique . . . . . . . . . . . . . . . . . . . . . Exemple de fichier .bash_profile . . . . . . . . . . Exemple de fichier .bashrc . . . . . . . . . . . . . . 5.1 5.2 Exemple de partitionnement de disque . . . . . . . . . . . . . . . 110 Exemple de fenêtre UserDrake . . . . . . . . . . . . . . . . . . . 116 7.1 Le résultat de la commande make xconfig sous XWindow . . 129 137 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 79 79 81 85 86 96 97 138 7.2 7.3 TABLE DES FIGURES Exemple de fichier lilo.conf . . . . . . . . . . . . . . . . . . 132 Exemple d’utilisation de la commande lsmod . . . . . . . . . . . 134 Liste des tableaux 3.1 3.2 Présentation rapide des principaux répertoires d’un système de fichier Linux 48 Principaux types de systèmes de fichiers supportés par la commande mount 57 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 Sections du manuel (commande man) . . . . . . . . . . . . . . . Sites Web de documentation sur Linux . . . . . . . . . . . . . . . Sites Web de nouvelles sur Linux . . . . . . . . . . . . . . . . . . Syntaxe de redirection de sortie standard vers une autre commande Commandes de manipulation de répertoire . . . . . . . . . . . . . Symboles de substitution . . . . . . . . . . . . . . . . . . . . . . Symboles de définition des chemins d’accès . . . . . . . . . . . . Commandes de manipulation de fichiers . . . . . . . . . . . . . . Commandes de l’éditeur vi . . . . . . . . . . . . . . . . . . . . . Motifs de recherche utilisables avec vi . . . . . . . . . . . . . . Commandes de manipulation de fichiers . . . . . . . . . . . . . . Commandes de recherche de fichiers . . . . . . . . . . . . . . . . Commandes de manipulation du contenu des fichiers . . . . . . . Commandes de gestion des processus . . . . . . . . . . . . . . . Principaux signaux de contrôle de processus . . . . . . . . . . . . Droit d’accès élémentaires aux fichiers . . . . . . . . . . . . . . . Droit d’accès élémentaires aux répertoires . . . . . . . . . . . . . 6.1 Classes de réseaux IP disponibles pour une utilisation privée . . . 119 139 62 63 63 68 71 73 75 78 80 81 82 87 88 91 93 100 100 Index /etc/passwd (fich), 50, 97, 115, 122 /etc/rc.d/ (rép), 51 /etc/rc.d/rc.inet2 (fich), 123 /etc/resolv.conf (fich), 51 /etc/shadow (fich), 115 /etc/skel (rép), 116 /etc/skel/ (rép), 51 /etc/sysconfig/ (rép), 51 /etc/updatedb.conf (fich), 88 /etc/yp.conf (fich), 124 /floppy/ (rép), 54 /home/ (rép), 49, 50, 111 /lib/ (rép), 55 /lib/module/version/ (rép), 133 /lib/modules (rép), 55 /lib/modules/version/modules.dep (fich), 133 /mnt/ (rép), 54 /mnt/floppy/ (rép), 42 /opt/ (rép), 53 /proc/ (rép), 55 /proc/filesystems (fich), 57 /root/ (rép), 50 /sbin/ (rép), 49 /tmp/ (rép), 55 /usr/ (rép), 52, 53 /usr/X11R6/ (rép), 52 /usr/bin/ (rép), 52 /usr/doc (rép), 63 /usr/doc/ (rép), 52 /usr/doc/HOWTO (rép), 63 /usr/etc/ (rép), 52 /usr/games/ (rép), 52 . (rép), 75, 77 .. (rép), 75, 77 .bash_history (fich), 50 .bash_logout (fich), 50 .bash_profile (fich), 96 .bashrc (fich), 50, 96, 97 / (rép), 49, 56, 75, 111 /bin/ (rép), 49 /boot/ (rép), 54, 128, 131 /boot/System.map (fich), 54 /cdrom/ (rép), 54 /dev/ (rép), 53, 54, 57 /dev/cdrom (fich), 54 /dev/console (fich), 54 /dev/fd0 (fich), 57 /dev/hda (fich), 54 /dev/hda1 (fich), 54, 57 /dev/hdb3 (fich), 57 /dev/scd0 (fich), 57 /dev/usb/scanner0 (fich), 54 /etc/ (rép), 50, 123 /etc/NIS (rép), 123 /etc/X11/ (rép), 51 /etc/bashrc (fich), 96 /etc/cron/ (rép), 51 /etc/exports (fich), 50 /etc/fstab (fich), 50, 58 /etc/group (fich), 50, 98, 116 /etc/hosts (fich), 50, 122 /etc/init.d/ (rép), 51 /etc/lilo.conf (fich), 50, 131 /etc/nisdomainname (fich), 123 /etc/opt/ (rép), 51 140 INDEX /usr/include/ (rép), 52 /usr/lib/ (rép), 52 /usr/local/ (rép), 52 /usr/man/ (rép), 53 /usr/sbin (rép), 123 /usr/sbin/ (rép), 52, 53 /usr/sbin/makewhatis (cmd), 62 /usr/share/ (rép), 53 /usr/src/ (rép), 53 /usr/src/linux (rép), 130 /usr/src/linux/ (rép), 53, 128, 131, 133 /usr/src/linux/arch/i386/boot/ (rép), 131 /usr/src/linux_version/ (rép), 128 /var/ (rép), 51, 112, 113 /var/cache/ (rép), 51 /var/catman (rép), 51 /var/lib (rép), 52 /var/lock (rép), 52 /var/locks/ (rép), 51 /var/log/ (rép), 51 /var/opt/ (rép), 51, 53 /var/run (rép), 52 /var/spool/ (rép), 51 /var/yp (rép), 123 /var/yp/Makefile (fich), 123 < (cmd), 67 > (cmd), 66 » (cmd), 66 2> (cmd), 66 2» (cmd), 66 2, (cmd)67 AIX, 15 alias (cmd), 95 APRIL, 11 apropos (cmd), 62 Assembleur, 15 AT&T, 12 AT&T’s Bell, 14 bash (cmd), 18, 49, 96, 115 141 bg (cmd), 92, 93 bin/ (rép), 52 Binaire, 10 bootstrap loader, 110 BSD, 19 BSD (licence), 13 bzImage (fich), 131 bzip2 (cmd), 90 C, 9 C (langage), 15 Caldera, 20 cat (cmd), 49, 83, 88 cd (cmd), 49, 71, 75, 76 chgrp (cmd), 102 chmod (cmd), 102 chown (cmd), 102 Cluster, 20 cmdline (fich), 55 Code source, 10 compilateur, 9 Compilation du noyau, 29 compress (cmd), 90 Corel, 20 Corel-Linux, 24 cp (cmd), 78, 82–84 cpuinfo (fich), 55 crontab (cmd), 94 crypt (cmd), 46, 115 CTRL + D (cmd), 69 Debian, 23 depmod -a (cmd), 134 depmod (cmd), 134 devfs, 53 Distribution, 22 domainname <nom domaine> (cmd), 123 Entrée standard, 64 EuroLinux, 21 exe (fich), 55 INDEX 142 exit (cmd), 69 ext2, 57 ext2 (système de fichier), 19 Ext2fs, 19 ext3, 57 fat, 57 fdisk (cmd), 49 fg (cmd), 92, 93 find (cmd), 86–88 Free Software Foundation, 12 FreeBSD, 16 Freeware, 12 fsck (cmd), 49 FSF, 11 fstab (fichier de configuration), 58 fstab (fich), 58, 59 gcc (cmd), 18, 127 Gestionnaires d’amorçage, 111 GNU, 11 GNU General Public License, 12 GNUstep/ (rép), 50 GPL, 12 grep (cmd), 88, 89 group (fich), 123 groups (cmd), 99 GRUB (gestionnaire d’amorçage), 111 gzip (cmd), 90 halt (cmd), 43, 49, 70 HP/UX, 15 Hurd, 19 id (cmd), 99 ifconfig (cmd), 119–121 include/ (rép), 52 info (cmd), 62 Informix, 20 Internet, 19 IRIX, 16 iso9660, 57 Java, 9 jobs (cmd), 91, 92 KDE, 20 KDE/ (rép), 50 kill (cmd), 91, 93 lib/ (rép), 52 Licence GPL, 12 LILO (gestionnaire d’amorçage), 111 lilo (cmd), 128, 131 lilo.conf (fich), 132 Lindows OS, 23 LinuxExpo, 21 ln (cmd), 78, 82, 85, 86 locate (cmd), 86–88 login, 46 logout (cmd), 69 loopback (interface réseau), 120 ls (cmd), 49, 65, 72–75 lsmod (cmd), 133, 134 Mach, 19 make (cmd), 123, 124, 127 make backup (cmd), 130 make config (cmd), 129 make menuconfig (cmd), 130 make modules_install (cmd), 133 make mrproper (cmd), 130 make xconfig (cmd), 129 Makefile (fich), 123 man (cmd), 61, 62 Mandrake, 22 MANPATH (cmd), 62 Master Boot Record, 109 MBD, 109 meminfo (fich), 55 Microsoft, 14 Minix, 16, 17 Mire de connexion, 46 mkdir (cmd), 71, 76 mkfs (cmd), 49 INDEX modprobe -ar (cmd), 133 modprobe (cmd), 133 module (noyau), 29 Montage (de système de fichier), 42 more (cmd), 49, 83, 88 mount -a [-t type] (cmd), 58 mount (cmd), 56–58 Mozilla (licence), 13 Multics, 14 mv (cmd), 78, 82, 84 Netscape, 20 NFS, 57 Noyau monolithique, 29 nsswitch.conf (fich), 124 NTFS, 57 NTLDR, 111 Oracle, 20 OS/2 Warp, 20 parted (cmd), 114 Partition, 109 Partition étendue, 110 Partition active, 110 Partition d’échange, 109 Partition logique, 110 partitionnement, 109 passwd (cmd), 100, 101, 124 passwd (fich), 46, 123 passwd.byname (fich), 124 passwd.byuid (fich), 124 Perl, 9 ping (cmd), 121 Point de montage, 42, 56 Programme de base, 98 ps (cmd), 91, 93 pwd (cmd), 71 Python, 9 QNX, 15 Rémi CARD, 19 143 Répertoire de base, 69 RAWRITE.EXE (cmd), 108 rd (cmd), 77 reboot (cmd), 43, 49, 70, 131 RedHat, 20, 22 RedHat Linux, 20 rep (cmd), 88 Ritchie Denis, 14 rm (cmd), 65, 71, 77, 78, 82, 84 rmdir (cmd), 71, 77 rmmod (cmd), 133 route (cmd), 121 SCO Unix, 16 Secteur de boot, 110 sed (cmd), 89, 90 shadow (fich), 123 shutdown (cmd), 43, 70 SlackWare, 23 slocate -c -u (cmd), 88 slocate (cmd), 88 SMB, 57 Solaris, 15 Sortie standard, 64 Sortie des erreurs, 64 STALLMAN Richard, 11 stat (cmd), 74 stat (fich), 55 status (fich), 55 stderr, 64 stdin, 64 stdout, 64 Sun, 20 Suse, 23 Swap (partition), 109 sync (cmd), 43 Systèmes embarqués, 20 System.map (fich), 131 Table de routage, 121 Thompson Ken, 14 144 top (cmd), 91, 93 Tux, 17 umask (cmd), 102 umount (cmd), 56 unalias (cmd), 95 Unics, 15 United Linux, 24 updatedb (cmd), 87 uptime (fich), 55 useradd (cmd), 115, 116 userdel (cmd), 116 userdrake (cmd), 116 VA Linux, 20 vfat, 57 vi (cmd), 49, 77, 79, 81, 83, 88 vi : Editeur de texte, 77 vmlinuz (fich), 54, 131 whatis (cmd), 62 Window Manager, 32 XWindow, 32 ypbind (cmd), 124 yppasswd (cmd), 124 yppasswdd -D /etc/NIS (cmd), 123 ypserv (cmd), 123 INDEX Bibliographie [2LI] Toolinux. [APR] Association pour la promotion et la recherche en informatique libre. [ATR] Cours linux - installation et administration. [GIC02] Guide d’installation et de configuration de Linux. Christian CASTEYDE, 2002. [GPM01] Le guide du pingouin migrateur... ou comment passer de Windows à Linux. http ://home.alex.tuxfamily.org/guide/migrateur.html, 2001. [LEA] Léa book. [MOR88] Pierre MORVAN. Dictionnaire de l’Informatique. Larousse, 1988. [PAS01] Principes appliqués des systèmes d’exploitation (avec Java). Vuibert Informatique, 2001. [RUT] Linux : Rute user’s tutorial and exposition. 145