GNU/Linux: Soulever le capot Thomas Tempé Aujourd'hui, la plupart des distributions de GNU/Linux viennent avec de jolis programmes d'installation graphiques. La configuration d'un système, quand elle n'est pas automatique, se fait en quelques clics de souris. Et la modularisation du noyau nous épargne les sempiternelles recompilations. Ces progrès sont indiscutables, mais ils ont cependant un effet secondaire: ils isolent l'utilisateur de la ligne de commande, et des longues heures de tâtonnement Ô combien didactiques. Le but de ce document est d'introduire les outils merveilleux de notre unix Libre aux utilisateurs aventureux qu'une installation en mode texte n'aurait pas rebuté. Il est assumé que le lecteur a un minimum de connaissances en informatique, et a fait ses premiers pas dans le monde Linux. Ce document est une sorte de visite guidée de GNU/Linux, à partir de la ligne de commande. Elle est délibérément non-exaustive, et parsemée de parties théoriques ou de grandes vérités. Elle ressemble beaucoup à une première exploration, et est voulue comme un appel à l'aventure. l'utilisateur devra explorer les domaines évoqués par lui-même ultérieurement. I. Un peu de théorie On parle souvent de Linux. Linux n'est qu'un noyau de système d'exploitation. Il effectue la gestion de la mémoire, implémente les systèmes de fichier, gère la carte son et pilote les disques dur. Mais Linux par lui-même n'est pas bien utile sans un certain nombre d'outils. Le premier est la librairie C. Glibc est la librairie C du projet GNU. C'est elle qui implémente les fonctions comme printf, les conversions de dates, et offre des fonctions confortables comme fopen aux programmeurs. Tout ça, c'est très bien pour les programmes. Mais on n'a toujours pas d'interface utilisateur. Par-dessus le noyau, la librairie C et quelques autres, il est courant de faire tourner un shell. Le shell est l'interface utilisateur la plus élémentaire et la plus incontournable. Un shell est un programme qui permet à l'utilisateur de taper des commandes au clavier. Il les interprète, et les exécute. Il n'est pas plus privilégié qu'un autre programme, et on a couramment un grand nombre de shells ouverts en même temps sur une machine unix. Le shell de prédilection sous Linux s'appelle bash, et est lui aussi un morceau du projet GNU. Chaque shell a son comportement propre. sh est le shell de référence, le plus petit dénominateur commun des shells unix. Il est à peine un ou deux ordres de grandeur supérieur à la ligne de commande de MS-Dos en terme de puissance et de confort d'utilisation. Des shells comme bash ou zsh, en comparaison, sont des outils de travail extrêmement sophistiqués. Lors du démarrage du système, un certain nombre de distributions sont configurées pour lancer X-Window (notez l'absence de "s" final), ou plus précisément XFree86, l'implémentation libre du protocole X11R6. X-Window est un système client - serveur. Le serveur est la partie qui gère l'affichage et pilote la carte vidéo. Le client exécute les applications, et envoie les requêtes d'affichage au serveur. Les deux s'exécutent typiquement sur la même machine. Le premier programme à démarrer sous X-Window est un émulateur de terminal, ou fenêtre dans laquelle s'exécute un shell. 2. Prise en main Vous êtes sur un PC avec GNU/Linux. L'interface graphique est démarrée. Appuyez sur Ctrl-Alt-F1 (pas Ctrl-Alt-Suppr!). Vous devriez être passé en mode texte. Tapez vos login et mot de passe. Vous êtes sur la console virtuelle numéro 1. Utilisez la commande "tty" pour vous en convaincre. En maintenant Alt enfoncé, naviguez entre les différentes consoles avec les touches de fonction (F1-F12) et les flèches gauche et droite. Vous pouvez vous loguer sur une autre console, et y exécuter un programme. Toutes les consoles sont indépendantes. Ce mécanisme permet de travailler très efficacement. La plupart des distributions n'allouent que 6 consoles virtuelles; mais cette erreur peut être corrigée facilement en modifiant le fichier /etc/inittab. 3. I own you Retour sur la théorie. Les unices sont des OS multi-tâche, multi-utilisateur, et Unix a été conçu à une époque où il était impensable d'avoir un ordinateur par personne. Il faut donc voir votre machine comme une sorte de super-serveur. S'il est sur un réseau, toute personne autorisée peut y accéder et s'en servir pour peu qu'elle dispose d'un écran et d'un clavier. Comme la plupart des PC en ont, votre clavier et votre écran peuvent être utilisés pour dialoguer avec le système. Mais de mon PC, je peux travailler sur le vote sans modifier plus que quelques variables d'environnement. Un unix n'appartient pas à son utilisateur. L'utilisateur est un invité parmi d'autres. Il sert à fournir une charge système pour tester les programmes. Il n'a comme droits que ce qu'on lui accorde. Le système appartient à l'administrateur. L'administrateur, c'est root. Règle numéro 1: Ne jamais se loguer en tant que root. C'est inutile et dangereux. Quand une action nécessite les privilèges de root, utiliser la commande su pour l'exécuter. Bien sur, ce genre de règles, c'est comme les backups. Personne ne les applique jamais avant d'avoir fait 'rm -rf /bin'. unix, c'est avant tout une affaire d'expérience. 4. Dieu créa le fichier texte. Tout le reste est le travail de l'homme Parlons maintenant de la façon dont est organisé un système de fichier. Au commencement est la racine (/). La racine appartient à l'OS. Tapez: 'ls /'. La racine contient un certain nombre de répertoires dont le sens est gravé dans la tradition ancestrale de unix. Le répertoire /bin, par exemple, contient les fichiers exécutables (binaires) essentiels au système. Tapez 'rm -rf /bin'. Cette commande efface le contenu de '/bin' avec tous ses sous-répertoires, sans demander de confirmation. Tapez 'ls /' à nouveau. Si vous obtenez un message d'erreur, vous êtes sur la route de l'apprentissage (cf règle numéro 1). Un utilisateur est toujours enfermé dans une camisole, pour sa propre protection, et celle du système et de ses autres utilisateurs. Mais unix ne pardonne pas. Pas de 'undelete'. Le répertoire '/home' contient un sous-répertoire pour chaque utilisateur. Tapez 'ls -l /home' pour avoir un aperçu de ce qu'il vous reste à apprendre sur les attributs des fichiers. '/usr' contient les programmes destinés aux utilisateurs, '/var' les fichiers de données indispensables au fonctionnement du système (logs, courrier, etc...), et /mnt contient les point de montage de vos différents périphérique. Pour accéder au contenu d'une disquette, on le colle à l'intérieur d'un répertoire, ou point de montage, à l'aide des commandes 'mount' et 'umount'. Le montage et le démontage se font automatiquement dans un certain nombre de distributions. Votre meilleur ami ici bas est un éditeur de texte. Je me permets de conseiller GNU Emacs, d'autres préféreront Vim. C'est une affaire de personnalité. Inutile d'essayer gedit, kwrite, ou ce genre d'outils basés sur interface graphique. Ce sont des outils primitifs, sans aucune sophistication. Un utilisateur expérimenté de Gedit saura tout juste économiser quelques clics pour sauver un document, alors qu'un utilisateur expérimenté de Emacs pourra éditer son code presque sans contraintes, par le seul pouvoir de sa pensé. Le répertoire /etc contient les fichiers de configuration de votre système unix. Ce sont tous des fichiers texte. Tapes 'emacs /etc/inittab'. Notez au passage comme vous pouvez vous éviter de saisir toute la commande en utilisant la touche de tabulation. Inittab contient la description de ce qui s'exécute au démarrage de la machine. Notez que si vous êtes arrivé jusqu'à là, c'est que vous n'êtes pas root, et que le fichier est accessible en lecture seule. Explorez-le un petit peu. Vous verrez qu'il contient des commentaires et des lignes plus-ou-moins cryptiques, avec des champs séparés par des ':'. Il y a aussi le nom de l'auteur, et l'historique des modifications. Ceci est très important, car il s'agit de logiciels libres. 5. RTFM: Read The Fscking Manual Loguez-vous sur une console virtuelle voisine, et tapez 'man inittab'. De la bonne littérature. Une des qui entoure unix est que les experts gardent leur monopole sur la connaissance en chassant les néophytes à grands coups de documentation. Au moins, un linuxien n'a pas d'excuse pour ne rien apprendre. Tapez 'q' pour quitter le lecteur de manuel. Tapez maintenant 'man ls', et comptez le nombre de pages disponibles, histoire de vous convaincre de la qualité de la documentation disponible, et de la richesse des outils GNU. Notez également la section 'Voire aussi' en fin de man. Retournez dans la console précédente, et tapez Ctrl-X Ctrl-C pour quitter Emacs. Tapez "emacs --help", puis "info emacs". Info est un système de documentation hypertexte. Le lecteur info n'est autre que Emacs lui-même, que vous devriez savoir quitter. Les 'pages man' ou manuels sont des documents de référence. Assez indigestes comme livres de chevets, ils permettent de retrouver une information rapidement. La plupart des programmes acceptent un paramètre "--help" qui donne un résumé très succin des paramètres acceptés. Info agit souvent comme une sorte de super-man pour les programmes les plus volumineux. Chaque paquet installé sur le système contient sa propre documentation. Celle-ci est souvent localisée dans '/usr/doc/' ou dans '/usr/share/doc/'. (voyez comme la complétion automatique de bash avec la touche tab peut être utile). Allez voir le fichier README de la documentation du programme 'mc' à l'aide de la commande 'less'. Profitez-en pour essayer la différence entre 'less', 'more', 'cat', 'head' et 'tail'. 6. Il faut déjà savoir beaucoup de choses avant de pouvoir demander ce qu'on ne sait pas Lynx et Links sont deux navigateurs Web en mode texte. Pour ceux qui n'auraient pas encore compris l'intérêt du mode texte, une démonstration s'impose: allez lire la documentation du paquet 'HOWTO'. Jetez un oeil à la liste des howtos disponibles, et regardez-en un ou deux. Ces docs sont une mine d'or pour le linuxien désoeuvré: rien de plus instructif pour tuer le temps que d'aller lire un howto. Rien de plus efficace, surtout, pour apprendre comment marche le réseau sous Linux ou comment installer une carte 3D. Les howtos constituent une partie importante de l'arsenal de documentation disponible, et une source insondée de connaissances. L'apprentissage de GNU/Linux ne s'arrête jamais, pour peu qu'on aie commencé un jour. Impossible de tout couvrir, mais j'espère avoir donné quelques indices pour démarrer. Bien sûr, si le mode texte vous rebute, rien ne vous empêche de travailler dans une fenêtre de terminal en mode graphique; mais une chose est sûre, c'est qu'aucune interface utilisateur n'arrive encore à la cheville de la ligne de commande pour prendre en main son système. La suite des opérations passera probablement par une exploration des outils de la ligne de commande (à grand coup d'essais et de manuels), parmi lesquels cd, ls, rm, chmod, chown, pushd/popd, grep, ln, mkdir, find, gzip, zless/zcat, file, tar ou bzip2. Une étude des filtres s'impose également ('cat /etc/inittab | less' et 'ls > a' ), ainsi qu'un examen des processus (ctrl-z, bf/fg, ps, nice...) Dans la même lignée, il est indispensable d'examiner plus en profondeur le système de fichier, et particulièrement le contenu de /etc. Il faudra aussi apprendre un éditeur de texte (Pour Emacs, une doc est disponible sur http://gpl.insa-lyon.fr. Pour sauver un fichier modifié, faire Ctrl-X Ctrl-S) Certaines distributions de Linux sont particulièrement propices à l'apprentissage, nommément la Slackware. Un utilisateur expérimenté deviendra vite un fanatique de la Debian. D'autres unices libres existent également, parmi eux OpenBSD. Sur Internet, les sites les plus incontournables sont http://www.linuxfr.org pour se tenir au courant, http://freshmeat.net pour chercher un programme sous Linux, http://www.sourceforge.net si vous voulez développer, http://www.gnu.org pour sa section 'Philosophie' que tout linuxien se doit d'avoir lue, http://www.ldp.org comme 'Linux Documentation Project', et éventuellement http://www.slashdot.org pour perdre son temps. Enfin, l'adhérence à un LUG (groupe d'utilisateurs de Linux) est une source importante d'informations. Copyright 2001, Thomas Tempé, johnix@users.sourceforge.net. Permission est accordée à quiconque de distribuer ce document sur tout support à la condition que cette notice soit préservée. Permission est accordée à quiconque de modifier ce document à la condition qu'il en soit fait mention ci-dessus.