Mandrake logo
Linux-Mandrake:
Guide de l'utilisateur
et Manuel de référence

MandrakeSoft

 
 
Janvier 2000
http://www.linux-mandrake.com


(Retour à la table des matières)

Chapitre 1 : Notice légale


Ce manuel (à l'exception de l'annexe 18.0) est la propriété intellectuelle de MandrakeSoft. Ce manuel peut être librement reproduit, dupliqué et distribué en tant que tel ou en tant que composante d'un ensemble plus large, en version électronique et/ou imprimée, pourvu que les conditions suivantes soient réunies:

  1. Cette notice de copyright apparaisse clairement et distinctement sur toutes les reproductions, duplications et autres copies réalisées.
  2. Ce manuel soit proposé dans son intégralité et sans modification et/ou altération; et
  3. De manière spécifique, pour le format imprimé, qu'il ne soit pas reproduit et/ou distribué pour tout usage commercial.

Pour toute autre utilisation, il est nécessaire de demander et d'obtenir l'autorisation de MandrakeSoft S.A.. Les marques « Mandrake » et « Linux-Mandrake » ainsi que les logotypes associés sont déposés et sont la propriété exclusive de MandrakeSoft S.A.. Toutes les autres marques et logotypes associés sont la propriété exclusive de leurs auteurs respectifs.

Note: L'annexe 18.0 est protégée par une licence différente, en tant qu'oeuvre dérivée d'un texte relevant de la licence publique générale de GNU (GPL), licence dont vous retrouverez le texte sur le Web à http://www.gnu.org/copyleft/gpl.html.

Afin d'obtenir plus d'informations relatives à cette licence, référez-vous à la section Copyright.

Les personnes suivantes ont contribué à l'élaboration de ce manuel:


Table des matières

Chapitre 1 : Notice légale

Chapitre 2 : Conventions typographiques

Chapitre 3 : Introduction

Partie I :Guide de l'utilisateur

Chapitre 1 : Quelques concepts de base d'Unix

Chapitre 2 : Utilisation de KDE

Chapitre 3 : Configuration d'une connexion à l'Internet

Chapitre 4 : Ajout et suppression de comptes utilisateurs

Chapitre 5 : (Dés)installation de paquetages RPM

Chapitre 6 : Lothar

Chapitre 7 : Contrôle des processus

Chapitre 8 : Où obtenir de la documentation

Partie II :Manuel de référence

Chapitre 1 : Introduction à la ligne de commande

Chapitre 2 : L'édition de texte: Emacs et VI

Chapitre 3 : Organisation de l'arborescence des fichiers

Chapitre 4 : Le système de fichiers de Linux: ext2fs

Chapitre 5 : Le système de fichiers /proc

Chapitre 6 : Samba

Chapitre 7 : MSEC

Chapitre 8 : Auto Install

Chapitre 9 : Les fichiers de démarrage: init « System V »

Chapitre 10 : Systèmes de fichiers et points de montage

Chapitre 11 : Compilation et installation de nouveaux noyaux

Partie III :Annexes, glossaire et index

Chapitre 1 : Installation d'un logiciel libre

Chapitre 2 : Les utilitaires en ligne de commande

Chapitre 3 : Installation en mode texte

Chapitre 4 : Glossaire

Notes


(Retour à la table des matières)

Chapitre 2 : Conventions typographiques


Pour clarifier les explications, ce document utilise différentes polices de caractères pour représenter des objets aux interprétations différentes. On utilise parfois la même fonte pour divers types d'objets; c'est alors le contexte qui vous permettra de savoir de quoi on parle, ou il n'est pas crucial d'être capable à la lecture de distinguer précisément entre les divers types d'objets.

Portions de codes et assimilés

Remarquez que dans les exemples qui suivent la taille de la police est ajustée automatiquement pour occuper au mieux la largeur de la page. Ce sera le cas dans tout le manuel. La plupart des exemples de cette section utilisent des programmes invoqués depuis une ligne de command, c'est-à-dire un terminal dans lequel on tape des commandes. Rendez-vous au chapitre correspondant pour savoir comment obtenir un terminal.

Exemple de portion de code

# Les portions de code sont présentées ainsi.
# Une portion de code est une interaction
#   dans un terminal entre l'utilisateur et
#   l'ordinateur.
# Les lignes commençant par un signe « dièse »
#   comme celle-ci, (#) sont des commentaires.
# Les lignes commençant par un signe « dollar »
#   ($) sont des commandes à taper, soit en tant
#   que vous-même, soit en tant que root (c'est
#   la lecture du contexte qui vous le dira).
# Les lignes se terminant par une anti-barre
#   oblique (\) se continuent sur la ligne qui
#   suit. Certains programmes comprennent cette
#   convention.
# Les autres lignes sont les messages de
#   l'ordinateur.
$ file /dev/null
/dev/null: character special (1/3)
$ echo Bonjour \
  le monde
Bonjour le monde
$ echo Bonjour le monde
Bonjour le monde

Exemple d'extrait de fichier

# Les portions des fichiers de configuration
#   sont présentées ainsi. Souvent, les lignes
#   commençant par des signes « dièse » (#)
#   sont des commentaires.
# affecte une valeur à la variable TOTO
TOTO="Ma valeur"

Exemple de syntaxe d'une commande

commande <argument non littéral> [argument optionnel...]

Il est très important de comprendre comment interpréter les caractères spéciaux dans les syntaxes de commande.

Les signes « plus grand que » et « inférieur à » entourent un argument à ne pas recopier littéralement, mais à interpréter avant de ce faire. Par example, <nom_fichier> se réfère au nom du fichier proprement dit. Si ce nom est toto.txt, il vous faudra taper toto.txt, et non pas <toto.txt> ou <nom_fichier>.

Les crochets signalent des arguments facultatifs, que vous pouvez ou non inclure dans la commande.

Les points de suspension indiquent qu'on peut insérer un nombre arbitraire d'objets.

Cette syntaxe reprend la syntaxe utilisée dans la synopsis des pages de manuel du système

Exemple d'entrée utilisateur

C'est ainsi qu'est représenté ce que vous devez taper littéralement.

Exemple de sortie par l'ordinateur

Les messages affichés par l'ordinateur sont présentés ainsi.

Fontes particulières

Ce manuel utilise un certain nombre de polices différentes (dont les effets peuvent parfois s'additionner) pour vous aider à distinguer la sémantique ou la nature des mots utilisés. Elles apparaîtront de la manière suivante:

Divers

Note: les remarques à prendre en compte sont présentées ainsi.
Attention: les remarques importantes sont présentées ainsi.

Outils utilisés dans la conception de ce manuel

Ce manuel a été mis en forme avec LaTeX. Perl et GNU Make furent employés pour gérer l'ensemble de fichiers du projet. Les images ont été prises avec xwd et converties avec la commande convert (du paquetage ImageMagick). Les fichiers au format PostScript furent produits avec dvips. Tous ces logiciels sont libres et sont présents sur votre distribution de Linux-Mandrake.


(Retour à la table des matières)

Chapitre 3 : Introduction


Bienvenue, et merci d'utiliser Linux-Mandrake! Ce livre est divisé en deux parties; un Guide de l'utilisateur et un Manuel de référence. Le Guide de l'utilisateur vous aidera à utiliser votre système Linux-Mandrake au quotidien, et le Manuel de référence vous autorisera à aller plus loin. Voici un résumé de ces deux parties:

Guide de l'utilisateur

Le premier chapitre est résolument orienté vers ceux d'entre vous qui ont déjà utilisé Windows. Linux est avant tout un système Unix, et il se comporte comme un système Unix. Il existe des différences fondamentales, qui seront mises en lumière dans ce chapitre.

Le deuxième chapitre est entièrement dédié à l'utilisation de KDE, l'environnement graphique par défaut de la distribution Linux-Mandrake. Vous verrez que c'est un véritable environnement de travail, très intuitif et entièrement conigurable. Vous serez probablment agréablement surpris par ce qu'il peut faire.

Vous trouverez ensuite quatre chapitres dédiés à la configuration du système, couvrant les sujets suivants: configuration d'une connexion Internet par modem, gestion des utilisateurs, gestion des paquetages logiciels et configuration du matériel avec un tout nouvel outil: Lothar.

Ensuite vous apprendrez à contrôler des processus: quelques applications peuvent mal se comporter, et vous voudrez vous en débarrasser. Ce chapitre vous dira comment faire.

Finalement, une section est consacrée à la documentation: non seulement la documentation que vous avez déjà sur votre système, mais aussi quelques liens utiles sur Internet.

Manuel de référence

Le Manuel de référence entre plus profondément dans le système, et il commence par un chapitre entier consacré à la ligne de commande: il contient un ensemble quasi standard d'utilitaires de manipulation de fichiers, avec en plus quelques fonctionnalités utiles apportées par le shell.

Puis un chapitre sera consacré à l'édition de texte: comme la plupart des fichiers de configuration sous Unix sont des fichiers texte, vous pouvez les éditer à la main, et vous apprendrez à utiliser deux des plus célèbres éditeurs dans le monde Unix: le tout-puissant Emacs et l'indémodable VI.

Puis vous verrez comment est organisée l'arborescence des fichiers: les systèmes Unix ont tendance à devenir gros, mais chaque fichier a sa place dans un répertoire donné. Quand vous aurez lu ce chapitre, vous saurez où chercher des fichiers en fonction de leur rôle sur le système, et où ajouter des fichiers si vous en avez besoin.

Ensuite, un chapitre sera dédié au système de fichiers de Linux: ext2fs. Dans ce chapitre, vous apprendrez tous les types de fichiers que Linux connaît, ainsi qu'un grand nombre de concepts. Il y aura aussi un chapitre dédié à un autre système de fichiers spécial de Linux, /proc.

Trois chapitres suivent, qui introduisent des outils utils: Samba, pour partager des fichiers et des imprimante avec des machines Windows; MSEC, pour gérer la sécurité de votre système Linux-Mandrake; et Auto Install, qui vous permet de sauvegarder les paramètres de votre installation pour un usage futur.

Vous apprendrez ensuite la procédure de démarrage de Linux-Mandrake, et comment l'utilisez efficacement.

Le chapitre suivant traite d'un problème très commun: les systèmes de fichiers et les points de montages. Dans ce chapitre, vous apprendrez ce que signifient chacun de ces termes, et nous prendrons également un cas pratique.

Finalement, vous apprendrez comment compiler et installer un nouveau noyau.

Vous voudrez aussi vous référer à l'annexe, dans lequel vous trouverez trois chapitres utiles. Le premier est dédié à la compilation et l'installation de logiciels libres. Le deuxième introduit encore un ensemble d'utilitaires en ligne de commande. Et finalement, vous trouverez un guide complet d'installation en mode texte si DrakX n'a pas fonctionné sur votre système.

Partie I : Guide de l'utilisateur



(Retour à la table des matières)

Chapitre 1 : Quelques concepts de base d'Unix


Le nom « Unix » dira quelque chose à certains d'entre vous. Peut-être même utilisez-vous un système Unix dans le cadre de votre travail, auquel cas la lecture de ce chapitre ne vous apprendra pas grand-chose.

Pour ceux d'entre vous qui ne l'ont jamais utilisé, une lecture de ce chapitre est absolument nécessaire. La connaissance des concepts que nous allons présenter ici répond à un nombre surprenant de questions que se posent les débutants dans le monde Linux. De même, il est fort probable que ces seuls concepts vous donnent des pistes de recherche sur les causes d'un problème que vous pourriez rencontrer.

Utilisateurs et groupes

Cette notion est sans doute la plus importante, car elle a une influence directe sur tous les autres concepts que nous allons introduire dans ce chapitre.

Linux est un véritable système multi-utilisateurs, et pour pouvoir se connecter à un système Linux, il faut avoir un compte sur ce système. Quand vous avez créé des utilisateurs lors de l'installation, vous avez en fait ajouté des comptes utilisateurs. Vous vous souvenez sans doute que la création d'un compte a requis que vous entriez, entre autres, les éléments suivants:

Les deux paramètres importants ici sont le nom de connexion (très souvent appelé nom de login) et le mot de passe. Ce sont en effet eux que vous devrez utiliser pour vous connecter au système.

Une autre action qui a été effectuée à l'ajout d'un utilisateur est la création d'un groupe. Par défaut, la procédure d'installation aura créé un groupe pour chaque utilisateur. Comme nous le verrons plus loin, les groupes sont utiles dans le cadre de partage de fichiers entre différentes personnes. Un groupe peut ainsi regrouper autant d'utilisateurs que vous le voulez, et dans les grands systèmes il n'est pas rare de voir une telle séparation. Dans une université, par exemple, il peut très bien exister un groupe par type d'études (maths, physique, etc.), un autre pour les professeurs et ainsi de suite. L'inverse est vrai également: un utilisateur peut faire partie d'un ou plusieurs groupes. Ainsi un professeur de mathématiques fera-t-il à la fois partie du groupe des professeurs et de celui de ses chers étudiants en mathématiques.

Cela ne vous dit toujours pas comment vous connecter. On y arrive.

Si vous avez choisi d'avoir l'interface graphique au démarrage, votre fenêtre de connexion sera identique à la figure 8.1.

Connexion en mode graphique
Figure 8.1 Connexion en mode graphique

Pour vous connecter, vous devez entrer le nom de connexion dans la zone de texte intitulée Utilisateur:, puis votre mot de passe dans la zone de texte du même nom. Notez que vous devrez taper ce mot de passe à l'aveugle: il n'y aura aucun écho dans la zone de texte.

Si vous êtes en mode console, vous aurez l'image montrée figure 4.2.

Connexion en mode console
Figure 4.2 Connexion en mode console

Vous devez alors taper votre nom de connexion à l'invite Login:, suivi d'une pression sur la touche entrée, à la suite de quoi le programme de connexion (appelé, comme par hasard, login) vous présentera une invite Password:, et vous vous exécuterez en entrant le mot de passe de ce compte --- toujours à l'aveugle!

Notez que vous pouvez vous connecter plusieurs fois sous le même nom d'utilisateur, par exemple sur une console et sous X. Chaque session que vous ouvrirez sera indépendante, et il est même possible d'avoir plusieurs sessions X. Par défaut, Linux-Mandrake dispose de six consoles virtuelles en plus de celle réservée à l'interface graphique, et vous pouvez basculer sur l'une d'entre elles en pressant la séquence de touches Ctrl-Alt-F<n>, où <n> représente le numéro de la console sur laquelle vous voulez vous rendre. En général, l'interface graphique est sur la console numéro 7.

Outre la création de comptes utilisateurs, vous aurez aussi remarqué lors de l'installation que DrakX (ou le programme que vous avez utilisé) vous a demandé d'entrer un mot de passe pour un utilisateur bien particulier: root. Cet utilisateur est particulier pour une raison bien simple: c'est l'administrateur du système. Donc c'est vous. Pour votre sécurité, observez toujours un principe: ne vous connectez jamais, au grand jamais en tant que root, sauf si vous devez effectuer des tâches d'administration système! Il est très important également que le compte root soit toujours protégé par un mot de passe.

Si vous vous connectez régulièrement en tant que root, il est fort probable qu'un jour ou l'autre, même sans le faire exprès, vous rendiez votre système inutilisable. Une seule mauvaise manipulation peut suffire. En particulier, si vous n'avez pas mis de mot de passe à ce compte, le premier venu aura tout pouvoir sur votre système. Cela veut dire qu'il pourra effacer tous les autres systèmes d'exploitation que vous pouvez avoir sur votre machine, en plus de Linux, et réduire le rôle de votre ordinateur à celui d'un presse-papier. Ce n'est pas une blague!

Enfin, il est bon de mentionner qu'en interne, le système ne vous identifie pas par votre nom de connexion, mais par un numéro unique associé à votre nom de connexion: un UID (User ID, soit, en français, identifiant utilisateur). De même, chaque groupe est identifié par son « identifiant de groupe » ou GID (Group ID).

Notions de base sur les fichiers

Les fichiers sont un autre domaine où Linux diffère totalement de Windows. Nous ne verrons ici que les différences immédiatement visibles. Si vous le souhaitez, vous pouvez lire le chapitre 13.0 dans le Manuel de référence, qui va beaucoup plus en profondeur sur ce sujet.

La première différence, et sans doute la plus importante, est justement liée à la présence d'utilisateurs. Nous aurions pu dire en transition que chaque utilisateur possède son propre répertoire (appelé répertoire personnel, ou home en anglais), mais cela n'explicite qu'une partie de ce qui se passe vraiment, à savoir que tout fichier, sur un système Unix, est la propriété exclusive d'un utilisateur et d'un groupe. Ainsi, chaque utilisateur a bien son répertoire personnel, mais il est de plus le propriétaire de ses fichiers au sens propre du terme.

De plus, des droits sont associés à chaque fichier, que seul l'utilisateur propriétaire peut modifier. Ces droits distinguent trois catégories d'utilisateurs: le propriétaire même du fichier, tous les utilisateurs membres du groupe auquel ce fichier est associé (on dit aussi le groupe propriétaire) mais qui n'est pas l'utilisateur propriétaire, et enfin les autres, c'est-à-dire tout utilisateur qui n'est ni le propriétaire du fichier ni membre du groupe propriétaire. Ces droits sont au nombre de trois:

Toutes les combinaisons de ces droits sont possibles: vous pouvez par exemple autoriser la lecture du fichier à vous seul et l'interdire à tous les autres, et interdire toute autre utilisation du fichier. Vous pouvez même faire l'inverse, même si ce n'est pas très logique à première vue :) En tant que propriétaire du fichier, vous pouvez même changer le groupe propriétaire (si et seulement si vous êtes aussi membre du nouveau groupe), voire vous en déposséder (changer l'utilisateur propriétaire). Bien sûr, si vous vous en dépossédez, vous perdrez tous vos droits dessus...

Prenons l'exemple d'un fichier et d'un répertoire. L'affichage ci-dessous correspond à la frappe de la commande ls -l depuis une ligne de commande:

$ ls -l
total 1
-rw-r-----   1 francis  users           0 jui  8 14:11 un_fichier
drwxr-xr--   2 gael     users        1024 jui  8 14:11 un_répertoire/
$

Les différents champs de sortie de la commande ls -l sont les suivants (de gauche à droite):

Observons maintenant en détail les droits associés à chacun de ces fichiers: il faut tout d'abord enlever le premier caractère, qui désigne le type, et ainsi pour le fichier un_fichier nous nous retrouvons avec les droits: rw-r-----. L'interprétation de ces droits est la suivante:

Pour le répertoire un_répertoire, les droits sont rwxr-xr--, et donc:

Attention! Il existe une exception à la règle, et de taille: root, encore lui, peut changer les attributs (droits, utilisateur et groupe propriétaires) de tous les fichiers, même s'il n'en est pas le propriétaire. Ce qui veut dire qu'il peut aussi s'en donner la propriété. Il peut lire des fichiers sur lesquels il n'a pas le droit de lecture, traverser des répertoires qui ne lui sont normalement pas accessibles, et ainsi de suite. Et si un droit lui manque vraiment, il lui suffit de se l'offrir...

Pour finir, il est bon de mentionner une autre différence, qui n'est pas négligeable: elle se situe au niveau des noms des fichiers. En effet, ils sont beaucoup moins limités que sous Windows:

Les processus

On désigne par le terme de processus une instance de programme en cours d'exécution et son environnement. De même que pour les fichiers, nous ne mentionnerons ici que les différences les plus importantes, et vous vous reporterez au Manuel de référence pour une discussion plus complète sur ce sujet. Les points discutés dans cette section ont surtout pour objectif de mettre en lumière les paramètres de l'environnement qui ont une influence directe sur l'utilisation de votre distribution Linux-Mandrake au quotidien.

La différence la plus importante est, encore une fois, liée au concept d'utilisateurs : en effet, chaque processus s'exécute avec les droits de l'utilisateur qui l'a lancé. Ainsi, si nous reprenons l'exemple du fichier un_fichier mentionné ci-dessus, un processus lancé par l'utilisateur gael pourra ouvrir ce fichier en lecture seule, mais pas en lecture/écriture, puisque les droits associés au fichier ne le lui permettent pas. Encore une fois, l'exception qui confirme la règle est root...

Vous aurez deviné, grâce au paragraphe ci-dessus, que l'un des paramètres de l'environnement d'un processus est l'UID et le GID de l'utilisateur qui l'a lancé. Cela autorise le système à savoir si ce que lui demande le processus est « légal » (autorisé) ou non.

Une conséquence est que Linux est en grande partie immunisé aux virus: pour pouvoir opérer, les virus ont besoin d'infecter des fichiers exécutables, et en tant qu'utilisateur, c'est impossible de modifier les fichiers du système. Ajoutez à ceci que les virus sont très rares dans le monde Unix en général: jusque là, il n'existe que trois virus connus pour Linux, et ils sont complètement inoffensifs quand ils sont lancés par un utilisateur normal. Seul un utilisateur peut endommager le système en activant ces virus, et encore une fois, c'est... root!

Paradoxalement, il existe bien des logiciels antivirus sous Linux, mais pour les fichiers DOS/Windows... En effet, on voit de plus en plus des serveurs de fichiers Linux servir des machines Windows, avec l'aide du paquetage logiciel Samba (voir le chapitre 28.0 dans le Manuel de référence).

En interne, le système identifie les processus de façon unique par, encore une fois, un numéro. Ce numéro est appelé le PID, pour Process ID, soit en français « identifiant de processus ». De plus, tous les processus peuvent aussi recevoir des signaux, ce qui vous autorise à les contrôler (enfin, uniquement les processus que vous avez lancés, pas ceux d'un autre utilisateur, l'exception à la règle étant, devinez qui...): vous pouvez stopper un processus, le tuer s'il pose trop de problèmes et ainsi de suite. Dans un prochain chapitre, vous apprendrez comment traquer ce fameux PID et, muni de la connaissance de ce PID, à lui envoyer des signaux, le poussant à se terminer, à suspendre son exécution ou autre.

Une petite introduction à la ligne de commande

La ligne de commande est le moyen le plus direct de parler à la machine. Si vous commencez à l'utiliser, vous remarquerez rapidement qu'elle a une capacité d'expression bien plus puissante que les invites que vous avez peut-être utilisées sous d'autres systèmes d'exploitation, plus, même, que toute interface graphique existante. En effet vous avez un accès direct, non seulement à toutes les applications X, mais aussi à des milliers d'utilitaires en mode console (à opposer au mode graphique) qui n'ont pas leur équivalent graphique, ou dont les nombreuses options et combinaisons potentielles ne pourront jamais être représentées par des boutons et des menus.

Mais, il faut bien l'admettre, elle requiert un peu d'aide pour débuter. C'est le but de ce chapitre. La première chose à faire, si vous utilisez KDE, est de lancer un émulateur de terminal. Vous avez une icône qui l'identifie clairement dans le panneau (figure 4.3).

L'icône de l'émulateur de terminal dans le panneau de
KDE
Figure 4.3 L'icône de l'émulateur de terminal dans le panneau de KDE

Le shell est le nom du programme avec lequel pour interagissez. Vous vous trouvez en face de l'invite (« prompt » en anglais):

[jean@localhost] ~ $

Ceci suppose que votre nom d'utilisateur est jean et que votre nom de machine est localhost (ce qui est le cas si votre machine ne fait pas partie d'un réseau existant). Tout ce qui apparaît après l'invite est ce que vous aurez à taper. Notez que quand vous êtes root, le $ de l'invite devient un #. (Tout ce qui précède n'est juste que dans la configuration par défaut, chacun de ces éléments pouvant être personnalisé). La commande pour « devenir » root quand vous avez lancé un shell en tant qu'utilisateur est su:

# Entrez le mot de passe root; il n'apparaîtra pas à l'écran
[jean@localhost] ~ $ su
Password:
# exit vous fera revenir à votre compte utilisateur normal
[root@localhost] jean # exit
[jean@localhost] ~ $

Partout ailleurs dans cette documentation, l'invite sera représentée symboliquement par un $, que vous soyiez un utilisateur normal ou root. Il vous sera indiqué quand vous devez être root, alors n'oubliez pas su :) Un # en début de ligne de code représentera un commentaire.

Quand vous lancez le shell la première fois, vous vous trouvez normalement dans votre répertoire personnel. Pour savoir dans quel répertoire vous vous trouvez à un moment donné, la commande est pwd (pour Print Working Directory, « afficher le répertoire de travail »):

$ pwd
/home/jean

Il y a certaines commandes de base que nous allons voir, qui vous seront indispensables.

cd: Change Directory « changer de répertoire »

La commande cd est exactement la même que celle de DOS, avec quelques fonctionnalités en plus. Elle fait juste ce que dicte son acronyme, elle change le répertoire de travail. Vous pouvez utiliser . et .., qui sont respectivement le répertoire courant et son répertoire parent. Taper seulement cd vous ramènera à votre répertoire personnel. Taper cd - vous renverra dans le dernier répertoire visité. Et enfin, vous pouvez spécifier le répertoire d'un utilisateur toto en tapant  toto (' ' seul ou suivi de '/' signifie votre propre répertoire personnel). Notez qu'en tant qu'utilisateur normal, vous ne pouvez normalement pas accéder au répertoire d'un autre utilisateur (à moins qu'il ne l'ait explicitement autorisé ou que tel soit le réglage de la configuration par défaut sur le système), sauf si vous êtes... root, donc soyons root et entraînons-nous:

$ pwd
/root
$ cd /usr/doc/HOWTO
$ pwd
/usr/doc/HOWTO
$ cd ../FAQ
$ pwd
/usr/doc/FAQ
$ cd ../../lib
$ pwd
/usr/lib
$ cd ~jean
$ pwd
/home/jean
$ cd
$ pwd
/root

Maintenant, redevenez un utilisateur normal :)

Quelques variables d'environnement et la commande echo

En fait, tous les processus ont leurs variables d'environnement, et quelquefois ils agissent différemment en fonction des valeurs de certaines d'entre elles. Toutefois, le shell vous autorise à les consulter directement, avec la commande echo. Quelques variables intéressantes sont:

Pour que le shell affiche la valeur d'une variable, vous devez mettre un $ devant son nom. Ici, echo va vous être utile:

$ echo Bonjour
Bonjour
$ echo $HOME
/home/jean
$ echo $USERNAME
jean
$ echo Bonjour $USERNAME
Bonjour jean
$ cd /usr
$ pwd
/usr
$ cd $HOME
$ pwd
/home/jean

Comme vous pouvez le voir, le shell substitue la valeur de la variable avant d'exécuter la commande, autrement notre cd $HOME n'aurait pas fonctionné ici. En fait, le shell a en premier lieu remplacé $HOME par sa valeur, /home/jean, donc la ligne est devenue cd /home/jean, qui est ce que nous voulions. C'est la même chose pour echo $USERNAME et ainsi de suite.

cat: afficher le contenu d'un ou plusieurs fichiers à l'écran

Pas grand'chose à dire, si ce n'est que cette commande fait simplement cela: afficher le contenu d'un ou plusieurs fichiers à l'écran!

$ cat /etc/fstab
/dev/hda5 / ext2 defaults 1 1
/dev/hda6 /home ext2 defaults 1 2
/dev/hda7 swap swap defaults 0 0
/dev/hda8 /usr ext2 defaults 1 2
/dev/fd0 /mnt/floppy auto sync,user,noauto,nosuid,nodev 0 0
none /proc proc defaults 0 0
none /dev/pts devpts mode=0620 0 0
/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro 0 0
$ cd /etc
$ cat conf.modules shells
alias parport_lowlevel parport_pc
pre-install plip modprobe parport_pc ; echo 7 > /proc/parport/0/irq
#pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
#alias car-major-14 sound
alias sound esssolo1
keep
/bin/zsh
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
/bin/ash
/bin/bsh
/usr/bin/zsh

less: un pager

Son nom est un jeu de mots sur le premier pager existant sous Unix, qui se nommait more[1]. Un pager est un programme dont le but est d'autoriser la visualisation de longs fichiers page par page (plus précisément, écran par écran). Nous parlons de less plutôt que de more car son utilisation est beaucoup plus intuitive. Utilisez less pour voir des gros fichiers, qui ne rentrent pas sur un écran. Par exemple:

less /usr/doc/HOWTO/PCMCIA-HOWTO

Pour naviguer dans le fichier, utilisez simplement les touches fléchées haut et bas. Utilisez 'q' pour quitter. En fait, less peut faire bien plus: tapez simplement 'h' pour de l'aide (en anglais), et lisez. Mais de toutes façons, l'objectif de cette section est de vous rendre capable de lire de longs fichiers, et cet objectif est maintenant atteint :)

ls: faire une liste de fichiers (LiSt, « liste »)

Cette commande est équivalente au dir de DOS, mais elle peut faire beaucoup plus. En fait, c'est largement dû au fait que les fichiers peuvent aussi faire nettement plus :) La syntaxe de la commande ls est comme suit:

ls [options] [fichier|répertoire] [fichier|répertoire...]

Si aucun fichier ou répertoire n'est mentionné sur la ligne de commande, ls fera la liste des fichiers du répertoire courant. Ses options sont très nombreuses, et nous n'en citerons que quelques-unes:

Quelques exemples:

Raccourcis clavier utiles

Beaucoup de séquences de touches sont disponibles et peuvent vous faire gagner du temps, et cette section fera une liste des plus nécessaires. Cette section suppose que vous utilisez le shell par défaut de Linux-Mandrake, Bash, mais ces séquences de touches devraient aussi fonctionner avec d'autres shells. Dans cette section, C-<x> signifie Ctrl+<x> (appuyez sur la touche Ctrl et maintenez-la enfoncée, appuyez sur <x>, relâchez les deux touches).

D'abord les touches fléchées: Bash maintient un historique des commandes que vous tapez, dans lequel vous pouvez vous balader avec les flèches haut et bas. Vous pouvez remonter jusqu'à un nombre de lignes définies dans la variable d'environnement 'HISTSIZE'. De plus, l'historique est persistant d'une session à l'autre, donc vous ne perdrez pas les commandes que vous avez tapées dans une session précédente.

Les flèches gauche et droite déplacent le curseur sur la gauche et sur la droite, donc vous pouvez éditer vos lignes de cette façon. Mais il y a plus en matière d'édition: C-a et C-e, par exemple, vous améneront respectivement au début et à la fin de la ligne courante. Les touches Backspace et Suppr fonctionneront comme on s'y attend. Un équivalent de Backspace est C-h et un équivalent de Del est C-d. C-k effacera toute la ligne depuis la position du curseur jusqu'à la fin de la ligne, et C-w effacera le mot avant le curseur.

Taper C-d sur une ligne vide vous fera fermer la session courante, ce qui est nettement plus court que d'avoir à taper exit. C-c interrompra la commande en cours de fonctionnement, sauf si vous éditez une ligne, auquel cas cela interrompra l'édition en cours et vous raménera à l'invite. C-l nettoie l'écran.

Finalement, il y a C-s et C-q: ces séquences de touches servent respectivement à suspendre et restaurer le flux de caractères sur un terminal. Elles sont très peu utilisées, mais il peut arriver que vous tapiez C-s par inadvertance. Donc, si vous appuyez sur des touches mais que vous ne voyez rien apparaître à l'écran, essayez C-q d'abord et faites attention: tous les caractères que vous avez tapés entre le C-s non désiré et le C-q apparaîtront tout d'un coup sur l'écran.


(Retour à la table des matières)

Chapitre 2 : Utilisation de KDE


Avant d'introduire KDE, il est utile de comprendre le fondement de l'interface graphique sous Linux et sous Unix de façon générale, et sur laquelle KDE est basé: X Window System.

X Window System, abrégé par X, est un projet initié par le MIT (Massachussets Institute of Technology), dont le but était de fournir une interface graphique aux systèmes Unix. Aujourd'hui, tous les systèmes Unix et Linux (avec XFree86) l'utilisent. X Window System est basé sur le modèle client/serveur. Les serveurs X pilotent le matériel: carte graphique, écran, clavier, souris, tablettes graphiques, etc. Les clients X sont toutes les applications graphiques. Ce schéma présente de nombreux avantages:

X Window System en lui-même ne prévoit pas la gestion des fenêtres: ce rôle est laissé à un client X spécial, appelé un gestionnaire de fenêtres. Sans un gestionnaire de fenêtres, celles-ci n'auraient pas de décorations (barre de titre, boutons de manipulation, etc.), vous ne pourriez ni redimensionner les fenêtres, ni les mettre au premier plan ou à l'arrière-plan, ni même les cacher (les icônifier), sauf sur demande de l'application elle-même, ce qui n'est pas très pratique. Le nombre de gestionnaire de fenêtres existants est, comme toujours dans le logiciel libre, impressionnant. Quelques-uns sont livrés avec Linux-Mandrake: citons Fvwm, AfterStep, WindowMaker, et le simplissime, très vieux et vénérable Twm.

Reste encore le problème le plus important pour l'utilisateur final: la cohérence. En effet, les applications ne font que « parler » au serveur X, mais elles n'ont aucune conscience les unes des autres. Un gestionnaire de fenêtres n'a conscience des applications que dans le sens où elles sont des fenêtres: il ne peut pas savoir si l'application est un traitement de texte, un terminal ou autre. X en lui-même ne prévoit pas non plus le glisser-déposer (Drag'n'Drop en anglais), ni même les icônes. C'est là qu'entre en scène KDE.

is Unix ready for the desktop?

(Traduction: « Unix est-il prêt pour le bureau (graphique)? »)

KDE apporte la cohérence qui fait défaut dans le monde de X Window System, sans pour autant lui retirer sa souplesse. KDE est un projet libre (entendez: sous GPL, même si ce n'est pas le cas de sa boîte à outils, ou toolkit) initié par Matthias Ettrich, et son but est de donner à Linux un environnement de bureau (Desktop Environment) totalement fonctionnel. Ce but est si bien atteint aujourd'hui que KDE est l'environnement de bureau le plus utilisé dans le monde Linux, et il a même percé dans le monde des Unix commerciaux, où certains administrateurs n'hésitent pas à l'utiliser en lieu et place des gestionnaires de fenêtres fournis avec leurs systèmes!

KDE vient avec son propre gestionnaire de fenêtres. Il apporte également tous les éléments qu'attendent aujourd'hui les utilisateurs habitués aux interfaces graphiques: une barre des tâches, un gestionnaire de fichiers extrêmement performant, des icônes, des menus contextuels, des bulles d'aide, et un protocole de glisser-déposer.

KDE apporte également quelques idées neuves. Le bureau orienté web en est une, les possibilités apportées par les icônes en sont une autre, ainsi que la polyvalence de son gestionnaire de fichiers, KFM. Et pour ne rien gâcher, il est très intuitif et très configurable. C'est un vrai environnement de travail, et il peut vous faire gagner beaucoup de temps.

Une brève présentation

Vous pouvez voir dans la figure 5.1 un bureau KDE classique avec les principaux composants:

Un bureau typique sous KDE
Figure 5.1 Un bureau typique sous KDE

Chacun de ces éléments est configurable. Avant de continuer, signalons une particularité: les bureaux virtuels. Cette fonctionnalité est très utilisée dans le monde Unix et KDE ne déroge pas à la règle. Ainsi, dans le panneau, vous pouvez voir dans la figure 5.2 ce que l'on appelle communément un pager.

Le pager de KDE
Figure 5.2 Le pager de KDE

Ce pager vous permet d'accéder à tous vos bureaux virtuels d'un simple clic. Chaque bureau virtuel héberge des fenêtres différentes et certains paramètres sont uniques à chaque bureau --- par exemple, la couleur ou l'image de fond.

Le panneau

Le panneau est un des éléments centraux de KDE. C'est le principal lanceur d'applications et il héberge le menu principal de KDE: le menu K, que vous reconnaîtrez facilement; il est présenté dans la figure 5.3.

Point d'entrée du menu K
Figure 5.3 Point d'entrée du menu K

Ce menu est séparé en trois parties distinctes. De haut en bas on trouve:

Vous pouvez également aller dans le menu Options: vous pourrez choisir d'afficher ou de cacher certains des composants de KFM. C'est également dans ce menu que vous pourrez enregistrer les options de KFM (si toutefois vous n'avez pas choisi de cacher la barre de menus :)).

Enfin, vous disposez d'une boîte de dialogue où vous pouvez configurer d'autres aspects du gestionnaire de fenêtres, que vous obtiendrez en sélectionnant Options/Configurer le gestionnaire de fichiers .... Les intitulés des options parlent d'elles-mêmes. Dans le menu Autres, l'option Permettre la sauvegarde des paramètres pour chaque URL s'applique aux options de la fenêtre: sa taille, l'affichage des divers composants, etc.

KFM comme navigateur web

KFM peut également naviguer sur le Web. Quelques liens présents sur le bureau de base de Linux-Mandrake pointent en fait vers des sites web: essayez par exemple un clic droit sur l'icône intitulée news et sélectionnez l'onglet URL, vous verrez alors l'onglet de la figure 5.10, ce qui est bien une URL désignant un site web. Maintenant, cliquez sur ce lien avec le bouton gauche, vous obtenez une fenêtre de KFM qui chargera le site web, comme on le montre dans la figure 5.11!

L'onglet URL
Figure 5.10 L'onglet URL

KFM et le document d'accueil du site de
Linux-Mandrake
Figure 5.11 KFM et le document d'accueil du site de Linux-Mandrake

Vous pouvez voir que le rendu du HTML n'a pas grand chose à envier à d'autres navigateurs web bien connus... mais surtout, KFM mange nettement moins de mémoire que les susdits navigateurs :)

En revanche, il n'y a pas (pour l'instant) de support pour les plugins, mais le support MIME est là; si vous cliquez, par exemple, sur un lien désignant un fichier MPEG, KFM téléchargera le fichier en local puis lancera aktion pour le visualiser. Vous pouvez aussi sauvegarder le lien sur disque en le sélectionnant et en le faisant glisser vers une autre fenêtre de KFM, voire sur le bureau!

KFM comme client FTP

KFM propose une fonction très intéressante: la possibilité de se comporter comme un client FTP. En effet, une fenêtre donnant sur un site FTP apparaîtra de la même façon qu'une fenêtre désignant un répertoire local, à ceci près, bien sûr, que l'URL commencera par ftp://. Vous pouvez aussi entrer directement l'adresse d'un site: si celle-ci commence par ftp, KFM apposera alors automatiquement le préfixe...

Par exemple, si on entre ftp.ciril.fr dans le champ URL, KFM apposera automatiquement le préfixe ftp:// au début et ouvrira effectivement le site FTP correspondant, comme le montre la figure 5.12.

KFM oeuvrant sur un répertoire par FTP
Figure 5.12 KFM oeuvrant sur un répertoire par FTP

Vous pouvez voir que KFM associe les icônes de la même façon que pour des répertoires locaux, et est à même d'effectuer les mêmes actions pour les types de fichier, à ceci près qu'il téléchargera d'abord localement une copie du fichier. Les icônes de répertoires « entourés d'une ceinture » signifient que vous n'y avez pas accès, comme avec les répertoires locaux.

D'une telle fenêtre, vous pouvez faire du glisser/déposer et ainsi télécharger un fichier du site FTP vers votre répertoire personnel en manipulant l'icône correspondant au fichier!

Cependant, bien sûr, l'URL telle que nous l'avons formée implique une connexion FTP anonyme, et donc vous n'avez pas accès en écriture au répertoire distant. Si vous disposez d'un accès en écriture à un répertoire distant par FTP (par exemple, vous avez un site web chez votre fournisseur d'accès et que ce dernier donne accès par FTP au répertoire hébergeant vos fichiers HTML), vous devrez spécifier votre nom d'utilisateur sur ce serveur en plus de l'adresse du site FTP, sous la forme:

ftp://login@site.distant.com/

Si votre nom de login est jean et que le nom du site est mon.provider.fr, vous entrerez comme URL la séquence suivante: ftp://jean@mon.provider.fr. Une fenêtre apparaîtra ensuite vous demandant votre mot de passe. Saisissez-le. Vous pourrez alors non seulement faire du glisser/déposer depuis votre répertoire local vers le répertoire distant, mais vous pourrez en plus éditer vos fichiers sur le répertoire distant localement. Après modification, KFM vous demandera confirmation avant de mettre à jour le fichier sur le site distant.

Configuration du navigateur pour les protocoles HTTP et FTP

Les options pour configurer ces deux fonctionnalités de KFM sont accessibles par le menu Options/Configurer le navigateur.... Vous obtiendrez ce qui est présenté dans la figure 5.13.

L'écran Proxy configure ce qu'indique son nom: si vous êtes connectés à l'Internet et que votre fournisseur d'accès possède un proxy, c'est ici que vous pouvez le configurer, pour le FTP et pour le HTTP. L'écran HTTP sert à dire au navigateur quelles langues il doit pouvoir accepter depuis les sites web, ainsi que les jeux de caractères (cyrillique, chinois, etc.). Les options par défaut sont en général suffisantes.

L'onglet Proxy
Figure 5.13 L'onglet Proxy

L'écran Agent utilisateur est un peu plus « tordu »: il s'agit de donner une fausse réponse à la requête de demande d'un serveur web quant au navigateur que vous utilisez. En effet, il arrive que certains sites envoient des contenus différents selon le navigateur que vous utilisez! Cet onglet vous permet de contourner ce problème. Si une page apparaît différemment selon que vous utilisiez KFM ou Netscape, vous pourrez toujours entrer le nom du serveur dans la case Sur le serveur:, et mettre la chaîne identifiant Netscape (Mozilla 4.61) dans la case Connexion en tant que:, puis cliquez sur Ajouter...

Quant à l'écran Cookies, il configure ce que son nom indique: le comportement de KFM en face des cookies, avec possibilité de spécifier une politique différente pour tel ou tel site. Comme vous pouvez le voir, KFM est un navigateur web complet :)

Manipulation des applications et des types MIME

Pour pouvoir associer des applications à des fichiers, KDE utilise deux types de données: les applications d'une part, et les types MIME d'autre part. Chaque application est associée à un ou plusieurs types MIME. Quand vous faites un clic gauche sur une icône matérialisant un fichier d'un type reconnu, KFM lance l'application par défaut associée à ce type de fichiers. Si vous faites un clic droit dessus, vous verrez, sous les articles de menus, la liste des applications associées à ce type MIME. C'est celle qui est en haut de la liste qui sera lancée par défaut.

Édition et création d'un type MIME

MIME est un acronyme pour Multipurpose Internet Mail Extensions (« extensions de courrier pour l'Internet à usages multiples »). Au début, les types MIME servaient à identifier le type d'un fichier en attachement dans un courrier électronique. Un type MIME a la forme type-principal/sous-type. Par exemple, le type MIME image/jpeg identifie une image JPEG. Notez qu'un type MIME est indépendant de l'extension!

Le gestionnaire de fichiers KFM reprend les types MIME à son compte, pour associer une description aux fichiers. Il fait tout d'abord usage du type du fichier et de ses droits d'accès (c'est ainsi qu'il reconnaît les répertoires et autres fichiers spéciaux, voir le guide de référence), et si aucun de ces deux éléments ne lui donne d'informations, il se fie aux extensions des noms de fichiers.

Vous pouvez éditer vos types MIME: ouvrez une fenêtre de KFM, puis choisissez dans les menus l'entrée Édition/Types MIME..., pour obtenir la liste de la figure 5.14.

Liste des entrées MIME de KFM
Figure 5.14 Liste des entrées MIME de KFM

Prenons par exemple le type MIME correspondant aux images JPEG, à savoir image/jpeg; pour cela, rendez-vous dans le répertoire image, faites un clic droit sur jpeg et vous obtiendrez l'écran présenté dans la figure 5.15.

Le type MIME JPEG
Figure 5.15 Le type MIME JPEG

Sélectionnez l'onglet Liaison. C'est ici que tout se joue. Le champ texte intitulé Filtres contient les extensions des fichiers à associer au type dont il est question. Le champ Type MIME contient le nom du type, et le commentaire décrit sommairement le type du fichier.

Nous allons maintenant créer un type MIME pour les fichiers LyX: KLyX est un traitement de texte fourni avec Linux-Mandrake, mais il n'est pas enregistré dans la liste des applications KDE (nous allons le faire après), et dans un premier temps, il faut pouvoir identifier les fichiers. Ceux-ci ont une extension en .lyx. Le type s'appellera text/x-lyx. Il faut donc aller dans le répertoire text, et à partir de là, faire un clic droit et sélectionner Nouveau/Type MIME pour éditer le type MIME comme exposé dans la figure 5.16.

Édition d'un type MIME
Figure 5.16 Édition d'un type MIME

Après lui avoir donné un nom, il faut lui dire quelle extension doit normalement porter le fichier, ce qui se fait dans l'onglet Liaison, présenté dans la figure 5.17.

Édition de type MIME --- onglet
Liaison
Figure 5.17 Édition de type MIME --- onglet Liaison

Maintenant, il s'agit de déclarer l'application.

Édition et ajout d'une application

Pour voir la liste des applications définies dans KDE, il faut partir d'une fenêtre de KFM et sélectionner le menu Édition/Applications. Vous serez alors amené(e) dans la liste des applications déjà disponibles dans votre répertoire personnel, qui ressemblera à la figure 5.18.

Liste des applications déjà disponibles
Figure 5.18 Liste des applications déjà disponibles

Pour y ajouter KLyX, cliquez avec le bouton droit sur une zone inoccupée de la fenêtre de KFM et sélectionnez Nouveau/Application, comme dans la figure 5.19.

Ajout d'un nouveau type MIME
Figure 5.19 Ajout d'un nouveau type MIME

Maintenant que nous avons créé le nom de l'application, il s'agit de se rendre dans l'onglet Exécution et de remplir les champs nécessaires. Notez le %f dans le champ Exécuter: il est nécessaire pour désigner l'emplacement du ou des nom(s) de fichier(s) dans la ligne de commande; cela est expliqué dans la figure 5.20.

Quoi exécuter pour ce nouveau type MIME
Figure 5.20 Quoi exécuter pour ce nouveau type MIME

Puis vient l'association de l'application aux types MIME qui lui sont associés. En l'occurrence, il y en a un seul, que nous avons créé plus haut, à savoir text/x-lyx, comme la figure 5.21 nous le rappelle.

L'application et les types MIME qui
lui sont associés
Figure 5.21 L'application et les types MIME qui lui sont associés

Notez que le commentaire et le nom de l'application sont libres.

Pour confirmer la création, cliquez sur OK. Après avoir créé l'application, vous pouvez maintenant rééditer le type MIME correspondant et lui associer KLyX comme application par défaut.

Le bureau et les icônes

Le bureau de KDE se comporte à peu de choses près comme celui de Windows, avec toutefois des fonctionnalités supplémentaires:

Configuration du bureau

Vous disposez également de menus contextuels sur le bureau. Cliquez avec le bouton droit sur une zone inoccupée du bureau, sélectionner Propriétés du bureau.

Comme vous pouvez le voir, cet écran (présenté dans la figure 5.22) sert à configurer le fond d'écran. C'est là que commence à apparaître l'utilité des bureaux virtuels: vous pouvez, si vous le désirez, mettre un fond d'écran différent sur chaque bureau (après avoir désactivé le bouton radio Arrière-plan commun) en sélectionnant tour à tour chacun des bureaux. Les autres options sont très semblables à celles auxquelles Windows vous a peut-être habitué: possibilité de mettre un arrière-plan unifié, dégradé, différents arrangements de l'image de fond, et autres. Si vous voulez vous amuser un peu, sélectionnez un papier peint aléatoire et constituez-vous une liste de vos fonds d'écran préférés!

Configuration du bureau de KDE
Figure 5.22 Configuration du bureau de KDE

L'onglet Mise en veille configure en fait l'écran de veille que vous souhaitez pour votre environnement. Là encore, le menu de la figure 5.23 devrait paraître familier à la plupart d'entre vous.

Configuration de l'économiseur d'écran
Figure 5.23 Configuration de l'économiseur d'écran

Vous pouvez sélectionner un écran de veille dans la liste sur la gauche, le configurer s'il le supporte, et le tester. Vous avez aussi le choix de ne pas mettre d'écran de veille du tout. Faites bien attention au fait que par défaut, vous taperez votre mot de passe à l'aveugle: si vous voulez afficher des astérisques à chaque caractère que vous tapez, il va vous falloir activer l'option Afficher le mot de passe avec des *.

Il vous est laissé à titre d'exercice de découvrir à quoi servent les onglets Couleurs et Police, vous ne devriez pas avoir grand mal à trouver :)

L'onglet Style, présenté dans la figure 5.24, est quant à lui un peu plus intéressant.

Configuration du « style » de KDE
Figure 5.24 Configuration du « style » de KDE

Voici le descriptif des trois boutons radio du haut:

Enfin, le cadre du dessous vous permet de sélectionner la taille des icônes apparaissant dans le tableau de bord (Tableau de bord), sur le bureau et dans KFM (Gestionnaire de périphériques et icônes du bureau) et dans les autres contextes (Autres).

Les icônes et le glisser-déposer

La création d'icônes se fait de la même façon que l'ajout d'une application dans les applications enregistrées auprès de KDE. Pour créer une icône sur le bureau, cliquez avec le bouton droit sur une zone inoccupée du bureau et sélectionnez Nouveau/Application, il vous suffit alors de remplir les champs exactement de la même façon.

Vous pouvez aussi vous rendre dans la liste des applications KDE et faire un glisser-déposer depuis la fenêtre de KFM vers le bureau: un menu vous demandera alors si vous voulez déplacer le fichier, le copier ou le lier.

Les icônes elles-mêmes sont capables de glisser-déposer, et c'est particulièrement utile pour les applications. Par exemple, si vous regardez les propriétés de l'icône de l'imprimante, dans l'onglet Exécution, vous verrez la simple commande lpr %f: cela dit tout simplement que si vous amenez une icône représentant un fichier sur celle de l'imprimante, KDE exécutera la commande lpr avec le nom de fichier en argument (%f), ce qui est bien ce que l'on veut (lpr est le programme servant à imprimer tout type de fichier). Vous pouvez ainsi modifier les icônes existantes pour leur apporter cette fonctionnalité. Si vous amenez plusieurs icônes, le nom de tous les fichiers matérialisés par ces icônes sera passé en argument.

Le centre de contrôle de KDE

Le centre de contrôle de KDE (présenté figure 5.25) regroupe tous les aspects de la configuration de KDE. Vous pouvez y accéder directement depuis le menu K.

Le centre de contrôle de KDE
Figure 5.25 Le centre de contrôle de KDE

Beaucoup des aspects de la configuration ont déjà été traités, aussi allons-nous simplement passer en revue les aspects les plus intéressants.

Bureau/Gestionnaire de thèmes

Comme son nom l'indique, cet onglet vous permet de choisir un thème pour KDE. Un thème peut contenir son propre jeu d'icônes, ses propres boutons de fenêtres, ses propres sons, ses images de fond d'écran et autres. Prenez le temps d'essayer les différents thèmes à votre disposition: ils sont très nombreux...

Desktop/DPMS

Si vous vous êtes demandé(e) où se trouvaient les fonctions d'économie d'énergie de l'écran, ne cherchez plus: elles sont là. DPMS signifie Display Power Management System, et c'est ce qui est utilisé pour l'extinction de l'écran au bout d'un certain temps d'inactivité. Si vous activez le DPMS, n'oubliez pas de régler les différents paramètres à votre convenance.

Informations

Le long de cet onglet, vous trouverez une panoplie d'informations sur le système. Notez que tout ce que vous voyez ici --- et même plus --- est disponible depuis un terminal.

Fenêtres

Dans cet onglet, vous pourrez régler à votre convenance les différents paramètres des fenêtres. Cela va des couleurs des barres de titre au type de focus utilisé, en passant par les actions de la souris sur les fenêtres, la configuration du défilement du titre, le placement des boutons et autres. Vous avez une grande liberté de choix, profitez-en!


(Retour à la table des matières)

Chapitre 3 : Configuration d'une connexion à l'Internet


Nous verrons comment configurer et utiliser une connexion à l'Internet en utilisant deux programmes: Kppp d'une part et LinuxConf d'autre part. Choisissez l'un des deux, mais pas les deux :)

Avec Kppp

Pour lancer Kppp, vous pouvez, outre taper la commande kppp dans un shell, aller dans le menu K si vous utilisez KDE, puis rubrique Internet, et sélectionnez numéroteur. L'écran de présentation de Kppp est présenté figure 6.1.

Kppp
Figure 6.1 Kppp

Sélectionnez Configuration, vous obtenez alors l'écran de la figure 6.2.

Fenêtre principale de Kppp
Figure 6.2 Fenêtre principale de Kppp

Peu de choses à faire ici. Vous pourrez, si vous le voulez, dans la rubrique Périphérique, changer la vitesse du port série à 115200 et régler les options dans la rubrique PPP selon votre goût. Pour créer un compte, choisissez Nouveau..., et vous voici devant la fenêtre de la figure 6.3.

Création d'un compte avec Kppp
Figure 6.3 Création d'un compte avec Kppp

Section par section:

Et c'est tout! Cliquez ensuite sur le bouton OK pour valider, une deuxième fois sur OK dans le panneau de configuration et vous vous trouvez ensuite devant l'écran principal.

De là, il vous suffit de rentrer votre nom d'utilisateur et votre mot de passe fourni par votre fournisseur d'accès (pas ceux de votre compte utilisateur!), puis de cliquer sur Connecter...

Avec LinuxConf

LinuxConf
Figure 6.4 LinuxConf

Configurer une connexion Internet avec LinuxConf est un peu plus compliqué qu'avec Kppp, mais LinuxConf a une portée beaucoup plus large que Kppp: vous pouvez, grâce à lui, configurer presque tous les aspects de votre système, et en l'occurrence celui qui nous intéresse ici est le réseau. Attention, il faut être root pour le lancer. Astuce: vous n'êtes pas obligé de vous logguer en root pour être root. À partir d'un terminal d'utilisateur normal, tapez su. Il vous sera demandé le mot de passe root.

D'autre part, LinuxConf a l'avantage de fonctionner aussi en mode texte, mais nous utiliserons ici le mode graphique. Vous pouvez lancer linuxconf directement depuis un terminal et sélectionner la rubrique Réseau ou bien simplement taper netconf. Dans les deux cas, vous obtiendrez le même écran, représenté figure 6.4.

Voici, dans l'ordre, les différentes sections que vous aurez à éditer et ce qu'il vous faut faire:

Section par section:

L'onglet Hardware dans LinuxConf
Figure 6.5 L'onglet Hardware dans LinuxConf

Et c'est terminé. Pour contrôler les interfaces configurées par ce biais, il vous faudra vous servir du programme usernetctl, mais là encore il est disponible à travers le menu K: Personnel/Linux Mandrake/Networking/Usernet.


(Retour à la table des matières)

Chapitre 4 : Ajout et suppression de comptes utilisateurs


Ajout et suppression de comptes utilisateurs
Figure 7.1 Ajout et suppression de comptes utilisateurs

Là encore, LinuxConf sera utilisé. Lancez donc LinuxConf en tant que root à partir d'un terminal, puis choisissez Comptes utilisateurs (ou lancez directement userconf) (figure 7.1).

Si vous cliquez sur l'onglet Comptes utilisateurs, vous obtenez la liste des utilisateurs déjà existants sur le système, il vous suffit alors de cliquer sur Ajouter pour ajouter un compte (figure 7.2).

Informations de base
Figure 7.2 Informations de base

Il vous faut au minimum remplir le nom de connexion (donc le nom du compte qui sera utilisé pour se connecter) et le nom complet (mettez-y cependant ce qu'il vous plaira). Vous pouvez éventuellement lui spécifier un numéro d'identifiant d'utilisateur. Si vous ne le faites pas, il lui en sera attribué un unique. De même, vous pouvez ou non lui spécifier un groupe d'appartenance: par défaut, LinuxConf créera un nouveau groupe pour cet utilisateur avec ce seul utilisateur comme membre.

Dès que vous êtes satisfait(e) des informations, cliquez sur Accepter. LinuxConf demandera alors un mot de passe pour ce nouvel utilisateur. Comme toujours, soyez très prudent(e) dans le choix de votre mot de passe! Linux-Mandrake vous avertira si votre mot de passe est trop faible du point de vue sécurité. Par exemple, si vous entrez toto comme mot de passe, LinuxConf vous avertira comme dans la figure 7.3 que ce mot de passe est bien trop court.

Mauvais mot de passe!
Figure 7.3 Mauvais mot de passe!

Il vous sera dans tous les cas demandé de le taper une nouvelle fois pour confirmation. Voilà votre nouvel utilisateur créé.

Pour supprimer un compte il suffit de le sélectionner dans la liste des comptes et de cliquer sur Effacer. LinuxConf vous demandera alors que faire des fichiers de l'utilisateur.


(Retour à la table des matières)

Chapitre 5 : Installation et désinstallation de paquetages RPM


Le programme à la base de tout est rpm (pour RedHat Package Manager, « gestionnaire de paquetages de Red Hat »), qui est un programme en mode texte.

Il existe aussi une interface graphique: Kpackage (application KDE) et un nouveau programme: RPMDrake.

À la ligne de commande: rpm

C'est la façon la plus simple de faire, et la plus puissante: la commande rpm ne permet pas que l'installation ou la désinstallation de paquetages, elle permet aussi de voir les dépendances d'un paquetage, de voir ce qu'un paquetage fournit aux autres, et de construire des paquetages. Mais nous nous limiterons aux tâches les plus courantes: installer, désinstaller, et obtenir des informations utiles.

Notez que vous devez installer des paquetages en tant que root. Vous devez donc vous connecter en tant que root, ou bien vous pouvez taper la commande su en tant qu'utilisateur: le programme vous demandera alors le mot de passe de root. Si vous l'entrez sans erreur (et toujours à l'aveugle), vous serez alors root:

fg!rtfm $ su
Password:
root!rtfm /home/fg #

(Nous utiliserons désormais le caractère habituel d'invite $, qu'il vous faille opérer en tant que root ou non.)

Installation ou mise à jour d'un RPM

En supposant que vous ayez dans le répertoire courant un RPM nommé toto-1.0-1.i386.rpm, vous pouvez l'installer en entrant la commande suivante:

$ rpm -ivh toto-1.0-1.i386.rpm

Si vous voulez mettre un paquetage à jour (par exemple toto 1.1 est sorti), il vous faudra employer -Uvh à la place de -ivh.

Si vous voulez seulement tester si le paquetage peut s'installer, il vous faudra rajouter l'option --test à la ligne ci-dessus, ce qui donne:

$ rpm -ivh --test toto-1.0-1.i386.rpm

Désinstallation d'un RPM

Si vous voulez désinstaller toto, il vous faut employer l'option -e de rpm:

$ rpm -e toto

Il n'est pas besoin de spécifier le nom du paquetage entier: le paquetage ayant été installé auparavant, il est dans la base de données de RPM et y est reconnu en tant que toto. Une simple référence à ce paquetage suffit donc.

Obtenir des informations à propos de RPM

L'option de questionnement de paquetages est -q (pour Query, « requête »). Vous pouvez demander beaucoup de choses à rpm:

Vous pouvez même demander si un fichier sur votre système appartient à un paquetage, et si oui, lequel. Par exemple, si vous voulez savoir quel paquetage contient le fichier intitulé /etc/passwd, il vous suffit de taper:

$ rpm -qf /etc/passwd

rpm vous répondra que ce fichier a été installé par le paquetage setup.

Enfin, vous pouvez obtenir des informations sur les paquetages non encore installés: il s'agit de l'option -p <nom_du_paquetage> (p pour « paquetage »). Par exemple, si vous voulez savoir quels fichiers le paquetage toto-1.0-1.i386.rpm installera, il vous suffit de taper:

$ rpm -qlp toto-1.0-1.i386.rpm

Avec Kpackage

Kpackage est le programme de gestion de paquetages de KDE. C'est ce programme que KFM associe aux paquetages RPM: un clic dans KFM sur un paquetage RPM lancera Kpackage sur ce RPM, et vous y verrez l'information concernant ce paquetage. Kpackage reconnaît également le glisser-déposer (Drag'n'Drop), vous pouvez donc amener un RPM depuis KFM vers une fenêtre de Kpackage existante.

Installer un paquetage

Comme déjà indiqué, cliquez sur un paquetage dans KFM, amenez un RPM depuis KFM vers une fenêtre existante de Kpackage ou bien invoquez kpackage <nom_du_rpm>.i386.rpm depuis la ligne de commande, vous obtenez alors l'information sur le paquetage (figure 7.4).

Informations affichées par Kpackage
Figure 7.4 Informations affichées par Kpackage

Vous pouvez voir les différentes options dans les boutons radio sur la gauche:

À partir de là, cliquez sur Installer si vous voulez l'installer ou bien sur Annuler pour annuler l'opération.

Désinstaller un paquetage existant

L'invocation de Kpackage seul vous amène à la fenêtre principale. Vous verrez là, organisée sous forme d'arbre, la liste de tous les paquetages installés sur le système (figure 7.5).

L'arborescence des paquetages installés
Figure 7.5 L'arborescence des paquetages installés

Vous n'êtes pas obligé de rechercher un paquetage à la main dans l'arborescence: dans le menu Fichier, vous pouvez effectuer une recherche de paquetage par leur nom (ou une sous-chaîne), Kpackage développera alors l'arborescence de lui-même et mettra en surbrillance le paquetage sélectionné. Quand vous aurez trouvé le paquetage voulu, il vous suffira alors de cliquer sur Désinstallation dans la partie droite de la fenêtre.

Vous pouvez même effectuer une recherche par fichier. Cependant, il vous faudra indiquer le chemin complet du fichier. Si vous voulez par exemple désinstaller xv, vous pourrez faire une recherche de paquetage sur le fichier exécutable (/usr/X11R6/bin/xv), Kpackage vous dira alors que le paquetage correspondant est xv. Puis faites une recherche par paquetage pour xv, et Kpackage le trouvera pour vous dans l'arborescence.

Informations sur les paquetages

Kpackage donne de telles informations automatiquement: quand vous cliquez sur un RPM dans l'arborescence, les informations apparaîtront dans le côté droit de la fenêtre: des informations d'ordre général dans l'onglet « Propriétés », et la liste des fichiers installés par ce paquetage dans l'onglet Liste des fichiers. Il vous donnera les mêmes informations sur un paquetage que vous voulez installer.


(Retour à la table des matières)

Chapitre 6 : Lothar


Introduction

À quand remonte la dernière fois que vous avez eu à installer une nouvelle carte son sur votre système Linux, sans succès? Pourtant, vous connaissez son modèle, et pouvez même deviner le pilote qui la reconnaît. Vous avez peut-être même une idée de l'IRQ, DMA et ports I/O qu'elle utilise.

C'est là que Lothar entre en action.

Lothar est un outil graphique qui rassemble de nombreux outils déjà présents dans une distribution Linux pour automatiser et simplifier le processus d'installation de nouveaux matériels. Certains périphérique seront détectés, d'autres peuvent être choisis à partir d'une liste déroulante. Les nombreux paramètres rébarbatifs tels que I/O, IRQ et autres X86 peuvent être ajustés depuis cette interface.

Comment utiliser Lothar

La fenêtre (figure 8.1) est séparée en deux parties, une contenant la liste des périphériques détectés, une autre contenant les informations sur le périphérique sélectionné. Tous les périphériques sont classés par catégories.

Fenêtre principale de Lothar
Figure 8.1 Fenêtre principale de Lothar

Vous pouvez sélectionner une catégorie et afficher tous les périphériques qui la composent en utilisant + ou -. Cela ouvrira ou fermera la portion d'arbre correspondant à la catégorie. Si vous sélectionnez alors un périphérique, des informations utiles à son propos seront affichées. Dans certains cas, vous verrez alors s'afficher le bouton de configuration, qui démarrera l'outil de configuration approprié.

Les outils de configuration appelés depuis Lothar via Configurer sont:

Pour quitter Lothar, allez dans le menu Fichier et choisissez Quitter.

Lothar SoundConfig

Lothar SoundConfig (figure 8.2) est utilisé pour configurer votre carte son. Dans la plupart des cas, votre carte sera détectée. Sinon, essayez d'en choisir une dans la liste.

Lothar SoundConfig
Figure 8.2 Lothar SoundConfig

Certaines cartes ont besoin de paramètres comme I/O, IRQ, DMA, DMA 16/2, MPU401 I/O. Vous pouvez alors les ajuster aisément en cliquant sur les flèches de chaque paramètre. Ces valeurs peuvent être trouvées dans le manuel de votre carte son. Si la valeur est positionnée à -1, cela signifie que vous n'avez pas besoin de saisir de valeur. Après avoir sélectionné une carte et éventuellement ajusté ses paramètres, vous pouvez la tester en pressant le bouton Test. Si votre carte est correctement configurée, vous entendrez un extrait sonore. Le mode test ne modifie pas vos fichiers de configuration. Si le test est concluant, vous pouvez alors sauvegarder votre configuration en pressant Ok. Un échantillon sera joué pour confirmation. Si vous n'êtes pas sûr de vos paramètres, utilisez Test plutôt que Ok, c'est plus sûr.

Lothar EtherConfig

Lothar EtherConfig (figure 8.3) propose la même interface que SoundConfig pour les cartes réseaux, mais avec moins de paramètres et sans mode de test. Dans la plupart des cas, votre carte sera détectée. Sinon, essayez d'en choisir une dans la liste.

Lothar EtherConfig
Figure 8.3 Lothar EtherConfig

Certaines cartes ont besoin de paramètres tels que I/O, IRQ, DMA. Vous pouvez alors les ajuster aisément en cliquant sur les flèches de chaque paramètre. Ces valeurs peuvent être trouvées dans le manuel de votre carte réseau. Si la valeur est positionnée à -1, cela signifie que vous n'avez pas besoin de saisir de valeur. Vous pouvez sauvegarder votre configuration en pressant Ok.

Problèmes

Dans certains cas particuliers, Lothar peut bloquer votre système. Il faut donc l'utiliser avec précaution. Il se peut aussi que vos périphériques soient mal configurés ou pas détectés du tout. Pour plus d'informations, des nouvelles du projet Lothar, des liens, consulter la page Internet de Lothar sur http://www.linux-mandrake.com/lothar/index.html


(Retour à la table des matières)

Chapitre 7 : Contrôle des processus


Un peu plus sur les processus

Nous avons mentionné dans une section précédente qu'il était possible d'avoir le contrôle des processus, et c'est ce que ce chapitre va vous apprendre à faire. Il est utile, pour bien comprendre les actions que nous allons effectuer ici, d'en savoir un peu plus.

L'arborescence des processus

De même que pour les fichiers, tous les processus en cours d'exécution sur un système Linux sont organisés sous forme d'arborescence, et chaque processus possède un numéro (son PID, Process ID, « identifiant du processus »), ainsi que le numéro de son processus parent (PPID, Parent Process ID, « identifiant du processus parent »).

Il existe par conséquent un processus au sommet de l'arborescence, l'équivalent de la racine pour les systèmes de fichiers: init (voir le Manuel de référence), qui possède toujours le numéro 1. La section suivante détaillera deux commandes, ps et pstree, qui permettent d'obtenir des informations sur les processus en cours d'exécution.

Les signaux

Chaque processus sous Unix est susceptible de réagir à des signaux qui lui sont envoyés. Il existe 31 signaux différents. Pour chacun de ces signaux, le processus peut redéfinir le comportement par défaut, sauf deux: le signal numéro 9 (KILL), et le signal numéro 19 (STOP).

Le signal 9 tue un processus de façon irrémédiable, sans lui laisser le temps de se terminer correctement. C'est ce signal qu'il faut envoyer à des processus dont vous ne pouvez plus rien faire. Une liste complète des signaux est disponible en utilisant la commande kill -l.

Obtenir des informations sur les processus: ps et pstree

Ces deux commandes affichent une liste des processus existants sur le système selon les critères que vous voulez.

ps

Lancer cette commande sans argument montrera uniquement les processus dont vous êtes l'initiateur et qui sont rattachés au terminal que vous utilisez:

$ ps
  PID TTY          TIME CMD
 5162 ttya1    00:00:00 zsh
 7452 ttya1    00:00:00 ps

Les options sont nombreuses, citons les plus courantes:

Il existe beaucoup d'autres options, vous vous reporterez à la page de manuel pour plus d'informations (man ps).

La sortie de cette commande est divisée en champs: celui qui vous intéressera le plus est le champ PID, qui contient l'identificateur du processus. Le champ CMD contient quant à lui le nom de la commande exécutée.

Une façon très courante d'invoquer ps est la suivante:

$ ps ax | less

Vous obtenez ainsi une liste de tous les processus en cours d'exécution, et pouvez ainsi repérer un ou plusieurs processus qui vous pose(nt) problème pour pouvoir ensuite le(s) tuer.

pstree

La commande pstree affiche les processus sous forme d'arborescence. Un avantage est que vous pouvez tout de suite voir qui est le processus parent d'un autre: quand vous voulez tuer toute une série de processus, s'ils sont tous pères et fils, il vous suffit de tuer l'ancêtre commun. Vous aurez avantage à utiliser l'option -p, qui affiche le PID de chaque processus, ainsi que l'option -u qui affiche le nom de l'utilisateur ayant lancé le processus. L'arborescence étant généralement longue, il est plus facile d'invoquer pstree de cette façon:

$ pstree -up | less

Vous avez ainsi une vue de toute l'arborescence des processus.

Envoyer des signaux aux processus: kill, killall et top

Astuce sous X: xkill

Si vous utilisez KDE, vous avez un raccourci pour tuer un processus X bloqué. En effet, vous disposez d'une icône bien reconnaissable sur le bureau, reproduite dans la figure 9.1.

Icône de xkill
Figure 9.1 Icône de xkill

Cette icône lance la commande xkill que vous pouvez lancer depuis un terminal. Quand vous cliquez sur cette icône (ou lancez le programme de votre terminal), le curseur de la souris se transformera. Vous devrez alors sélectionner avec un clic gauche la fenêtre correspondant au processus que vous voulez tuer.

kill, killall

Ces deux commandes permettent d'envoyer des signaux à des processus. La commande kill attend un numéro de processus en argument, tandis que killall attend un nom de commande.

Les deux commandes peuvent optionnellement recevoir un numéro de signal en argument. Par défaut, elles envoient toutes deux le signal 15 (TERM) à ou aux processus désigné(s). Par exemple, si vous voulez tuer le processus de PID 785, vous entrerez la commande:

$ kill 785

Si vous voulez lui envoyer le signal 9, vous entrerez alors:

$ kill -9 785

Supposons que vous vouliez tuer un processus pour lequel vous connaissez le nom de la commande. Au lieu de repérer le numéro du processus à l'aide de ps, vous pouvez tuer le processus directement:

$ killall -9 netscape

Quoi qu'il arrive, vous ne tuerez que vos propres processus (sauf si vous êtes root), donc ne vous inquiétez pas des processus « du voisin » portant le même nom, ils ne seront pas affectés.

top

top est un programme tout en un: il remplit à la fois les fonctions de ps et kill. C'est un programme en mode console, vous le lancerez donc depuis un terminal, comme exposé dans la figure 9.2.

Exemple d'exécution de top
Figure 9.2 Exemple d'exécution de top

Le programme se contrôle entièrement au clavier. Une aide est disponible en tapant sur 'h', mais elle est en anglais. Voici donc quelques unes des commandes que vous pouvez utiliser:


(Retour à la table des matières)

Chapitre 8 : Où obtenir de la documentation


Outre ce manuel et le manuel de référence, vous disposez de nombreuses sources de documentation, soit dans votre distribution même, soit sur l'Internet. Il en sera fait ici un inventaire aussi complet que possible.

La documentation fournie dans Linux-Mandrake

Les pages de manuel

C'est sans doute la source d'information principale au quotidien. Pratiquement toutes les commandes ont leur page de manuel, mais il y a aussi des pages de manuel sur le format de certains fichiers de configuration, sur les fonctions de bibliothèques (en anglais, "library") pour les programmeurs, et d'autres encore. Une grande partie des pages de manuel existent en français, mais malheureusement pas toutes.

Les pages de manuel sont organisées en différentes sections, et il arrive que vous voyiez souvent dans des documents des références à « open(2) », « fstab(5) » ou autres, ce qui signifie respectivement la page de manuel d'open dans la section 2 et la page de manuel de fstab dans la section 5.

La commande pour afficher une page de manuel est man, et sa syntaxe est la suivante:

man [options] [section] <page de manuel>

Il y a même une page de manuel pour man lui-même: man man. Les pages de manuel sont préformatées puis affichées avec un pager (« visionneuse »), qui est justement less par défaut. Vous savez donc déjà comment parcourir une page de manuel et la quitter :)

En haut de chaque page de manuel, vous pouvez voir le nom de la page de manuel et la section du manuel à laquelle cette page appartient; tout en bas de la page de manuel (en général dans la section VOIR AUSSI, ou SEE ALSO pour les pages de manuel non encore francisées) vous verrez des références à d'autres pages de manuel en relation avec celle que vous consultez.

Vous pouvez commencer par consulter les pages de manuel des différentes commandes qui ont été abordées dans ce manuel: man ls, man chmod, etc.

Si vous ne tombez pas sur la bonne page de manuel (par exemple vous voulez utiliser la fonction mknod dans un de vos programmes mais tombez sur la page de manuel de la commande mknod) il vous faut expliciter la section: man 2 mknod en l'occurrence, ou si vous ne vous souvenez plus de la section exacte, man -a mknod qui parcourra toutes les sections à la recherche de pages de manuel ayant pour nom mknod.

Les pages info

Les pages info sont une autre source de documentation, plus complète que les pages de manuel. La commande pour consulter les pages info est info.

Les pages info sont organisées sous forme d'une arborescence dont le sommet s'appelle dir. À partir du sommet, vous pouvez accéder à toutes les pages info existantes.

Vous pouvez invoquer info de deux façons: soit sans aucun argument, auquel cas vous vous retrouverez au sommet de l'arborescence, soit suivi d'un nom de commande ou de paquetage, auquel cas la page correspondante, si elle existe, sera ouverte. Par exemple:

$ info emacs

Malheureusement toutes les pages d'info sont pour l'instant en anglais.

Dans les pages info, du texte tel que celui-ci:

* Buffers::

indique un lien. Si vous amenez le curseur sur ce lien (à l'aide des touches fléchées) et appuyez sur la touche Entrée, vous serez alors amené à la page info correspondante.

Les raccourcis clavier suivants existent:

Les commandes sont nombreuses, vous pouvez taper '?' pour en avoir une liste.

Les HOWTO

Les HOWTO (« comment faire ») sont des documents édités par le LDP (Linux Documentation Project, « projet de documentation pour Linux »), dédiés à la configuration de nombreux aspects de votre système. Ils existent dans de nombreuses langues et il est probable que le HOWTO dont vous avez besoin soit déjà traduit et présent sur votre disque dur, si tant est que vous ayez installé les paquetages correspondants (il s'agit des paquetages howto et howto-french pour les éditions anglaises et françaises respectivement). Ils se trouvent dans /usr/doc/HOWTO (ou /usr/doc/HOWTO/translations/fr). Leur forme initiale est celle de fichiers textes, mais ils sont aussi disponibles sous forme HTML pour consultation à partir d'un navigateur web, et PostScript pour l'impression.

La liste en est très longue: pour vous en convaincre, tapez ls /usr/doc/HOWTO/*-HOWTO | less. Si vous tombez sur un problème que vous n'arrivez pas à résoudre, trouver le HOWTO correspondant s'il existe; le lire est le meilleur point de départ, et il est très probable que vous y trouviez la solution d'une part, mais aussi que vous appreniez beaucoup de choses en le lisant. Entre autres sujets sont couverts le réseau (NET-3-HOWTO), la configuration de cartes son (Sound-HOWTO), le gravage de CD (CD-Writing-HOWTO), la configuration de NIS et NFS, et bien d'autres choses encore.

Il faut cependant faire attention aux dates de dernière modification des HOWTO: certains n'ont pas été mis à jour depuis longtemps, et par conséquent il est probable que leur contenu ne soit plus d'actualité pour certains détails. Vérifiez donc bien la date d'édition, qui se trouve toujours au début du document, et méfiez-vous particulièrement des HOWTO liés à la configuration du matériel si ceux-ci sont anciens: c'est un domaine dans lequel Linux évolue très vite. Souvenez-vous aussi que le qualificatif « ancien » dans le mode du logiciel libre est encore plus significatif que dans l'informatique en général: un logiciel libre vieux de quinze jours est parfois considéré comme ancien.

Le répertoire /usr/doc

Quelques paquetages viennent également avec leur propre documentation, qu'ils auront placée dans un sous-répertoire de /usr/doc et dont le nom sera celui du paquetage. Le plus souvent, malheureusement, cette documentation est en anglais et n'est pas traduite.

L'Internet

Les sources d'informations sur Internet sont très nombreuses. Les sites web dédiés à Linux et à son utilisation ou sa configuration se comptent par centaines, voire par milliers. Mais il n'y a pas que les sites web.

Les sites web francophones dédiés à Linux

Parmi la multitude des sites web existants, voici quelques-uns des sites les plus complets:

Et bien sûr, n'oubliez pas votre moteur de recherche favori... C'est même l'outil le plus efficace: bien que les trois sites ci-dessus contiennent une grande quantité de documentations, il se peut que vous ne trouviez pas ce que vous cherchez. Quelques mots-clés bien choisis dans un moteur de recherche vous donnent souvent des liens vers des pages traitant de votre problème particulier.

Malheureusement pour ceux d'entre vous qui n'êtes pas anglophones, la documentation en anglais est beaucoup plus étoffée. En particulier, le site du LDP est en anglais, et son adresse est: http://metalab.unc.edu/LDP/.

Les forums de discussion

Pour obtenir de l'aide sur les news, vous pouvez (devez?) d'abord rechercher si votre problème n'a pas déjà été abordé (voire résolu) sur le site web Dejanews, à l'adresse suivante: http://www.deja.com/home_ps.shtml. Si vous ne trouvez rien, il existe un forum de discussions entièrement consacré à Linux-Mandrake (alt.os.linux.mandrake), et vous avez également à votre disposition deux groupes dans la « hiérarchie » des groupes de discussion fr.comp.os.linux.*:

Avant de poster dans l'un quelconque de ces groupes, assurez-vous d'avoir lu (ou digéré) le maximum de documentation que vous ayez pu trouver sur votre problème! Les personnes qui postent dans ces groupes et dont les habitués voient qu'elles n'ont lu aucune documentation le regrettent en général amèrement... car les premières réponses qu'on leur donne se résument à « lis la doc et reviens après ». Et surtout, surtout, ne posez aucune question concernant la configuration sur le groupe de discussion fr.comp.os.linux.debats! Ce n'est pas le sujet du groupe...

Partie II : Manuel de référence



(Retour à la table des matières)

Chapitre 1 : Introduction à la ligne de commande


Dans le chapitre 4.0, nous avons vu comment lancer un shell et ses principes de base, mais nous ne l'avons pas mis au travail, et c'est ce que nous allons faire dans ce chapitre.

Le principal avantage du shell est le nombre d'utilitaires existants: il en existe des milliers, et chacun est dédié à une tâche particulère. Nous n'en verrons qu'un petit nombre ici. L'une des grandes forces d'Unix est la possibilité de combiner ces utilitaires, comme nous allons le voir un peu plus tard.

Utilitaires de manipulation de fichiers

La manipulation de fichiers signifie ici copier, déplacer et effacer des fichiers. Après ceci, nous verrons des manières de changer leurs attributs (propriétaire, permissions associées).

mkdir, touch: création de répertoires et fichiers vides (MaKe DIRectory, « créer un répertoire », « toucher »)

mkdir est utilisé pour créer des répertoires. Sa syntaxe est simple:

mkdir [options] <répertoire> [répertoire ...]

Une seule option est digne d'intérêt: l'option -p. Si cette option est passée en argument, mkdir créera les répertoires parents s'il n'existaient pas avant. Si elle ne l'est pas et que les répertoires parents n'existent pas, mkdir renverra une erreur. Exemples:

Initialement, la commande touch n'a pas pour but de créer des fichiers mais de mettre à jour les temps d'accès et de modification[3]. Toutefois, l'un de ses effets de bord est de créer les fichiers mentionnés s'ils n'existaient pas déjà. La syntaxe est:

touch [options] fichier [fichier...]

Donc, lancer la commande:

touch fichier1 images/fichier2

créera un fichier appelé fichier1 dans le répertoire courant et un fichier appelé fichier2 dans le répertoire images.

rm: supprimer des fichiers ou des répertoires (ReMove, « ôter »)

Cette commande joue le rôle des del et deltree du DOS, et plus encore. Sa syntaxe est:

rm [options] <fichier|répertoire> [fichier|répertoire...]

Parmi les options, on trouve:

Quelques exemples:

Attention: un fichier effacé avec rm est effacé de façon irrévocable. Il n'y a aucun moyen de récupérer les fichiers! N'hésitez donc pas à utiliser l'option -i...

mv: déplacer ou changer le nom des fichiers (MoVe, « déplacer »)

La syntaxe de la commande mv est la suivante:

mv [options] <fichier|rép.> [fichier|rép...] <destination>

Quelques options:

Quelques exemples:

cp: copier des fichiers et des répertoires (CoPy, « copier »)

cp est un remplacement pour les commandes copy, xcopy de DOS et plus. Sa syntaxe est la suivante:

cp [options] <fichier|rép.> [fichier|rép...] <destination>

Il existe une myriade d'options. Voici les plus utilisées:

Quelques exemples:

Manipulation des attributs de fichiers

La série de commandes présentée ici est utilisée pour changer le propriétaire ou groupe propriétaire d'un fichier ou ses droits d'accès. Nous avons vu les différents droits d'accès dans le chapitre 4.0.

chown, chgrp: changer l'utilisateur et le groupe propriétaires d'un ou plusieurs fichiers (CHange OWNer, « changer de propriétaire »; CHange GRouP) « changer de groupe »

La syntaxe de la commande chown est la suivante:

chown [options] <utilisateur[.groupe]> <fichier|rép.> [fichier|rép...]

Entre autres options, on trouve:

Quelques exemples:

La commande chgrp ne vous laisse changer que le groupe propriétaire d'un fichier ou d'un groupe de fichiers; sa syntaxe est très semblable à celle de la commande chown:

chgrp [options] <groupe> <fichier|rép.> [fichier|rép...]

Les options de cette commande sont les mêmes que pour chown, et elle est utilisée de façon très similaire. Ainsi, la commande:

chgrp disk /dev/hd*

attribue au groupe disk tous les fichiers du répertoire /dev dont le nom commence par hd.

chmod: changer les permissions sur des fichiers et des répertoires (CHange MODe, « changer le mode »)

La commande chmod a une syntaxe bien particulière. La syntaxe générale est:

chmod [options] <changement de mode> <fichier|rép.> [fichier|rép...]

mais ce qui la distingue, ce sont les différentes formes que peut prendre le changement de mode. Il peut être spécifié de deux façons:

Les options principales sont très similaires à celles de chown ou chgrp:

Exemples:

Motifs d'englobement du shell et expressions rationnelles

Vous utilisez sans doute déjà des caractères d'englobement sans le savoir. Quand vous enregistrez un fichier dans une application sous Windows, quand vous recherchez un fichier, vous utilisez * pour désigner une suite de caractères quelconque. Par exemple, *.txt désigne l'ensemble des fichiers dont le nom se termine par .txt. Nous l'avons également beaucoup utilisé dans la section précédente. Mais l'englobement va beaucoup plus loin que le seul *.

Quand vous tapez une commande comme ls *.txt et tapez Entrée, la tâche de trouver quels fichiers correpondent au motif *.txt n'est pas du ressort de ls, mais par le shell lui-même. Cela requiert une petite explication sur la façon dont le shell interprète une ligne de commande. Quand vous tapez:

$ ls *.txt
readme.txt  recettes.txt

la ligne de commande est tout d'abord séparée en mots (ls et *.txt en l'occurrence). Quand le shell voit le * dans un des mots, il interprète le mot comme étant un motif englobant et le remplace dans la ligne de commande par les noms de tous les fichiers correspondant au motif. La ligne juste avant exécution par le shell est donc devenue ls readme.txt recettes.txt, ce qui donne le résultat recherché. Le shell réagit aussi à la vue d'autres caractères:

Voici quelques exemples de motifs et leurs significations:

Redirections et tubes

Un peu plus sur les processus

Pour comprendre le principe des redirections et des tubes, nous avons besoin d'expliquer une notion sur les processus qui n'a pas encore été introduite. Chaque processus sous Unix (y compris les applications graphiques) ouvre un minimum de trois descripteurs de fichiers: l'entrée standard, la sortie standard et le canal d'erreur standard. Leurs numéros respectifs sont 0, 1 et 2. En général, ces trois descripteurs sont associés au terminal depuis lequel le processus a été lancé, l'entrée standard étant lue depuis le clavier. Le but des redirections et des tubes est de rediriger ces descripteurs. Les exemples dans cette section vont vous aider à mieux comprendre.

Redirections

Supposons par exemple que vous vouliez connaître la liste des fichiers se terminant par .gif[5] dans le répertoire images, mais cette liste est très longue, vous avez donc intérêt à la stocker dans un fichier pour la consulter à loisir ensuite. Vous pouvez alors taper ceci:

ls images/*.gif 1>liste_fichiers

Ce qui signifie que la sortie standard de cette commande (1) est redirigée (>) vers le fichier de nom liste_fichiers. L'opérateur > est l'opérateur de redirection de sortie. Si le fichier de redirection n'existait pas, il est créé, mais s'il existait son ancien contenu sera écrasé. Cependant, par défaut, le descripteur redirigé par cet opérateur est la sortie standard, il n'est pas besoin de le spécifier sur la ligne de commande. Vous pouvez donc écrire plus simplement:

ls images/*.gif >liste_fichiers

et le résultat sera exactement le même. Vous pouvez ensuite consulter le fichier à l'aide d'un visualisateur de fichiers texte tel que less.

Supposons maintenant que vous vouliez savoir le nombre de ces fichiers. Au lieu de compter à la main, vous utilisez le bien nommé wc (Word Count, « compter les mots ») avec l'option -l, qui écrit sur la sortie standard le nombre de lignes du fichier. Une solution est la suivante:

wc -l 0<liste_fichiers

et cela donne le résultat voulu. L'opérateur < est l'opérateur de redirection d'entrée, et de même le descripteur redirigé par défaut est celui de l'entrée standard, donc 0, et la ligne s'écrit simplement:

wc -l <liste_fichiers

Supposons maintenant que vous vouliez consulter cette liste en retirant toutes les « extensions » des fichiers et mettre le résultat dans un autre fichier. Un outil pour se faire est sed, pour Stream EDitor (« éditeur de flux »). Il suffit de rediriger l'entrée standard de sed vers le fichier liste_fichiers et de rediriger sa sortie vers le fichier résultat, par exemple la_liste:

sed -e 's/.gif$//g' <liste_fichiers >la_liste

et voilà votre liste créée, que vous pouvez de même consulter à loisir avec un visualisateur.

Il peut aussi s'avérer utile de rediriger l'erreur standard. Par exemple, vous voulez savoir quels répertoires dans /shared ne vous sont pas accessibles: une solution est de lister récursivement ce répertoire et de rediriger les erreurs vers un fichier, tout en n'affichant pas le canal de sortie standard:

ls -R /shared >/dev/null 2>erreurs

ce qui signifie que la sortie standard sera redirigée (>) vers /dev/null, fichier spécial dans lequel tout ce qu'on écrit est perdu (donc par effet de bord la sortie standard n'est pas affichée) et que le canal d'erreur standard (2) est redirigé (>) vers le fichier erreurs.

Tubes

Les tubes (pipes en anglais) sont en quelque sorte une combinaison des redirections d'entrée et de sortie. Son principe est celui d'un tube même, d'où son nom: un processus envoie des données dans le tube par un bout et un autre processus lit les données par l'autre bout. L'opérateur tube est |. Reprenons l'exemple de la liste des fichiers ci-dessus. Supposons que vous vouliez savoir directement le nombre de fichiers correspondants sans avoir à stocker la liste dans un fichier temporaire, vous utiliserez alors la commande suivante:

ls images/*.gif | wc -l

ce qui signifie que la sortie standard de la commande ls (donc la liste des fichiers) est redirigée vers l'entrée standard de la commande wc. Vous obtenez donc le résultat désiré.

Vous pouvez de même construire directement la liste des fichiers « sans les extensions » avec la commande suivante:

ls images/*.gif | sed -e 's/.gif$//g' >la_liste

ou, si vous voulez consulter directement la liste sans la stocker dans un fichier:

ls images/*.gif | sed -e 's/.gif$//g' | less

Les tubes et les redirections ne sont pas limités au seul texte lisible par les humains. Ainsi, la commande suivante, lancée à partir d'un xterm:

xwd -root | convert -  /mon_bureau.gif

fera une capture d'écran de votre bureau dans le fichier intitulé mon_bureau.gif[6] dans votre répertoire personnel.

Le complètement

Le complètement est une fonctionnalité des plus pratiques, et tous les shells modernes (dont bash) l'incluent. Son but est de faire travailler l'utilisateur le moins possible. Le mieux pour illustrer ce qu'est le complètement est un exemple.

Exemple

Supposons que vous ayez dans votre répertoire personnel un fichier fichier_au_nom_très_long_impossible_à_taper, et vous voulez le consulter. Supposons que vous ayez également dans ce même répertoire un autre fichier appelé fichier_texte. Vous vous trouvez dans votre répertoire personnel. Vous tapez alors la séquence suivante:

$ less fi<TAB>

(c'est-à-dire, tapez less fi suivi d'une pression sur la touche TAB). Le shell aura alors étendu la ligne de commande pour vous:)

$ less fichier_

et aura également marqué la liste des choix possibles (dans sa configuration par défaut, qui peut être personnalisée). Tapez alors la séquence de touches suivante:

less fichier_a<TAB>

et le shell aura étendu la ligne de commande pour obtenir le résultat que vous souhaitiez:

less fichier_au_nom_très_long_impossible_à_taper

Il ne vous reste plus alors qu'à taper sur la touche Entrée pour valider et consulter le fichier.

De façon plus générale

La touche TAB n'est pas le seul moyen d'activer le complètement, bien que ce soit la façon la plus courante de faire. De façon générale, le mot à compléter sera un nom de commande pour le premier mot de la ligne de commande (nsl<TAB> donnera nslookup), et un nom de fichier pour tous les autres, à moins que le mot ne soit précédé d'un caractère « magique » parmi  , @ ou $, auquel cas le shell essaiera de compléter respectivement un nom d'utilisateur, un nom de machine ou une variable d'environnement[7]. Il existe également un caractère magique pour compléter un nom de commande (!) ou un nom de fichier (/).

Les deux autres façons d'activer le complètement sont les séquences Esc-<x> et C-x <x> (Esc pour la touche Échap, C-x voulant dire Control+<x>) où <x> est l'un des caractères magiques déjà mentionnés). Taper Esc-<x> tentera le complètement de façon unique, et en cas d'échec complètera le mot à la plus grande sous-chaîne possible dans la liste des choix. Un bip signifie soit que le choix n'est pas unique, soit qu'il n'y a tout simplement pas de choix correspondant. La séquence C-x <x> affichera la liste des choix possibles sans tenter aucun complètement. La pression sur la touche TAB est équivalente à une pression successive de Esc-<x> et de C-x <x>, le caractère magique dépendant du contexte.

Ainsi, une façon de voir toutes les variables d'environnement définies est de taper sur une ligne vierge la séquence C-x $. Un autre exemple: si on veut voir la page de manuel de la commande nslookup, il suffit de taper man nsl puis Esc-!, et le shell complétera automatiquement en man nslookup.

Lancement et manipulation de processus en arrière-plan: le job control (« contrôle des processus en arrière-plan »)

Vous aurez remarqué que quand vous lancez une commande à partir d'un terminal, vous devez normalement attendre que la commande soit terminée pour que le shell vous rende la main: vous avez lancé la commande au premier plan. Il y a des situations, cependant, où cela n'est pas souhaitable.

Supposons, par exemple, que vous ayez entrepris de copier récursivement un gros répertoire vers un autre. Vous décidez également d'ignorer les erreurs, donc vous redirigez le canal d'erreur vers /dev/null:

cp -R images/ /shared/ 2>/dev/null

Une telle commande peut prendre plusieurs minutes avant de se terminer. Vous disposez alors de deux solutions: la première, brutale, est d'interrompre (de tuer) la commande pour la relancer plus tard, quand vous aurez le temps. Pour ce faire, tapez C-c (Control+'c'): vous reviendrez alors à l'invite.

Mais vous souhaiteriez quand même que la commande s'exécute tout en faisant autre chose. La solution est alors de mettre le processus en arrière-plan. Pour ce faire, tapez C-z pour suspendre le processus:

$ cp -R images/ /shared/ 2>/dev/null
  # Tapez C-z
[1]+  Stopped                 cp -R images/ /shared/ 2>/dev/null
$

et vous revoilà devant le prompt. Le processus est alors suspendu en attente que vous le relanciez (comme l'indique le mot-clé Stopped, « arrêté »). C'est ce que vous voulez faire, bien sûr, mais à l'arrière-plan. Tapez bg (pour BackGround, « arrière-plan »), cela aura l'effet escompté:

$ bg
[1]+ cp -R images/ /shared/ 2>/dev/null &
$

Le processus aura alors repris son exécution en tâche de fond, ce qu'indique le signe & (esperluette) à la fin de la ligne. Vous vous retrouvez alors en face de l'invite et pouvez continuer à travailler. Un processus qui tourne en tâche de fond, ou arrière-plan, est appelé un job.

Vous pouvez bien sûr lancer directement des processus en tâche de fond, justement en ajoutant une '&' à la fin de la commande. Ainsi vous pouvez lancer la copie du répertoire en arrière-plan en écrivant:

cp -R images/ /shared/ 2>/dev/null &

Si vous le souhaitez, vous pouvez également remettre ce processus au premier plan et attendre qu'il se termine en tapant fg (pour ForeGround, « premier plan »). Répétez alors la séquence C-z, bg pour le remettre à l'arrière-plan.

Vous pouvez lancer plusieurs jobs de cette façon: chacune de ces commandes recevra alors un numéro de job. La commande jobs du shell indique la liste de tous les jobs associés au shell courant. Le job précédé d'un signe + désigne le dernier processus mis en tâche de fond. Pour remettre au premier plan un job en particulier, vous pourrez alors taper fg <n><n> désigne le numéro de job, par exemple fg 5.

Notez que vous pouvez également suspendre ou lancer de cette façon des applications plein écran (si elles sont correctement programmées), telles que less ou un éditeur de texte comme VI, et les remettre au premier plan quand vous le voulez.

Un dernier mot

Vous avez pu vous en rendre compte, le shell est très complet, et l'utiliser efficacement est avant tout une question de pratique. Il n'a été fait mention dans ce chapitre relativement long que de quelques-unes des commandes disponibles: Linux-Mandrake comporte des milliers d'utilitaires, et même les utilisateurs les plus expérimentés n'en utilisent qu'une centaine au grand maximum.

Il existe des utilitaires pour tous les goûts et toutes les utilisations: vous avez des utilitaires de manipulation d'images (tels que convert mentionné plus haut, mais aussi le mode batch de GIMP et tous les utilitaires de manipulation de pixmaps), de sons (encodeurs MP3, lecteurs de CD audio), de gravure de CD-ROM, des programmes de courrier électronique, des clients FTP et même des navigateurs web (lynx ou w3m), sans oublier tous les outils d'administration.

Même s'il existe des applications graphiques aux fonctionnalités équivalentes, ce sont le plus souvent des interfaces graphiques faites autour de ces mêmes utilitaires; en plus de cela, les utilitaires en ligne de commande ont l'avantage de pouvoir fonctionner en mode non interactif: vous pouvez lancer une gravure de CD et vous délogguer du système ensuite en étant sûr que la gravure s'effectuera (voir la page de manuel de la commande nohup(1)).


(Retour à la table des matières)

Chapitre 2 : L'édition de texte: Emacs et VI


Comme annoncé en introduction, l'édition de texte[8] est un point incontournable dans l'utilisation d'un système Unix. Les deux éditeurs dont nous allons étudier (brièvement) l'utilisation sont un peu difficiles à aborder, mais dès que vous avez acquis les bases, ils s'avèrent l'un comme l'autre de formidables outils.

Emacs

Emacs est sans doute l'éditeur de texte le plus puissant qui soit. Il peut absolument tout faire et il est extensible à l'infini grâce à son langage de programmation inclus, basé sur Lisp. Avec Emacs vous pouvez vous promener sur le web, lire votre courrier, les groupes de discussions, faire le café, etc. Mais ce que vous pourrez faire à la fin de cette section sera limité à: ouvrir Emacs, éditer un ou plusieurs fichiers, les sauvegarder, et quitter Emacs. C'est déjà bien.

Brève présentation

Invoquer Emacs est relativement simple:

emacs [fichier] [fichier...]

Emacs ouvrira chaque fichier passé en argument dans un tampon jusqu'à un maximum de deux tampons visibles en même temps, et vous présentera le tampon *scratch* si vous ne spécifiez pas de fichier. Si vous êtes sous X, vous avez également des menus à votre disposition, mais nous verrons ici comment manipuler Emacs au clavier. C-x représente la séquence Control+x, M-s représente la séquence Alt+s.

Pour commencer

Il est temps de pratiquer. Ouvrons par exemple deux fichiers, fichier1 et fichier2. Si ces deux fichiers n'existaient pas, ils seront créés (si vous écrivez quelque chose dedans):

$ emacs fichier1 fichier2

Vous obtenez une fenêtre, présentée dans la figure 55.1.

Emacs, éditant deux fichiers à la fois
Figure 55.1 Emacs, éditant deux fichiers à la fois

Vous pouvez voir que deux tampons ont été créés: un par fichier. Un troisième est également présent, au bas de l'écran (là ou vous voyez (New file)): c'est le mini-tampon. Vous ne pouvez pas aller de vous-même dans ce tampon, il faut qu'Emacs vous y invite lors de saisies interactives. Pour changer de tampon, tapez C-x o. Vous pouvez taper du texte comme dans un éditeur « normal », et en effacer avec la touche Suppr ou la touche Backspace.

Pour vous déplacer, vous pouvez utiliser les touches fléchées, mais aussi d'autres combinaisons: C-a pour aller en début de ligne, C-e pour aller en fin de ligne, M-< pour aller au début du tampon et M-> pour aller à la fin du tampon. Il existe beaucoup d'autres combinaisons, même pour chacune des touches fléchées[9].

Dès que vous voulez enregistrer les modifications faites sur un fichier, tapez C-x C-s, ou si vous voulez enregistrer le contenu du tampon dans un autre fichier, tapez C-x C-w et Emacs vous demandera le nom du fichier dans lequel écrire le contenu du tampon. Vous disposez du complètement pour ce faire.

Manipulation des tampons

Vous pouvez, si vous le voulez, ne montrer qu'un tampon à l'écran. Vous avez deux solutions:

Vous pouvez ensuite remettre le tampon que vous souhaitez à l'écran de deux manières:

Si vous en avez fini avec un fichier et voulez vous débarrasser du tampon associé, tapez C-x k. Emacs vous demandera alors quel tampon il lui faut fermer. C'est le nom du tampon dans lequel vous êtes par défaut; si vous voulez vous débarrasser d'un autre tampon que celui proposé, entrez directement son nom ou bien appuyez sur TAB: Emacs ouvrira alors (encore) un autre tampon appelé *Completions* indiquant la liste des choix possibles. La touche Entrée valide le choix.

Vous pouvez également à tout moment remettre deux tampons visibles à l'écran; pour cela tapez C-x 2. Par défaut le nouveau tampon créé sera une copie du tampon en cours (ce qui vous permet par exemple d'éditer un gros fichier en plusieurs endroits « en même temps »), et il vous suffit alors de procéder comme indiqué précédemment pour passer à un autre tampon.

Vous pouvez à tout moment ouvrir d'autres fichiers, avec C-x C-f. Emacs vous demandera alors le nom du fichier et vous disposez là aussi du complètement.

Copier, couper, coller, rechercher

Supposons que nous sommes dans la situation de la figure 12.2.

Emacs, avant la copie du bloc de texte
Figure 12.2 Emacs, avant la copie du bloc de texte

Il faut d'abord sélectionner le texte que l'on veut copier. Sous X, vous pouvez le faire à la souris, et la région sélectionnée sera même mise en surbrillance. Mais là on est en mode texte :) En l'occurrence on veut copier toute la phrase. Il faut d'abord poser une marque pour marquer le début de la région. En supposant que le curseur soit à l'endroit où il est dans la figure ci-dessus, tapez d'abord C-ESPACE (Control + barre espace): Emacs affichera alors le message Mark set dans le mini-tampon. Puis déplacez-vous en début de ligne avec C-a: la région sélectionnée pour copier ou couper est toute la région se situant entre la marque et la position actuelle du curseur, donc dans ce cas présent toute la ligne. Tapez ensuite M-w (pour copier) ou C-w (pour couper). Si vous copiez, Emacs reviendra alors brièvement à la position de la marque, pour que vous visualisiez la région sélectionnée.

Puis rendez-vous dans le buffer où vous voulez copier le texte, et tapez C-y, pour obtenir à l'écran la même chose que dans la figure 12.3.

Emacs, après la copie du bloc de texte
Figure 12.3 Emacs, après la copie du bloc de texte

En fait, ce que vous venez de faire est de copier du texte dans le kill ring (« cercle des morts ») d'Emacs: ce kill ring contient toutes les régions copiées ou coupées depuis le lancement d'Emacs. Toute région qui vient d'être copiée ou coupée est mise en tête du kill ring. La séquence C-y ne fait que « coller » la région en tête: si vous voulez avoir accès aux autres régions, appuyez sur C-y puis sur M-y jusqu'à ce que vous tombiez sur le texte souhaité.

Pour rechercher du texte, placez-vous dans le tampon souhaité et tapez C-s: Emacs vous demande alors la chaîne à rechercher. Pour lancer une nouvelle recherche avec la même chaîne, toujours dans le tampon courant, tapez C-s une nouvelle fois. Dès qu'Emacs arrive à la fin du tampon et ne trouve plus d'occurrence de la chaîne cherchée, vous pouvez de nouveau taper C-s pour recommencer la recherche depuis le début du tampon. Une pression sur la touche Entrée termine la recherche.

Pour rechercher et remplacer, tapez M-%. Emacs vous demande la chaîne à rechercher, par quoi la remplacer, et vous interroge pour chaque occurrence qu'il trouve.

Une dernière chose bien utile: C-x u permet d'annuler l'opération précédente. Vous pouvez annuler autant d'opérations que vous le souhaitez.

Quitter Emacs

Pour ce faire le raccourci est C-x C-c. Emacs vous demandera alors s'il faut enregistrer les modifications effectuées dans les tampons si vous ne les avez pas sauvegardées.

VI: l'ancêtre

VI a été le premier éditeur plein écran existant. C'est l'un des principaux arguments des détracteurs d'Unix, mais aussi l'un des principaux arguments de ses défenseurs: s'il est compliqué à appréhender, c'est aussi un outil extrêmement puissant une fois que l'on a l'habitude de l'utiliser. En quelques frappes de touches, un utilisateur de VI peut déplacer des montagnes, et mis à part Emacs, peu d'éditeurs de texte peuvent se vanter de cela.

La version incluse dans Linux-Mandrake est en fait VIm, pour VI iMproved (« VI aMélioré »), mais nous le nommerons VI tout au long de ce chapitre.

Mode d'insertion, mode commande, mode ex...

Tout d'abord, l'invocation: exactement comme Emacs. Reprenons donc nos deux fichiers et tapons:

$ vi fichier1 fichier2

À partir de là, vous vous retrouvez devant une fenêtre telle que celle de la figure 12.4.

Situation de départ dans VIm
Figure 12.4 Situation de départ dans VIm

Vous vous retrouvez alors en mode commande devant le premier fichier ouvert. Et là, les difficultés commencent :) En mode commande, vous ne pouvez pas insérer de texte dans un fichier... Il vous faut pour cela passer en mode insertion, et entrer l'une des commandes qui le permettent:

En mode d'insertion, vous verrez la chaîne --INSERT-- apparaître en bas de l'écran (de cette façon vous savez dans quel mode vous êtes). C'est dans ce mode et uniquement dans ce mode que vous pouvez taper du texte. Pour revenir en mode commande, appuyez sur la touche Échap.

En mode d'insertion, vous disposez des touches Backspace et Suppr pour effacer du texte à la volée. Pour vous déplacer dans le texte, aussi bien en mode commande qu'en mode insertion, vous disposez des touches fléchées. En mode commande, il existe également d'autres combinaisons de touches, que nous verrons plus tard.

Le mode ex est disponible en tapant le caractère ':' en mode commande: ce même ':' apparaîtra en bas de l'écran, le curseur s'y positionnera également et tout ce que vous tapez à la suite, suivi d'une pression sur Entrée, sera considéré par VI comme une commande ex. Si vous effacez la commande jusqu'à « effacer » le ':', vous revenez alors en mode commande et le curseur retrouvera sa place originelle.

Pour enregistrer les modifications faites dans un fichier vous taperez :w en mode commande. Si vous voulez enregistrer le contenu du tampon dans un autre fichier, tapez la séquence :w <nom_du_fichier>.

Manipulation de tampons

Comme avec Emacs, vous pouvez avoir plusieurs tampons visibles à l'écran. Pour cela, utilisez la commande :split.

Pour passer d'un fichier à l'autre, dans un tampon, il vous faut taper :next pour passer au fichier suivant et :prev pour passer au fichier précédent. Vous pouvez aussi vous servir de :e <nom_de_fichier>, qui permet à la fois de changer vers le fichier désiré si celui-ci est déjà ouvert, ou bien d'ouvrir un autre fichier. Vous disposez là aussi du complètement.

Pour changer de tampon, tapez C-w j pour passer au tampon en-dessous ou C-w k pour passer au tampon au-dessus. Vous pouvez utiliser également les touches fléchées vers le haut ou vers le bas en lieu et place de 'j' ou 'k'. La commande :close cachera un tampon, la commande :q le fermera.

Attention, VI est tatillon: si vous tentez de cacher ou fermer un tampon dont les changements n'ont pas été sauvegardés, la commande ne sera pas effectuée et vous aurez ce message:

No write since last change (use! to override)

(« pas de sauvegarde depuis le dernier changement --- utilisez '!' pour forcer la commande ») Dans ce cas, faites comme il dit :) Tapez :q! ou :close!.

Édition de texte et commandes de déplacement

Outre les touches Backspace et Suppr dans le mode d'édition, VI dispose de beaucoup de commandes pour effacer, copier, coller, remplacer du texte --- en mode commande. Nous en verrons ici quelques unes. Toutes les commandes présentées ici sont en fait séparées en deux parties: l'action à effectuer et sa portée. L'action peut être:

La portée désigne le groupe de caractères sur lequel la commande doit agir. Ces mêmes commandes de portée entrées telles quelles en mode commande correspondent à des déplacements:

Chacun de ces caractères de portée ou commandes de déplacement peut être précédé d'un nombre de répétition quand cela a un sens. 'G', référence le numéro de ligne dans le fichier. À partir de là, vous pouvez faire toutes sortes de combinaisons. Quelques exemples:

Ce ne sont certes pas des commandes très intuitives, mais comme toujours le meilleur moyen est de pratiquer. En tout cas, vous pouvez voir que l'expression « déplacer des montagnes en quelques touches » n'est pas tellement exagérée :)

Couper, copier, coller

VI dispose d'une commande que nous avons déjà vue pour copier du texte: la commande 'y'. Pour couper du texte, utilisez tout simplement la commande 'd'. Vous disposez de 27 mémoires pour y stocker du texte: une mémoire anonyme et 26 mémoires portant le nom des 26 lettres minuscules de l'alphabet.

Pour utiliser la mémoire anonyme on entre la commande telle quelle. Ainsi, la commande y12w copie dans la mémoire anonyme les 12 mots depuis le curseur[11]. Utilisez d12w si vous voulez couper cette zone.

Pour utiliser l'une des 26 mémoires nommées, on utilise la séquence "<x> avant la commande, où <x> désigne le nom de la mémoire. Ainsi pour copier les mêmes 12 mots dans la mémoire 'k', on écrirait "ky12w, et "kd12w si on veut les couper.

Pour coller le contenu de la mémoire anonyme, vous disposez des commandes 'p' ou 'P' (pour Paste, « coller »), pour insérer le texte respectivement après le curseur ou devant le curseur. Pour coller le contenu d'une mémoire nommée, utilisez de la même façon "<x>p ou "<x>P (par exemple "dp collera le contenu de la mémoire 'd' après le curseur).

Prenons l'exemple de la figure 12.5.

VIm, avant la copie du bloc de texte
Figure 12.5 VIm, avant la copie du bloc de texte

Pour effectuer cette action, on va donc:

Le résultat, présenté dans la figure 12.6, est bien celui qui est attendu.

VIm, après la copie du bloc de texte
Figure 12.6 VIm, après la copie du bloc de texte

La recherche de texte est très simple: en mode commande, il suffit de taper '/' suivi de la chaîne à rechercher, suivi d'une pression sur la touche Entrée. Par exemple, /partie recherchera la chaîne partie à partir de la position courante. Un appui sur 'n' conduit à la prochaine occurrence, et si vous arrivez à la fin du fichier, la recherche recommencera depuis le début. Pour rechercher en remontant dans le fichier, il faut remplacer '/' par '?'.

Quitter VI

Pour quitter, la commande est :q (en fait, cette commande ferme le tampon actif, comme nous l'avons déjà vu, mais si c'est le seul tampon présent, vous quittez VI). Il existe un raccourci: la plupart du temps on n'édite qu'un seul fichier. Pour quitter on utilisera alors:

Par extension, vous aurez deviné que si vous avez plusieurs tampons, :wq écrira le tampon actif puis le fermera.

Un dernier mot...

Bien sûr, nous en avons dit ici beaucoup plus que ce qu'il était nécessaire (après tout le but premier était d'éditer un fichier texte), mais c'est aussi pour vous montrer quelques-unes des possibilités de chacun de ces éditeurs. Il y aurait beaucoup plus à dire sur eux, comme en témoigne le nombre de livres consacrés à l'un ou à l'autre.

Prenez le temps de digérer toutes ces informations, jetez votre dévolu sur l'un ou l'autre, ou n'apprenez que ce que vous jugez nécessaire. Mais au moins vous savez que le jour où vous voudrez aller plus loin, vous le pourrez :)


(Retour à la table des matières)

Chapitre 3 : Organisation de l'arborescence des fichiers


Aujourd'hui, un système Unix est gros, très gros, et c'est particulièrement vrai avec Linux: la profusion de logiciels disponibles en ferait un système ingérable s'il n'y avait des lignes de conduite quant au placement des fichiers dans l'arborescence.

Le standard reconnu en la matière est le FHS (Filesystem Hierarchy Standard, « norme pour les hiérarchies de systèmes de fichiers »), et il en est à sa version 2.0 à l'heure où ce manuel est écrit. Le document décrivant la norme est disponible sur Internet en différents formats à http://www.pathname.com/fhs/. Ce chapitre n'en est qu'un résumé succinct, mais qui devrait vous suffire pour savoir dans quel répertoire rechercher (ou mettre) un fichier donné.

Données partagées et non partagées, statiques et non statiques

Les données sur un système Unix peuvent être classées selon ces deux critères. Vous aurez deviné ce que signifient l'un et l'autre: des données partagées sont des données pouvant être communes à plusieurs machines le long d'un réseau, tandis que des données non partagées ne le peuvent pas. Des données statiques n'ont pas à être modifiées en utilisation normale, tandis que des données non statiques peuvent l'être. Au fur et à mesure que nous explorerons l'arborescence, nous classerons les différents répertoires dans chacune de ces catégories.

Notez que ces classements sont seulement recommandés: vous n'êtes pas obligé(e) de suivre ces recommandations, mais adopter ces lignes de conduite vous aidera grandement pour gérer votre système. Notez également que la distinction statique/non statique n'a pour portée que l'utilisation du système et pas sa configuration. Si vous installez un programme, vous aurez bien évidemment à modifier des répertoires « normalement » statiques, tels que /usr par exemple.

Le répertoire racine: /

Le répertoire racine contient toute la hiérarchie du système. Il est inclassable puisque ses sous-répertoires peuvent être statiques ou non, partagés ou non. Voici un liste des principaux répertoires et sous-répertoires:

/usr: le gros morceau

Le répertoire /usr est le principal répertoire de stockage des applications. Tous les binaires dans ce répertoire ne doivent pas être nécessaires au démarrage ou à l'entretien du système, puisque très souvent la hiérarchie /usr est sur un système de fichiers séparé. Étant donnée sa taille souvent importante, /usr possède sa propre hiérarchie de sous-répertoires. Nous n'en citerons que quelques-uns:

Il existe également des répertoires /usr/doc et /usr/man, qui contiennent respectivement la documentation des applications et les pages de manuel du système, mais le standard recommande qu'ils soient peu à peu déplacés dans /usr/share.

/var: données modifiables en cours d'utilisation

Le répertoire /var contient toutes les données de fonctionnement des programmes qui tournent sur le système. Contrairement aux données de travail dans /tmp, ces données doivent être conservées intactes lors d'un redémarrage. Il existe de nombreux sous-répertoires, et quelques-uns sont très utiles:

/etc: les fichiers de configuration

Le répertoire /etc est un des répertoires essentiels de tout système Unix. Il contient tous les fichiers de configuration de base du système. Ne l'effacez surtout pas pour gagner de la place! De même, si vous voulez étaler votre arborescence sur plusieurs partitions, sachez que /etc ne doit pas être mis sur une partition séparée: il est nécessaire à l'initialisation du système.

Quelques fichiers importants sont:

Il existe également certains sous-répertoires pour les programmes dont la configuration requiert un grand nombre de fichiers. C'est le cas de X Window System, par exemple, qui dispose de tout le répertoire /etc/X11.


(Retour à la table des matières)

Chapitre 4 : Le système de fichiers de Linux: ext2fs (EXTended 2 FileSystem)


Le Guide de l'utilisateur a introduit les concepts de propriété des fichiers et les droits d'accès, mais pour vraiment comprendre le système de fichiers de Linux, il faut redéfinir la notion même de fichier. Une raison en est que:

Tout est fichier

Ici, « tout » veut dire vraiment tout. Un disque dur, une partition sur un disque dur, un port parallèle, une connexion à un site web, une carte Ethernet, tous ces éléments sont des fichiers. Même les répertoires sont des fichiers. Linux reconnaît plusieurs types de fichiers, en plus des fichiers réguliers et des répertoires. Notez que par type de fichier ici, nous ne faisons pas référence au type du contenu du fichier: pour Linux et pour tout système Unix, un fichier, qu'il soit une image GIF, un fichier binaire ou autre, est juste une suite d'octets. La différenciation des fichiers en fonction de leur contenu est laissé aux applications.

Si vous vous souvenez, quand vous tapez ls -l, le caractère avant les droits d'accès représente le type du fichier. Nous avons déjà vu deux types de fichiers: les fichiers réguliers (-) et les répertoires (d). Vous pouvez aussi tomber sur les suivants si vous vous baladez dans l'arborescence et listez le contenu des répertoires:

Voici un exemple de chacun de ces fichiers:

$ ls -l /dev/null /dev/sda  /etc/rc.d/rc3.d/S20random /proc/554/maps \
  /tmp/ssh-fg/ssh-510-agent
crw-rw-rw-    1 root     root       1,   3 mai  5  1998 /dev/null
brw-rw----    1 root     disk       8,   0 mai  5  1998 /dev/sda
lrwxrwxrwx    1 root     root           16 déc  9 19:12 /etc/rc.d/rc3.d/S20random ->
../init.d/random*
pr--r--r--    1 fg       fg              0 déc 10 20:23 /proc/554/maps|
srwx------    1 fg       fg              0 déc 10 20:08
/tmp/ssh-fg/ssh-510-agent=
$

On devrait ajouter que ext2fs, comme tous les autres systèmes de fichiers Unix, stocke les fichiers, quel que soit leur type, dans une table des i-noeuds. Une particularité est qu'un fichier n'est pas identifié par son nom, mais par un numéro d'i-noeud. En fait, certains fichiers n'ont pas de noms. Les noms sont juste une conséquence d'une notion plus large:

Les liens

Le meilleur moyen de comprendre ce qui se cache derrière cette notion de liens est de prendre un exemple. Créons un fichier (régulier):

$ pwd
/home/fg/exemple
$ ls
$ touch a
$ ls -il a
  32555 -rw-rw-r--    1 fg       fg              0 déc 10 08:12 a

L'option -i de la commande ls affiche le numéro d'i-neud, qui est le premier champ dans la sortie. Comme vous pouvez le voir, avant que nous ayons créé le fichier a, il n'y avait aucun fichier dans le répertoire. L'autre champ intéressant est le troisième, qui est le compteur de liens pour le fichier.

En fait, on peut séparer la commande touch a en deux actions distinctes:

Mais maintenant, si nous faisons:

$ ln a b
$ ls -il a b
  32555 -rw-rw-r--    2 fg       fg              0 déc 10 08:12 a
  32555 -rw-rw-r--    2 fg       fg              0 déc 10 08:12 b
$

nous avons créé un autre lien vers le même i-noeud. Comme vous pouvez le voir, nous n'avons créé aucun fichier nommé b, mais au lieu de cela nous avons ajouté un autre lien vers l'i-noeud de numéro 32555 dans le même répertoire nommé b. Vous pouvez voir dans la deuxième sortie de ls -l que le compteur de liens est maintenant 2 et non plus 1.

Maintenant, si nous faisons:

$ rm a
$ ls -il b
  32555 -rw-rw-r--    1 fg       fg              0 déc 10 08:12 b
$

nous voyons que même si nous avons effacé le « fichier original », l'i-noeud existe encore. Mais maintenant le seul lien vers cet i-noeud est /home/fg/exemple/b.

Donc, un i-noeud est lié si et seulement si il est référencé par un nom au moins une fois dans un répertoire quelconque[15]. Les répertoires eux-mêmes sont aussi stockés dans des i-noeuds, mais leur compteur de liens, contrairement à tous les autres types de fichiers, est leur nombre de sous-répertoires. Il y a au moins deux liens par répertoire: le répertoire lui-même (.) et son répertoire parent (..).

Des exemples typiques de fichiers qui ne sont pas liés (c'est-à-dire qu'ils n'ont pas de noms) sont les connexions réseau: vous ne verrez jamais le fichier correspondant à votre connexion à www.linux-mandrake.com dans votre arborescence, quel que soit le répertoire que vous essayiez. De façon similaire, quand vous utilisez un tube dans le shell, le fichier correspondant au tube existe bien, mais il n'est pas lié.

Tubes « anonymes » et tubes nommés

Revenons à l'exemple des tubes, car il est très intéressant et c'est également une bonne illustration de la notion de liens. Quand vous utilisez un tube dans une ligne de commande, le shell crée le tube pour vous et fait en sorte que la commande avant le tube écrit dans celui-ci, tandis que la commande après le tube y lit ses données. Tous les tubes, qu'ils soient anonymes (comme ceux utilisés par le shell) ou nommés (voyez ci-dessous), fonctionnent selon le principe FIFO (First In, First Out, "premier arrivé, premier servi"). Nous avons déjà vu des exemples sur l'utilisation des tubes avec le shell, mais prenons-en un dans un but d'illustration:

$ ls -d /proc/[0-9] | head -6
/proc/1/
/proc/2/
/proc/3/
/proc/4/
/proc/5/

Une chose que vous ne remarquez pas dans cet exemple (parce que cela se passe trop vite) est que les écritures sur le tube sont bloquantes. Cela veut dire que quand la commande ls écrit dans le tube, elle est bloquée jusqu'à ce qu'un processus à l'autre bout lise depuis le tube. Pour visualiser cet effet, vous pouvez créer des tubes nommés, qui, contrairement aux tubes utilisés par le shell, ont des noms (donc ils sont liés, tandis que les tubes utilisés par le shell ne le sont pas). La commande pour créer de tels tubes est mkfifo:

$ mkfifo un_tube
$ ls -il
total 0
    169 prw-rw-r--    1 fg       fg              0 déc 10 14:12 un_tube|
  #
  # Vous pouvez voir que le compteur de liens est 1, et que la sortie
  # montre  que le fichier est un tube ('p').
  #
  # Vous pouvez aussi utiliser ln ici :
  #
$ ln un_tube le_même_tube
$ ls -il
total 0
    169 prw-rw-r--    2 fg       fg              0 déc 10 15:37 un_tube|
    169 prw-rw-r--    2 fg       fg              0 déc 10 15:37 le_même_tube|
$ ls -d /proc/[0-9] >un_tube
  #
  # Le processus est bloqué, comme il n'y a pas de lecteurs à l'autre
  # bout. Tapez C-z pour suspendre le processus...
  #
zsh: 3452 suspended  ls -d /proc/[0-9] > un_tube
  #
  # ...Puis mettez-le en tâche de fond :
  #
$ bg
[1]  + continued  ls -d /proc/[0-9] > un_tube
  #
  # Maintenant lisez depuis le tube...
  #
$ head -6 <le_même_tube
  #
  # ...le processus écrivain se termine :
  #
[1]  + 3452 done       ls -d /proc/[0-9] > un_tube
/proc/1/
/proc/2/
/proc/3/
/proc/4/
/proc/5/
$

De la même façon, les lectures sont bloquantes. Si nous exécutons les commandes ci-dessus dans l'ordre inverse, nous observons que head est bloqué, en attendant qu'un processus lui donne quelque chose à lire:

$ head -6 <un_tube
  #
  # Le processus est bloqué, suspendez-le : C-z
  #
zsh: 741 suspended  head -6 < un_tube
  #
  # Mettez-le en tâche de fond...
  #
$ bg
[1]  + continued  head -6 < un_tube
  #
  # ...Et donnez-lui à manger :)
  #
$ ls -d /proc/[0-9] >le_même_tube
$ /proc/1/
/proc/2/
/proc/3/
/proc/4/
/proc/5/
[1]  + 741 done       head -6 < un_tube
$

Vous pouvez aussi voir un effet indésirable dans cet exemple: la commande ls a fini son exécution avant que la commande head prenne le relais. La conséquence est que vous êtes retourné(e) au prompt immédiatement, mais head ne s'est exécuté qu'après. Donc il a effectué sa sortie seulement après que vous ayez récupéré le prompt :)

Les fichiers « spéciaux »: fichiers en mode bloc et caractère

Comme il a déjà été dit, de tels fichiers sont soit des fichiers créés par le système, soit bien des périphériques de votre machine. Nous avons aussi mentionné que le contenu des fichiers en mode bloc était gardé en mémoire alors que tel n'était pas le cas des fichiers en mode caractère. Pour illustrer ceci, insérez une disquette quelconque dans le lecteur et tapez la commande suivante deux fois de suite:

$ dd if=/dev/fd0 of=/dev/null

Vous pouvez observer la chose suivante: tandis que, la première fois que la commande a été lancée, tout le contenu de la disquette a été lu, la deuxième fois il n'y a eu aucun accès au lecteur de disquette. C'est simplement parce que le contenu de la disquette a été gardé en mémoire quand vous avez lancé la commande la première fois --- et que vous n'avez pas changé de disquette entre temps.

Mais maintenant, si vous voulez imprimer un gros fichier de cette façon (si, ça fonctionne):

$ cat /un/gros/fichier/imprimable/quelque/part >/dev/lp0

la commande prendra autant de temps que vous la tapiez une, deux ou cinquante fois. Ceci est dû au fait que /dev/lp0 est un fichier en mode caractère, et son contenu n'est pas gardé en mémoire.

Le fait que le contenu des fichiers en mode bloc soit gardé en mémoire a un effet de bord agréable: non seulement les lectures sont gardées en mémoire, mais c'est aussi le cas des écritures. Cela autorise les écritures sur disque à être asynchrones: quand vous écrivez un fichier sur disque, l'opération d'écriture elle-même ne sera pas faite immédiatement. Elle n'aura lieu que quand Linux le décidera.

Enfin, chacun de ces fichiers spéciaux possède un numéro majeur et un numéro mineur. Sur la sortie d'un ls -l, ils apparaissent en lieu et place de la taille, étant donné que la taille pour de tels fichiers est hors de propos:

$ ls -l /dev/hda /dev/lp0
brw-rw----    1 root     disk       3,   0 mai  5  1998 /dev/hda
crw-rw----    1 root     daemon     6,   0 mai  5  1998 /dev/lp0

Ici, les numéros majeur et mineur de /dev/hda sont respectivement 3 et 0, tandis que ce sont respectivement 6 et 0 pour /dev/lp0. Notez que ces numéros sont uniques par catégorie de fichier, ce qui veut dire qu'il peut exister un fichier en mode caractère ayant 3 pour majeur et 0 pour mineur (un tel fichier existe : c'est /dev/ttyp0), et de la même façon il peut y avoir un fichier en mode bloc ayant 6 pour majeur et 0 pour mineur. Ces nombres existent pour une raison bien simple: cela permet à Linux d'associer les bonnes opérations aux fichiers (donc aux péripériques auxquels ces fichiers se réfèrent). On ne contrôle pas un lecteur de disquettes de la même façon que, par exemple, un disque dur SCSI.

Les liens symboliques et la limitation des liens « en dur »

Ici nous avons à faire face à une incompréhension très courante, même parmi les utilisateurs d'Unix, qui est principalement due au fait que les liens tels que nous les avons vus jusque là (faussement appelés liens « en dur ») sont seulement associés aux fichiers réguliers (et nous avons vu que ce n'est pas le cas --- même les liens symboliques sont « liés »). Mais cela requiert que nous expliquions d'abord ce que sont les liens symboliques[16].

Les liens symboliques sont des fichiers d'un type particulier dont le seul contenu est une chaîne de caractères arbitraire, qui peut ou non pointer sur un vrai nom de fichier. Quand vous mentionnez un lien symbolique sur la ligne de commande ou dans un programme, vous accédez en fait au fichier sur lequel pointe le lien, s'il existe. Par exemple:

$ echo Bonjour >monfichier
$ ln -s monfichier monlien
$ ls -il
total 4
    169 -rw-rw-r--    1 fg       fg              6 déc 10 21:30 monfichier
    416 lrwxrwxrwx    1 fg       fg              6 déc 10 21:30 monlien -> monfichier
$ cat monfichier
Bonjour
$ cat monlien
Bonjour

Vous pouvez voir que le type du fichier monlien est 'l'. Les droits d'accès pour un lien symbolique n'ont aucune signification: ils seront toujours rwxrwxrwx. Vous pouvez également voir que c'est un fichier différent de monfichier, parce que son numéro d'i-noeud est différent. Mais il se réfère au fichier monfichier de façon symbolique, donc quand vous tapez cat monlien, vous affichez en fait le contenu du fichier monfichier. Pour démontrer qu'un lien symbolique contient une chaîne arbitraire, nous pouvons faire la chose suivante:

$ ln -s "Je n'existe pas" unautrelien
$ ls -il unautrelien
    747 lrwxrwxrwx    1 fg       fg             15 déc 15 18:01 unautrelien -> Je n'existe pas
$ cat unautrelien
cat: unautrelien: Aucun fichier ou répertoire de ce type
$

Mais les liens symboliques existent parce qu'ils s'affranchissent de plusieurs limitations des liens normaux:

Donc les liens symboliques sont très utiles dans plusieurs cas, et très souvent, les gens tendent à les utiliser pour lier des fichiers même quand un lien normal est possible. Un avantage des liens normaux, pourtant, est que vous ne perdez pas le fichier si vous effacez l'« original » :)

Enfin, si vous avez observé attentivement, vous savez à quoi correspond la taille d'un lien symbolique: c'est tout simplement la taille de la chaîne de caractères.

Les attributs des fichiers

De même que la FAT a des attributs de fichiers (archive, fichier système, invisible), ext2fs a aussi les siens propres, mais ils sont différents. Non en parlons pour être complet, mais ils sont très peu utilisés. Toutefois, si vous voulez un système vraiment sécurisé, continuez la lecture.

Il existe deux commandes pour manipuler les attributs: ce sont lsattr(1) et chattr(1). Vous l'aurez deviné, lsattr LiSte les attributs, et chattr les CHange. Ces attributs s'appliquent seulement aux répertoires et aux fichiers réguliers. Ce sont les suivants:

Vous pouvez, par exemple, placer l'attribut 'i' sur des fichiers système essentiels pour éviter les mauvaises surprises. Pensez aussi à l'attribut 'A' pour les pages de manuel par exemple: cela évitera beaucoup d'activité disque, et, en particulier, cela prolongera la durée de vie de la batterie sur les portables.


(Retour à la table des matières)

Chapitre 5 : Le système de fichiers /proc


Le système de fichiers /proc est une spécificité de Linux. C'est un système de fichiers virtuel, et en tant que tel il ne prend aucun espace disque. C'est un moyen très pratique d'obtenir des informations sur le système, d'autant plus que la plupart des fichiers dans ce répertoire sont lisibles (enfin, avec un peu d'habitude). Beaucoup de programmes, en fait, collectent des informations depuis des fichiers de /proc, les formatent à leur façon puis les affichent. C'est le cas pour tous les programmes qui affichent des informations sur les processus, et nous en avons déjà vu quelques-uns (top, ps et autres). /proc est aussi une bonne source d'informations sur votre matériel, et de la même façon, bon nombre de programmes sont en fait des interfaces pour les informations contenues dans /proc.

Il existe également un sous-répertoire spécial, /proc/sys. Il permet de changer certains paramètres du noyau en temps réel ou d'en consulter.

Informations sur les processus

Si vous listez le contenu du répertoire /proc, vous verrez beaucoup de répertoires dont le nom est un nombre. Ce sont les répertoires contenant les informations sur tous les processus fonctionnant à l'instant donné sur le système:

$ ls -d /proc/[0-9]*
/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/
/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/
/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/
/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/
/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/
/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/
/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/
/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

Notez qu'en tant qu'utilisateur, vous ne pouvez (fort logiquement) afficher les informations que sur vos propres processus. Mettons-nous donc en tant que root et voyons quelle information est disponible depuis le processus 127:

$ su
Password:
$ cd /proc/127
$ ls -l
total 0
-r--r--r--    1 root     root            0 d    c 14 19:53 cmdline
lrwx------    1 root     root            0 d    c 14 19:53 cwd -> //
-r--------    1 root     root            0 d    c 14 19:53 environ
lrwx------    1 root     root            0 d    c 14 19:53 exe -> /usr/sbin/apmd*
dr-x------    2 root     root            0 d    c 14 19:53 fd/
pr--r--r--    1 root     root            0 d    c 14 19:53 maps|
-rw-------    1 root     root            0 d    c 14 19:53 mem
lrwx------    1 root     root            0 d    c 14 19:53 root -> //
-r--r--r--    1 root     root            0 d    c 14 19:53 stat
-r--r--r--    1 root     root            0 d    c 14 19:53 statm
-r--r--r--    1 root     root            0 d    c 14 19:53 status
$

Chaque répertoire contient les mêmes entrées. Voici une brève description de quelques-unes de ces entrées:

Si nous listons le contenu du répertoire fd, nous obtenons ceci:

$ ls -l fd
total 0
lrwx------    1 root     root           64 déc 16 22:04 0 -> /dev/console
l-wx------    1 root     root           64 déc 16 22:04 1 -> pipe:[128]
l-wx------    1 root     root           64 déc 16 22:04 2 -> pipe:[129]
l-wx------    1 root     root           64 déc 16 22:04 21 -> pipe:[130]
lrwx------    1 root     root           64 déc 16 22:04 3 -> /dev/apm_bios
lr-x------    1 root     root           64 déc 16 22:04 7 -> pipe:[130]
lrwx------    1 root     root           64 déc 16 22:04 9 -> /dev/console
$

C'est en fait la liste des descripteurs de fichiers ouverts par le processus. Chaque descripteur ouvert est matérialisé par un lien symbolique dont le nom est le numéro du descripteur, et qui pointe sur le fichier ouvert par le biais de ce descripteur[18]. Vous pouvez également remarquer les permissions des liens symboliques: c'est le seul endroit où elles ont un sens pour les liens symboliques, puisqu'elles sont le reflet des droits avec lesquels le fichier correspondant au descripteur a été ouvert.

Informations sur le matériel

Outre les répertoires des différents processus, /proc contient aussi une foule de renseignements sur le matériel présent sur votre machine. Une liste des fichiers du répertoire /proc donne ceci:

$ ls -d [a-z]*
apm      dma          interrupts  loadavg  mounts      rtc       swaps
bus/     fb           ioports     locks    mtrr        scsi/     sys/
cmdline  filesystems  kcore       meminfo  net/        self/     tty/
cpuinfo  fs/          kmsg        misc     partitions  slabinfo  uptime
devices  ide/         ksyms       modules  pci         stat      version
$

Par exemple, si nous regardons le contenu de interrupts, nous pouvons constater qu'il contient la liste des interruptions actuellement utilisées par le système, ainsi que le périphérique qui les occupe. De même, ioports contiendra la liste des plages d'entrée/sortie actuellement occupées, et enfin dma fait de même avec les canaux DMA. Donc, si vous voulez repérer un conflit, regardez le contenu de ces trois fichiers:

$ cat interrupts
           CPU0
  0:     127648          XT-PIC  timer
  1:       5191          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  5:       1402          XT-PIC  xirc2ps_cs
  8:          1          XT-PIC  rtc
 10:          0          XT-PIC  ESS Solo1
 12:       2631          XT-PIC  PS/2 Mouse
 13:          1          XT-PIC  fpu
 14:      73434          XT-PIC  ide0
 15:      80234          XT-PIC  ide1
NMI:          0
$ cat ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
0300-030f : xirc2ps_cs
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
1050-1057 : ide0
1058-105f : ide1
1080-108f : ESS Solo1
10c0-10cf : ESS Solo1
10d4-10df : ESS Solo1
10ec-10ef : ESS Solo1
$ cat dma
 4: cascade
$

Ou, plus simplement, utilisez la commande lsdev, qui regroupe les informations de ces trois fichiers et classe les informations par périphérique, ce qui est quand même nettement plus pratique[19]:

$ lsdev
Device            DMA   IRQ  I/O Ports
------------------------------------------------
cascade             4     2
dma                          0080-008f
dma1                         0000-001f
dma2                         00c0-00df
ESS                          1080-108f 10c0-10cf 10d4-10df 10ec-10ef
fpu                      13  00f0-00ff
ide0                     14  01f0-01f7 03f6-03f6 1050-1057
ide1                     15  0170-0177 0376-0376 1058-105f
keyboard                  1  0060-006f
Mouse                    12
pic1                         0020-003f
pic2                         00a0-00bf
rtc                       8  0070-007f
serial                       03f8-03ff
Solo1                    10
timer                     0  0040-005f
vga+                         03c0-03df
xirc2ps_cs                5  0300-030f
$

Une énumération complète des fichiers présents serait trop longue, néanmoins voici la description de quelques-uns d'entre eux:

Le sous-répertoire /proc/sys

Le rôle de ce sous-répertoire est de reporter différents paramètres du noyau, et de pouvoir changer en temps réel certains de ces paramètres. A la différence de tous les autres fichiers dans /proc, certains fichiers de ce répertoire sont accessibles en écriture, mais par root seulement.

Une liste des répertoires et fichiers présents serait trop longue, d'autant plus qu'ils dépendront en grande partie de votre système d'une part, et que la plupart des fichiers ne seront utiles que pour des programmes hautement spécialisés. Voici toutefois trois utilisations courantes de ce sous-répertoire:


(Retour à la table des matières)

Chapitre 6 : Samba


Qu'est-ce que Samba?

Enfin, vous devez vous dire, une implémentation d'une danse exotique sous Linux. Ca veut dire quoi, au juste? Non, il ne s'agit pas de la danse brésilienne mais d'un serveur pour les clients SMB (le protocole Server Message Block, « serveur de messages pas blocs ») ou de son successeur CIFS (Common Internet File System, « système de fichiers commun sur l'Internet »).

Qu'est-ce qu'il est capable de faire?

Pour plus d'informations à ce sujet rendez-vous sur le site web http://samba.org/samba/.

Licence

Tout comme Linux, ce logiciel est un projet Open Source, dans le cadre de la GPL et du projet GNU, entièrement écrit en langage C, libre et gratuit. Il peut être distribué librement, vous êtes même encouragés à le faire.

Ce document vous aidera à installer un serveur SMB.

Installation de Samba

Si vous utilisez déjà Samba tapez /etc/rc.d/init.d/smb stop. Sur le CD-ROM d'installation vous trouverez le paquetage samba-2.0.6-1mdk.i586.rpm que vous pouvez installer, en tant que root, avec la commande

rpm -Uvh samba-*mdk.i586.rpm.

La commande rpm -ql samba|less vous permettra ensuite de consulter tous les fichiers contenus dans le paquetage et leur emplacement. Cela vous permettra de localiser les fichiers de la section doc, etc.

Description du fichier /etc/smb.conf

C'est le fichier texte qui vous permet de configurer le serveur Samba.

Il est composé de différentes sections dont les titres sont placés entre crochets [ ]. Toute ligne commençant par ';' ou par '#' est ignorée lors de l'exécution de Samba. On utilise souvent cette fonctionnalité pour ajouter des commentaires d'explication sur les différentes sections. De cette façon vous vous y retrouverez plus facilement plus tard, lors de la relecture.

Lors de l'installation du paquetage, un fichier /etc/smb.conf a été copié sur votre ordinateur. Nous allons utiliser ce fichier comme point de départ.

Il existe trois section particulières: [global] (« généralités »), [printers], et (« imprimantes »), [homes] (« répertoires personnels »).

Section [global]

Ici, sont introduits les paramètres qui s'appliquent au serveur dans sa totalité ou qui seront les paramètres par défaut pour certaines sections.

[global]
netbios name =          Zeus
netbios aliases =       creation
# sans ces deux entrées, le premier composant du
# nom DNS est utilisé à la place.
workgroup =             DESIGN
# Samba ne peut être membre que d'un seul groupe
# de travail à la fois
server string =         Serveur de fichiers [%v]
# ceci indique le nom est la version à afficher
deadtime =              15
# durée maximale d'inactivité
auto services =         jean
# ce service, bien qu'affiché dans la liste
# d'exploration, n'est pas disponible avant la
# connexion de jean au serveur
security = user

Ce dernier paramètre peut prendre les valeurs share (« partagé »), user, (« utilisateur »), server, (« serveur »), ou domain (« domaine »).

Dans ces trois derniers modes, l'utilisateur doit être « créé » sur le serveur Samba.

hosts allow = jean.design.org 192.168.1.45 EXCEPT 192.168.2.

Ici, tous les utilisateurs du réseau 192.168.2. seront refusés lors d'une tentative de connexion.

hosts deny = 192.168.2

Cette ligne a le même effet que la ligne précédente, avec le mot-clef EXCEPT.

guest account = pcguest
# si vous désirez utiliser un compte d'invité,
# à ajouter dans /etc/passwd

Définir un partage

Créez d'abord cette entrée avec la commande suivante: mkdir /home/commun et établissez les permissions avec les commandes chmod et chown. Par exemple, chmod 0777 donne tous les droits à ce dossier du côté Unix. Il faudrait, de plus, que Samba l'autorise également.

[share]
  comment = partage accessible par tous
  path = /home/commun
  browsable = yes
  writable = yes
  create mask = 0750
# signifie que l'utilisateur a les droits
# rwx, le groupe r-x et les autres r--
  directory mask = 0750
# même signification
  mangled names = yes
# conversion des noms en format DOS/Windows,
# c'est à dire 8 caractères pour le nom et
# 3 pour l'extension.
  preserve case = no
# pour ne pas prendre en compte la casse.

Un autre exemple de partage

Assurez-vous de charger d'abord le module ppa avec la commande modprobe ppa.o.

[zip]
comment = montage/démontage automatique de disquettes zip
  browseable = yes
  path = /mnt/zip
  root preexec = /bin/mount /dev/sda4 /mnt/zip
  root postexec = /bin/unmount /mnt/zip

Section [homes]

Cette section permet à chaque utilisateur d'accéder à son répertoire 'HOME' de la machine Linux depuis un PC sous Windows.

Il s'agit d'un type de partage spécial.

[homes]
  comment = Répertoires personnels
  browseable = no
  writable = yes
  path = /export/homes/%U
  valid users = %S

Section [printers]

Il s'agit d'un autre type de partage particulier.

[printers]
   comment = Imprimantes disponibles
   path = /var/spool/samba
   load printers = yes # charge toutes les imprimantes disponibles
   browseable = no
   printable = yes
   public = no
   writable = no
   create mode = 0700

Vous pouvez aussi imprimer de Linux sur une imprimante connectée sur un PC fonctionnant sous Windows. Utilisez pour cela printtool et configurez l'imprimante. Ceci va créer une entrée dans le fichier /etc/printcap. Il faut l'avoir partagée au préalable sous Windows.

Il existe de très nombreux paramètres, pour plus d'informations, taper man smb.conf.

Vérifications

Avant de démarrer les démons smb et nmb, tapez testparm. Cette commande va lire le fichier /etc/smb.conf et vous afficher les entrées qu'il prend en compte.

Comment exécuter Samba

Il suffit de taper /etc/rc.d/init.d/smb start, vous verrez s'afficher le message :

Starting SMB services:                                   [OK]
Starting NMB services:                                   [OK]

Pour vérifier que le démon est bien en état de fonctionnement, taper ps aux | grep smbd ou /etc/rc.d/init.d/smb status

Divers utilitaires

smbclient

Il s'agit d'un utilitaire analogue à ftp qui vous permettra d'accéder aux partages d'un PC fonctionnant sous Windows. Pour connaître la liste des services proposés par le PC win, tapez smbclient -L win -N. Tapez smbclient //win/travail pour vous connecter sur le PC appelé win, sur le partage appelé travail. Vous pourriez aussi taper la commande smbclient wintravail. Pour créer une sauvegarde de type tar, tapez smbclient //win/travail -Tc travail. Pour imprimer un fichier lettre.txt, tapez

cat lettre.txt | smbclient //win/nom_imprimante mot_de_passe \
  -N -c "put - jean"

Pour en savoir plus, tapez man smbclient.

smbfs

Pour être en mesure de monter/démonter des fichiers de Windows sous Linux, votre noyau devra reconnaître le système de fichiers smbfs (ce qui est le cas sur la distribution de Linux-Mandrake). Ensuite vous devrez utiliser les commandes smbmount ou /et smbumount. Il faudrait taper ensuite, par exemple: smbmount "wintravail" -c 'mount /mnt -u 123 -g 456'. Ceci donnera au montage un UID local de 123, ainsi qu'un GID local de 456.

smbtar

Permet de créer des archives tar à distance. Lire la page de manuel pour obtenir plus d'informations sur ses nombreuses options.

Interface graphique d'administration: SWAT

SWAT est inclus dans le paquetage Samba. Pour le lancer il faudra décommenter (enlever le # du début de ligne) la ligne: swat stream tcp nowait.400 root /usr/sbin/swat swat dans le fichier /etc/inet.conf, et ensuite relancer inet avec la commande /etc/rc.d/init.d/inet restart.

Dans votre navigateur (de préférence, un navigateur graphique), taper l'URL: http://127.0.0.1:901. Une fenêtre d'authentification devrait apparaître (figure 43.1) et vous serez invité à saisir un nom de login et un mot de passe. Le mot de passe de root devrait garantir un niveau de sécurité satisfaisant.

Se connecter à Samba
Figure 43.1 Se connecter à Samba

Vous voilà dans une interface graphique pour le paramètrage de smb.conf. Vous devriez être capable d'utiliser cette interface sans problèmes en vous appuyant sur les explications ci-dessus et en consultant les pages des manuels pour des configurations spécifiques.

Écran d'accueil de SWAT
Figure 15.2 Écran d'accueil de SWAT

Exemple de fichier smb.conf

[global]
  workgroup = MonGroupeDeTravail
  server string = (Samba %v)
  #server string = Samba Server
  browseable = yes
  printing = bsd
  printcap name = /etc/printcap
  load printers = yes
  log file = /var/log/samba/log.%m
  max log size = 100
  lock directory = /var/lock/samba
  locking = no
  strict locking = no
  share modes = yes
  security = user
  null passwords = yes
  socket options = TCP_NODELAY
  # Fait en sorte que le serveur Samba devienne le serveur
  #   principal du domaine
  #os level = 33
  #domain master = yes
  # Facilite la reconnaissance des noms de fichiers longs
  preserve case = no
  short preserve case = no
  character set = iso8859-1
[homes]
  comment = Répertoires personnels
  preexec = /bin/sh -c 'echo /usr/bin/smbclient -M %m -I %I'&
  browseable = yes
  readonfiltered= no
  writable = yes
  create mode = 0750
  public = yes
["public"]
  comment = "Public"
  path = /public/
  browseable = yes
  hide dot files = yes
  readonfiltered= no
  public = yes
  pritable = yes
  #create mode = 0775
  printable = no
["printers"]
  comment = All Printers
  #path = /var/spool/samba
  path = /var/spool/lpd/lp
  browseable = yes
  # public = yes # pour permettre à l'utilisateur 'invité' d'imprimer
  guest ok = yes
  writable = yes
  printable = yes

Conclusion

Pour toute information complémentaire vous êtes vivement invité à consulter la documentation de Samba.


(Retour à la table des matières)

Chapitre 7 : MSEC --- Mandrake SECurity tools (« Utilitaires de sécurité Mandrake »)


Qu'est-ce que MSEC?

La rapide pénétration de Linux pour des applications de plus en plus diverses, depuis le travail de bureau de base jusqu'aux serveurs à haute disponibilité, a fait surgir le besoin pour des niveaux de sécurité différents. Il est évident que les contraintes inhérentes aux serveurs de haute sécurité ne conviennent absolument pas aux besoins d'une secrétaire. De même, un serveur public à lourde charge est plus exposé à des gens mal intentionnés que ma station de travail isolée.

C'est avec cette idée en tête qu'a été construit le paquetage MSEC. Il est composé de deux parties:

Notez que l'administrateur pourra définir son propre niveau de sécurité en ajustant les paramètres à ses propres besoins.

Installation

MSEC est un RPM de base. Si vous avez déjà installé Linux-Mandrake, MSEC est donc déjà présent sur votre système.

Lorsque vous installerez le paquetage MSEC, cela créera un répertoire msec dans /etc/security, qui contient tous les scripts nécessaires à la sécurisation de votre système.

Entrez sur le système en tant que root et tapez la commande /etc/security/msec/init.sh x, x étant le niveau de sécurité désiré, ou bien custom (« personnalisé »), pour créer votre propre niveau. Le script commencera alors à supprimer les modifications apportées par un précédent changement de niveau, et appliquera les caractérisriques du nouveau niveau de sécurité à votre système. Si vous avez choisi custom, alors il vous sera demandé une série de questions pour chacun des points de sécurité que MSEC propose. À la fin, ces caractéristiques seront appliqués à votre système.

Notez que quel que soit le niveau de sécurité choisi, votre configuration sera enregistrée dans

/etc/security/msec/security.conf.

Niveau 0

Ce niveau doit être utilisé en connaissance de cause. Il rend votre système plus facile à utiliser, mais aussi très sensible. En particulier, vous ne devriez pas utiliser ce niveau sans sécurité si vous répondez oui à au moins l'une des questions suivantes:

Comme vous le voyez, ce niveau de sécurité ne devrait pas être activé par défaut, car cela pourrait causer des problèmes à vos données.

Niveau 1

La principale amélioration de la sécurité par rapport au premier niveau, est que désormais, l'accès au données d'un utilisateur se fait par nom d'utilisateur et mot de passe. L'ordinateur peut ainsi être utilisé par plusieurs personnes, et il est moins sensible à de fausses manoeuvres. Néammoins, ce niveau ne devrait pas être utilisé sur un ordinateur connecté par modem ou à un réseau local.

Niveau 2

Peu d'améliorations pour ce niveau de sécurité, sinon que plus de vérifications et d'avertissements sur la sécurité deu système sont générés. Il est aussi plus sécurisé pour une utilisation multi-utilisateurs.

Niveau 3

Ceci est le niveau de sécurité standard recommandé pour un ordinateur connecté à l'Internet en tant que client. La plupart des vérifications de sécurité sont régulièrement effectuées, notamment celle qui scrute les ports ouverts du système. Néammoins, ces ports sont laissés ouverts, et leur accès est autorisé à tous.

Du point de vue de l'utilisateur, le système est désormais un petit peu plus fermé, et des connaissances de base du système Linux seront nécessaires pour mener à bien certaines opérations. La sécurité proposée ici est celle d'une distribution standard Red Hat ou de l'une des précédentes distributions de Linux-Mandrake.

Niveau 4

Avec ce niveau de sécurité, l'utilisation du système en tant que serveur devient possible. La sécurité est suffisante pour que le système puisse accepter des connecxons de plusieurs clients. Seules les connexions depuis le système lui-même seront autorisées par défaut. De même, les services avancés ont été désactivés, et l'administrateur système devra activer ceux qu'il désire à la main. Il devra également définir les machines depuis lesquelles les connexions seront acceptées.

Les vérifications de sécurité avertiront l'administrateur système de possibles trous de sécurité ou d'intrusions sur le système.

Niveau 5

On reprend les caractéristiques du niveau 4, mais désormais, le système est entièrement fermé. Les options de sécurité sont au maximum. L'administrateur système doit ouvrir les ports et donner à d'autres ordinateurs l'accès aux services offert sur la machine.

Caractéristiques des niveaux de sécurité

Voici la description des différents points de sécurité gérés par les niveaux de sécurité. Ces points sont de natures diverses:

Niveau de012345
Optionssécurité      

vérifications de

 ouiouiouiouioui
sécurité globales

umask pour les

002002022022077077
utilisateurs

umask pour root

002002022022022077

shell sans

oui     
mot de passe

sont autorisés

à se connectertouslocallocalaucunaucunaucun
au serveur X

utilisateurs dans

ouiouioui   
le groupe audio

. dans '$PATH'

ouioui    

avertissements dans

ouiouiouiouioui
/var/log/security.log

avertissements

directement  ouioui
sur la console

avertissements

  ouiouiouioui
dans syslog

avertissements

envoyés par  ouiouioui
e-mail à root

vérification des

fichiers suid  ouiouiouioui
root

vérification de la

signature MD5 des  ouiouiouioui
fichiers suid root

vérification des

fichiers  ouiouiouioui
inscriptibles

vérification des

permissions   ouiouioui

vérification des

fichiers suid   ouiouioui
groupe

vérification des

   ouioui
fichiers sans
propriétaire

vérification de type

   ouioui
"promiscuous"

vérification des

   ouiouioui
ports ouverts

vérification de

l'intégrité du   ouiouioui
du fichier de mots
de passe

vérification de

l'intégrité du   ouiouioui
du fichier shadow

vérifications de

sécurité du   ouiouioui
système tous les
jours à minuit

tous les événements

du système sont   ouioui
dirigés vers
/dev/tty12

services avancés

    ouioui
désactivés

mot de passe de

    ouioui
démarrage (LILO)

permettre l'accès à

toustoustoustouslocalaucun

Remarque: six des dix vérifications périodiques peuvent détecter des modifications dans votre système. Elles sauvegardent la configuration antérieure du système (un jour plus tôt) dans le répertoire /var/log/security/ et vous avertissent des changements qui auraient pu intervenir dans l'intervalle. Ces vérifications sont:

« vérifications de sécurité globales »

« umask des utilisateurs »

Indique le umask qui sera utilisé pour les utilisateurs normaux du système suivant le niveau de sécurité.

« umask for root »

La même chose, mais pour root.

« shell sans mot de passe »

L'accès à la console est permis sans mot de passe.

« autorisés à se connecter au serveur X »

« utilisateurs dans le groupe audio »

Chaque utilisateur du système est automatiquement membre des groupes audio, urpmi et cdrom. Cela signifie que tous les utilisateurs obtiendront des privilèges particuliers pour utiliser la carte son, les paquetages, etc.

« . dans '$PATH' »

L'entrée . est ajoutée à la variable d'environnement '$PATH', ce qui permet d'exécuter facilement des programmes se trouvant dans le répertoire courant (c'est aussi, d'une certaine manière, une faille de sécurité).

« avertissements dans /var/log/security.log »

Chaque avertissement généré par MSEC est archivé dans le fichier /var/log/security.log.

« avertissements directement sur la console »

Chaque avertissement généré par MSEC est affiché directement sur la console.

« avertissements dans syslog »

Les avertissement générés par MSEC sont adressés au service syslog.

« avertissements envoyés par e-mail à root »

Les avertissement engendrés par MSEC sont également adressés à root par courrier électronique.

« vérification des fichiers suid root »

Recherche les ajouts ou suppressions de fichiers suid root sur le système. S'il y en a eu, une liste des exécutables concernés est retournée en avertissement.

« vérification de la signature MD5 des fichiers suid root »

Vérifie la signature MD5 de chaque fichier suid root du système. Si la signature a changé, cela signifie qu'une modification a été apportée à ce programme, ce qui peut être le signe d'une intrusion. Un avertissement est alors engendré.

« vérification des fichiers inscriptibles »

Cherche les fichiers qui sont inscriptibles par tout le monde sur le système. Une éventuelle liste de tels fichiers est alors engendrée en avertissement.

« vérification des permissions »

Celui-là vérifie les permissions de certains fichiers tels que .netrc ou les fichiers de configuration et les répertoires des utilisateurs. Si leurs permissions sont trop larges ou les propriétaires anormaux, un avertissement est engendré.

« vérification des fichiers suid groupe »

Recherche les ajouts ou suppressions de fichiers suid groupe sur le système. S'il y en a eu, une liste des exécutables concernés est retournée en avertissement.

« vérification des fichiers sans propriétaire »

Cette vérification recherche les fichiers appartenant à des utilisateurs inconnus du système. Si de tels fichiers sont trouvés, le propriétaire en devient automatiquement nobody.

« vérification de type "promiscuous" »

Ce test vérifie chaque carte Ethernet pour déterminer si elle se trouve en mode "promiscuous". Ce mode permet à une carte d'intercepter tous les paquets reçus par la carte, même ceux qui ne lui sont pas destinés. Cela peut signifier qu'un sniffer (« reniffleur ») fonctionne sur votre système. Cette vérification est effectuée toutes les minutes.

« vérification des ports ouverts »

Génere un avertissement contenant la liste des ports ouverts.

« vérification de l'intégrité du fichier de mots de passe »

Vérifie que chaque utilisateur a un mot de passe (non vide et non facile à trouver) et qu'il se trouve dans le fichier shadow.

« vérification de l'intégrité du fichier intitulé shadow »

Vérifie que chaque utilisateur a un mot de passe (non vide et non facile à trouver) dans le fichier shadow.

« vérifications de sécurité du système tous les jours à minuit »

Toutes les vérifications précédentes seront effectuées chaque jour à minuit. Cela repose sur l'ajout d'un script cron dans le fichier crontab.

« services avancés désactivés »

Tout service absent de /etc/security/msec/init-sh/server.4 pour le niveau 4 ou server.5 pour le niveau 5 sera désactivé. Il n'est pas effacé, mais simplement non démarré lors d'un changement de runlevel. Si vous avez besoin de certains de ces services, ajoutez-les à nouveau à l'aide de l'utilitaire chkconfig (vous aurez sans doute aussi besoin de les démarrer avec les scripts de démarrage d'init dans /etc/rc.d/init.d).

« mot de passe de démarrage »

Vous permet de définir un mot de passe pour LILO. Empêche les personnes non expérimentées de redémarrer la machine, mais en revanche la machine ne pourra pas redémarrer toute seule en cas de problème.

« permettre l'accès à »


(Retour à la table des matières)

Chapitre 8 : Auto Install (« installation automatique »)


Introduction

Ce chapitre est destiné aux utilisateurs de Linux-Mandrake qui souhaitent automatiser toute la procédure d'installation sur une machine. Il suffit d'insérer une disquette de démarrage dans le lecteur, éventuellement le CD, et voilà!

Cette possibilité sera particulièrement utile aux administrateurs système, réduisant considérablement le temps passé devant une machine pour une nouvelle installation, ou même une mise à jour... Les différents modes d'installation actuellement proposés sont effectués depuis:

Vous remarquerez en lisant ce document, que le processus de création d'une disquette auto-install n'a pas été simplifié pour les débutants afin de permettre la plus grande marge de manoeuvre possible. Sont décrites ici les étapes que doit suivre un administrateur système Linux, pour lequel cette possibilité est offerte. Néanmoins, en suivant scrupuleusement les étapes, un utilisateur Linux connaissant les commandes de base devrait pouvoir y arriver, surtout s'il ne doit pas modifier à la main le fichier de configuraion.

La démarche globale

La démarche à suivre pour configurer une installation automatique peut se décliner en quatre étapes simples:

Génération du fichier auto_inst.cfg.pl

Ce fichier contient toutes les informations nécessaires au script d'installation pour effectivement automatiser toute l'installation. Il contient toutes les informations que l'utilisateur aurait entrées en mode manuel. Il y a trois principales manières de générer ce fichier:

Faire une installation normale

La machine sur laquelle se fera l'installation devra être similaire à celles sur lesquelles se feront les installations automatiques. Néanmoins, ceci n'est pas absolument nécessaire, comme nous verrons plus loin.

Chaque installation génère un fichier /tmp/auto_inst.cfg.pl qui contient tous les choix faits durant l'installation, ainsi que tous les paramètres automatiquement déterminés (par exemple le partitionnement ou la carte réseau). C'est ce fichier, tel quel, qui sera utilisé pour automatiser l'installation.

Faire une simulation d'installation sur une machine Linux

Il suffit de lancer

Mandrake/mdkinst/usr/bin/perl-install/g_auto_install

depuis le CD d'installation. Cela ouvrira quatre fenêtre correspondant aux quatre zones affichées lors d'une installation « réelle ». Il suffit alors de suivre les étapes, comme si vous étiez en train d'installer Linux-Mandrake sur une des machines pour lesquelles l'auto-install est destinée. Bien sûr, cette simulation ne partitionnera ni ne formatera à nouveau vos disques! La seule modification apportée à votre système sera la création de quelques fichiers dans /tmp. Parmi eux, on retrouvera le fichier /tmp/auto_inst.cfg.pl dont on vient de parler.

Réécrire entièrement le fichier

En fait, pas vraiment entièrement. Il vaut mieux prendre comme base un fichier /tmp/auto_inst.cfg.pl que vous aurez préalablement généré à l'aide d'une des deux méthodes précédentes.

Il est de toute façon recommandé, quelle que soit la manière choisie pour écrire le fichier auto_inst.cfg.pl, de l'éditer ensuite à la main en suivant les détails donnés dans la dernière section de ce chapitre: « Le fichier auto_inst en détails »

Création d'une disquette de démarrage contenant l'image correspondant au mode d'installation

Suivez pour cela les instructions donnés dans la section intitulée « Installation » du manuel de l'utilisateur, comme si vous prépariez une installation normale. Utilisez:

Modifier la disquette de démarrage pour en faire une disquette d'auto-install

Il y a alors quelques modifications à apporter à la disquette de démarrage brute pour la rendre autonome. Cela consiste à modifier un fichier existant pour dire à la disquette qu'il va s'agir d'une installation automatique, et à ajouter quelques fichiers pour effectivement automatiser le processus:

Modifier le fichier syslinux.conf

Le fichier d'origine ressemble à cela:

default linux
prompt 1
timeout 72
display boot.msg
F1 boot.msg
F2 general.msg
F3 expert.msg
F4 rescue.msg
F5 kickit.msg
F6 param.msg
label linux
kernel vmlinuz
append ramdisk=32000 initrd=network.rdz mdkinst network
label expert
kernel vmlinuz
append expert ramdisk=32000 initrd=network.rdz mdkinst network
label ks
kernel vmlinuz
append ks ramdisk=32000 initrd=network.rdz mdkinst network
label rescue
kernel vmlinuz
append rescue root=/dev/fd0 load_ramdisk=1 prompt_ramdisk=1

Vous pouvez alors supprimer trois des quatre modes de démarrages pour ne garder que ks), dont vous faites le mode par défaut. La ligne timeout est devenue inutile, et vous devrez aussi rajouter un paramètre à la ligne append: kickstart=floppy.

Votre fichier sera alors semblable à:

default ks
prompt 1
display boot.msg
F1 boot.msg
F2 general.msg
F3 expert.msg
F4 rescue.msg
F5 kickit.msg
F6 param.msg
label ks
kernel vmlinuz
append ks kickstart=floppy ramdisk=32000 initrd=network.rdz mdkinst
network

Ajouter le fichier auto_inst.cfg.pl

Voilà enfin où se place ce fichier que nous avons précédemment peaufiné pour automatiser le processus d'installation. Il suffit de le copier sur la disquette de démarrage.

Ajouter le fichier ks.cfg pour une installation par réseau

Dans le cas ou vous souhaitez que votre installation soit effectuée via NFS ou FTP, vous devrez créer un fichier additionnel ks.cfg pour indiquer où se trouve le répertoire source d'installation. Il consiste en deux lignes, une pour la configuration du réseau, et l'autre pour indiquer où sur le réseau se trouve le répertoire source.

  1. Pour la configuration réseau, trois possibilités:
  2. pour indiquer l'emplacement du répertoire source:

192.168.1.9 fait référence à l'adresse IP de votre serveur NFS ou FTP, et /export au répertoire contenant l'arborescence source de l'installation. Pour un accès FTP vous devrez fournir un nom d'accès et un mot de passe.

Le fichier auto_inf en détails

Ce fichier, (formaté en Perl) contient comme nous l'avons déjà vu, toute l'information dont a besoin le processus d'installation pour installer de manière autonome Linux-Mandrake sur une machine. Il est composé d'une arborescence faite de clés et de valeurs, chacune d'entre elle de chaque côté du signe =>. Une valeur peut être elle-même un arbre ou une liste de valeurs.

Analysons chaque section du fichier, lesquelles correspondent au premier niveau de l'arborescence.

lang

Le code utilisé (en, fr_FR...) pour les langues (locales).

autoSCSI

On l'utilise pour détecter automatiquement les périphériques SCSI. Doit être désactivé sur certaines machines.

authentication

printer

Plusieurs paramètres pour configurer votre imprimante, qu'elle soit locale, distante, distante par SMB, distante par NCP,...

mouse

Vous pouvez supprimer cette section, car il est plus que probable que le processus d'installation reconnaîtra automatiquement le type de souris sur la machine cible.

netc

Plusieurs paramètre pour configurer le réseau sur la machine de destination:

timezone

superuser

Cela contient le mot de passe de root, et peut contenir une des deux variables:

intf

Cela contient l'information pour l'interface réseau, et notamment le protocole de démarrage (BOOTPROTO) utilisé pour une configuration réseau static, bootp, or DHCP.

keyboard

Indique la disposition du clavier en utilisant le code du pays (i.e. us, uk, de, fr, ...).

mkbootdisk

Indiquer:

base

Elle contient la liste des paquetages nécessaires à une installation de base de Linux-Mandrake. Vous ne devriez pas la modifier à moins que vous ne sachiez ce que vous faites.

users

Cela renferme les noms de login et mots de passe des utilisateurs non privilégiés.

installClass

La classe d'installation choisie.

partitioning

Plusieurs paramètres booléens pour indiquer comment doit se faire le partitionnement:

partitions

Au cas où vous n'auriez pas choisi le partitionnement automatique auto_allocate, vous devrez ajouter ici une section pour chacune des partitions à créer:

isUpgrade

À true (« vrai ») pour une mise à jour de Linux-Mandrake, à false (« faux ») ou absent pour une installation.

X

La configuration X par défaut.

default_packages

Les paquetages à installer sur le système.


(Retour à la table des matières)

Chapitre 9 : Les fichiers de démarrage: init « System V »


Dans la tradition Unix, il existe deux schémas de démarrage du système: le schéma BSD et le schéma « System V », tous les deux nommés d'après le système Unix qui les a implémentés pour la première fois (resp. Berkeley Software Distribution (« distribution de logiciels de Berkeley » et AT&T Unix System V). Le schéma BSD est le plus simple, mais le schéma System V, s'il est moins facile à comprendre (c'est le rôle de ce chapitre que de vous le faire comprendre), est nettement plus souple d'utilisation.

Au début fut init

Quand le système démarre, après que le noyau ait tout configuré et monté la racine du système de fichiers, il exécute le programme /sbin/init[22]. init est le père de tous les processus du système, et il est chargé d'amener le système au niveau d'exécution (runlevel) voulu. Nous reviendrons sur les niveaux d'exécution dans la section suivante.

Le fichier de configuration d'init est /etc/inittab. Ce fichier possède sa propre page de manuel (man inittab), mais nous ne décrirons ici que quelques-unes des directives.

La première ligne qui doit attirer l'attention est celle-ci:

si::sysinit:/etc/rc.d/rc.sysinit

Cette directive dit à init que /etc/rc.d/rc.sysinit doit être exécuté à l'initialisation du système avant toute autre chose. Pour déterminer le niveau d'exécution par défaut, init recherche ensuite la ligne contenant l'action initdefault:

id:5:initdefault:

En l'occurrence, donc, init sait que le niveau d'exécution par défaut est 5. Il sait également que pour entrer dans le niveau 5, il lui faudra exécuter la commande suivante:

l5:5:wait:/etc/rc.d/rc 5

Vous constatez que la syntaxe pour chacun des niveaux d'exécution est similaire.

init est également chargé de relancer (respawn) certains programmes que lui seul est en mesure de relancer. C'est le cas, par exemple, de tous les programmes de connexion qui tournent sur chacun des 6 terminaux virtuels[23]. Pour la deuxième console virtuelle, cela donne:

2:2345:respawn:/sbin/mingetty tty2

Les niveaux d'exécution

Tous les fichiers concernant le démarrage du système se trouvent dans le répertoire /etc/rc.d. Voici la liste des fichiers:

$ ls /etc/rc.d
init.d/  rc.local*    rc0.d/  rc2.d/  rc4.d/  rc6.d/
rc*      rc.sysinit*  rc1.d/  rc3.d/  rc5.d/

En premier lieu, comme nous l'avons vu, le fichier rc.sysinit est exécuté. C'est ce fichier qui est chargé de mettre en place la configuration de base de la machine: type du clavier, configuration de certains périphériques, vérification des systèmes de fichiers, etc.

Puis le script rc est exécuté, avec en argument le niveau d'exécution. Nous avons vu que le niveau d'exécution est un simple entier, et pour chaque niveau d'exécution <x> défini, il doit exister un répertoire correspondant rc<x>.d. Dans une installation typique de Linux-Mandrake, vous pouvez donc voir que 6 niveaux d'exécution sont ainsi définis:

Intéressons-nous par exemple au contenu du répertoire rc5.d:

$ ls rc5.d
K15postgresql@  K60atd@      S15netfs@   S60lpd@        S90xfs@
K20nfs@         K96pcmcia@   S20random@  S60nfs@        S99linuxconf@
K20rstatd@      S05apmd@     S30syslog@  S66yppasswdd@  S99local@
K20rusersd@     S10network@  S40crond@   S75keytable@
K20rwhod@       S11portmap@  S50inet@    S85gpm@
K30sendmail@    S12ypserv@   S55named@   S85httpd@
K35smb@         S13ypbind@   S55routed@  S85sound@

Comme vous pouvez le voir, tous les fichiers de ce répertoire sont des liens symboliques et ils ont tous une forme bien particulière. Leur forme générale est

<S|K><ordre><nom_du_service>

Le S signifie Start, « démarrer » le service, et K signifie Kill, « arrêter » le service. Les scripts sont exécutés dans l'ordre des numéros croissants, et si deux scripts ont le même numéro, l'ordre alphabétique prévaut. On peut voir également que chacun de ces liens symboliques pointe vers des scripts situés dans /etc/rc.d/init.d (à l'exception de local), scripts qui sont chargés de contrôler un service bien particulier.

Quand le système entre dans un niveau d'exécution donné, il exécute d'abord les liens K dans l'ordre: rc regarde où pointe le lien, puis appelle le script correspondant avec le seul argument stop. Puis il exécute les scripts S, toujours selon la même méthode, mis à part que le script est appelé avec l'argument start.

Ainsi, sans citer tous les scripts, on peut voir que quand le système entre dans le niveau d'exécution 5, il exécute d'abord K15postgresql, c'est-à-dire /etc/rc.d/init.d/postgresql stop. Puis K20nfs, puis K20rstatd, jusqu'au dernier; ensuite, il exécute tous les scripts S: S05ampd en premier lieu, qui invoque donc /etc/rc.d/init.d/apmd start, et ainsi de suite.

Armé de tout ceci, vous pouvez à votre guise créer un niveau d'exécution entier en quelques minutes, ou empêcher le démarrage ou l'arrêt d'un service en effaçant le lien symbolique correspondant (il existe cependant des programmes d'interfaçage pour ce faire, en particulier tksysv et chkconfig. Le premier est un programme graphique).


(Retour à la table des matières)

Chapitre 10 : Systèmes de fichiers et points de montage


Le mieux pour comprendre « comment ça marche » est de prendre un cas pratique, ce que nous allons faire ici. Supposons que vous veniez juste d'acheter un disque dur flambant neuf, encore vierge de toute partition. Votre partition consacrée à Linux-Mandrake est pleine à ras bord, et plutôt que de tout refaire à partir de zéro, vous décidez de déplacer toute une partie de l'arborescence sur votre nouveau disque dur. Votre nouveau disque dur étant très gros, vous décidez d'y déplacer votre répertoire le plus encombrant: /usr. Mais en premier lieu, un peu de théorie.

Principes

Comme nous l'avons déjà mentionné dans le Guide d'installation, chaque disque dur est divisé en plusieurs partitions, et chacune de ces partitions contient un système de fichiers. Tandis que Windows associe une lettre à chacun de ces systèmes de fichiers (enfin, seulement à ceux qu'il reconnaît), Linux possède une arborescence des fichiers unique, et chacun des systèmes de fichiers est monté à un endroit de l'arborescence.

De même que Windows a besoin d'un « lecteur C: », Linux a besoin de pouvoir monter la racine de son arborescence (/) quelque part, en l'occurrence sur une partition qui contient le système de fichiers racine. Une fois la racine montée, on peut monter d'autres systèmes de fichiers dans l'arborescence, sur différents points de montage dans l'arborescence. N'importe quel répertoire en-dessous de la racine peut faire office de point de montage.

Cela autorise une grande souplesse dans la configuration. Dans le cas d'un serveur web, par exemple, il est courant de consacrer une partition entière au répertoire hébergeant les données du serveur web. Le répertoire qui les contient est en règle générale /home/httpd, qui fera donc office de point de montage pour la partition. Vous pouvez voir dans les figures 50.1 et 17.2 la situation du système avant et après le montage du système de fichiers.

Un système de fichiers pas encore monté
Figure 50.1 Un système de fichiers pas encore monté

Le système de fichiers est maintenant monté
Figure 17.2 Le système de fichiers est maintenant monté

Comme vous pouvez l'imaginer, cela présente de nombreux avantages: l'arborescence sera toujours la même, qu'elle s'étende sur un seul système de fichiers ou plusieurs dizaines[24], et il est toujours possible de déplacer physiquement une partie encombrante de l'arborescence sur une autre partition quand la place vient à manquer, ce que nous allons faire ici.

Il faut savoir deux choses sur les points de montage:

Partitionner un disque dur et formater une partition

Des principes évoqués ci-dessus et pour ce qui nous intéresse dans cette section, il faut retenir deux choses: un disque dur fonctionnel est divisé en partitions et chacune de ces partitions héberge un système de fichiers. Or, pour l'instant, votre disque dur tout neuf ne possède ni l'un ni l'autre, c'est donc par là qu'il faut commencer, avec en premier lieu le partitionnement. Pour cela, vous devez être root.

Tout d'abord, il faut savoir quel est le « nom » de votre disque dur, c'est-à-dire quel fichier le matérialise. Supposons que vous l'ayez mis en tant qu'esclave sur votre interface IDE primaire, ce sera donc /dev/hdb[25].

Les commandes mount et umount

Maintenant que le système de fichiers est créé, on peut monter la partition. Elle sera vide dans un premier temps, bien sûr. La commande pour monter des systèmes de fichiers est la commande mount, et sa syntaxe est la suivante:

mount [options] <-t type> [-o options de montage] <périphérique>
  <point de montage>

En l'occurrence, on souhaite monter notre partition sur /mnt (ou tout autre point de montage que vous aurez choisi --- n'oubliez pas qu'il doit exister); la commande pour monter notre partition nouvellement créée est la suivante:

$ mount -t ext2 /dev/hdb1 /mnt

L'option -t sert à spécifier quel type de système de fichiers la partition est censée héberger. Parmi les systèmes de fichiers que vous rencontrerez le plus souvent, vous trouverez ext2 (le système de fichiers de Linux), vfat (pour toutes les partitions DOS/Windows: FAT 12, 16 ou 32) et iso9660 (système de fichiers des CD-ROM).

L'option -o sert à spécifier une ou plusieurs options de montage. Ces options dépendent du système de fichiers utilisé. Reportez-vous à la page de manuel de mount(8) pour plus de détails.

Maintenant que vous avez monté votre nouvelle partition, il s'agit de recopier tout le répertoire /usr dedans:

$ (cd /usr && tar cf - .) | (cd /mnt && tar xpvf -)

Maintenant que les fichiers sont recopiés, on peut démonter notre partition. Pour cela, la commande est umount. Sa syntaxe est simple:

umount <point de montage|périphérique>

Donc, pour démonter notre nouvelle partition, on peut taper:

$ umount /mnt

ou bien:

$ umount /dev/hdb1

Cette partition étant appelée à « devenir » notre répertoire /usr, il nous faut le dire au système. Pour cela, il nous faut remplir:

Le fichier /etc/fstab

Le fichier /etc/fstab permet d'automatiser le montage de certains systèmes de fichiers, en particulier au démarrage du système. Il contient une série de lignes décrivant les systèmes de fichiers, leur point de montage et d'autres options. Voici un exemple de fichier /etc/fstab:

/dev/hda1   /           ext2    defaults        1 1
/dev/hda5   /home       ext2    defaults        1 2
/dev/hda6   swap        swap    defaults        0 0
/dev/fd0    /mnt/floppy auto    sync,user,noauto,nosuid,nodev,unhide 0 0
/dev/cdrom  /mnt/cdrom  auto    user,noauto,nosuid,exec,nodev,ro 0 0
none        /proc       proc    defaults        0 0
none        /dev/pts    devpts  mode=0622       0 0

Une ligne contient, dans l'ordre:

Comme de juste, il y a toujours une entrée pour la racine. Les partitions de swap sont particulières puisqu'elles ne sont pas visibles dans l'arborescence, et le champ « point de montage » pour ces partitions contient le mot-clé swap. Nous reviendrons plus en détail sur /proc.

Revenons à nos moutons. Vous avez bougé toute la hiérarchie /usr sur /dev/hdb1 et donc vous voudriez que cette partition soit montée au démarrage. Dans ce cas il vous faudra ajouter une entrée dans le fichier:

/dev/hdb1 /usr ext2 defaults 1 2

Ainsi à chaque démarrage la partition sera montée. Elle sera également vérifiée si besoin est.

Il existe deux options particulières: noauto et user. L'option noauto indique que le système de fichiers ne doit pas être monté au démarrage mais doit être monté explicitement. L'option user indique que n'importe quel utilisateur peut monter et démonter le système de fichiers. Comme vous pouvez le constater, ces deux options sont logiquement utilisées pour le lecteur CD-ROM et le lecteur de disquettes. Il existe d'autres options, et /etc/fstab dispose même de sa propre page de manuel: fstab(5).

Enfin, l'un des avantages (et non des moindres) de ce fichier est qu'il simplifie la syntaxe de la commande mount. Pour monter un système de fichiers qui y est référencé, on peut au choix référencer le point de montage ou le périphérique. Ainsi, pour monter une disquette, on peut taper:

$ mount /mnt/floppy

ou bien:

$ mount /dev/fd0

Terminons-en avec notre exemple de déplacement de partitions: nous avons recopié la hiérarchie /usr et rempli /etc/fstab pour que la nouvelle partition soit montée au démarrage. Mais pour l'instant les anciens fichiers de /usr sont toujours là! Il faut donc les effacer pour libérer de la place (ce qui, après tout, était notre objectif premier). Pour cela, donc, il vous faut:

et vous en avez terminé.


(Retour à la table des matières)

Chapitre 11 : Compilation et mise en place de nouveaux noyaux


Avec la notion de montage de systèmes de fichiers et la compilation des sources, c'est sans doute le sujet qui fâche le plus les débutants. La compilation d'un nouveau noyau n'est en général pas nécessaire, puisque les noyaux installés par Linux-Mandrake contiennent le support pour un nombre conséquent de périphériques, mais...

Il peut arriver, pourquoi pas, que vous ayez envie de le faire, rien que pour voir « ce que ça fait ». À part faire travailler votre PC et votre cafetière un peu plus que d'habitude, pas grand-chose. Toutefois, l'objectif de ce chapitre est de faire en sorte que votre cafetière reste utilisable après la compilation.

Il existe aussi des raisons valables. Par exemple, vous avez lu que le noyau que vous utilisez a un bogue au niveau de la sécurité, bogue qui est corrigé dans une version plus récente; ou encore, un nouveau noyau intègre le support pour un périphérique dont vous avez bien besoin. Vous avez le choix d'attendre des mises à jour ou bien de compiler un nouveau noyau vous-même, et optez pour la deuxième solution.

Dans tous les cas, achetez du café.

Où trouver les sources du noyau

Le site primaire d'hébergement des sources du noyau est le site FTP ftp.kernel.org, mais il possède un nombre important de miroirs, et tous ont pour nom ftp.xx.kernel.org, où xx représent le code ISO du pays. Pour la France, ce code est fr, et par conséquent le miroir préférentiel sera la machine ftp.fr.kernel.org. À partir de l'annonce officielle de la sortie du noyau, vous pouvez compter deux bonnes heures avant que tous les miroirs soient alimentés.

Sur tous ces serveurs FTP, les sources sont dans le répertoire /pub/linux/kernel. Ensuite, allez dans le répertoire dont la série vous intéresse: ce sera certainement v2.2. Rien ne vous empêche d'essayer des noyaux 2.3, mais gardez à l'esprit que ce sont des noyaux expérimentaux. Le fichier contenant les sources du noyau est linux-<version.du.noyau>.tar.gz, par exemple linux-2.2.11.tar.gz.

Il existe également des patches (corrections) à appliquer aux sources du noyau pour le mettre à jour de façon incrémentale: ainsi, si vous avez déjà les sources du noyau 2.2.11 et voulez mettre à jour vers le noyau 2.2.13, vous pouvez vous dispenser de télécharger les sources en entier, et télécharger simplement les patches patch-2.2.12.gz et patch-2.2.13.gz. C'est en règle générale une bonne idée, les sources occupant aujourd'hui plus de 12 Mo.

Décompacter les sources du noyau, corriger ce dernier (si nécessaire)

Les sources du noyau sont à placer dans /usr/src. Il vous faut donc vous placer dans ce répertoire puis y décompresser les sources:

$ cd /usr/src
$ mv linux linux.old
$ tar xzf /path/to/linux-2.2.11.tar.gz

La commande mv linux linux.old est nécessaire: en effet, vous disposez peut-être déjà des sources d'une autre version du noyau. Cette commande fera en sorte que vous ne les écrasiez pas. Dès l'archive décompressée, vous disposez d'un répertoire linux avec les sources du nouveau noyau.

Maintenant, les patches. Nous allons supposer que vous voulez effectivement « patcher » (« corriger ») du 2.2.11 vers le 2.2.13 et avez téléchargé les patches nécessaires pour ce faire: rendez-vous donc dans le répertoire linux nouvellement créé, puis appliquez les patches:

$ cd linux
$ gzip -dc /path/to/patch-2.2.12.gz | patch -p1 #
$ gzip -dc /path/to/patch-2.2.13.gz | patch -p1
$ cd ..

De façon générale passer d'une version 2.2.x à une version 2.2.y requiert que vous appliquiez tous les patches 2.2.x+1, 2.2.x+2, ..., 2.2.y dans l'ordre. Pour « redescendre » d'une version 2.2.y vers une version 2.2.x, répétez exactement la même procédure mais en appliquant les patches dans l'ordre inverse et avec l'option -R de patch (Reverse, « inverse »). Ainsi, pour repasser du noyau 2.2.13 au noyau 2.2.11, vous feriez:

$ gzip -dc /path/to/patch-2.2.13.gz | patch -p1 -R
$ gzip -dc /path/to/patch-2.2.12.gz | patch -p1 -R

Ensuite, pour faire propre (et aussi pour s'y retrouver), on peut renommer linux pour refléter la version du noyau et créer un lien symbolique:

$ mv linux linux-2.2.11
$ ln -s linux-2.2.11 linux

Il est maintenant temps de passer à la configuration. Pour cela il vous faut être dans le répertoire des sources:

$ cd linux

Configuration du noyau

Pour configurer le noyau vous avez le choix entre:

Malheureusement la configuration du noyau n'est pas encore internationalisée, tout est en anglais. Nous allons parcourir la configuration section par section, mais vous pouvez sauter des sections pour passer à celle qui vous intéresse si vous utilisez menuconfig ou xconfig. Le choix pour les options est 'y' pour Yes (fonctionnalité compilée en dur dans le noyau), 'm' pour Module (fonctionnalité compilée en module), ou 'n' pour No (ne pas inclure dans le noyau).

Pour xconfig, vous aurez deviné à quoi servent les boutons Main Menu, Next et Prev. Pour menuconfig, servez-vous de la touche Entrée pour sélectionner une section, et changez les options avec 'y', 'm' ou 'n' pour en changer l'état ou bien pressez la touche Entrée et faites votre choix pour les options à choix multiples. Exit sortira d'une section et sortira de la configuration si vous êtes dans le menu principal. Et évidemment, il y a Help.

Voici donc une liste relativement brutale des options et des choix recommandés pour ces options, émaillée d'explications quand cela est nécessaire. Les options qui ne sont pas abordées ici sont laissées à votre discrétion. Les laisser « telles que vous les avez trouvées » est en général une bonne chose.

Et voilà! La configuration est enfin terminée. Quittez en sauvegardant votre configuration.

Le fichier de configuration a le nom /usr/src/linux/.config. C'est en général une très bonne idée d'en faire une copie de sauvegarde! De préférence, mettez cette copie dans le répertoire personnel de root. La configuration changeant très peu entre les révisions du noyau (c'est-à-dire entre deux noyaux 2.2.x ou 2.3.x ou...), vous pourrez vous en resservir pour configurer vos futurs noyaux.

Maintenant, place à la compilation.

Compilation et installation des modules

Tout d'abord une petite chose: si vous compilez un noyau de version identique à une version déjà présente sur votre système, les modules de ce dernier doivent être effacés avant. Par exemple, si vous recompilez un noyau 2.2.10, il vous faudra effacer le répertoire /lib/modules/2.2.10.

La compilation du noyau et des modules, ainsi que l'installation des modules se font en une seule ligne:

$ make dep && make bzImage && make modules &&
  make modules_install

Si vous vous demandez à quoi sert ce fameux &&, voici l'explication: a && b exécute d'abord a, et exécute b si et seulement si a s'est terminé avec succès. Par extension vous imaginez donc ce que fait la ligne de commande ci-dessus: si l'une des commandes échoue, celles qui suivent ne seront pas exécutées. Une autre conséquence en cas d'échec est qu'il y a un bogue dans le noyau! Si c'est le cas, signalez-le nous...

Autre chose encore: non, compiler un nouveau noyau n'invalidera pas l'ancien! Si la compilation échoue ici, cela ne veut pas dire que votre système ne pourra plus démarrer. Pour empêcher votre système de démarrer, il faut vraiment que vous fassiez une grosse bêtise --- ce qui, autant vous rassurer, ne vous arrivera pas si vous respectez scrupuleusement les consignes de ce chapitre :)

Installation du nouveau noyau, mise à jour de LILO

Votre noyau étant maintenant compilé avec succès, il reste à l'installer. Toujours pour rester « propre » et identifier vos noyaux de façon non ambiguë, il est préférable de respecter une certaine discipline de nommage. On va supposer que vous installez un noyau 2.2.13. À ce moment-là, tapez les commandes suivantes:

$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.13
$ cp System.map /boot/System.map-2.2.13

Après cela, il vous reste à mettre à jour /etc/lilo.conf. Évidemment, gardez la possibilité de démarrer votre noyau actuel! Voici à quoi ressemble un lilo.conf typique, après installation de votre distribution Linux-Mandrake et avant modification:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only
other=/dev/hda2
        label=dos
        table=/dev/hda
Attention: Cet exemple suppose que vous utilisez LILO en tant que chargeur principal! Si vous utilisez System Commander, la directive boot= sera différente, et vous n'aurez probablement pas de section other.

Un fichier lilo.conf est composé d'une section principale, suivie d'une section pour le lancement de chaque système d'exploitation. Dans l'exemple du fichier ci-dessus la section principale est composée des directives suivantes:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50

La directive boot= dit à LILO où il doit installer son secteur de boot; en l'occurrence, il s'agit du MBR (Master Boot Record, « enregistrement principal de démarrage ») du premier disque dur IDE. Si vous voulez faire une disquette LILO il vous suffira de remplacer /dev/hda par /dev/fd0 :) La directive prompt demande à LILO de présenter l'invite au démarrage et d'entamer la procédure après 5 secondes (timeout=50). Si vous retirez la directive timeout=, LILO attendra jusqu'à ce que vous ayez tapé quelque chose.

Puis vient une section linux:

image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only

Une section linux commence par la directive image=, suivie par le chemin complet vers un noyau Linux valide. À l'instar de toute section, elle contient une directive label= pour l'identifier de façon unique. La directive root= dit à LILO quelle est la partition hébergeant le système de fichiers racine pour ce système Linux, elle pourra être différente chez vous. La directive read-only commande à LILO de monter ce système de fichiers racine en lecture seule au démarrage: s'il n'y a pas cette directive, vous aurez un message d'avertissement.

Puis vient la section Windows:

image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only

En fait, une section débutant par other= sert à LILO pour démarrer tout système d'exploitation autre que Linux: l'argument de cette directive est l'emplacement du secteur de boot de ce système, et en l'occurrence il s'agit d'un système Windows. Pour trouver le secteur de boot, situé au début de la partition hébergeant cet autre système, Linux a également besoin de savoir où se trouve la table des partitions qui lui permettra de localiser la partition en question, ce que fait la directive table=. La directive label=, comme pour une section linux, sert à identifier le système.

Avant de rajouter notre section linux, nous allons faire d'une pierre deux coups :) Composons un message qui s'affichera au démarrage avant l'apparition du prompt LILO, et qui explique comment utiliser celui-ci:

$ cat >/boot/message <<EOF
> Bienvenue, ici LILO (LInux LOader).
> Tapez sur la touche TAB pour avoir une liste des images de boot .
> Vous disposez de:
> * exp : démarrage de Linux-Mandrake avec votre nouveau noyau
> * linux : noyau d'origine de Linux-Mandrake
> * dos : Windows
> Appuyer sur ENTREE sans entrer le nom d'une image démarrera
> la première image sur la liste, à savoir exp .
> EOF
$

Et voilà! Pour que ce message s'affiche au boot, il suffit de rajouter la directive:

message=/boot/message

dans la section principale de lilo.conf. Maintenant, il faut rajouter la section Linux pour pouvoir démarrer sur le nouveau noyau. Dans cet exemple, elle sera mise en tête, mais rien ne vous empêche de la mettre à un autre endroit:

image=/boot/vmlinuz-2.2.13
        label=exp
        root=/dev/hda1
        read-only

Si vous avez compilé votre noyau avec le framebuffer, vous voudrez sans doute l'exploiter: dans ce cas, il faut rajouter une directive à la section qui lui indique en quelle résolution vous voulez démarrer. La liste des modes est disponible dans le fichier /usr/src/linux/Documentation/fb/vesafb.txt (pour le framebuffer VESA! Sinon, reportez-vous au fichier correspondant). Pour du 800x600 en 32 bits[26], le numéro du mode est 0x315, il faut donc rajouter la directive:

vga=0x315

à notre nouvelle section LILO. Voici donc à quoi ressemble notre lilo.conf après modification, agrémenté de quelques commentaires en plus (toutes les lignes commençant par #), qui seront ignorés par LILO:

#
# Section principale
#
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
# Notre message d'invite
message=/boot/message
# Présenter le prompt...
prompt
# ... attendre 5 secondes
timeout=50
#
# Notre nouveau noyau: image par défaut
#
image=/boot/vmlinuz-2.2.13
        label=exp
        root=/dev/hda1
        read-only
# Si on utilise le framebuffer VESA:
        vga=0x315
#
# Le noyau d'origine
#
image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only
#
# Section Windows
#
other=/dev/hda2
        label=dos
        table=/dev/hda

N'oubliez pas d'adapter le fichier à votre configuration! Le système de fichiers racine de Linux est ici /dev/hda1 mais il peut très bien être ailleurs chez vous, et la même chose est valable pour Windows. Maintenant que le fichier est modifié de façon appropriée, il faut dire à LILO de changer le secteur de boot:

$ lilo
Added exp *
Added linux
Added dos
$

Vous pouvez ainsi compiler autant de noyaux que vous le souhaitez, en rajoutant autant de sections Linux que nécessaire. Il ne vous reste plus qu'à redémarrer pour tester votre nouveau noyau.

Partie III : Annexes, glossaire et index



(Retour à la table des matières)

Chapitre 1 : Installation d'un logiciel libre


On me demande souvent comment installer un logiciel libre à partir des sources. Compiler soi-même un logiciel est pourtant très simple, car la plupart des étapes à passer sont les mêmes, quel que soit le logiciel à installer.

Le but de ce document est de guider pas à pas le débutant, en essayant d'éviter l'écueil de l'incantatoire, et en lui expliquant sommairement la signification de chacune des manipulations. Je suppose cependant que le lecteur possède un minimum de connaissances Unix (de type ls ou mkdir).

Ce guide n'est qu'un guide, et pas un manuel de référence. C'est pourquoi un certain nombre de pointeurs sont fournis à la fin, afin de répondre aux questions demeurées sans réponse. Ce guide est probablement perfectible, j'attends donc avec impatience toute remarque ou correction sur son contenu.

Introduction

Ce qui différencie un logiciel libre d'un logiciel propriétaire, c'est l'accès au code source du logiciel[27]. Cela implique que les logiciels libres sont généralement distribués sous forme d'archives de fichiers sources. C'est assez déroutant pour le débutant, car l'utilisateur du logiciel doit compiler lui-même les sources du logiciel avant de pouvoir utiliser le logiciel.

Aujourd'hui, il existe des versions pré-compilées de la plupart des logiciels libres existants. L'utilisateur pressé n'a plus qu'à installer le binaire. Cependant, certains logiciels ne sont pas distribués sous cette forme, ou bien les versions les plus récentes ne sont pas encore distribuées sous cette forme. De plus, si vous utilisez un couple système d'exploitation / architecture exotique, beaucoup de logiciels libres ne seront pas déja précompilés pour vous. Par ailleurs, compiler soi-même ses logiciels permet de ne conserver que les options intéressantes ou d'étendre les fonctionnalités du logiciel en appliquant des extensions afin d'obtenir un logiciel répondant parfaitement à ses besoins.

Pré-requis

Pour installer un logiciel libre, vous aurez besoin:

Compiler un logiciel libre ne présente généralement pas trop de problèmes, mais si vous n'êtes pas habitué, la moindre anicroche peut vous plonger dans la confusion. Le but de ce document est justement de vous montrer comment vous sortir de ce genre de situation.

Compilation

Principe

Pour passer d'une forme source à une forme binaire, il est nécessaire d'effectuer une compilation. Cette compilation est généralement effectuée sur des programmes écrits en langage C ou C++ (qui sont les plus répandus dans la communauté du logiciel libre, notamment dans le monde Unix). Certains logiciels libres sont écrits dans des langages ne nécessitant pas de compilation (par exemple Perl ou le shell), mais ils ont quand même besoin d'être configurés.

La compilation C est assurée, très logiquement, par un compilateur qui est généralement GCC, le compilateur libre écrit par le projet GNU (http://www.gnu.org/). La compilation d'un logiciel entier est une tâche complexe, qui passe par la compilation successive de multiples fichiers sources (il est plus facile pour le programmeur d'isoler les différentes parties de son travail dans des fichiers distincts, pour diverses raisons). Afin de faciliter la tâche, ces opérations répétitives sont effectuées par un utilitaire du nom de make.

Les quatre phases de la compilation

Pour bien comprendre le mécanisme de la compilation (et donc être à même de résoudre des problèmes éventuels), il faut savoir qu'elle s'effectue en quatres phases. Il s'agit d'une conversion progressive (en quatre étapes) d'un texte écrit dans un langage compréhensible par un humain entraîné (le langage C par exemple) vers un langage compréhensible par une machine (ou un humain très entraîné, et encore, dans de rares cas). GCC exécutera l'un après l'autre quatre programmes qui se chargeront chacun d'une étape:

Structure d'une distribution

Une distribution de logiciel libre correctement structurée est généralement organisée d'une manière bien précise:

Décompactage

Archive tar.gz

La norme[28] pour la compression sous Unix est le format gzip, développé par le projet GNU, et considéré comme un des meilleurs outils de compression généralistes.

gzip est souvent associé à un utilitaire nommé tar. tar est un rescapé des temps préhistoriques où les informaticiens stockaient leurs informations sur des bandes magnétiques. Aujourd'hui, les disquettes et les CD-ROM ont remplacé les bandes magnétiques, mais tar est toujours utilisé pour créer des archives. Il est par exemple possible de concaténer (mettre à la suite les uns des autres) tous les fichiers d'un répertoire dans un seul fichier grâce à tar. Ce fichier peut ensuite être facilement compressé à l'aide de gzip.

C'est pourquoi de nombreux logiciels libres sont disponibles sous la forme d'archives tar, compressées avec gzip. Leur extension est donc .tar.gz (ou encore, sous forme abrégée, .tgz).

Utilisation de GNU Tar

Pour décompresser cette archive, on peut utiliser gzip, puis tar ensuite. Mais la version GNU de tar (tar) permet d'utiliser gzip « à la volée », et ainsi de décompresser une archive de manière transparente, sans nécessiter l'espace disque supplémentaire.

L'utilisation de tar est incantatoire:

tar <options de fichier> <fichier en .tar.gz> [<fichiers>]

L'option <fichiers> est facultative. Dans le cas où elle est omise, le traitement s'effectuera sur toute l'archive. Si vous voulez extraire le contenu d'une archive .tar.gz, alors vous n'avez certainement pas besoin de spécifier cet argument.

Par exemple:

$ tar xvfz guile-1.3.tar.gz
-rw-r--r-- 442/1002      10555 1998-10-20 07:31 guile-1.3/Makefile.in
-rw-rw-rw- 442/1002       6668 1998-10-20 06:59 guile-1.3/README
-rw-rw-rw- 442/1002       2283 1998-02-01 22:05 guile-1.3/AUTHORS
-rw-rw-rw- 442/1002      17989 1997-05-27 00:36 guile-1.3/COPYING
-rw-rw-rw- 442/1002      28545 1998-10-20 07:05 guile-1.3/ChangeLog
-rw-rw-rw- 442/1002       9364 1997-10-25 08:34 guile-1.3/INSTALL
-rw-rw-rw- 442/1002       1223 1998-10-20 06:34 guile-1.3/Makefile.am
-rw-rw-rw- 442/1002      98432 1998-10-20 07:30 guile-1.3/NEWS
-rw-rw-rw- 442/1002       1388 1998-10-20 06:19 guile-1.3/THANKS
-rw-rw-rw- 442/1002       1151 1998-08-16 21:45 guile-1.3/TODO
...

Parmi les options à passer à tar:

bzip2

Un format de compression nommé bzip2 tend en ce moment à remplacer gzip. bzip2 produit des archives de taille plus petite que gzip, mais n'est pas encore une norme de fait. On trouve donc depuis peu des archives à l'extension .tar.bz2.

bzip2 s'utilise de la même manière que gzip par le biais de la commande tar. Il suffit de remplacer la lettre z par la lettre y. Par exemple:

$ tar xvfy toto.tar.bz2

Certaines distributions utilisent (ou ont utilisé) à la place l'option I:

$ tar xvfI toto.tar.bz2

Une autre possibilité (qui semble être plus portable, mais plus longue à taper!):

$ tar --use-compress-program=bzip2 -xvf toto.tar.bz2

Précisions qu'il est nécessaire que bzip2 soit installé et inclus dans la variable 'PATH' avant que vous n'exécutiez tar.

C'est tout simple!

Le plus simple

Maintenant que vous êtes prêt à décompacter l'archive, n'oubliez pas de le faire en tant qu'administrateur (root). En effet, vous allez avoir besoin de faire des manipulations qu'un simple utilisateur ne peut faire, et même si ce n'est pas le cas de toutes ces manipulations, il est plus facile d'agir en tant que root pendant toute la durée de l'opération.

Commencez par vous rendre dans le répertoire /usr/local/src, et copiez l'archive dans ce répertoire. Cela vous permet de retrouver à tout moment l'archive si vous perdez le logiciel installé. Si vous n'avez pas beaucoup d'espace disque, alors sauvegardez l'archive sur disquette après avoir installé le logiciel, ou effacez-la, mais soyez sûr de pouvoir la retrouver sur le réseau à tout moment.

Normalement, le décompactage d'une archive tar devrait créer un nouveau répertoire (détail dont vous pouvez vous être assuré grâce à l'option t). Rendez-vous maintenant dans ce répertoire, vous êtes prêt à continuer.

Le plus sûr

Le système Unix (dont font partie GNU/Linux et FreeBSD) est un système sécurisé. Cela signifie que les utilisateurs normaux ne peuvent pas effectuer des opérations qui mettraient le système en danger (comme par exemple formater un disque), ni altérer les fichiers des autres utilisateurs. Dans la pratique et en particulier, cela immunise aussi le système contre les virus.

En revanche, l'utilisateur root a le droit de tout faire, y compris d'exécuter un programme malicieux (comme un virus). Disposer du code source est une garantie de sécurité face aux virus, mais vous avez tout à fait le droit d'être paranoïaque[29].

L'idée consiste à créer un utilisateur dédié à l'administration (free ou admin par exemple) par le biais de la commande adduser. Ce compte devra avoir le droit d'écrire dans le répertoire /usr/local/src ainsi que dans les répertoires /usr/local/bin, /usr/local/lib et toute l'arborescence de /usr/man (il se peut qu'il ait également besoin de copier des fichiers ailleurs). Pour cela, je vous recommande soit de rendre cet utilisateur propriétaire des répertoires nécessaires, soit de créer un groupe pour lui, et de rendre ces répertoires accessibles en écriture pour ce groupe.

Une fois que ces précautions sont prises, vous pouvez effectuer les manipulations décrites dans la section 72.0.

Configuration

Un intérêt purement technique du fait de disposer des sources est le portage du logiciel. Un logiciel libre développé pour un Unix est utilisable sur tous les Unix existants (libres ou propriétaires), avec cependant quelques modifications. Ceci implique une configuration du logiciel juste avant la compilation.

Il existe plusieurs systèmes de configuration, il va falloir utiliser celui que l'auteur du logiciel a prévu (parfois, plusieurs sont au programme). Généralement, vous pouvez:

Autoconf

Principe

Autoconf permet de configurer correctement un logiciel. Il crée les fichiers nécessaires à la compilation (par exemple, Makefile), et modifie parfois directement les sources (comme par le biais d'un fichier config.h.in).

Le principe d'Autoconf est simple:

Exemple

Un exemple d'utilisation d'Autoconf:

$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXpm... yes
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile

Si on veut avoir un peu plus de contrôle sur ce qu'engendre la commande configure, on peut lui passer des options via la ligne de commande ou des variables d'environnement. Exemple:

$ ./configure --with-gcc --prefix=/opt/GNU

ou encore (sous Bash):

$ export CC=`which gcc`
$ export CFLAGS=-O2
$ ./configure --with-gcc

ou:

$ CC=gcc CFLAGS=-O2 ./configure

Et si... cela ne fonctionne pas?

Typiquement, il s'agit d'une erreur de type configure: error: Cannot find library guile (« configure: erreur: je n'arrive pas à trouver la bibliothèque guile ») (cela couvre la plupart des erreurs du script configure).

Clairement, le script configure n'a pas réussi à trouver une bibliothèque (dans notre exemple, la bibliothèque guile). Le principe est que le script configure compile un petit programme de test qui utilise cette bibliothèque. S'il n'arrive pas à le compiler, c'est qu'il n'arrivera pas à compiler le logiciel. D'où une erreur.

Si vous ne comprenez pas le message d'erreur stocké dans le fichier config.log, n'hésitez pas à demander aide et assistance à la communauté du logiciel libre (voir la section 198.0).

De plus, méfiez-vous si configure répond 100% de No ou s'il répond No alors que vous êtes certain qu'une bibliothèque existe (par exemple il serait très étrange qu'il n'existe pas sur votre système au moins une bibliothèque curses). Dans de tels cas, on est probablement en présence d'une variable 'LD_LIBRARY_PATH' mal positionnée!

Imake

Imake permet de configurer un logiciel libre en créant un fichier Makefile à partir de règles simples. Ces règles déterminent quels fichiers ont besoin d'être compilés pour construire le binaire, et Imake engendre le Makefile correspondant. Ces règles sont spécifiées dans un fichier appelé Imakefile.

Là où Imake prend tout son intérêt, c'est qu'il utilise des informations dépendantes du site (de l'architecture de la machine). C'est assez pratique dans le cas d'applications utilisant X Window System. Mais Imake est utilisé dans le cas de nombreuses autres applications.

L'utilisation la plus simple de Imake est de se rendre dans le répertoire principal de l'archive décompactée, et ensuite d'exécuter le script xmkmf, qui fera appel au programme imake:

$ xmkmf -a
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
make Makefiles

Si le site est mal installé, recompiler et installer X11R6!

Scripts shell divers

Lisez le fichier INSTALL ou README pour de plus amples informations. Généralement, il va vous falloir exécuter un fichier de type install.sh ou configure.sh. Après, soit le script d'installation sera silencieux (et déterminera tout seul ce dont il a besoin), soit il vous demandera des informations sur votre système (par exemple, des chemins).

Si vous n'arrivez pas à déterminer le fichier que vous devez exécuter, vous pouvez (sous Bash) taper ./, et ensuite taper deux fois la touche TAB (touche de tabulation). Bash complètera automatiquement par un éventuel fichier exécutable du répertoire (donc, un éventuel script de configuration). Dans le cas où plusieurs fichiers sont exécutables, il vous donnera une liste. Il ne vous reste plus qu'à choisir le bon.

Un cas particulier est l'installation de modules Perl (mais pas seulement). L'installation de tels modules se fait par l'exécution d'un script de configuration lui-même écrit en Perl. La commande à effectuer est généralement:

$ perl Makefile.PL

Autres possibilités

Certaines distributions de logiciels libres sont mal organisées, surtout lors des premières phases de développement (mais l'utilisateur est prévenu!). Elles nécessitent parfois de retoucher « à la main » les fichiers de configuration. Généralement, ces fichiers sont un fichier Makefile (voir la section 126.0) et un fichier config.h (mais ce nom n'est qu'une convention).

Je ne recommande ces manipulations qu'à des utilisateurs sachant ce qu'ils font. C'est un travail qui nécessite des connaissances réelles et une motivation nécessaire pour réussir. Mais c'est en forgeant qu'on devient forgeron.

Compilation

Maintenant que le logiciel est correctement configuré, il ne reste plus qu'à le compiler. C'est une étape qui est généralement très simple à effectuer, et qui ne pose pas de problèmes majeurs.

make

L'outil préféré de la communauté du logiciel libre pour compiler des sources est make. L'intérêt de make est double:

Les actions à exécuter pour arriver à une version compilée des sources sont stockées dans un fichier nommé habituellement Makefile, ou GNUMakefile. En fait, lorsque make est invoqué, il lit ce fichier, s'il existe, dans le répertoire courant. Si ce n'est pas le cas, il est possible de spécifier ce fichier en passant l'option -f à make.

Règles

make fonctionne selon un système de dépendances. C'est-à-dire que pour qu'un binaire soit compilé (« cible »), un certain nombre d'étapes doivent être accomplies (« dépendances »). Par exemple, pour créer le binaire (imaginaire) glloq, on a besoin de compiler les fichiers objets (fichiers intermédiaires de la compilation) main.o et init.o, puis de les lier. Ces fichiers objets sont eux aussi des cibles, dont les dépendances sont les fichiers sources.

Ceci n'est qu'une introduction minimale pour survivre dans le monde impitoyable de make. Si vous voulez en savoir plus, je vous conseille de vous rendre sur le site d'APRIL à l'adresse http://www.april.org/groupes/doc/ pour une documentation un peu plus détaillée sur make. Pour une documentation exhaustive, voir Managing Projects with Make (« La gestion de projets avec make », seconde édition, chez O'Reilly, d'Andrew Oram et Steve Talbott.

C'est parti!

Généralement, l'utilisation de make obéit à plusieurs conventions. Par exemple:

La première étape est de compiler le programme, et donc de taper (exemple fictif):

$ make
gcc -c glloq.c -o glloq.o
gcc -c init.c -o init.o
gcc -c main.c -o main.o
gcc -lgtk -lgdk -lglib -lXext -lX11 -lm glloq.o init.o main.o -o glloq

Parfait, le binaire est compilé correctement. Nous sommes prêts à passer à l'étape suivante, qui est l'installation des fichiers de la distribution (binaires, fichiers de données, etc...). Voir la section 180.0.

Explications

Si vous avez la curiosité de regarder ce qu'il y a dans le fichier Makefile, vous y trouverez des commandes connues (rm, mv, cp, ...), mais aussi des chaînes de caractères étranges, de la forme '$(CFLAGS)'.

Il s'agit de variables, c'est-à-dire de chaînes qui sont fixées généralement au début du fichier Makefile, et qui seront ensuite remplacées par la valeur qui leur a été associée. C'est assez utile pour utiliser plusieurs fois de suite les mêmes options de compilation.

Par exemple, pour afficher la chaîne « toto » à l'écran en tapant un make all:

TEST = toto
all:
        echo $(TEST)

La plupart du temps, les variables suivantes sont définies:

Et si ça ne fonctionne pas?

Pas de panique, cela arrive à tout le monde. Parmi les causes les plus communes:

Installation

Avec make

Maintenant que tout est compilé, il vous reste a copier les fichiers produits dans un endroit adéquat (généralement, dans un des sous-répertoires de /usr/local).

make permet généralement d'assurer ce travail. Une cible spéciale est la cible install. Très logiquement, utiliser make install permet d'installer les fichiers nécessaires.

Généralement, la procédure est décrite dans les fichiers INSTALL ou README. Mais parfois, l'auteur a oublié d'en prévoir une. Dans ce cas, il va falloir tout installer à la main.

Copiez alors:

Et voilà, c'est fini! Félicitations! Vous êtes maintenant fin prêt à recompiler votre système d'exploitation tout entier.

Problèmes

Si vous venez d'installer un programme libre, par exemple GNU tar et si, quand vous l'exécutez, ce n'est pas lui qui est appelé, ou s'il ne fonctionne pas comme quand vous le testiez directement à partir du répertoire src, c'est un problème de PATH, qui trouve le programme dans un répertoire situé avant celui où vous avez installé le nouveau logiciel. Vérifiez en exécutant type -a <programme>.

La solution est de mettre le répertoire d'installation plus haut dans le 'PATH', et/ou de supprimer/renommer les fichiers qui s'exécutent sans qu'on le désire, et/ou de renommer votre nouveau programme (en gtar dans cet exemple), de sorte qu'il n'y ait pas confusion.

Vous pouvez aussi mettre en place un alias, si le shell le permet (par exemple dire que tar, c'est /usr/local/bin/gtar).

Assistance

Documentation

Plusieurs sources de documentation:

Assistance technique

Si vous avez acheté une distribution « officielle » de Linux-Mandrake, vous pouvez demander à l'assistance technique des informations sur votre système. J'imagine que le support technique a autre chose à faire que d'aider tous les utilisateurs à installer des logiciels supplémentaires, mais certains proposent une aide à l'installation de 'x' jours. Peut-être peuvent-ils passer quelque temps sur des problèmes de compilation?

Vous pouvez sinon compter sur l'aide de la communauté du logiciel libre:

Comment trouver des logiciels libres

Pour trouver des logiciels libres, de nombreux pointeurs peuvent vous être utiles:

Remerciements

Copyright

Copyright (c) 1999 Benjamin Drieu, association APRIL (dont le site web est http://www.april.org/[32]).

This document is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. (« Ce document est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous). »).

This work is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU General Public License for more details (« Ce programme est distribué car potentiellement utile, mais sans aucune garantie, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails. »).

You will find the GNU General Public License at address http://www.gnu.org/copyleft/gpl.html; you can also get a copy of it by writing to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. (« Vous trouverez la Licence Publique Générale GNU dans votre distribution ou sur le Web à l'adresse http://www.gnu.org/copyleft/gpl.html; vous pouvez aussi l'obtenir en écrivant à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. »).


(Retour à la table des matières)

Chapitre 2 : Les utilitaires en ligne de commande


Le but de ce chapitre est d'introduire un petit nombre d'outils en ligne de commande qui peuvent s'avérer utiles au quotidien. Bien sûr, vous pouvez passer ce chapitre si vous avez l'intention de n'utiliser qu'un environnement graphique, mais un rapide coup d'oeil peut vous faire changer d'avis :)

Ce chapitre n'est pas vraiment organisé. Les utilitaires sont listés comme ils viennent, des plus utilisés aux plus obscurs. Chaque commande sera illustrée par un exemple, mais il vous est laissé à titre d'exercice de lui trouver des usages plus utiles.

grep: General Regular Expression Parser (« analyseur syntaxique général d'expressions rationnelles »)

D'accord, le nom n'est pas très intuitif, pas plus que son acronyme, mais son utilisation est simple: chercher un motif donné en argument dans un ou plusieurs fichiers. Sa syntaxe est:

grep [options] <motif> [un ou plusieurs fichier(s)]

Si on a précisé plusieurs noms de fichiers, leur nom apparaît en début des lignes remplissant les critères du motif, à moins qu'on n'ait utilisé l'option -h. L'option -l a pour effet de n'afficher que le nom des fichiers dont au moins une ligne remplit les conditions du motif. Il est parfois utile, lorsque la liste des arguments est longue, de parcourir les fichiers à l'intérieur d'une boucle du shell et d'utiliser le truc suivant: grep <motif> <nom_de_fichier> /dev/null.

Le motif est une expression rationnelle, bien que la plupart du temps il ne consiste qu'en un simple mot. Les options les plus couramment utilisées sont les suivantes:

Voici un exemple d'utilisation:

$ cat victim
Hello dad
Hi daddy
So long dad
  # Chercher la chaîne "hi", peu importe la casse
$ grep -i hi victim
Hi daddy
  # Chercher "dad" comme un mot entier, et afficher
  #   le numéro de ligne en face de chaque ligne
  #   correspondante
$ grep -nw dad victim
1:Hello dad
3:So long dad
  # Chercher toutes les lignes ne commençant pas
  #   par un "H"
$ grep -v "^H" victim
So long dad
$

Si vous voulez utiliser grep dans un tube, vous n'avez pas à spécifier de nom de fichier, car par défaut, il prend son entrée depuis l'entrée standard. De même, par défaut, il affiche les résultats sur la sortie standard, donc vous pouvez sans crainte mettre la sorte de grep dans un autre tube. Par exemple:

$ cat /usr/doc/HOWTO/Parallel-Processing-HOWTO | \
  grep -n thread | less

find: trouver des fichiers en fonction de certains critères

find est un utilitaire Unix de longue date. Son but est de parcourir récursivement un ou plusieurs répertoires et d'y trouver des fichiers correspondant à un certain ensemble de critères. Bien qu'il soit très utile, sa syntaxe est vraiment complexe, et l'utiliser requiert une certaine habitude. La syntaxe générale est:

find [options] [répertoires] [critère] [action]

Si vous ne spécifiez aucun répertoire, find recherchera dans le répertoire courant. Si vous ne spécifiez pas de critère, c'est équivalent à « vrai », et donc tous les fichiers seront trouvés. Les options, critères et actions sont si nombreux que nous n'en mentionnerons que quelques-uns ici. Commençons par les options:

Un critère peut être un ou plusieurs tests atomiques; quelques tests utiles sont:

Beaucoup d'autres tests existent, référez-vous à la page de manuel pour plus de détails. Pour combiner ces tests, vous pouvez utiliser:

Enfin, vous pouvez spécifier une action pour chaque fichier trouvé. Les plus fréquentes sont:

Toujours là? Alors, maintenant entraînons-nous un peu, car c'est toujours la meilleure façon de comprendre le monstre. Supposons que vous vouliez trouver tous les répertoires dans /usr/share. Vous taperez alors:

find /usr/share -type d

Supposons que vous ayez un serveur HTTP, tous vos fichiers HTML sont dans /home/httpd/html, qui est aussi votre répertoire courant. Vous voulez trouver tous les fichiers qui n'ont pas été modifiés depuis un mois. Comme vous avez des pages de différents auteurs, certains fichiers ont une extension html et d'autres l'extension htm. Vous voulez lier ces fichiers dans le répertoire /home/httpd/obsolete. Vous taperez alors:

find ( -name "*.htm" -o -name "*.html" ) -a -ctime -30 -exec ln {} /home/httpd/obsolete ;[33]

D'accord, cette exemple est un peu compliqué et requiert quelques explications. Le critère est:

( -name "*.htm" -o -name "*.html" ) -a -ctime -30

qui fait ce que l'on veut: il recherche tous les fichiers dont le nom se termine soit par .htm, soit par .html (( -name "*.htm" -o -name "*.html" )), et (-a) qui n'ont pas été modifiés dans les 30 derniers jours, ce qui représente en gros un mois (-ctime -30). Notez les parenthèses: elles sont nécessaires ici, parce que -a a une priorité plus grande. S'il n'y en avait pas, tous les fichiers se terminant par .htm auraient été trouvés, plus tous les fichiers se terminant par .html et qui n'ont pas été modifiés depuis un mois, ce qui n'est pas ce que nous voulons. Notez également que les parenthèses sont désactivées par rapport au shell: si nous avions mis ( .. ) à la place de ( .. ), le shell les aurait interprétées et essayé d'exécuter -name "*.htm" -o -name "*.html" dans un sous-shell... Une autre solution aurait été de mettre les parenthèses entre doubles apostrophes ou simples apostrophes, mais une anti-barre oblique (backslash) est préférable ici dans la mesure où nous ne devons isoler qu'un seul caractère.

Et enfin, il y a la commande à exécuter pour chacun des fichiers:

-exec ln {} /home/httpd/obsolete ;

Ici aussi, vous devez désactiver le ; par rapport au shell, car autrement le shell l'interprétera comme un séparateur de commandes. Si vous ne le faites pas, find se plaindra qu'il manque un argument à -exec.

Un dernier exemple: vous avez un gros répertoire nommé /shared/images, avec toutes sortes d'images dedans. Régulièrement, vous utilisez la commande touch pour mettre à jour les dates d'un fichier nommé stamp dans ce répertoire, de façon à avoir une référence dans le temps. Vous voulez trouver tous les fichiers JPEG dans ce répertoire qui sont plus récents que le fichier stamp, et comme vous avez des images de diverses sources, ces fichiers ont des extensions jpg, jpeg, JPG ou JPEG. Vous voulez aussi éviter de rechercher dans le répertoire old. Vous voulez vous faire envoyer la liste de ces fichiers par courrier électronique, et votre nom d'utilisateur est jean:

find /shared/images -cnewer     \
     /shared/images/stamp       \
     -a -iregex ".*\.jpe?g"     \
     -a -not -regex ".*/old/.*" \
       | mail jean -s "Nouvelles images"

Et voilà! Bien sûr, cette commande n'est pas très utile si vous devez la taper à chaque fois, et vous voudriez l'exécuter régulièrement. Vous pouvez le faire:

crontab: afficher ou éditer votre fichier crontab

crontab est une commande qui vous permet d'exécuter des commandes à des intervalles de temps réguliers, avec l'avantage supplémentaire que vous n'avez pas à être connecté au système et que la sortie de ces commandes vous est envoyée par courrier électronique. Vous pouvez spécifier les intervalles en minutes, en heures, en jours et même en mois. crontab agira différemment en fonction des options:

Commençons par éditer un fichier crontab. Si vous tapez crontab -e, vous vous trouverez en face de votre éditeur de texte favori si vous avez initialisé la variable d'environnement 'EDITOR' ou 'VISUAL', autrement VI sera utilisé. Une ligne dans un fichier crontab est composée de six champs. Les cinq premiers sont les intervalles de temps en minutes, heures, jours dans le mois, mois et jours dans la semaine. Le sixième champ est la commande à exécuter. Les lignes commençant par un # sont considérées comme des commentaires et seront ignorées par crond (le programme en charge d'exécution des fichiers crontab). Voici un exemple de fichier crontab:

Note: afin de pouvoir imprimer l'extrait qui suit dans une police de caractères lisible, il nous a fallu ventiler les lignes les plus longues. C'est pourquoi certaines portions du texte doivent en réalité n'occuper qu'une seule ligne. Quand vous verrez le caractère '' terminer une ligne, cela signifiera que c'est en réalité la même ligne qui continue. Cette convention fonctionne dans les fichiers de type Makefile et dans le shell, ainsi que dans d'autres cadres.

# Si vous ne voulez pas recevoir de courrier,
#   « décommentez » la ligne suivante
#MAILTO=""
#
# Faire un rapport de toutes les nouvelles images
#   à 14h tous les deux jours, en partant de
#   l'exemple ci-dessus --- après ceci,
#   « retoucher » le fichier "stamp". Le « % » est
#   traité comme un retour chariot, cela vous
#   permet de mettre plusieurs commandes sur la
#   même ligne.
0 14 */2 * *  find /shared/images               \
  -cnewer /shared/images/stamp                  \
  -a -iregex ".*\.jpe?g"                        \
  -a -not -regex                                \
    ".*/old/.*"%touch /shared/images/stamp
#
# Jouer une mélodie tous les and à Noël :)
0 0 25 12 * mpg123 $HOME/musiques/joyeux_noel.mp3
#
# Imprimer la liste des courses tous les mardis
#   à 17 heures...
0 17 * * 2 lpr $HOME/liste-courses.txt

Il y a plusieurs autres moyens de spécifier des intervalles que ceux mentionnés dans l'exemple. Par exemple, vous pouvez spécifier un ensemble de valeurs discrètes séparées par des virgules (1,14,23) ou un intervalle (1-15), ou même combiner les deux (1-10,12-20), optionnellement avec un pas (1-12,20-27/2). Maintenant, il vous reste à trouver des commandes utiles à y mettre :)

at: programmer une commande, mais seulement une fois

Vous pouvez aussi vouloir exécuter une commande à un jour donné, mais pas régulièrement. Par exemple, vous voulez vous rappeler un rendez-vous, aujourd'hui à 18 heures. Vous employez X, et vous aimeriez être prévenu à 17h30, par exemple, que vous devez y aller. at est ce qu'il vous faut ici:

$ at 5:30pm
  # Vous vous retrouvez en face de l'invite de at
at> xmessage "C'est l'heure! rendez-vous à 18h"
  # Tapez C-d pour sortir
at> <EOT>
$

Vous pouvez spécifier la date de différentes manières:

at accepte aussi différentes options:

Comme d'habitude, voyez la page de manuel de at(1) pour plus d'options.

tar: Tape ARchiver (« archiveur sur bandes »)

Bien que nous ayons déjà vu une utilisation de tar dans le chapitre 18.0, nous n'avons pas expliqué son fonctionnement. C'est ce à quoi va s'employer cette section. De même que find, tar est un utilitaire Unix de longue date, et sa syntaxe est un peu spéciale:

tar [options] [fichiers...]

Voici maintenant une liste d'options. Notez que toutes celles-ci ont une option longue équivalente, mais vous devrez vous référer à la page de manuel pour cela car elles ne sont pas listées ici. Et bien sûr, toutes les options ne sont pas listées non plus :)

Note: le tiret initial (-) des options courtes est maintenant désuet pour la commande tar, sauf après une option longue.

Il y a beaucoup, beaucoup d'autres options, vous vous référerez à la page de manuel de tar(1) pour en obtenir une liste complète. Voyez, par exemple, l'option d. Maintenant, un peu de pratique. Supposons que vous vouliez créer une archive de toutes les images dans le répertoire /shared/images, compressée avec bzip2, de nom images.tar.bz2 et située dans votre répertoire personnel. Vous taperez alors:

#
 # Note: vous devez être dans le répertoire
 #   contenant les fichiers de l'archive!
 #
$ cd /shared
$ tar cyf ~/images.tar.bz2 images/

Comme vous pouvez le voir, nous avons utilisé trois options ici: c a dit à tar de créer une archive, y lui a dit que nous la voulions compressée avec bzip2, et f  /images.tar.bz2 lui a dit que l'archive devait être créée dans notre répertoire personnel, avec le nom images.tar.bz2. Maintenant, on peut vouloir vérifier si l'archive est valide. Nous pouvons simplement le vérifier en affichant la liste de ses fichiers:

#
 # Retour à notre répertoire personnel
 #
$ cd
$ tar tyvf images.tar.bz2

Ici, nous avons dit à tar d'afficher la liste (t) des fichiers de l'archive images.tar.bz2 (f images.tar.bz2), en ayant averti que cette archive était compressée avec bzip2 (y), et que nous voulions un format d'affichage long (v). Maintenant, supposons que vous ayez effacé le répertoire des images. Heureusement, votre archive est intacte, et maintenant vous voulez l'extraire à sa place originelle, dans /shared. Mais comme vous ne voulez pas casser votre commande find pour trouver les nouvelles images, vous devez préserver les attributs de tous les fichiers:

#
 # Rendez-vous dans le répertoire où vous voulez
 #   extraire
 #
$ cd /shared
$ tar yxpf ~/images.tar.bz2

Et voilà le travail!

Maintenant, supposons que vous vouliez seulement extraire le répertoire images/cars de l'archive. Vous pouvez alors taper ceci:

$ tar yxf ~/images.tar.bz2 images/cars

Au cas où cela vous inquiéterait, n'en faites rien: non; si vous essayez d'archiver des fichiers spéciaux, tar les prendra tels qu'ils sont, des fichiers spéciaux, et n'ira pas chercher leur contenu. Donc oui, vous pouvez mettre sans risque /dev/mem dans une archive :) Oh, et il gère aussi les liens correctement, donc ne vous en inquiétez pas non plus. Pour les liens symboliques, regardez également l'option h dans la page de manuel.

bzip2 et gzip: programmes de compression de données

Vous avez vu que nous avons déjà parlé de ces deux programmes quand nous avons évoqué tar. Contrairement à WinZip sous Windows, l'archivage et la compression sont faits en utilisant deux programmes séparés --- tar pour l'archivage, et les deux programmes que nous allons maintenant introduire pour la compression, bzip2 et gzip.

En premier lieu, bzip2 a été écrit en tant que remplacement pour gzip. Ses possibilités de compression sont en général meilleures, mais d'un autre côté il consomme plus de mémoire. La raison pour laquelle gzip est encore là est qu'il est encore beaucoup plus répandu que bzip2. Peut-être qu'un jour bzip2 remplacera complètement gzip, mais peut-être pas.

Les deux commandes ont une syntaxe similaire:

gzip [options] [fichier(s)]

Si aucun nom de fichier n'est donné, gzip comme bzip2 attendra des données sur l'entrée standard et enverra le résultat sur la sortie standard. Donc les deux programmes sont utilisables avec des tubes. Les deux commandes ont aussi un ensemble d'options similaires:

Attention! Par défaut, gzip et bzip2 effaceront le ou les fichier(s) qu'ils ont compressés (ou décompressés) si vous n'utilisez pas l'option -c. Vous pouvez l'éviter avec bzip2 en utilisant l'option -k, mais gzip n'a aucune option de la sorte!

Quelques exemples, maintenant. Supposons que vous vouliez compresser tous les fichiers se terminant par .txt dans le répertoire courant avec bzip2, vous utiliserez alors:

$ bzip2 -9 *.txt

Supposons que vous vouliez partager votre archive d'images avec quelqu'un, mais il ne dispose pas de bzip2, uniquement de gzip. Vous n'avez pas besoin de décompresser l'archive et de la recompresser, vous pouvez juste la décompresser sur la sortie standard, utiliser un tube, compresser depuis l'entrée standard et rediriger le résultat vers la nouvelle archive:

bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz

Et voilà le travail. Vous pourriez avoir tapé bzcat au lieu de bzip2 -dc. Il existe un équivalent pour gzip mais son nom est zcat, et non pas gzcat. Vous disposez aussi de bzless (resp. zless) si vous voulez directement visualiser des fichiers compressés sans avoir à les décompresser avant. Comme exercice, essayez de trouver la commande que vous auriez à taper pour voir des fichiers sans les décompresser, et sans utiliser bzless or zless :)

Beaucoup, beaucoup plus...

Il existe tellement de commandes que si quelqu'un faisait un livre sur la totalité, vous auriez une encyclopédie en face de vous. Ce chapitre n'a même pas traité un dixième de pourcent, mais vous pouvez déjà faire beaucoup avec ce qui a été dit ici. Quelques pages de manuel que vous pourrez regarder si vous le souhaitez: sort(1), sed(1), zip(1) (oui, c'est bien ce que vous pensez, vous pouvez extraire/fabriquer des archives ZIP sous Linux), convert(1), et ainsi de suite. L'expérimentation reste le meilleur moyen de se familiariser avec ces outils, et vous leur trouverez probablement beaucoup d'utilisations auquelles vous n'auriez pas pensé au premier coup d'oeil. Amusez-vous bien :)


(Retour à la table des matières)

Chapitre 3 : Installation en mode texte


Même si la nouvelle procédure d'installation graphique, DrakX, est recommandée (et c'est aussi la solution la plus facile), vous pouvez aussi choisir l'installation en mode texte.

N'oubliez pas: vous devez auparavant avoir créé une disquette de boot. Reportez-vous au Guide d'installation d'installation pour connaître la procédure à suivre pour en créer une, si ce n'est déjà fait.

Dès que vous démarrez sur la disquette, vous devriez obtenir l'écran de la figure 236.1.

Écran d'accueil de l'installation en mode texte
Figure 236.1 Écran d'accueil de l'installation en mode texte

Tapez simplement sur la touche Entrée. L'écran d'introduction apparaît alors, comme dans la figure 20.2.

Écran d'introduction à la procédure d'installation
Figure 20.2 Écran d'introduction à la procédure d'installation

Appuyez alors encore une fois sur la touche Entrée: l'installation proprement dite commence alors.

Manipulation de l'interface en mode texte

Avant d'aller plus loin, il vous sera utile de connaître quelques raccourcis claviers pour pouvoir manipuler l'interface texte. De cette façon, il sera inutile de les rappeler en permanence le long de ce manuel:

Choix de la langue et du type du clavier

L'installation commence comme DrakX: vous devez sélectionner la langue par défaut pour le système. Ce sera également la langue utilisée pour l'installation, et ce choix est présenté dans la figure 20.3.

Choix de la langue
Figure 20.3 Choix de la langue

Sélectionnez la langue que vous souhaitez et validez ensuite avec OK. Puis vient le type de clavier que vous possédez (figure 20.4).

Choix du type de clavier
Figure 20.4 Choix du type de clavier

Là encore, validez avec OK.

Méthode d'installation

Le programme d'installation vous demande ensuite quel type de média contient les données et les fichiers de la distribution Linux-Mandrake. Sélectionnez CD-ROM, comme c'est le cas dans la figure 20.5.

Choix du média d'installation
Figure 20.5 Choix du média d'installation

À partir de là, vous devrez insérer (si ce n'est déjà fait) le CD de Linux-Mandrake, comme le programme d'installation vous le demande, puis valider.

Installation ou mise à jour

Après l'initialisation du CD-ROM, vous devrez choisir entre une installation et une mise à jour. Si vous souhaitez mettre à jour une version antérieure de Linux-Mandrake, et uniquement dans ce cas, vous sélectionnerez Mise à jour. Autrement, choisissez Installation, comme dans la figure 20.6.

Installation ou mise à jour?
Figure 20.6 Installation ou mise à jour?

Classe d'installation

Le programme vous demandera ensuite (figure 20.7) la classe d'installation que vous désirez. Les options sont les suivantes:

Station de travail, serveur, ou installation
personnalisée?
Figure 20.7 Station de travail, serveur, ou installation personnalisée?

Adaptateurs SCSI

Le programme d'installation vous demande ensuite si vous possédez une carte SCSI, comme dans la figure 20.8.

Configuration SCSI
Figure 20.8 Configuration SCSI

Si vous répondez Oui, une recherche d'un adaptateur PCI sera effectuée. Si une telle carte est trouvée, le pilote correspondant sera inséré. Si, en revanche, votre carte est ISA ou bien PCI mais inconnue du programme d'installation, vous devrez alors spécifier au programme d'installation quel pilote choisir, comme dans la figure 20.9.

Choix du pilote SCSI
Figure 20.9 Choix du pilote SCSI

Après le choix du pilote, le programme demandera des paramètres pour ce dernier. Vous pouvez essayer de ne pas en soumettre: le pilote tentera alors de trouver l'adaptateur lui-même. Il est rare que cette autodétection échoue, mais si elle échoue, n'oubliez pas les renseignements que vous avez pu obtenir dans le Guide d'installation: ils vous serviront encore ici.

Points de montage

Pour continuer avec l'installation Personnalisée, sélectionnez Disk Druid dans l'écran suivant, comme dans la figure 20.10. Si vous avez déjà partitionné le disque dur, le programme Disk Druid vous laissera choisir les points de montage des partitions. S'il vous faut encore créer ou modifier des partitions, vous pouvez également le faire ici.

Configuration du disque
Figure 20.10 Configuration du disque

Vous vous retrouverez alors devant l'écran de la figure 20.11.

Configuration du disque
Figure 20.11 Configuration du disque

La figure 20.12 montre la solution minimale en termes de partitions et de types nécessaire pour l'installattion. Pour vous déplacer dans cette fenêtre, utilisez les touches fléchées et la touche TAB.

Point de montage de la racine
Figure 20.12 Point de montage de la racine

Appuyez ensuite sur Entrée. Si vous voulez en savoir plus sur les points de montage, reportez-vous au Manuel de référence.

Ensuite, déplacez-vous avec la touche TAB jusqu'au bouton OK, puis validez.

Formatage des partitions

Maintenant que le disque a été partitionné et les points de montages attribués, le programme d'installation va procéder au formatage de ces partitions, ce qui consiste à y écrire un système de fichiers. En premier lieu, l'espace de swap (en français, « échange ») est formaté (figure 20.13).

Activation de l'espace de swap
Figure 20.13 Activation de l'espace de swap

Choisir Vérification des blocs défectueux est recommandé pour les disques plus anciens, où la probabilité que certains secteurs soient défectueux est plus élevée; tout mauvais bloc détecté sera marqué comme étant « inutilisable ». Remarquez que cette option allongera l'ensemble du processus d'un temps considérable. Puis vient le formatage des partitions de données Linux (si vous en avez plusieurs), comme on le présente dans la figure 20.14.

Formatage des partitions de données
Figure 20.14 Formatage des partitions de données

Là encore, la procédure et les options sont les mêmes. Si vous avez plusieurs partitions à formater, descendez le long de la liste et sélectionnez chacune des partitions que vous voulez formater avec la barre espace.

Sélection des paquetages

Vient maintenant le moment de sélectionner les paquetages à installer sur votre machine.

Dans l'installation texte, vous devez sélectionner les groupes à installer dans un premier temps. Si vous voulez avoir une sélection plus fine des paquetages que vous voulez installer, il vous faut aussi cocher l'option Sélectionner individuellement les paquetages (figure 20.15).

Composants à installer
Figure 20.15 Composants à installer

Si vous avez demandé à sélectionner les paquetages individuellement, vous obtiendrez la fenêtre de la figure 20.16.

Sélectionner les paquetages individuellement
Figure 20.16 Sélectionner les paquetages individuellement

Tous les groupes sont organisés sous forme d'arbre, et sous chaque branche vous trouverez les applications rattachées à ce groupe. Un + devant un groupe signifie que l'arborescence de ce groupe est repliée, un - signifie qu'elle est dépliée et que vous pouvez voir chacun des paquetages situés de ce groupe. Vous pouvez appuyer sur la barre espace pour ouvrir ou refermer un groupe.

Un groupe marqué par un o signifie que quelques paquetages de ce groupe sont actuellement sélectionnés, pas tous.

Un groupe marqué par un * signifie que tous les paquetages dans ce groupe sont actuellement sélectionnés. Une espace signifie qu'aucune application du groupe n'est sélectionnée.

Vous pouvez sélectionner ou désélectionner un paquetage avec la barre espace. Si vous voulez obtenir de l'information sur un paquetage, il vous suffit de le mettre en surbrillance et d'appuyer sur F1.

Dès que votre choix est fait, rendez-vous sur le bouton Fait et appuyez sur la touche Entrée. Les partitions que vous avez sélectionnées sont alors formatées, puis les paquetages sont installés sur votre système.

Détection de la souris

Après la phase d'installation des paquetages, le programme d'installation tente une détection de la souris. Vous verrez alors apparaître une message du genre de celui de la figure 20.17.

Détection de la souris
Figure 20.17 Détection de la souris

Il s'agit ici d'une souris PS/2. Si vous avez une souris série, le message ressemble à ceci:

Probing found some type of serial mouse on port ttyS0

Le port série est en l'occurrence ttyS0, l'équivalent du COM1 de DOS. Validez avec la touche Entrée, le programme vous demandera quel type de souris vous possédez exactement: par défaut, il sélectionne un type générique, mais ce n'est peut-être pas ce que vous désirez (figure 20.18).

Configuration du type de la souris
Figure 20.18 Configuration du type de la souris

Parcourez la liste et regardez si l'un des types de souris correspond au vôtre. Si vous n'en avez aucune idée, choisissez une souris générique à deux ou trois boutons.

Attention: Linux reconnaît et manipule les trois boutons, donc si vous possédez une souris à deux boutons, il va vous falloir (pour profiter des nombreuses applications qui en dépendent) émuler le troisième, en cochant l'option Émuler le troisième bouton; le troisième bouton sera alors émulé par une pression sur les deux boutons de la souris en même temps.

Configuration d'un réseau local

Cet écran vous permet de vous connecter à un réseau local (par Ethernet) existant (pas une connexion Internet par modem). Si vous n'êtes pas sur un réseau, choisissez Non.

Si vous répondez Oui, le programme d'installation recherchera alors une carte réseau. S'il la trouve, il installera le pilote. S'il ne la trouve pas, une liste de pilotes apparaîtra, dans laquelle vous devrez en choisir un. Là encore, n'oubliez pas les renseignements que vous aurez pu obtenir depuis Windows sur votre carte réseau: comme pour la configuration d'un adaptateur SCSI, vous devrez passer des paramètres au pilote pour qu'il puisse trouver la carte si l'autodétection échoue.

Quand la carte réseau sera configurée, il restera ensuite à configurer son adresse IP (figure 20.19).

Mise en place de l'adresse IP
Figure 20.19 Mise en place de l'adresse IP

Normalement, vous aurez une adresse IP statique, à moins que vous fassiez partie d'un réseau existant et que l'administrateur vous ait notifié une méthode différente. La configuration d'une adresse IP statique se présente comme dans la figure 20.20.

Configuration de l'adresse IP
Figure 20.20 Configuration de l'adresse IP

Si vous faites partie d'un réseau existant, là aussi, l'administrateur réseau vous aura spécifié les paramètres. Si vous constituez un réseau privé, n'oubliez pas de prendre une classe d'adresses privées!

Également, ne mettez aucune passerelle par défaut ni serveur de noms (à moins que vous en ayez configuré un) si votre réseau n'est pas relié à l'Internet (n'oubliez pas que les connexions Internet par modem ne rentrent pas dans le cadre de cette section). Ensuite, vous devrez configurer le nom de votre machine (figure 20.21).

Configuration du nom de la machine
Figure 20.21 Configuration du nom de la machine

Choisissez ce qu'il vous plaît si votre réseau est privé. Autrement, là encore, l'administrateur d'un réseau existant vous aura donné le nom de la machine.

Configuration de l'horloge

Configuration de l'horloge
Figure 20.22 Configuration de l'horloge

Cet onglet vous sert à spécifier votre fuseau horaire. Choisissez le vôtre dans la liste qui apparaît (figure 20.22).

À moins que vous ne sachiez ce que vous faites, ne cochez pas l'option Horloge système réglée sur GMT: cela indiquerait que votre BIOS enregistre l'heure GMT, ce qui est très probablement faux, et vous devez également prendre en compte le fait que Windows ne reconnaît pas le GMT.

Configuration des services

Durant la procédure de démarrage, un certain nombre de services seront initiés automatiquement. L'écran de la figure 20.23 vous permet de choisir ces derniers. Si vous n'êtes pas sûr de vous, n'intervenez pas sur les choix faits par défaut. Pour lire les descriptsions, choisissez un service avec les touches fléchées et enfoncez la touche F1.

Services à démarrer automatiquement
Figure 20.23 Services à démarrer automatiquement

Si vous ne savez pas à quoi correspondent ces services, laissez cet écran tel quel.

Configuration d'une imprimante

Si vous voulez configurer une imprimante, c'est l'écran de la figure 20.24 qui vous permettra d'arriver à vos fins.

Configuration de l'imprimante
Figure 20.24 Configuration de l'imprimante

La configuration d'une imprimante est exactement la même que celle de DrakX, vous voudrez donc vous reporter à la section correspondante dans le Guide d'installation.

Mot de passe de root

Il est maintenant temps d'entrer le mot de passe de root. Vous devrez le taper deux fois, pour être sûr(e) de ne pas vous tromper, et à l'aveugle, dans les deux boîtes de la figure 20.25.

Mot de passe de root
Figure 20.25 Mot de passe de root

Le mot de passe de root est un point critique de la sécurité de votre système! L'utilisateur root est l'administrateur du système, et il peut tout faire, y compris rendre un système inopérant en cas d'utilisation malicieuse. Choisissez donc son mot de passe avec grand soin!

Ajout d'un utilisateur non privilégié

Vous devez maintenant ajouter un utilisateur non privilégié au système. Même si vous êtes le seul utilisateur de votre machine, il est préférable de ne pas se connecter au système en tant que root: c'est très pratique, mais vous pouvez faire une gaffe irréversible. Donc, créez d'abord un utilisateur pour vous-même, comme demandé dans la figure 20.26.

Ajout d'utilisateur non privilégié
Figure 20.26 Ajout d'utilisateur non privilégié

Vous devez en premier lieu choisir un nom de login: c'est le nom sous lequel l'utilisateur se connectera au système. Le nom de l'utilisateur n'est pas obligatoire. Ensuite, vous devez choisir un mot de passe pour ce nouvel utilisateur, et là encore vous devrez le taper à l'aveugle et deux fois, pour être sûr(e) de ne pas vous tromper. Si vous avez envie d'un autre shell que Bash, choisissez-en un dans la liste proposée.

Configuration de l'authentification

Il s'agit de déterminer les mécanismes d'authentification des utilisateurs sur la machine (figure 20.27).

Les choix par défaut sont en général ce qu'il vous faut. Cependant, si vous faites partie d'un réseau existant, il se peut que vous deviez utiliser NIS. Dans ce cas, interrogez votre administrateur réseau.

Mécanismes d'authentification
Figure 20.27 Mécanismes d'authentification

Disquette de démarrage

Le programme vous demande alors, comme dans la figure 20.28, si vous voulez créer une disquette de démarrage.

Création d'une disquette de démarrage
Figure 20.28 Création d'une disquette de démarrage

Il est préférable de répondre Oui pour plusieurs raisons:

Il vous faudra insérer une disquette qui, si elle n'est pas vierge, ne contient pas des données dont vous puissiez avoir besoin...

Installation du chargeur de démarrage

Vous pouvez maintenant installer le chargeur de démarrage de Linux: LILO.

Installation de LILO
Figure 20.29 Installation de LILO

Si vous voulez installer LILO, répondez alors Master Boot Record: cela désigne le secteur de boot. Le programme vous demandera de passer des options à LILO si nécessaire, mais vous ne devriez pas en avoir besoin (figure 20.30).

Options particulières pour LILO
Figure 20.30 Options particulières pour LILO

Configuration de X

Vous devez maintenant configurer X Window System, le coeur de l'interface graphique de Linux. Si votre carte est récente, elle sera normalement détectée automatiquement. Sinon, vous devrez la choisir dans une liste.

Puis vient le moment du choix du moniteur. Là aussi, vous aurez une liste de choix. Si votre moniteur n'y est pas, choisissez Custom dans l'écran de la figure 20.31.

Vous aurez alors le choix entre plusieurs configurations typiques: choisissez celle qui correspond à votre moniteur. Attention toutefois à ne pas choisir un réglage trop élevé: cela peut endommager le matériel.

Réglage du moniteur
Figure 20.31 Réglage du moniteur

Dans certains cas, vous devrez aussi entrer la quantité de mémoire vidéo sur la carte. Ensuite, le programme d'installation démarrera X pour tenter de repérer les modes vidéo disponibles et vous proposera un mode par défaut, que vous pourrez accepter ou non. Enfin, après le choix des modes, X démarrera, et vous pourrez alors juger du résultat.

Terminé!

L'installation du système est maintenant terminée, il ne vous reste plus qu'à parcourir le reste de ce manuel :)


(Retour à la table des matières)

Chapitre 4 : Glossaire



(Retour à la table des matières)

Notes



Copyright © 2000 MandrakeSoft