Linux-Mandrake: |
Guide de l'utilisateur |
et Manuel de référence |
MandrakeSoft
Janvier 2000 http://www.linux-mandrake.com
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:
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:
rpm
ps
et
pstree
mkdir
, touch
: création de
répertoires et fichiers videsrm
:
supprimer des fichiers ou des répertoiresmv
:
déplacer ou changer le nom des fichierscp
:
copier des fichiers et des répertoireschown
, chgrp
:
changer l'utilisateur et le groupe propriétaires d'un ou plusieurs
fichierschmod
: changer les permissions sur des fichiers et
des répertoires/
/usr
: le gros morceau/var
: données modifiables en cours d'utilisation/etc
: les fichiers de configuration/proc
/etc/smb.conf
root
»audio
».
dans '$PATH'
»security.log
»root
»root
»root
»shadow
»auto_inst.cfg.pl
auto_inf
en détailsmount
et umount
/etc/fstab
grep
: rechercher des motifs rationnelsfind
: trouver des fichierscrontab
: intervenir sur le fichier
crontab
at
: programmer une commande, une foistar
: l'archiveurbzip2
et gzip
: programmes de compressionroot
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.
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.
# 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
# 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"
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
C'est ainsi qu'est représenté ce que vous devez taper littéralement.
Les messages affichés par l'ordinateur sont présentés ainsi.
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:
:)
Cette police
est utilisée pour montrer des commandes
qu'il faut taper telles quelles, dans un terminal.
'Cette police'
est utilisée pour les noms de variables.
Cette police
est utilisée pour afficher les noms de
fichiers.
commande
<argument>
. Voyez plus haut pour savoir comment interpréter le contenu
d'une syntaxe.
Cette police
est utilisée pour représenter un message
littéral, ou quelquechose qu'il vous faut taper littéralement.
Cette police
est utilisée pour afficher les options.
http://machine/chemin/
.
utilisateur@domaine.xyz
.
fr.comp.os.linux.moderated
.
Échap.
.
'a'
.
utilisateur
.
commande(section)
.Note: les remarques à prendre en compte sont présentées ainsi.
Attention: les remarques importantes sont présentées ainsi.
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.
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:
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.
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.
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.
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.
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.
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).
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:
r
pour Read,
« lire »): Pour un fichier, cela autorise à en lire le
contenu. Pour un répertoire, cela autorise à lister les fichiers
contenus dans ce répertoire, si et seulement si le droit d'exécution sur
ce répertoire est positionné également;
w
pour Write,
« écrire »): Pour un fichier, cela autorise à en modifier
le contenu. Pour un répertoire, cela autorise à créer des fichiers et à
en effacer, même si l'on n'est pas le propriétaire de ces fichiers;
x
pour eXecute,
« exécuter »): Pour un fichier, cela en autorise
l'exécution (par conséquent, seuls les fichiers exécutables ont
normalement ce droit positionné). Pour un répertoire, cela autorise
l'utilisateur à le traverser (c'est-à-dire de s'y rendre ou de
se rendre dans l'un de ses répertoires fils).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):
-
) s'il s'agit d'un
fichier régulier, d
si le fichier est un répertoire. Il existe
d'autres types de fichiers, qui seront abordés dans le
Manuel de référence. Les neuf traits qui suivent représentent les
droits associés au fichier. Vous pouvez voir ici la séparation qui est
faite entre les différents types d'utilisateurs pour un même fichier:
les trois premiers représentent les droits associés à l'utilisateur
propriétaire, les trois suivants s'appliquent à tout utilisateur du
groupe qui n'est pas le propriétaire, et les trois derniers s'appliquent
aux autres; un trait (-
) signifie que le droit n'est pas
positionné;
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:
rw-
) sont les droits de
l'utilisateur propriétaire de ce fichier, en l'occurrence
francis
. L'utilisateur francis
a donc le droit de lire
le fichier (r
), de le modifier (w
) mais pas de
l'exécuter (-
);
r--
) s'appliquent à tout utilisateur
qui n'est pas francis
mais qui appartient au groupe
users
: il pourra lire le fichier (r
), mais ne pourra
ni écrire dedans ni l'exécuter (--
);
---
) s'appliquent à tout utilisateur
qui n'est pas francis
et qui n'appartient pas au groupe
users
: un tel utilisateur n'a tout simplement aucun droit sur ce
fichier.Pour le répertoire un_répertoire
, les droits sont
rwxr-xr--
, et donc:
gael
, en tant que propriétaire du répertoire, peut en
lister le contenu (r
), peut ajouter des fichiers dans ce
répertoire ou en ôter (w
), et il peut traverser ce
répertoire (x
);
gael
mais appartient au
groupe users
pourra lister le contenu de ce répertoire
(r
) mais ne pourra pas y rajouter des fichiers (-
),
et il aura le droit de le traverser (x
);
r--
).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:
'/'
) , même des caractères non imprimables.
Une conséquence est qu'il faut faire attention à la
capitalisation (ou casse) des noms de fichiers: dans un
même répertoire, readme
et Readme
sont deux fichiers
différents, car r
et R
sont deux caractères
différents;
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.
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).
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 :)
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:
'HOME'
: Cette variable d'environnement contient une
chaîne de caractères désignant votre répertoire personnel.
'PATH'
: Cette variable contient la liste de tous les
répertoires dans lesquels le shell doit chercher des exécutables
quand vous tapez une commande. Notez que contrairement à DOS,
par défaut, le shell ne cherchera pas de commandes dans le
répertoire courant!
'USERNAME'
: Cette variable contient votre nom de
connexion.
'UID'
: Contient votre identifiant utilisateur.
'PS1'
: Contient la valeur de votre invite. C'est souvent
une combinaison de séquences spéciales, et vous pouvez lire la
page de manuel de bash(1)
pour mieux les
comprendre (voyez le chapitre 10.0).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'écranPas 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 pagerSon 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:
-a
: Faire une liste de tous les fichiers, y compris les
fichiers cachés (sous Unix, les fichiers cachés sont
ceux dont le nom commence par un .
); l'option -A
fait
une liste de « presque » tous les fichiers, ce qui signifie tous
les fichiers qu'afficherait l'option -a
sauf « . » et
« .. »;
-R
: Faire une liste récursivement, i.e. tous les
fichiers et sous-répertoires des répertoires mentionnés dans la ligne de
commande;
-s
: Affiche la taille de chaque fichiers en kilo-octets;
-l
: Affiche des informations supplémentaires sur les
fichiers;
-i
: Affiche le numéro d'i-noeud (le numéro
unique du fichier sur un système de fichiers, voyez le
chapitre 13.0) en face de chaque fichier;
-d
: Affiche les répertoires comme des fichiers normaux
au lieu d'afficher la liste de leurs contenus.Quelques exemples:
ls -R
: fait une liste récursive des fichiers du
répertoire en cours;
ls -is images/ ..
: fait une liste des fichiers du
répertoire images/
et du répertoire parent, avec pour chaque
fichier son numéro d'i-noeud et sa taille en kilo-octets;
ls -al images/*.gif
: fait une liste de tous les
fichiers (y compris les fichiers cachés) du répertoire images/
dont le nom se termine par .gif
. Notez que cela comprend aussi
le fichier .gif
si celui-ci existe.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.
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.
(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.
Vous pouvez voir dans la figure 5.1 un bureau KDE classique avec les principaux composants:
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.
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 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.
Ce menu est séparé en trois parties distinctes. De haut en bas on trouve:
/usr/share/applnk
;
Il s'agit de tout le sous-menu Tableau de bord du menu K. Vous pouvez y ajouter ou en retirer la liste des fenêtres ou le Disk Navigator, ou même y ajouter un lanceur d'application. Le sous-menu Configuration est suffisamment explicite, mais nous reviendrons sur l'onglet Disk Navigator qui configure l'application du même nom. L'onglet Bureaux ne permet de modifier que le nom des différents bureaux et la taille physique du pager, ce n'est pas ici que vous pouvez modifier le nombre de bureaux.
Le Disk Navigator vous permet d'accéder à tous vos fichiers
depuis un menu. Cet outil peut s'avérer très pratique... si le nombre
de fichiers dans le répertoire n'est pas trop grand! Le menu de
configuration (figure 5.4) parle pour lui-même, comme
pratiquement tous les menus de configuration de KDE. Notez que
les fichiers cachés sous Linux et Unix en général
désignent les fichiers dont le nom commence par le caractère '.'
.
Si vous décidez de modifier vos liens personnels, vous devrez créer vos
entrées dans une fenêtre de KFM typique (nous reviendrons sur la
façon de créer de telles entrées). Vous ne pouvez modifier les entrées
globales qu'en tant que root
!
Quand vous sélectionnez un répertoire depuis Disk Navigator, vous pouvez au choix naviguer dans ce répertoire ou bien ouvrir le répertoire en question dans une fenêtre de KFM. Si vous cliquez sur un fichier, KFM repère automatiquement le type de fichier et lancera le programme approprié pour le type de fichier!
Si, en revanche, le type de fichier est inconnu de KFM, vous devrez alors indiquer comment l'ouvrir, comme exposé dans la figure 5.5.
Si vous sélectionnez Parcourir, vous aurez alors la liste des
menus de KDE, dans laquelle vous pourrez sélectionner le
programme approprié. Autrement, vous pouvez toujours entrer à la main le
nom du programme avec lequel vous voulez ouvrir le fichier, mais il vous
faudra spécifier l'emplacement du fichier dans la ligne de commande avec
%f
; cela est montré dans la
figure 5.6.
En l'occurrence, less
étant un programme fonctionnant en mode
console, il faut également cocher l'option
Lancer dans un terminal. Vous pourrez aussi associer un programme
à un type de fichier non connu par KFM, nous verrons comment
plus tard dans ce chapitre.
Avec le panneau, c'est le deuxième composant fondamental de KDE. C'est un outil extrêmement puissant, et ses possibilités sont au-delà de tous les gestionnaires de fichiers existants. Il partage, bien sûr, toutes les fonctionnalités de ses semblables:
Mais ce sont surtout ses autres fonctionnalités qui font son utilité:
Vous pouvez ouvrir une fenêtre KFM d'au moins deux façons:
La figure 5.8 montre un exemple de fenêtre KFM.
Ce n'est probablement pas la vue que vous aurez par défaut, car la
configuration pour cette fenêtre a été modifiée par rapport à la
configuration « de base ». Il y a des choses qui ne changent pas
cependant: vous avez toujours un emplacement URL où
vous pouvez entrer l'URL à consulter, la barre d'outils et la barre
de menus. Les fichiers locaux sont représentés par des URL dont le
préfixe est file:
, vous pouvez donc voir ici le contenu du
répertoire /home/fg
. On peut déjà voir quelques caractéristiques
du gestionnaire:
Vous aurez deviné en regardant la fenêtre qu'il y a également une icône
pour les types de fichiers qu'il ne connaît pas (en fait, le fichier
ircnewbies-ops.welcome
est un simple fichier texte, mais
l'« extension » .welcome
qui, en fait, n'en est pas une,
l'incite à rechercher un type MIME correspondant à un tel
fichier). Si, dans cette fenêtre, vous cliquez par exemple sur le
fichier grepmail-3.9.tar.gz
, KFM lancera l'application
associée au type MIME du fichier associé à l'« extension »
.tar.gz
: un programme d'archivage.
Voyons maintenant les bases de la configuration de KFM: elle se trouve dans deux menus. Le premier est le menu Affichage, exposé dans la figure 5.9.
Les options sont les suivantes:
'.'
; activer cette option rendra donc visibles de tels fichiers
(en général, ce sont des fichiers et/ou répertoires de configuration
d'applications dans le répertoire personnel de l'utilisateur);
index.html
d'un répertoire, si ce fichier existe. Par exemple,
essayez de visualiser le contenu du répertoire /usr/doc/mandrake
:)
. Si toutefois vous ne voulez pas visualiser le HTML
directement, il vous faut désactiver cette option. Voir un fichier
HTML requiert alors que vous cliquiez dessus avec le bouton gauche.
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 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!
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 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.
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.
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'é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
:)
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.
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.
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.
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.
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.
Maintenant, il s'agit de déclarer l'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.
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.
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.
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.
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 de KDE se comporte à peu de choses près comme celui de Windows, avec toutefois des fonctionnalités supplémentaires:
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!
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.
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.
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).
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 (présenté figure 5.25) regroupe tous les aspects de la configuration de KDE. Vous pouvez y accéder directement depuis le menu K.
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.
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...
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.
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.
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!
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 :)
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.
Sélectionnez Configuration, vous obtenez alors l'écran de la figure 6.2.
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.
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...
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:
ATZ
et ATDT
). En revanche, sous la
section Chat (« discussion, bavardage »), effacez
tout et mettez simplement dans les deux premières cases respectivement
TIMEOUT
et 5
;
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.
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).
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.
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.
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.
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.)
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
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.
L'option de questionnement de paquetages est -q
(pour
Query, « requête »). Vous pouvez
demander beaucoup de choses à rpm
:
rpm -q toto
);
rpm -ql toto
,
rpm
-qi toto
.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
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.
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).
Vous pouvez voir les différentes options dans les boutons radio sur la gauche:
rpm
l'option -U
à la place de -i
;
rpm
. Si une dépendance n'est pas
satisfaite, le paquetage refusera de s'installer. Vous pouvez forcer
l'installation en désactivant cette option (c'est équivalent à l'option
--nodeps
de rpm
), mais là encore vous devez savoir
ce que vous faites. Un paquetage installé ainsi peut ne pas fonctionner!
--test
de rpm
.À partir de là, cliquez sur Installer si vous voulez l'installer ou bien sur Annuler pour annuler l'opération.
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).
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.
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.
À 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.
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.
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 (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.
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 (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.
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.
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
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.
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.
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
.
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:
a
: affiche aussi les processus lancés par les autres
utilisateurs;
x
: affiche aussi les processus n'ayant pas de terminal de
contrôle (c'est le cas de pratiquement tous les serveurs);
u
: affiche pour chaque processus le nom de l'utilisateur qui
l'a lancé et l'heure de son lancement.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.
kill
, killall
et top
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.
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.
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:
'k'
: cette commande sert à envoyer un signal à un processus.
top
vous demandera alors le PID du processus suivi du
numéro du signal à envoyer (15 par défaut);
'M'
: cette commande sert à trier les processus selon la place
mémoire qu'ils occupent (champ %MEM
);
'P'
: cette commande sert à trier les processus selon le temps
CPU qu'ils consomment (champ %CPU
; c'est le tri par
défaut);
'u'
: cette commande sert à afficher les processus d'un
utilisateur donné, top
vous demandera lequel. Vous devez
entrer le nom de l'utilisateur, pas son UID. Si vous
n'entrez aucun nom, tous les processus seront affichés;
'i'
: cette commande fonctionne en tant que bascule; par
défaut, tous les processus, même endormis, sont affichés; cette commande
fera que seuls les processus en cours d'exécution seront affichés
(processus dont le champ STAT
indique R
, running)
et pas les autres. Un nouvel appel à cette commande reviendra à l'état
antérieur.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.
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 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:
'u'
: pour Up (« haut »), monte au
niveau supérieur;
'n'
: pour Next (« prochain »), va à la
page info suivante dans ce niveau de l'arborescence;
'p'
: pour Prev (« précédent »), va à la
page info précédente.Les commandes sont nombreuses, vous pouvez taper '?'
pour en avoir
une liste.
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.
/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.
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.
Parmi la multitude des sites web existants, voici quelques-uns des sites les plus complets:
http://www.linux-france.org/article/
: site web de
documentations, pour la plupart originales;
http://www.freenix.org/unix/linux/
: d'autres documentations;
http://uhp.u-nancy.fr/linux/
: toujours des documentations
:)
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/
.
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.*
:
fr.comp.os.linux.configuration
: questions sur la
configuration de Linux (périphériques, configuration
d'applications) et résolution de problèmes divers;
fr.comp.os.linux.moderated
: questions relatives à
l'utilisation et à la configuration de Linux, groupe
« modéré » (assez haut niveau).
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...
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.
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:
mkdir toto
: crée un répertoire du nom de toto
dans le répertoire courant.
mkdir -p images/divers docs
: crée un répertoire
divers
dans le répertoire images
en créant ce dernier
auparavant s'il n'existait pas, et crée aussi un répertoire
docs
.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:
-r
ou -R
: Supprimer récursivement. Cette option
est obligatoire pour supprimer un répertoire, même vide.
Toutefois, il existe aussi la commande rmdir
pour effacer des
répertoires vides.
-i
: Demander confirmation avant chaque effacement. Il
est recommandé de placer un alias de rm
vers
rm-i
dans votre shell, et de même pour les commandes
cp
et mv
.
-f
: Le contraire de -i
, force la suppression
des fichiers ou répertoires, même si l'utilisateur n'a pas
d'autorisation en écriture sur les fichiers[4].Quelques exemples:
rm -i images/*.jpg fichier1
: Supprimer tous les
fichiers dont le nom se termine par .jpg
dans le répertoire
images
ainsi que le fichier fichier1
dans le répertoire
courant, en demandant confirmation pour chacun des fichiers. Répondez
'o'
ou 'y'
pour confirmer, 'n'
pour annuler.
rm -Rf images/divers/ file*
: Suppression sans demande de
confirmation de tout le répertoire divers/
dans le répertoire
images/
en plus de tous les fichiers du répertoire courant dont
le nom commence par file
.Attention: un fichier effacé avecrm
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:
-f
: Forcer le déplacement de fichiers --- aucun
avertissement en cas d'écrasement d'un fichier au cours de l'opération.
-i
: Le contraire --- demander confirmation à
l'utilisateur avant d'écraser un fichier existant.
-v
: Mode verbeux, rapporter tous les changements.Quelques exemples:
mv -i /tmp/pics/*.gif .
: Déplacer tous les fichiers du
répertoire /tmp/pics/
dont le nom se termine par .gif
vers le répertoire courant (.
), en demandant confirmation avant
d'écraser un fichier existant.
mv toto titi
: Renommer le fichier toto
en titi
.
mv -vf fichier* images/ trash/
: Déplacer, sans demander
confirmation, tous les fichiers dans le répertoire courant dont le nom
commence par fichier
ainsi que tout le répertoire
images/
vers le répertoire trash/
, et rapporter tous les
changements effectués.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:
-R
: Copier récursivement; obligatoire pour
copier un répertoire, même vide.
-i
: Demander confirmation avant d'écraser des fichiers
qui pourraient l'être.
-f
: Le contraire de -i
, remplacer d'éventuels
fichiers existants sans demander confirmation.
-v
: Mode verbeux, rapporter toutes les actions effectuées
par cp
.Quelques exemples:
cp -i /tmp/images/* images/
: Copier tous les fichiers
du répertoire /tmp/images
dans le répertoire images/
du
répertoire courant, en demandant confirmation si un fichier peut être
écrasé.
cp -vR docs/ /shared/mp3s/* mystuff/
: Copie tout le
répertoire docs
dans le répertoire courant plus tous les fichiers
dans le répertoire /shared/mp3s
dans le répertoire mystuff
situé dans le répertoire courant.
cp toto titi
: Faire une copie du fichier toto
sous le nom de titi
dans le répertoire courant.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:
-v
: Mode verbeux; décrit toutes les actions effectuées
par chown
; rapporte quels fichiers ont changé de propriétaire à
la suite de la commande et lesquels n'ont pas changé.
-c
: Comme -v
, mais ne rapporte que les fichiers
pour lesquels un changement a eu lieu.Quelques exemples:
chown nobody /shared/book.tex
: Changer le propriétaire
du fichier /shared/book.tex
en nobody
.
chown -Rc jean.musique *.mid concerts/
: Donner la
propriété de tous les fichiers dans le répertoire courant se terminant
par .mid
et de tous les fichiers et sous-répertoires du
répertoire concerts/
à jean
et au groupe musique
,
en ne rapportant que les fichiers affectés par la commande.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:
<x>00
, où
<x>
correspond au droit assigné: 4 pour lecture, 2 pour
écriture, 1 pour exécution; de même, les droits d'accès du groupe
propriétaire sont de la forme <x>0
et ceux des
« autres » sont de la forme x
. Tout ce qui
reste alors à faire est d'additionner ensemble les droits d'accès
assignés pour obtenir le bon chiffre. Ainsi, les permissions
rwxr-xr--
correspondent à 400+200+100 (droits d'accès de
l'utilisateur propriétaire,rwx
) +40+10 (droits d'accès du
groupe, r-x
) +4 (droits d'accès des autres, r--
) =
754; de cette façon, les droits d'accès sont exprimés de manière
absolue: les droits d'accès précédents sont remplacés
inconditionnellement.
[catégorie]<+|-><droits d'accès>
. La catégorie peut être
une combinaison de u
(pour user,
« utilisateur »), g
(pour
Group, « groupe ») ou o
(Others, « les autres »). Si aucune
catégorie n'est spécifiée, le changement s'applique à toutes les
catégories. Un +
appose un droit d'accès et un -
le
retire. Pour finir, les droits d'accès sont l'un de r
(pour
Read, « lecture »), w
(pour
Write, « écriture ») ou x
(pour eXecute, « exécution »).Les options principales sont très similaires à celles de chown
ou chgrp
:
-R
: Changer les droits d'accès récursivement.
-v
: Mode verbeux, décrire les actions effectuées pour
chaque fichier.
-c
: Comme -v
mais ne rapporte que les fichiers
dont les droits d'accès ont changé.Exemples:
chmod -R o-w /shared/docs
: Enlever de façon récursive
le droit d'accès en écriture aux « autres » sur tous les fichiers
et sous-répertoires du répertoire /shared/docs/
.
chmod -R og-w,o-x prive/
: Enlever de façon récursive
le droit d'accès en écriture pour le groupe et les autres sur tout le
répertoire prive/
, et retire le droit d'accès en exécution pour
les autres.
chmod -c 644 divers/fichier*
: Changer les droits
d'accès de tous les fichiers du répertoire divers/
dont les noms
commencent par fichiers
en rw-r--r--
(droit d'accès
en lecture pour tout le monde et droit d'accès en écriture pour le
propriétaire du fichier seulement), et ne rapporter que les fichiers
affectés par l'opération.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:
?
: correspond à un et un seul caractère, quel qu'il
soit;
[...]
: correspond à un des caractères entre les
crochets; les caractères peuvent être désignés en intervalles (par
exemple, 1-9
) ou des valeurs discrètes, ou un mélange
des deux. Exemple: [a-zBE5-7]
correspond à tous les
caractères de a
à z
, un B
, un E
,
un 5
, un 6
ou un 7
;
[!...]
: correspond à tous les caractères qui ne se
trouvent pas entre les crochets; [!a-z]
, par exemple,
correspond à tout caractère qui n'est pas une lettre minuscule;
c1,c2
: correspond à c1
ou c2
, où
c1
et c2
sont eux-même des motifs d'englobement.Voici quelques exemples de motifs et leurs significations:
/etc/*conf
: Tous les fichiers du répertoire /etc
dont le nom se termine par conf
. Cela peut correspondre au
fichier
/etc/inetd.conf
, mais aussi à /etc/conf.linuxconf
, et à
/etc/conf
si un tel fichier existe. Souvenez-vous que *
peut correspondre à une chaîne vide.
image/cars,space[0-9]/*.jpg
: Tous les fichiers dont
le nom se termine par .jpg
dans les répertoires
image/cars
, image/space0
, ... , image/space9
, s'ils
existent.
/usr/doc/*/README
: Tous les fichiers de nom
README
dans tous les sous-répertoires immédiats de
/usr/doc
. Cela correspondra à /usr/doc/mandrake/README
par
exemple, mais pas à /usr/doc/myprog/doc/README
.
*[!a-z]
: Tous les fichiers du répertoire courant dont
le nom ne finit pas par une lettre minuscule.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.
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
.
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 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.
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.
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
.
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>
où <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.
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)
).
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 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.
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
.
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.
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.
Vous pouvez, si vous le voulez, ne montrer qu'un tampon à l'écran. Vous avez deux solutions:
C-x
0
;
C-x 1
.Vous pouvez ensuite remettre le tampon que vous souhaitez à l'écran de deux manières:
C-x b
et rentrez le nom du tampon que vous souhaitez,
C-x C-b
, un nouveau tampon sera alors ouvert, appelé
*Buffer List*
; vous pouvez vous déplacer dans ce tampon à
l'aide de la séquence C-x o
, puis sélectionner le tampon que vous
souhaitez et appuyer sur la touche Entrée
, ou bien taper le nom
dans le mini-tampon. Le tampon *Buffer List*
se remet en
arrière-plan dès que votre choix est fait.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.
Supposons que nous sommes dans la situation de la figure 12.2.
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.
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.
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 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.
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.
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:
'a'
et 'i'
: pour insérer du texte respectivement derrière
et devant le curseur ('A'
et 'I'
insèrent du texte à la fin et
au début de la ligne courante);
'o'
et 'O'
: pour insérer du texte respectivement
au-dessous et au-dessus de la ligne courante.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>
.
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!
.
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:
'c'
: pour remplacer (Change); l'éditeur efface le
texte demandé et repasse en mode d'insertion après cette commande;
'd'
: pour effacer (Delete);
'y'
: pour copier (Yank), nous verrons cela
dans la section suivante.
'.'
: reproduit la dernière action effectuée.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:
'h'
, 'j'
, 'k'
, 'l'
: un caractère à gauche, en bas,
en haut, à droite[10];
'e'
, 'b'
, 'w'
: jusqu'à la fin (resp. au début) du mot
courant, jusqu'au début du mot suivant;
'^ '
, 0
, '$'
: jusqu'au premier caractère non blanc de
la ligne courante, jusqu'au début de la ligne courante, jusqu'à la fin
de la ligne courante;
f<x>
: jusqu'à la prochaine occurrence du caractère
<x>
; par exemple fe
déplace le curseur jusqu'à la prochaine
occurrence du caractère 'e'
;
/<chaîne>
, ?<chaîne>
: jusqu'à la prochaine occurrence
de la chaîne ou expression rationnelle <chaîne>
, et de même en
remontant dans le fichier; par exemple, /toto
déplace le curseur
jusqu'à la prochaine occurrence du mot toto
;
'{'
, '}'
: jusqu'au début, jusqu'à
la fin, du paragraphe;
'G'
, 'H'
: jusqu'à la fin du fichier, jusqu'au début de
l'écran.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:
6b
: se déplace 6 mots en arrière;
c8fk
: efface tout le texte jusqu'à la huitième occurrence du
caractère 'k'
puis passe en mode insertion;
91G
: va à la ligne 91 du fichier;
d3$
: efface jusqu'à la fin de la ligne courante plus les
deux lignes suivantes.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 :)
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.
Pour effectuer cette action, on va donc:
'r'
(par exemple): "ry6w
[12];
fichier2
, qui se situe dessous:
C-w j
;
'r'
devant le curseur:
"rp
.Le résultat, présenté dans la figure 12.6, est bien celui qui est attendu.
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 '?'
.
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:
:wq
pour sauvegarder les modifications et quitter (solution
plus rapide: ZZ
), ou
:q!
pour quitter sans enregistrer.Par extension, vous aurez deviné que si vous avez plusieurs tampons,
:wq
écrira le tampon actif puis le fermera.
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 :)
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é.
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 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:
/bin
: binaires essentiels au système. Ce répertoire renferme
les commandes de base qui sont susceptibles d'être utilisées par tout le
monde et nécessaires pour utiliser le système: ls
,
cp
, login, etc. Statique, non partagé.
/boot
: contient les fichiers nécessaires au gestionnaire de
démarrage de Linux (LILO dans le cas des architectures
Intel). Cela peut ou non comprendre le noyau: s'il n'est pas
ici, il doit être situé dans la racine. Statique, non partagé.
/dev
: fichiers périphériques du système (dev
pour
DEVices, « périphériques »). Statique, non
partagé.
/etc
: ce répertoire contient tous les fichiers de
configuration spécifiques à la machine.
/home
: contient tous les répertoires personnels des
utilisateurs du système. Ce répertoire peut ou non être partagé (les
grands réseaux le rendent généralement partagé par NFS), et il est
évidemment non statique.
/lib
: ce répertoire contient les bibliothèques essentielles
au système ainsi que les modules du noyau, dans /lib/modules
.
Toutes les bibliothèques nécessaires aux binaires présents dans les
répertoires du système /bin
et /sbin
, doivent s'y trouver,
ainsi que l'éditeur de liens ld.so
. Statique, non partagé.
/mnt
: répertoire contenant les points de montage pour les
systèmes de fichiers temporaires. Non statique, non partagé.
/opt
: ce répertoire contient des paquetages non nécessaires
au fonctionnement du système. Il est recommandé que les fichiers
statiques (binaires, bibliothèques, pages de manuel, etc.) de tels
paquetages aient leur place dans le fichier /opt/nom_du_paquetage
et que leurs fichiers de configuration spécifiques à la machine soient
placés dans le répertoire /etc/opt
.
/root
: répertoire personnel du Tout-Puissant. Non statique,
non partagé.
/usr
: voir section suivante. Statique, partagé.
/sbin
: contient les binaires systèmes essentiels au
démarrage du système, exploitables uniquement par root
.
L'utilisateur peut les exécuter aussi mais il n'en obtiendrait pas grand
chose en général. Statique, non partagé.
/tmp
: répertoire destiné à contenir les fichiers
temporaires que peuvent créer certains programmes. Non statique, non
partagé.
/var
: emplacement pour les données souvent modifiées par
des programmes (par exemple le serveur de courrier électronique, les
programmes d'audit, le serveur d'impression, etc.). Tout /var
est
non statique, mais ses différents sous-répertoires peuvent être partagés
ou non./usr
: le gros morceauLe 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:
/usr/X11R6
: toute la hiérarchie de X Window System. Tous
les binaires nécessaires au fonctionnement de X (cela comprend
bien sûr les serveurs X) et toutes les bibliothèques nécessaires
doivent s'y trouver. Le répertoire portant le nom
/usr/X11R6/lib/X11
contient les aspects de la configuration de
X qui ne varient pas de machine à machine. Nous avons déjà vu
que la configuration spécifique pour chaque machine est dans
/etc/X11
.
/usr/bin
: ce répertoire contient la grande majorité des
programmes binaires du système. Tout programme binaire qui
n'est pas nécessaire à l'entretien du système et n'est pas un programme
d'administration du système doit se trouver dans ce répertoire, à
l'exception des programmes que vous installez vous-mêmes, qui doivent
être dans /usr/local
.
/usr/lib
: ce répertoire contient toutes les bibliothèques
nécessaires pour employer les programmes situés dans le répertoire
/usr/bin
et /usr/sbin
. Il existe également un lien
symbolique /usr/lib/X11
qui pointe vers le répertoire renfermant
les bibliothèques de X Window System, c'est-à-dire /usr/X11R6/lib
(si X Window System est installé, bien sûr).
/usr/local
: c'est dans ce répertoire que vous devrez
installer vos applications personnelles. Le programme d'installation y
aura créé toute la hiérarchie nécessaire: lib/
, man/
, etc.
/usr/share/
: ce répertoire contient toutes les données
nécessaires aux applications dans /usr/
, ainsi que toutes les
données indépendantes de la plate-forme. Vous y trouverez notamment les
informations de zones et de localisation (zoneinfo
et
locale
).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'utilisationLe 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:
/var/log
: contient les fichiers d'audit du système;
/var/spool
: contient les fichiers de travail des démons du
système. Par exemple, /var/spool/lpd
contient les fichiers de
travail du serveur d'impressions et le répertoire /var/spool/mail
contient les fichiers de travail du serveur de courrier électronique
(donc tout le courrier qui arrive et sort de votre système).
/var/run
: ce répertoire sert à conserver une trace de tous
les processus en cours d'utilisation par le système, de façon à pouvoir
agir sur ces processus lors d'un changement de niveau d'exécution du
système (voir un chapitre précédent)./etc
: les fichiers de configurationLe 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:
passwd
et shadow
: ces deux fichiers sont des
fichiers texte qui contiennent tous les utilisateurs du système ainsi
que leurs mots de passe (cryptés :)
). shadow
n'est là que
si vous utilisez les mots de passe shadow, mais c'est l'option
par défaut de l'installation;
inittab
: c'est le fichier de configuration du programme
init
, qui joue un rôle fondamental lors du démarrage du
système ainsi que nous le verrons plus tard;
services
: ce fichier contient une énumération des services
réseau existants;
profile
: il s'agit du fichier de configuration du
shell, bien que certains shells en utilisent d'autres. Par
exemple, Bash utilise bashrc
;
crontab
: fichier de configuration de cron
,
programme chargé de l'exécution périodique de commandes.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
.
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:
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:
/dev/null
, que nous avons
déjà vu), ou des périphériques (ports série ou parallèle), qui ont en
commun la particularité que leur contenu (s'ils en ont) n'est pas
conservé en mémoire[13]. De tels fichiers sont identifiés
par la lettre 'c'
.
/dev/hda
, /dev/sda5
sont des exemples
de fichiers en mode bloc. Sur la sortie d'un ls -l
, ces
fichiers sont identifiés par la lettre 'b'
.
'l'
.
'p'
.
's'
.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:
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:
a
, dans le
répertoire courant, /home/fg/exemple
. Donc, le fichier appelé
/home/fg/exemple/a
est un lien vers l'i-noeud de numéro 32555,
et c'est pour l'instant le seul: le compteur de liens est à 1.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é.
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 :)
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.
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.
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:
A
(no Access time,
« pas de date d'accès »): Si un fichier ou un répertoire a cet
attribut positionné, quand on y accédera, que ce soit en lecture ou en
écriture, sa date de dernier accès ne sera pas mise à jour. Cela peut
être utile, par exemple, sur des fichiers ou répertoires qui sont très
souvent accédés en lecture, en particulier parce que ce paramètre est le
seul à changer sur un i-noeud quand celui-ci est ouvert en lecture
seule.
a
(append only,
« uniquement pour ajout »): Si un fichier a cet attribut
positionné et est ouvert en écriture, la seule opération possible sera
d'ajouter des données à la fin du fichier. Pour un répertoire, cela
signifie que vous pouvez seulement y ajouter des fichiers, mais vous ne
pouvez ni renommer des fichiers déjà existants ni en effacer. Seul
root
peut positionner ou enlever cet attribut.
d
(no dump,
« pas de sauvegarde »): dump(8)
est
l'utilitaire Unix standard pour faire des sauvegardes. Il
sauvegarde tout système de fichiers pour lequel le compteur de
sauvegarde est à 1 dans /etc/fstab
(voyez le
chapitre 33.0). Mais si un fichier ou répertoire a
cet attribut positionné, contrairement aux autres, il ne sera pas pris
en compte lors d'une sauvegarde. Notez que pour les répertoires, cela
inclut également tous les sous-répertoires et fichiers en-dessous de
celui-ci.
i
(immutable,
« immuable »): Un fichier ou répertoire avec cet attribut
ne peut tout simplement pas être modifié: il ne peut pas être renommé,
on ne peut y ajouter aucun lien[17], et on ne peut pas l'effacer. Seul root
peut positionner ou enlever cet attribut. Notez que cela empêche
également les changements à la date de dernier accès, donc vous n'avez
pas besoin de positionner l'attribut A
quand cet attribut-ci
est positionné.
s
(secure deletion,
« sécurité pour l'action d'effacer »): Quand un fichier ou
un répertoire avec cet attribut est effacé, les blocs qu'il occupait sur
disque sont remplis de zéros.
S
(Synchronous mode,
« mode synchrone »): Quand un fichier ou répertoire a cet
attribut positionné, toutes les modifications qui y sont apportées sont
synchrones et écrites immédiatement sur disque.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.
/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.
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:
cmdline
: Ce (pseudo-)fichier contient l'intégralité de la
ligne de commande utilisée pour invoquer le processus. Elle n'est pas
formatée: il n'y a aucun espace entre le programme et ses arguments, et
il n'y a pas non plus de saut de ligne à la fin du fichier.
cwd
: Ce lien symbolique pointe sur le répertoire de travail
en cours ("current working directory" en anglais, d'où le nom)
du processus.
environ
: Ce fichier contient toutes les variables
d'environnement pour le processus, sous la forme VARIABLE=valeur
.
De même que pour cmdline
, la sortie n'est pas formatée du tout:
pas de saut de ligne pour séparer les différentes variables, et pas de
saut de ligne à la fin non plus.
exe
: C'est un lien symbolique pointant sur le fichier
exécutable correspondant au processus en cours d'exécution.
fd
: Ce sous-répertoire contient la liste de tous les
descripteurs de fichiers actuellement ouverts par le processus. Voyez
ci-dessous.
maps
: Quand vous affichez le contenu de ce tube nommé (avec
cat
par exemple), vous pouvez voir toutes les parties de
l'espace d'adressage du processus qui sont actuellement des projections
en mémoire de fichiers. Les champs, de gauche à droite, sont: la plage
d'adresses de la projection mémoire, les permissions associées à cette
projection, le décalage depuis le début du fichier où commence la
projection, le périphérique sur lequel le fichier projeté se trouve, le
numéro d'i-noeud du fichier, et enfin le nom du fichier lui-même.
Voyez mmap(2)
.
root
: C'est un lien symbolique qui pointe sur le répertoire
racine utilisé par le processus. Habituellement, ce sera /
, mais
voyez chroot(2)
.
status
: Ce fichier contient diverses informations sur le
processus: le nom de l'exécutable, son état actuel, son PID et son
PPID, ses UID et GID réels et effectifs, son occupation mémoire
et autres.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.
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:
cpuinfo
: Ce fichier contient, comme son nom l'indique (en
anglais), des informations sur le ou les processeur(s) présent(s) sur
votre machine.
modules
: Ce fichier contient la liste des modules
actuellement utilisés dans le noyau ainsi que leur compteur
d'utilisations. En fait, c'est la même information que celle reportée
par la commande lsmod
.
meminfo
: Ce fichier contient des informations sur
l'utilisation qui est faite de la mémoire à l'instant où vous affichez
son contenu. Une sortie plus clairement formatée est disponible avec la
commande free
.
apm
: Si vous avez un ordinateur portable, afficher le
contenu de ce fichier vous permet de voir l'état de votre batterie. Vous
pouvez savoir si l'alimentation externe est branchée, la charge courante
de votre batterie, et si le BIOS APM de votre portable le
permet (malheureusement ce n'est pas le cas de tous), la durée de vie
restante, en minutes. Le fichier n'est pas très lisible en tant que tel,
vous aurez donc avantage à utiliser la commande apm
à la
place, qui donne les mêmes informations dans un format plus lisible (si
on comprend l'anglais...).
bus
: Ce sous-répertoire contient des informations sur tous
les périphériques trouvés sur les différents bus de votre machine. Les
informations qu'il renferme sont en général peu lisibles, et sont pour
la plupart traitées et remises en forme par des utilitaires externes:
lspcidrake
, lspnp
, etc./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:
root
:
$ echo 1 >/proc/sys/net/ipv4/ip_forward
Remplacez le 1 par un 0 si vous voulez interdire le routage.
$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
et ce type d'attaque devient impossible.
$ echo 8192 >/proc/sys/fs/file-max
$ echo 16384 >/proc/sys/fs/inode-max
Pour que ces paramètres soient appliqués dès le démarrage du système,
vous voudrez sans doute rajouter ces deux lignes dans
/etc/rc.d/rc.local
pour vous éviter d'avoir à les retaper à
retaper à chaque fois.
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 »).
tar
pour les clients, afin de créer des
sauvegardes à distance.
Pour plus d'informations à ce sujet rendez-vous sur le site web
http://samba.org/samba/
.
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.
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.
/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 »).
[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 »).
share
(ou « partagé »): Le client
envoie un mot de passe lors de la demande de connexion sans qu'un nom
d'utilisateur soit requis. Ce mode est le mode par défault de sécurité
des fichiers ou de l'impression de Windows 95. Il peut être
modifié dans la section Réseau du
Panneau de configuration, dans Contrôle d'accès.
user
(« utilisateur »): Il est
préférable de choisir ce mode de sécurité. Il faut alors fournir un nom
d'utilisateur valide et le nom de passe associé.
server
(« serveur »): Ce mode est une
variante du mode user
. Le serveur Samba envoie une
demande d'ouverture de session ou serveur de mots de passe.
password server = NT_passe
# c'est le nom du serveur NT de mots de passe.
# On peut indiquer plusieurs noms de serveurs.
domain
(« domaine »): Ce mode est
presque le même que le précédent.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
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
[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
[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
.
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.
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
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
.
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.
Permet de créer des archives tar
à distance. Lire la page de
manuel pour obtenir plus d'informations sur ses nombreuses options.
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.
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.
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
Pour toute information complémentaire vous êtes vivement invité à consulter la documentation de Samba.
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.
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
.
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.
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.
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.
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.
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.
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.
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:
root
, inscriptibles (sur
lesquels on peut écrire), sans propriétaire,
Niveau de | 0 | 1 | 2 | 3 | 4 | 5 |
Optionssécurité | ||||||
vérifications de | oui | oui | oui | oui | oui | |
sécurité globales | ||||||
umask pour les | 002 | 002 | 022 | 022 | 077 | 077 |
utilisateurs | ||||||
umask pour | 002 | 002 | 022 | 022 | 022 | 077 |
shell sans | oui | |||||
mot de passe | ||||||
sont autorisés | ||||||
à se connecter | tous | local | local | aucun | aucun | aucun |
au serveur X | ||||||
utilisateurs dans | oui | oui | oui | |||
le groupe audio | ||||||
| oui | oui | ||||
avertissements dans | oui | oui | oui | oui | oui | |
/var/log/security.log | ||||||
avertissements | ||||||
directement | oui | oui | ||||
sur la console | ||||||
avertissements | oui | oui | oui | oui | ||
dans syslog | ||||||
avertissements | ||||||
envoyés par | oui | oui | oui | |||
e-mail à root | ||||||
vérification des | ||||||
fichiers suid | oui | oui | oui | oui | ||
root | ||||||
vérification de la | ||||||
signature MD5 des | oui | oui | oui | oui | ||
fichiers suid root | ||||||
vérification des | ||||||
fichiers | oui | oui | oui | oui | ||
inscriptibles | ||||||
vérification des | ||||||
permissions | oui | oui | oui | |||
vérification des | ||||||
fichiers suid | oui | oui | oui | |||
groupe | ||||||
vérification des | oui | oui | ||||
fichiers sans | ||||||
propriétaire | ||||||
vérification de type | oui | oui | ||||
"promiscuous" | ||||||
vérification des | oui | oui | oui | |||
ports ouverts | ||||||
vérification de | ||||||
l'intégrité du | oui | oui | oui | |||
du fichier de mots | ||||||
de passe | ||||||
vérification de | ||||||
l'intégrité du | oui | oui | oui | |||
du fichier shadow | ||||||
vérifications de | ||||||
sécurité du | oui | oui | oui | |||
système tous les | ||||||
jours à minuit | ||||||
tous les événements | ||||||
du système sont | oui | oui | ||||
dirigés vers | ||||||
/dev/tty12 | ||||||
services avancés | oui | oui | ||||
désactivés | ||||||
mot de passe de | oui | oui | ||||
démarrage (LILO) | ||||||
permettre l'accès à | tous | tous | tous | tous | local | aucun |
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:
root
root
nosuid
»:
(« montages par NFS sans l'option nosuid
»),
ces systèmes de fichiers sont exportés dans l'option nosuid
,
ce qui interdit aux programmes suid de fonctionner sur la machine.
+
sign »:
(« les fichiers de « confiance » de l'hôte
contiennent le signe +
») cela signifie que l'un des fichiers
/etc/hosts.equiv
, /etc/shosts.equiv
, /etc/hosts.lpd
référence un hôte autorisé à se connecter sans authentification
préalable.
/etc/aliases
ou /etc/postfix/aliases
contient un alias redirigeant vers un programme.Indique le umask qui sera utilisé pour les utilisateurs normaux du système suivant le niveau de sécurité.
root
»La même chose, mais pour root
.
L'accès à la console est permis sans mot de passe.
tous
: n'importe qui connecté depuis n'importe où peut
ouvrir une fenêtre X sur votre écran
local
: seules les personnes connectées sur votre
système pourront y ouvrir une fenêtre X.
aucun
: personne ne peut faire cela.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é).
/var/log/security.log
»Chaque avertissement généré par MSEC est archivé dans le fichier
/var/log/security.log
.
Chaque avertissement généré par MSEC est affiché directement sur la console.
Les avertissement générés par MSEC sont adressés au service syslog.
root
»Les avertissement engendrés par MSEC sont également adressés à
root
par courrier électronique.
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.
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é.
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.
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é.
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.
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
.
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.
Génere un avertissement contenant la liste des ports ouverts.
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
.
shadow
»Vérifie que chaque utilisateur a un mot de passe (non vide et non facile
à trouver) dans le fichier shadow
.
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
.
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
).
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.
tous
: tous les ordinateurs peuvent se connecter aux
ports ouverts.
local
: seul le système peut se connecter à ses propres
ports.
aucun
: aucun ordinateur ne peut se connecter.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 à suivre pour configurer une installation automatique peut se décliner en quatre étapes simples:
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:
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.
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.
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 »
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:
hd.img
pour une installation depuis un disque dur local,
cdrom.img
pour une installation depuis un CD-ROM
local,
network.img
pour une installation par NFS ou FTP
utilisant une carte réseau ISAPCI,
pcmcia.img
pour une installation par NFS ou FTP
(ou un CD-ROM) via une carte PCMCIA.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:
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
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.
ks.cfg
pour une installation par réseauDans 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.
network --ip 192.168.1.25 \
--netmask 255.255.255.0 \
--gateway 192.168.1.1 \
--nameserver 192.168.1.12 \
(il faut bien entendu ajuster les paramètres IP à votre contexte)
network --bootproto dhcp
network --bootproto bootp
nfs --server 192.168.1.9 --dir /export
url --url ftp://user:password@192.168.1.9//export
Où 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.
auto_inf
en détailsCe 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
$shadow
: mettre à 1
pour utiliser les mots de
passe shadow, 0
sinon,
$md5
: idem
$nis
: mettre à 1
si vous souhaitez utiliser
un serveur NIS que vous devrez alors définir:
$nis_server
: l'adresse IP du serveur NIS que
votre machine utilisera.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:
NETWORKING
ou « réseau », (à
true
, « vrai », ou false
,
« faux »)
DOMAINNAME
(« nom de domaine »)
dnsServer
(« serveur de noms »)
FORWARD_IPV4
ou « faire suivre les paquets
IP de type 4 », à true
ou false
HOSTNAME
(« nom de l'hôte »)timezone
GMT =>
(à true
ou false
)
timezone => Europe/Paris
(par
exemple)superuser
Cela contient le mot de passe de root
, et peut contenir une des
deux variables:
pw
: contient le mot de passe chiffré,
password
: contient le mot de passe en clair.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:
0
si vous ne voulez pas de disque de démarrage
(recommandé),
1
pour écrire un disque de démarrage sur le lecteur
fd0
,
fdx
pour écrire un disque de démarrage sur le lecteur
fd<x>
(<x>=[0,1]
).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:
clearall
pour effacer la table des partitions existante
(utile: efface toutes les partitions précédentes)
autoformat
(recommandé)
eraseBadPartitions
pour effacer les partitions
incorrectes
auto_allocate
pour le partitionnement automatiquepartitions
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:
mntpoint
le répertoire où sera montée la partition,
type
le chiffre décimal correspondant au type de
partition choisi,
size
la taille en octets de la partition.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.
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.
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
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).
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.
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.
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:
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].
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:
/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:
dump
,
fsck
(FileSystem ChecK,
« vérification des systèmes de fichiers »).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:
/usr
(l'« ancien », donc, puisque le « nouveau » n'est pas
monté pour l'instant): rm -Rf /usr/*
;
/usr
: mount /usr
et vous en avez terminé.
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é.
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.
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
Pour configurer le noyau vous avez le choix entre:
make xconfig
pour une interface graphique,
make menuconfig
pour une interface basée sur
ncurses
, ou
make config
pour l'interface la plus rudimentaire,
ligne par ligne, section par section.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.
'y'
PPro/6x86MX
si vous avez un processeur Intel
Pentium Pro, Pentium II, Celeron ou supérieur,
ou un
Cyrix 6x86
ou Cyrix MII.
'n'
.
'y'
. Même si votre processeur ne les supporte pas, ce n'est pas
grave.
'y'
que si votre machine est multi-processeurs!
'y'
'n'
'y'
'y'
--- même
si vous n'êtes pas en réseau! Vous en avez au moins besoin pour
l'interface loopback.
'y'
--- sauf si vous
n'avez pas de bus PCI sur votre machine.
'y'
'y'
'n'
--- à moins que
vous ayez un tel bus (les machines IBM PS/2 par
exemple).
'n'
--- ou alors c'est que vous êtes très fortuné!
'y'
'y'
'y'
'm'
'y'
'm'
'n'
'y'
ou 'm'
, au
choix.
'y'
uniquement si vous avez répondu 'y'
à l'option
Parallel port support. Sinon, il vous faut répondre
'm'
et rajouter la ligne alias parport_lowlevel parport_pc
dans le fichier /etc/conf.modules
.
'n'
'y'
, si votre carte mère le supporte.
'n'
'n'
'n'
'y'
'y'
'y'
'y'
'n'
si votre
PC est à l'heure locale, 'y'
s'il est à l'heure GMT.
'n'
(mais lisez l'aide!)
'y'
---
mais il faut savoir que tout ce que fait cette option est d'interroger
le BIOS PNP sur la configuration des cartes PNP s'il y en
a (rappelez-vous que le PNP n'a aucun sens pour les périphériques
PCI).
'm'
si
vous disposez de périphériques par port parallèle, 'n'
sinon.
'm'
'y'
'n'
'y'
. Si vous disposez de
disques IDE mais démarrez sur un disque SCSI, vous pouvez répondre
'm'
.
'm'
si
vous disposez d'un lecteur CD-ROM IDE.
'y'
ou 'm'
.
'y'
ou 'm'
si vous disposez, par exemple, d'un lecteur ZIP
IDE.
'm'
si vous
disposez d'un graveur IDE, 'n'
sinon.
'y'
'y'
'n'
'y'
'm'
'n'
'n'
--- à moins que vous ne vouliez expérimenter le RAID. À ce
moment-là, voyez le RAID-HOWTO
.
'n'
'n'
---
quoi, vous avez encore de tels disques? :)
'm'
si
vous disposez de tels périphériques, 'n'
sinon. Si vous répondez
'm'
, il vous faudra ensuite sélectionner quels types de
périphériques vous voulez reconnaître et quels protocoles. Reportez-vous
à l'aide du noyau pour en savoir plus, il n'y a pas de solutions
génériques à ce niveau, si ce n'est de tout compiler en module :)
'm'
'y'
'n'
'm'
'n'
, sauf si vous
voulez faire du masquage IP (plusieurs machines derrière une
connexion Internet) ou bien tout simplement un
firewall, auquel cas il vous faut répondre 'y'
.
'y'
---
autrement X ne fonctionnera pas.
'y'
'n'
'y'
ici c'est que vous savez de quoi il retourne --- sinon, répondez
'n'
.
'y'
,
sinon 'n'
. Pour le masquage, il vous faudra aussi répondre 'y'
à
IP: always defragment (required for masquerading),
IP: masquerading et IP: ICMP
masquerading
'n'
,
sauf si la machine est effectivement un routeur dédié.
'y'
si vous
êtes en réseau --- voyez également l'aide à ce sujet.
'y'
'n'
, à moins que vous ne soyez connecté par une interface à très
haut débit (gigabit Ethernet, FDDI, etc.)
'y'
si vous avez un (ou
plusieurs) adaptateur(s) et périphérique(s) SCSI , un lecteur ZIP
par port parallèle ou un graveur IDE, 'n'
sinon. Choisissez
'y'
à « SCSI disk support » si vous
bootez sur un disque SCSI, et pas 'm'
!
Choisissez également 'm'
à SCSI generic support
si vous disposez d'un graveur (SCSI ou IDE), et répondez de façon
appropriée pour les autres types de périphériques. Quand vient le
moment de déterminer quel est (sont) votre (vos) adaptateur(s) SCSI,
reportez-vous au fichier intitulé /etc/conf.modules
:
l'installation de la distribution Linux-Mandrake aura déterminé quels
pilotes utiliser.
'n'
'n'
'n'
'm'
si vous disposez d'un ZIP ancienne génération uniquement!
'm'
.
'y'
si vous
disposez d'un périphérique réseau, ou si vous voulez vous connecter à
Internet par modem, 'n'
sinon.
'm'
'y'
si vous
avez une ou plusieurs cartes Ethernet. Sélectionnez ensuite
le(s) pilote(s) approprié(s) pour votre (vos) carte(s) Ethernet.
'y'
ou
'm'
si vous souhaitez vous connecter à l'Internet via un
modem.
'n'
'y'
ou 'm'
si
vous disposez de périphériques infrarouges sur votre PC. Si c'est le
cas, répondez ensuite 'y'
ou 'm'
aux différentes options
proposées: IrLAN protocol si vous disposez d'un
émetteur/récepteur infrarouge pour communiquer avec d'autres PC
disposant d'une interface similaire (émulation Ethernet),
IrCOMM protocol si vous disposez d'un périphérique
infrarouge émulant un port série, IrLPT protocol
pour les périphériques infrafouges émulant un port parallèle. Dites
'y'
à IrDA protocol options, 'y'
à
Cache last LSAP, 'n'
à Fast
RRs (mais voyez l'aide à ce sujet), 'n'
à Debug
information, 'n'
à IrLAP compression à moins
que vous vouliez l'essayer (voyez l'aide), 'y'
ou 'm'
à
IrTTY (uses Linux serial driver) et
IrPORT (IrDA serial driver); puis vient le support
pour les différentes puces infrarouges, choisissez ceux ou celles dont
vous disposez (reportez-vous à la documentation sur votre matériel).
'y'
si vous
disposez d'un adaptateur ISDN interne. Si vous vous
connectez à l'Internet en utilisant une telle connexion (RNIS
ou Numéris en France), répondez également 'y'
à
Support synchronous PPP. Il va vous falloir
demander à votre fournisseur d'accès s'il reconnaît la compression
Van Jacobson pour répondre de façon appropriée à l'option
Use VJ-compression with synchronous PPP. Répondez
'n'
à Support generic MP (RFC 1717) (mais voyez
l'aide), 'n'
à Support audio via ISDN (mais
voyez l'aide) et à Support isdn diversion services.
Puis vient le choix du pilote de votre carte ISDN: reportez-vous à la
documentation de votre matériel.
'n'
, à moins que vous disposiez d'un lecteur CD-ROM ayant une
interface propriétaire. Très rare de nos jours.
'y'
'y'
'y'
'n'
'n'
'n'
'y'
---
laissez l'option Maximum number of Unix98 PTYs in
use (0-2048) à sa valeur par défaut, 256.
'm'
si vous
disposez d'une imprimante sur port parallèle. Dans ce cas, dites
également 'y'
à Support IEEE1284 status
readback.
'y'
ici, puis 'y'
ou 'm'
au type de souris
approprié. Reportez-vous à l'aide pour chacune de ces options. Comme
indiqué dans l'aide, pour tout type de souris étrange qui n'est ni
série, ni PS/2, reportez-vous au Busmouse-HOWTO
. En
particulier, faites attention avec les ordinateurs portables.
'y'
si vous avez un
tel lecteur de bandes non SCSI.
'n'
'n'
'y'
'y'
.
Répondez ensuite 'y'
ou 'm'
, au choix, aux options désignant
votre périphérique. La documentation sur votre matériel vous sera là
encore utile.
'y'
ou 'm'
si vous
avez un joystick (« manette de jeux ») et voulez
l'utiliser. Il vous faut ensuite choisir le pilote correspondant à votre
joystick. Reportez-vous à l'aide et à la documentation sur
votre matériel.
'y'
si
vous disposez d'un lecteur de bandes connecté au contrôleur de
disquette. Reportez-vous ensuite à l'aide pour les différentes options.
'n'
--- si vous
répondez 'y'
ici, c'est que vous connaissez votre domaine :)
'n'
'y'
ou 'm'
, sauf
si vous ne souhaitez pas du tout accéder à des disquettes ou partitions
DOS/Windows depuis Linux.
'm'
'n'
'm'
--- inclut le support pour la FAT32.
'm'
'y'
'y'
'y'
'y'
'y'
si votre
machine est un client NFS. Autrement, 'n'
.
'y'
si votre machine
doit agir en tant que serveur NFS.
'y'
si vous voulez monter des partitions depuis un serveur
de fichiers sous Windows (9x ou NT), 'n'
sinon. Cette option n'est pas nécessaire si vous faites un
serveur SMB.
'm'
'm'
'm'
'm'
'y'
'y'
. Le
framebuffer permet d'avoir des consoles virtuelles bien plus
agréables à l'oeil ainsi qu'un joli logo au démarrage :)
Il
n'empêche cependant pas l'utilisation d'un serveur X. Dites
'y'
également à Support for frame buffer devices
(EXPERIMENTAL), 'y'
à VESA VGA graphics
console.
'm'
ici si vous
avez une carte son, et reportez-vous à votre /etc/conf.modules
pour savoir quel pilote utiliser. Cela présuppose que vous ayez déjà
configuré votre carte son, avec sndconfig
.
'n'
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.
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 :)
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 directiveboot=
sera différente, et vous n'aurez probablement pas de sectionother
.
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.
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
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.ls
ou mkdir
).
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.
Pour installer un logiciel libre, vous aurez besoin:
tar
),
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.
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.
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:
#include
) ou de définir une macro fonction (#define
). À
la fin de cette phase, un code purement C est engendré.
.o
est généré.
.o
) et les bibliothèques
associées, et génère un exécutable.Une distribution de logiciel libre correctement structurée est généralement organisée d'une manière bien précise:
INSTALL
, qui décrit la procédure d'installation
du logiciel,
README
qui contient toutes les informations
générales relatives au programme (courte description, auteur, adresse
où le télécharger, documentation relative, pointeurs utiles, ...). Si
le fichier INSTALL
est absent, le fichier README
contient
généralement une procédure succincte d'installation,
COPYING
qui contient la licence ou décrit les
conditions de distribution du logiciel. Parfois, c'est un fichier
appelé LICENCE
qui le remplace.
CONTRIB
ou CREDITS
qui contient une liste
de personnes ayant un rapport avec le logiciel (participation active,
remarques pertinentes, logiciel tiers, etc.).
CHANGES
(ou, plus rarement, NEWS
), qui
contient les nouveautés de la version actuelle par rapport à la version
précédente et les corrections de bogues,
Makefile
(voir la section 126.0), qui
permet de compiler le logiciel (c'est un fichier nécessaire à
make). Souvent, ce fichier n'existe pas encore et sera généré
lors du processus de configuration,
configure
ou Imakefile
, qui
permettra de générer un nouveau fichier Makefile
,
src
,
doc
,
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
).
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:
v
permet de rendre tar « verbeux ».
C'est-à-dire qu'il affichera à l'écran tous les fichiers qu'il trouve
dans l'archive. Si cette option est omise, alors le traitement sera
silencieux.
f
est une option obligatoire. Sans elle, tar
essaiera d'utiliser une bande magnétique à la place d'un fichier
d'archive (c'est-à-dire le périphérique /dev/rmt0
).
z
permet de manipuler une archive compressée par
gzip (avec suffixe de nom de fichier en .gz
). Si vous
oubliez cette option lors du décompactage d'une archive compressée,
alors tar produira une erreur. Inversement, si vous êtes en
face d'une archive non compressée, n'utilisez pas cette option.
x
: cette option permet d'extraire des fichiers de
l'archive,
t
: cette option liste le contenu de l'archive.
c
: cette option permet de créer une archive, ce qui
implique de détruire son contenu actuel. Vous n'utiliserez
probablement cette option que dans le cas de votre usage personnel
(vos sauvegardes, par exemple),
r
: cette option permet d'ajouter des fichiers à la
fin de l'archive. Elle ne fonctionne pas dans le cas d'une
archive compressée.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.
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 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.
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:
configure
existe dans le répertoire
parent de la distribution.
Imakefile
existe dans
le répertoire parent de la distribution.
install.sh
) selon ce que dit le fichier INSTALL
(ou le
fichier README
)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:
configure.in
,
en suivant une syntaxe précise.
configure.in
, un script de configuration appelé
configure
. Ce script est celui qui effectuera les tests
nécessaires à la configuration du programme.
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
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.
config.log
, qui contient une trace de toutes les
étapes de la configuration. Le compilateur de langage C
est généralement
assez explicite dans ses messages d'erreur. Cela vous aidera pour
résoudre le problème.
configure
.
Une méthode efficace pour vérifier l'installation
est de rechercher le fichier
matérialisant la bibliothèque, qui porte invariablement le nom
lib<nom>.so
. Par exemple,
$ find / -name 'libguile*'
ou encore:
$ locate libguile
/usr/lib
, /lib
, /usr/X11R6/lib
(ou parmi ceux
spécifiés par la variable d'environnement 'LD_LIBRARY_PATH'
,
expliquée page 162.0. Vérifiez que ce fichier est
bien une bibliothèque en tapant file libguile.so
.
/usr/include
, /usr/local/include
, ou
/usr/X11R6/include
. Si vous ne savez pas de quels
fichiers d'en-têtes vous avez besoin, vérifiez que vous avez bien
installé la version de développement de la bibliothèque nécessaire
(par exemple, gtk+-devel
au lieu de libgtk
). La version
de développement de la bibliothèque est livrée avec les fichiers de
type include
(« à inclure »)
nécessaires à la compilation d'un logiciel utilisant cette bibliothèque.
configure
a besoin d'un peu de place pour des fichiers
temporaires). Utilisez la commande df -k
pour visualiser
les partitions de votre système, et ne vous préoccupez que des
partitions pleines ou presque.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 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!
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
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.
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.
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
.
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.
Généralement, l'utilisation de make obéit à plusieurs conventions. Par exemple:
make install
compile le programme (mais pas toujours),
et assure l'installation des fichiers nécessaires au bon endroit sur le
système de fichiers. Certains fichiers ne sont pas toujours installés
correctement (man
, info
), il faut alors les copier à la
main. Dans certains cas, il faut effectuer une nouvelle fois un
make install
dans des sous-répertoires. Généralement, il
s'agit de modules développés par des tiers.
make clean
efface tous les fichiers temporaires créés par
la compilation, y compris le fichier exécutable dans la majorité des
cas.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.
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:
'CC'
: il s'agit du compilateur que l'on va utiliser.
Généralement il s'agit de gcc
, mais sur la plupart des
systèmes libres, le compilateur par défaut utilisé par make
(soit cc
) est un synonyme de gcc
. Dans le doute,
n'hésitez pas à mettre ici gcc
.
'LD'
: il s'agit du programme utilisé parfois pour
assurer la phase finale de la compilation (voir la
section 36.0). Par défaut, la valeur est ld
.
'CFLAGS'
: ce sont les arguments supplémentaires qu'on
passera au compilateur lors des premières phases de la compilation.
Parmi ceux-ci:
-I<chemin>
: spécifie au compilateur où chercher
des fichiers d'en-têtes supplémentaires
(ex:
-I/usr/X11R6/include
permet d'inclure les fichiers
d'en-têtes se situant dans /usr/X11R6/include
)
-D<symbole>
: définit un symbole supplémentaire,
utile dans certains programmes qui se compilent différemment selon
les symboles définis (ex: utilise le fichier string.h
si
'HAVE_STRING_H'
est défini)On trouve souvent des lignes de compilation de la forme:
$(CC) $(CFLAGS) -c toto.c -o toto.o
'LDFLAGS'
(ou 'LFLAGS'
): ce sont les arguments passés
lors de la dernière phase de la compilation. Parmi ceux-ci:
-L<chemin>
: spécifie un chemin supplémentaire où
chercher des bibliothèques (ex: -L/usr/X11R6/lib
).
-l<bibliothèque>
: spécifie une bibliothèque
supplémentaire à utiliser lors de la dernière phase de compilation.Pas de panique, cela arrive à tout le monde. Parmi les causes les plus communes:
glloq.c:16: decl.h: No such file or directory
:
(« glloq.c:16
: decl.h
: aucun fichier
ou répertoire ne porte ce nom »)
Le compilateur n'a pas réussi à trouver le fichier d'en-têtes correspondant. Pourtant, l'étape de configuration du logiciel aurait dû anticiper cette erreur. Comment résoudre ce problème:
/usr/include
,
/usr/local/include
,
/usr/X11R6/include
ou un
de leurs sous-répertoires. Si ce n'est pas le cas, recherchez-le sur tout
le disque (avec find
ou locate
),
et si vous ne le trouvez
toujours pas, alors vérifiez à deux fois que vous avez installé la
bibliothèque correspondant à cette en-tête. Vous trouverez des
exemples des commandes find
et locate
dans leurs pages
de manuel respectives.
less <chemin>/<fichier>.h
pour tester cela)
/usr/local/include
ou
/usr/X11R6/include
, il est
parfois nécessaire de passer un argument supplémentaire au
compilateur. Ouvrez le fichier Makefile
correspondant
(prenez garde à ouvrir le bon, celui qui se trouve dans le répertoire
où la compilation échoue[30]) avec votre éditeur de textes favori
(Emacs, VI, ...). Recherchez la ligne fautive, et
ajoutez la chaîne de caractères -I<path>
(où
<chemin>
est le chemin où se trouve l'en-tête en question juste
après l'appel du compilateur (gcc
, ou parfois
$(CC)
). Si vous ne savez pas où rajouter cette
option, rajoutez-la au début du fichier, à la fin de la ligne
CFLAGS=<quelquechose>
ou de la ligne
CC=<quelquechose>
.
glloq.c:28: `struct toto' undeclared (first use
this function)
:
(« glloq.c:28
: « struct toto
»
n'est pas déclarée (ceci est la première utilisation de cette
fonction) »)
Les structures sont des types de données spéciaux, que tous les programmes utilisent. Beaucoup sont définies par le système dans les fichiers d'en-têtes. Ce qui signifie que le problème vient certainement d'une en-tête manquante ou mal utilisée. La marche à suivre pour résoudre le problème est:
grep
afin de vérifier
si la structure est définie dans un des fichiers d'en-têtes.
Par exemple, après vous être rendu dans la racine de la distribution:
$ find . -name '*.h'| xargs grep 'struct toto' | less
Il est possible que plusieurs dizaines de lignes apparaissent
à l'écran (à chaque fois qu'une fonction utilisant ce type de
structure est définie, par exemple). Si elle existe, repérez
la ligne où la structure est définie en regardant le fichier
d'en-têtes obtenu par l'utilisation de grep
.
La définition d'une structure est:
struct toto {
<contenu de la structure>
};
Vérifiez si cela correspond avec ce que vous avez. Le cas
échéant, c'est que ce fichier d'en-têtes n'est pas inclus dans
le fichier .c
fautif. Deux solutions s'offrent à vous:
#include "<nom_du_fichier>.h"
au début du
fichier .c
fautif.
/usr/include
, /usr/X11R6/include
, ou
/usr/local/include
en général). Mais cette fois-ci,
utilisez la ligne
#include <<nom_du_fichier>.h>
.
INSTALL
ou README
quelles sont les bibliothèques utilisées par le programme et
la version nécessaire). Si la version dont
le programme a besoin n'est pas celle installée sur votre
système, alors effectuez une mise à jour de cette
bibliothèque.
configure
, par exemple) pour votre
architecture.parse error
: (« erreur d'analyse
syntaxique »)
C'est un problème assez compliqué à résoudre, car généralement il s'agit d'une erreur que le compilateur rencontre plus haut, mais qui ne se manifeste qu'à une certaine ligne. Parfois, il s'agit simplement d'un type de donnée qui n'est pas défini. Si vous rencontrez un message d'erreur de type:
main.c:1: parse error before `glloq_t
main.c:1: warning: data definition has no type or storage class
alors, le problème est que le type glloq_t
n'est pas défini.
La solution pour résoudre ce problème est environ la même que
pour le problème précédent.
Note: il peut y avoir une erreur de typeparse error
dans les vieilles bibliothèquescurses
si ma mémoire est bonne.
no space left on device
: (« plus de place
disponible sur le périphérique »)
Le problème est assez simple à régler: la place sur le disque
est insuffisante pour générer un binaire à partir du fichier source.
La solution consiste à libérer de la place dans la partition
abritant le répertoire d'installation (supprimez les fichiers
temporaires ou les sources, désinstallez les programmes dont vous
ne vous servez pas). Si vous l'avez décompacté dans
/tmp
, faites-le plutôt dans /usr/local/src
ce
qui évite de saturer inutilement la partition /tmp
.
Vérifiez de plus que vous n'avez pas de fichiers
core
[31]
sur le disque. Si oui, effacez-les ou faites-les effacer s'ils
appartiennent à un autre utilisateur.
/usr/bin/ld: cannot open -lglloq: No such file or
directory
: (« /usr/bin/ld
: je ne peux pas
ouvrir -lglloq
: aucun fichier ou répertoire ne porte ce nom »)
Clairement, le programme ld
(utilisé par gcc
lors de la
dernière phase de la compilation) n'a pas réussi à trouver une
bibliothèque. Il faut savoir que pour inclure une bibliothèque,
ld
va chercher un fichier dont le nom est passé par l'argument
-l<bibliothèque>
. Ce fichier porte le nom de
lib<bibliothèque>.so
. Si ld
n'arrive pas à le
trouver, alors il produit ce message d'erreur. Pour résoudre ce
problème, procédons par étapes:
locate
. Généralement, les
bibliothèques graphiques se trouvent dans
/usr/X11R6/lib
. Par exemple:
$ locate libglloq
Si cela ne produit rien, vous pouvez faire une recherche avec la
commande find
(ex: find /usr -name libglloq.so*
). Si vous ne trouvez
toujours pas la bibliothèque, alors il vous reste plus qu'à l'installer.
ld
: le fichier
/etc/ld.conf
spécifie où trouver ces bibliothèques.
Rajoutez le répertoire incriminé à la fin (il est possible que
vous ayez à réinitialiser la machine pour que cela soit pris en
compte). Il est aussi possible de rajouter ce répertoire en
modifiant le contenu de la variable d'environnement
'LD_LIBRARY_PATH'
. Par exemple, en imaginant que le
répertoire à ajouter est /usr/X11R6/lib
, tapez:
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/X11R6/lib
(si votre shell est Bash).
file
). Si c'est un lien symbolique, vérifiez que ce lien est
correct et ne pointe pas vers un fichier inexistant (par
exemple, en tapant nm libglloq.so
). Les permissions peuvent
de plus être incorrectes (si vous utilisez un compte autre que
root
et que la bibliothèque est protégée en lecture par
exemple).glloq.c(.text+0x34): undefined reference to
`glloq_init'
:
(« glloq.c(.text+0x34)
: référence inconnue au
symbole « glloq_init
» »)
Aïe! Aïe! Aïe! Pourquoi cette noirceur? Il s'agit d'un symbole non résolu lors de la dernière phase de la compilation. Généralement, il s'agit d'un problème de bibliothèque. A priori, plusieurs causes possibles:
gtk
, il appartient
très certainement à la bibliothèque gtk
. Si le nom de la
bibliothèque est difficilement identifiable
(comme par exemple
zorglub_gloubiboulga
), il est possible de lister les
symboles d'une bibliothèque avec la commande nm
. Par
exemple,
$ nm libglloq.so
0000000000109df0 d glloq_message_func
000000000010a984 b glloq_msg
0000000000008a58 t glloq_nearest_pow
0000000000109dd8 d glloq_free_list
0000000000109cf8 d glloq_mem_chunk
Rajouter l'option -o
à nm
permet de plus d'afficher le
nom de la bibliothèque sur chaque ligne, ce qui simplifie les
recherches. Imaginons que nous cherchions le symbole
bulgroz_max
, une solution de barbare est d'effectuer une
recherche de ce genre:
$ nm /usr/lib/lib*.so | grep bulgroz_max
$ nm /usr/X11R6/lib/lib*.so | grep bulgroz_max
$ nm /usr/local/lib/lib*.so | grep bulgroz_max
/usr/local/lib/libzorglub.so:000000000004d848 T bulgroz_max
Formidable! Le symbole bulgroz_max
est défini dans
la bibliothèque zorglub
(la lettre majuscule T
se
trouve devant son nom). Il suffit de rajouter la chaîne
-lzorglub
dans la ligne de compilation en éditant le
fichier Makefile
: rajoutez-la à la fin de la ligne où
'LDFLAGS'
ou 'LFGLAGS'
(ou au pire
'CC'
) sont définis, ou alors sur la ligne responsable de la
création du fichier binaire final.
README
ou INSTALL
de la distribution pour
savoir quelle version de la bibliothèque doit être utilisée.
nm -o *.o
pour connaître son nom et
ajoutez le fichier .o
correspondant sur la ligne de
compilation s'il est manquant.
Segmentation fault (core dumped)
:
(« erreur de segmentation, fichier core
produit »)
Parfois, le compilateur échoue lamentablement, et produit ce message d'erreur. Je n'ai pas d'autre conseil que de vous demander d'installer une version plus récente de votre compilateur.
/tmp
La compilation, a besoin d'espace temporaire de travail lors de
ses différentes étapes; si elle ne l'a pas, elle échoue. Il
faut donc faire du ménage, mais attention car la suppression de
certains fichiers
risque de faire échouer des programmes en cours d'exécution
(serveur X, tubes...). Il faut donc
bien savoir ce que l'on fait! Si /tmp
fait partie d'une
partition qui ne contient pas que lui (par exemple, la racine),
recherchez et supprimez d'éventuels fichiers core
.
make
/configure
en boucle
Il s'agit généralement d'un problème d'heure sur votre système. make a en effet besoin de connaître la date et l'heure, ainsi que celles des fichiers qu'il vérifie. Il compare les dates des fichiers et utilise le résultat pour savoir si la cible est plus récente que la dépendance.
Il se peut que des problèmes de date amènent make à se
reconstruire sans fin (ou de construire et reconstruire un
arborescence en boucle). Dans ce cas-là, l'utilisation de la
commande touch
(qui a pour conséquence de mettre à l'heure
courante les fichiers passés en argument) permet de résoudre le
problème dans la plupart des cas.
Par exemple:
$ touch *
Ou encore plus barbare (mais efficace):
$ find . | xargs touch
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:
/usr/local/bin
lib*.so
) dans le répertoire
portant le nom
/usr/local/lib
*.h
) dans le répertoire
portant le nom
/usr/local/include
(attention à ne pas écraser les fichiers
originaux)
/usr/local/share
. Si vous ne connaissez pas la procédure
d'installation, vous pouvez essayer de démarrer le programme sans
copier les fichiers de données, et les mettre au bon endroit
lorsqu'il vous les demande (dans un message d'erreur du type
Cannot open /usr/local/share/glloq/data.db
).
man
se placent dans un des
sous-répertoires de /usr/local/man
. Généralement, ces
fichiers sont au format troff (ou groff), et ont
pour extension un chiffre. Leur nom est celui d'une commande (par
exemple, echo.1
). Si le chiffre est n
,
copiez ce fichier dans le sous-répertoire /usr/local/man/man<n>
.
info
se placent dans le répertoire
/usr/info
ou /usr/local/info
Et voilà, c'est fini! Félicitations! Vous êtes maintenant fin prêt à recompiler votre système d'exploitation tout entier.
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
).
Plusieurs sources de documentation:
/usr/doc/HOWTO
(pas toujours, parfois ils sont mis ailleurs, c'est la commande
locate HOWTO
qui vous donnera la réponse en cas de doute),
ou alors, pour une version française des HOWTO,
sur l'URL http://www.freenix.fr/
.
man <commande>
pour obtenir de la documentation sur la commande <commande>
,
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:
fr.comp.os.linux.*
permettent de répondre à toutes les questions
concernant GNU/Linux. Le forum intitulé fr.comp.os.bsd
a pour sujet les systèmes BSD. Il doit exister d'autres forums
dédiés à d'autres Unix. N'oubliez pas de les lire pendant un
moment avant de commencer à y écrire.
#linux
sur la plupart des
réseaux d'IRC, ou #linuxhelp
sur IRCNET.
Pour trouver des logiciels libres, de nombreux pointeurs peuvent vous être utiles:
sunsite.unc.edu
ou l'un de ses miroirs
http://www.freshmeat.net/
est sans doute le site
le plus complet,
http://www.linux-france.org
contient de
nombreux pointeurs vers des logiciels fonctionnant sous
GNU/Linux.
La plupart fonctionnent bien sûr sur les autres plates-formes
Unix libres,
http://www.gnu.org/software/
pour une liste
exhaustive de tous les logiciels GNU. Bien sûr, tous sont
libres et la plupart ont pour licence la GPL.http://www.altavista.com/
et effectuer une requête
de type: +<logiciel> +download
ou "download
<logiciel>"
.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. »).
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:
-i
: Rechercher en ignorant la casse
(ou capitalisation).
-v
: Inverser la recherche: trouver les lignes ne
correspondant pas au motif.
-n
: Afficher le numéro de ligne pour chaque ligne
trouvée.
-w
: Dit à grep
que le motif doit correspondre à
un mot entier. Attention, les caractères considérés comme pouvant faire
partie d'un mot dépendent du réglage de la langue.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èresfind
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:
-xdev
: Ne pas étendre la recherche aux répertoires se
trouvant sur d'autres systèmes de fichiers.
-mindepth <n>
: Descendre d'au moins <n>
niveaux en-dessous du répertoire de recherche avant de chercher des
fichiers.
-maxdepth <n>
: Rechercher les fichiers se
trouvant au plus n
niveaux en-dessous du répertoire de
recherche.
-follow
: Suivre les liens symboliques s'il pointent vers
des répertoires. Par défaut, find
ne les suivra pas.
-daystart
: Quand il est fait usage de tests relatifs à la
date et l'heure, (voir ci-dessous), prendre le début de la journée
courante comme repère au lieu de la marque par défaut (24 heures avant
l'heure courante).Un critère peut être un ou plusieurs tests atomiques; quelques tests utiles sont:
-type <type>
: Rechercher un type de fichiers donné;
<type>
peut être: f
(fichier régulier), d
(répertoire), l
(lien symbolique), s
(socket), b
(fichier en mode bloc), c
(fichier en mode caractère) or p
(tube nommé).
-name <motif>
: Trouver les fichiers dont les noms
correspondent au <motif>
donné. Avec cette option, <motif>
est traité comme un motif d'englobement du shell (voyez
le chapitre 32.0).
-iname <motif>
: Comme -name
, mais
ne tient pas compte de la casse.
-atime <n>
, -amin <n>
: Trouver
les fichiers dont la dernière date d'accès remonte à <n>
jours
(-atime
) ou <n>
minutes (-amin
). Vous pouvez
aussi spécifier +<n>
ou -<n>
, auquel cas la recherche
sera effectuée sur les fichiers accédés au plus ou au moins <n>
jours/minutes auparavant.
-anewer <fichier>
: Trouver les fichiers dont la
dernière date d'accès est plus récente que celle du fichier
<fichier>
-ctime <n>
, -cmin <n>
,
-cnewer <fichier>
Même chose que pour
-atime
, -amin
et -anewer
, mais s'applique à
la dernière date de changement du contenu des fichiers.
-regex <motif>
: Comme pour -name
, mais
motif
est traité comme une expression rationnelle.
-iregex <motif>
: Comme -regex
, mais
sans tenir compte de la casse.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:
<c1> -a <c2>
: Vrai si <c1>
and
<c2>
sont vrais tous les deux; -a
est implicite, donc
vous pouvez utiliser <c1> <c2> <c3> ...
si vous voulez que tous les tests <c1>
, <c2>
, ... soient
vérifiés.
<c1> -o <c2>
: Vrai si l'un de
<c1>
ou <c2>
est vrai, ou les deux. Notez que
-o
a une priorité moins grande que -a
, donc si
vous voulez, par exemple, que les fichiers correspondant aux critères
<c1>
ou <c2>
et qu'ils vérifient obligatoirement le
critère <c3>
, vous devrez utiliser des parenthèses et écrire
( <c1> -o <c2> ) -a <c3>
. Vous
devez échapper (désactiver) les parenthèses, sans quoi
le shell les interprétera!
-not <c1>
: Inverse le test <c1>
, donc
-not <c1>
est vrai si <c1>
est faux.Enfin, vous pouvez spécifier une action pour chaque fichier trouvé. Les plus fréquentes sont:
-print
: Ne fait qu'écrire le nom de chaque fichier sur la
sortie standard. C'est l'action par défaut si vous n'en spécifiez
aucune.
-ls
: Affiche l'équivalent d'un ls -ilds
sur
chaque fichier trouvé sur la sortie standard.
-exec <command>
: Exécute la commande
<command>
sur chaque fichier trouvé. La ligne de commande
<command
> doit se terminer par un ;
, que vous devez
désactiver de telle sorte que le shell ne l'interprète pas; la
position du fichier est repérée par {}
.
Regardez les exemples d'utilisation pour comprendre.
-ok <command>
: Même chose que -exec
mais
demander confirmation pour chaque commande.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:
-l
: Affiche votre fichier crontab
courant.
-e
: Édite votre fichier crontab
.
-r
: Elimine votre fichier crontab
courant.
-u <utilisateur>
: Applique l'une des options ci-dessus
à l'utilisateur <utilisateur>
. Seul root
est
autorisé à faire cela.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 typeMakefile
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 foisVous 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:
now +<interval>
: Signifie « maintenant », plus
un intervalle optionnel. Aucun intervalle signifie
« maintenant »). La syntaxe pour l'intervalle est
<n> (minutes|hours|days|weeks|months)
(« minutes, heures, jours, semaines, mois » --- en
anglais uniquement). Par exemple, vous pouvez spécifier now + 1
hour
(dans une heure), now + 3 days
(dans trois jours) et
ainsi de suite.
<heure> <jour>
: Spécifier la date en
entier. Le paramètre <heure>
est obligatoire. at
est
très libéral dans ce qu'il accepte: vous pouvez par exemple taper
0100
, 04:20
, 2am
, 0530pm
,
1800
, ou une des trois valeurs spéciales: noon
(« midi »), teatime
(« l'heure du
thé, 16h ») ou midnight
(« minuit »). Le paramètre
<jour>
est optionnel. Vous pouvez aussi le spécifier de
différentes manières: 12/20/2001
par exemple, notation
américaine pour le 20 décembre 2001, ou à l'européenne,
20.12.2001
. Vous pouvez ne pas mettre l'année, mais dans ce
cas seule la notation européenne est acceptée: 20.12
. Vous
pouvez aussi spécifier le mois par son abréviation en anglais:
Dec 20
ou 20 Dec
sont tous les deux valides.at
accepte aussi différentes options:
-l
: Affiche la liste des commandes déjà programmées; le
premier champ est le numéro de la commande. C'est équivalent à la
commande atq
.
-d <n>
: Enlever la commande numéro <n>
de la
liste. Vous pouvez obtenir les numéros avec atq
. C'est
équivalent à la commande atrm <n>
.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 commandetar
, sauf après une option longue.
c
: Cette option est utilisée dans le but de créer de
nouvelles archives.
x
: Cette option est utilisée pour extraire des fichiers
depuis une archive existante.
t
: Affiche la liste des fichiers d'une archive
existante.
v
: Cette option affichera simplement la liste des
fichiers au fur et à mesure qu'ils sont ajoutés à une archive ou
extraits d'une archive, ou, en conjonction avec l'option t
ci-dessus, produira un affichage long des fichiers au lieu d'un affichage
court.
f <fichier>
: Créer une archive de nom <fichier>
,
extraire depuis l'archive <fichier>
ou faire un liste des
fichiers de l'archive <fichier>
. Si cette option n'est pas
fournie, le fichier par défaut sera /dev/rmt0
, qui est
généralement le fichier spécial associé à un streamer.
Si le paramètre fichier
est un tiret (-
), l'entrée
ou la sortie (selon que vous extrayez depuis une archive ou en créez
une), sera associée à l'entrée standard ou la sortie standard.
z
: Dit à tar
que l'archive à créer devra être
compressée avec gzip
, ou que l'archive depuis laquelle on
extrait est compressée avec gzip
.
y
: Même chose que pour z
, mais le programme
utilisé pour la compression est bzip2
.
p
: Lors de l'extraction des fichiers d'une archive,
préserver tous les attributs de fichiers, y compris la propriété, la
dernière date d'accès et ainsi de suite. Très utile pour les sauvegardes
de systèmes de fichiers.
r
: Ajouter la liste des fichiers donnée sur la liste de
commande à une archive existante. Notez que l'archive à laquelle vous
voulez ajouter des fichiers ne doit pas être compressée!
A
: Fusionner les archives données sur la ligne de
commande à celle mentionnée avec l'option f
. De même que pour
l'option r
, les archives ne doivent pas être compressées pour
que cela fonctionne.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éesVous 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:
-1
, ..., -9
: Régler la capacité de compression.
Plus le nombre est haut, plus la compression sera élevée, mais mieux
signifie aussi plus lent: on n'a rien sans rien.
-d
: Décompresser un ou des fichier(s). C'est équivalent à
utiliser gunzip
ou bunzip2
.
-c
: Envoyer le résultat de la compression/décompression
des fichiers donnés en paramètre sur la sortie standard.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 :)
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 :)
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.
Tapez simplement sur la touche Entrée
. L'écran d'introduction
apparaît alors, comme dans la figure 20.2.
Appuyez alors encore une fois sur la touche Entrée
: l'installation
proprement dite commence alors.
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:
TAB
fait défiler parmi les différents éléments
d'un écran (zones de texte, listes de choix);
Entrée
simulera un appui sur le
bouton sélectionné. Si aucun bouton n'est mis en surbrillance, une
pression sur cette touche équivaudra à une pression sur la touche
OK.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.
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).
Là encore, validez avec OK.
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.
À 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.
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.
Le programme vous demandera ensuite (figure 20.7) la classe d'installation que vous désirez. Les options sont les suivantes:
Le programme d'installation vous demande ensuite si vous possédez une carte SCSI, comme dans la figure 20.8.
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.
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.
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.
Vous vous retrouverez alors devant l'écran de la figure 20.11.
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
.
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.
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).
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.
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.
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).
Si vous avez demandé à sélectionner les paquetages individuellement, vous obtiendrez la fenêtre de la figure 20.16.
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.
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.
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).
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.
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).
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.
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).
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.
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.
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
.
Si vous ne savez pas à quoi correspondent ces services, laissez cet écran tel quel.
Si vous voulez configurer une imprimante, c'est l'écran de la figure 20.24 qui vous permettra d'arriver à vos fins.
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.
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.
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!
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.
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.
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.
Le programme vous demande alors, comme dans la figure 20.28, si vous voulez créer 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...
Vous pouvez maintenant installer le chargeur de démarrage de Linux: 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).
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.
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.
L'installation du système est maintenant terminée, il ne vous reste plus
qu'à parcourir le reste de ce manuel :)
alias
à l'invite.
sed
, awk
, grep
, perl
entre
autres.
gcc
, et sa licence, la
GPL. Voir GPL.
:)
type/sous-type
décrivant le contenu d'un fichier attaché dans un courrier électronique.
Cela autorise les lecteurs de courrier reconnaissant le MIME à
effectuer des actions dépendantes du type du fichier.
'i'
,
'I'
, 'a'
, 'A'
, 's'
, 'S'
, 'o'
, 'O'
, 'c'
,
'C'
, ...
Échap
(ou Ctrl-[
).
NULL
.
man
.
La première chose que quelqu'un devrait (apprendre à) lire quand il
entend parler d'une commande qu'il ne connaît pas :)
less
.
x
600 x
16 couleurs.
iso9660
(utilisé par
les CD-ROM) et ainsi de suite.
protocole://nom.du.serveur[:port]/chemin/vers/ressource
.
Quand un nom de machine seule est donné et que le protocole est
http://
, cela équivaut à retirer l'éventuel fichier intitulé
index.html
du serveur par défaut.
atime
), c'est-à-dire la date de dernière ouverture du fichier
en lecture ou écriture; la date de dernière modification des attributs
de l'i-noeud (mtime
); et enfin la date de dernière
modification du contenu du fichier (ctime
)..gif
» plutôt
que « les images GIF ». Mais, encore une fois, les fichiers
sous Unix n'ont d'extension que par convention: une extension ne
détermine en aucun cas le type d'un fichier. Un fichier se terminant par
.gif
peut très bien être une image JPEG, un exécutable, un
fichier texte ou n'importe quoi d'autre.:)
'HOME'
et
la variable 'home'
ne sont pas les mêmes.dl
(effacer un
caractère à droite) est 'x'
; un raccourci pour dh
est 'X'
;
dd
efface la ligne courante.y6w
donne
littéralement: « Yank 6 words », donc
« copier 6 mots » en français.:)
lsdev
fait partie du paquetage
procinfo
./sbin
sur un autre système de fichiers que le système de fichiers
racine est une très mauvaise idée :)make[1]: Leaving directory `/home/benj/Projet/toto'
).
Repérez celle dont le numéro est le plus grand. Pour vérifier
qu'il s'agit bien du bon répertoire, rendez-vous dans ce répertoire, et
exécutez make à nouveau pour obtenir la même
erreur.http://www.linux-france.org/article/these/gpl.html
./home/httpd
et /home/httpd/obsolete
soient
sur le même système de fichiers!