Introduction `a UNIX

Transcription

Introduction `a UNIX
Introduction à UNIX
Vincent Roca
Université Pierre et Marie Curie (Paris6)
LIP6 - CNRS, thème Réseaux et Performances
8, rue capitaine Scott; 75015 Paris; FRANCE
téléphone: (+33) 1.44.27.75.14; fax: (+33) 1.44.27.87.32
[email protected]; http://www-rp.lip6.fr/∼roca
Version 1.4c, novembre 1999
Résumé: Ce document est une introduction à l’utilisation d’un système Unix. Au dela des commandes usuelles,
nous introduisons également les principales notions sous-jacentes. Ainsi nous espérons permettre une
compréhension en profondeur de ce système et de sa mise en oeuvre. En revanche ce document n’a pas pour
objectif d’être un guide d’administration Unix.
2
Copyright (c) 1999 Vincent Roca; all rights reserved
Ce texte est copyrighté et n’est pas dans le domaine public. Sa reproduction est cependant autorisée à
condition de respecter les conditions suivantes :
• Si ce document est reproduit pour les besoins personnels du reproducteur, toute forme de reproduction (totale ou partielle) est autorisée.
• Si ce document est reproduit dans le but d’être distribué à de tierces personnes il devra être reproduit
dans son intégralité sans aucune modification. Cette notice de copyright devra donc être présente.
De plus il ne devra pas être vendu. Cependant, dans le seul cas d’un enseignement gratuit, une
participation aux frais de reproduction pourra être demandée, mais elle ne pourra être supérieure
au prix du papier et de l’encre composant le document.
Toute reproduction sortant du cadre précisé ci-dessus est interdite sans accord préalable de l’auteur.
Contents
1 Introduction
1.1 Historique . . . . . . . . . . . . . . .
1.2 La fondation FSF et le projet GNU .
1.2.1 La fondation FSF . . . . . .
1.2.2 Le projet GNU . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
5
6
7
7
7
2 Gestion des utilisateurs
2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Les fichiers /etc/passwd et /etc/group . . . . . . . . . .
2.1.2 Choisir un bon mot de passe . . . . . . . . . . . . . . .
2.1.3 Le fichier /etc/shadow . . . . . . . . . . . . . . . . . . .
2.1.4 La gestion centralisée des utilisateurs: NIS et NIS+ . .
2.2 Commandes UNIX . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Lancer une nouvelle session sur la machine locale . . . .
2.2.2 Lancer une nouvelle session sur une machine distante: la
2.2.3 Obtenir ou changer ses caractéristiques . . . . . . . . .
2.2.4 Informations sur les utilisateurs . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
connexion à distance
. . . . . . . . . . . . .
. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
10
11
11
12
12
12
12
13
13
3 Système de fichiers
3.1 Formattage, partition et système de fichiers . .
3.1.1 Formattage . . . . . . . . . . . . . . . .
3.1.2 Partition . . . . . . . . . . . . . . . . .
3.1.3 Système de fichiers local . . . . . . . . .
3.2 L’arborescence de fichiers UNIX . . . . . . . .
3.3 Système de fichiers distant: NFS . . . . . . . .
3.4 Propriétaire et droits d’un fichier . . . . . . . .
3.4.1 Principes généraux . . . . . . . . . . . .
3.4.2 Droits d’accès appliqués à un répertoire
3.5 Notion de quotas . . . . . . . . . . . . . . . . .
3.6 Commandes Unix . . . . . . . . . . . . . . . . .
3.6.1 Chemins relatifs et absolus . . . . . . .
3.6.2 Gestion des répertoires et fichiers . . . .
3.6.3 Informations sur les systèmes de fichiers
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
16
16
16
16
16
17
18
18
19
19
20
20
20
20
4 Le Shell
4.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Lequel choisir ? . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Notions de variables et d’environnement . . . . . . . . . .
4.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Quelques variables d’environnement . . . . . . . .
4.4 Configuration de l’environnement . . . . . . . . . . . . . .
4.4.1 Fichier /etc/profile commun en ksh ou bash . . . .
4.4.2 Fichiers de configuration en ksh ou bash . . . . . .
4.4.3 Fichiers de configuration en csh ou tcsh . . . . . .
4.5 Quelques fonctionnalités utiles de sh et ses successeurs . .
4.5.1 Les métacaractères ou caractères de remplacement
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
24
25
25
25
25
26
26
27
27
28
28
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
CONTENTS
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
29
29
29
30
30
30
31
32
32
33
5 Systèmes de fenêtrage
5.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Les “window managers” . . . . . . . . . . . . . . . . . . . . . . .
5.3 Configuration d’un système de fenêtrage . . . . . . . . . . . . . .
5.3.1 Lancement de l’environnement graphique . . . . . . . . .
5.3.2 Configuration de l’espace de travail en mode automatique
5.3.3 Configuration de l’espace de travail en mode manuel . . .
5.3.4 Configuration du “window manager” . . . . . . . . . . . .
5.3.5 Configuration des applications . . . . . . . . . . . . . . .
5.3.6 Configuration du clavier . . . . . . . . . . . . . . . . . . .
5.3.7 Configuration de xterm . . . . . . . . . . . . . . . . . . .
5.4 Sécurité sous X Windows . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
36
36
36
36
37
37
37
38
38
39
40
40
40
6 Quelques outils
6.1 man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 La commande info de GNU . . . . . . . . . . . . . . . . . . . .
6.3 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 cpio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.6 compress/uncompress et gzip . . . . . . . . . . . . . . . . . . .
6.7 L’outil d’archivage/compression zip/unzip . . . . . . . . . . . .
6.8 Les Mtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.9 Bilan sur l’utilisation des disquettes . . . . . . . . . . . . . . .
6.10 head et tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.11 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.12 diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.13 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.14 Editeur vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.15 Editeur emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.16 a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.17 ghostview et acroread . . . . . . . . . . . . . . . . . . . . . . .
6.18 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.19 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.20 Les commandes “remote” . . . . . . . . . . . . . . . . . . . . .
6.21 Le service de messagerie . . . . . . . . . . . . . . . . . . . . . .
6.21.1 Format des adresses mail . . . . . . . . . . . . . . . . .
6.21.2 Format des messages . . . . . . . . . . . . . . . . . . . .
6.21.3 Ajout d’une signature . . . . . . . . . . . . . . . . . . .
6.21.4 Transférer des fichiers binaires avec uuencode/uudecode
6.21.5 Les extensions du service de messagerie . . . . . . . . .
6.21.6 Les messages de taille (très) importante . . . . . . . . .
6.22 Le débugger gdb et ses extensions xxgdb et ddd . . . . . . . . .
6.23 LATEX: un outil de formatage de documents . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
44
44
44
45
45
46
46
46
47
47
47
47
47
48
49
49
49
49
50
50
51
52
52
52
52
53
53
53
53
4.6
4.7
4.5.2 La substitution de commandes . . . . . . . . . . . . . .
4.5.3 Bilan sur l’utilisation des différents caractères quote . .
4.5.4 La notion d’alias . . . . . . . . . . . . . . . . . . . . . .
4.5.5 Redirection des E/S standards . . . . . . . . . . . . . .
4.5.6 Exécution à la chaine . . . . . . . . . . . . . . . . . . .
4.5.7 Exécution en séquence . . . . . . . . . . . . . . . . . . .
4.5.8 Exécution en premier plan ou arrière plan . . . . . . . .
4.5.9 La gestion des processus/jobs . . . . . . . . . . . . . . .
4.5.10 Accès à un historique et profile de l’interface utilisateur
Ecriture de scripts . . . . . . . . . . . . . . . . . . . . . . . . .
Aller plus loin. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Chapter 1
Introduction
5
6
CHAPTER 1. INTRODUCTION
1.1
Historique
Unix a une longue histoire. La chronologie suivante montre les différentes souches (lignées) ainsi que leurs
principales versions :
Les deux souches Unix principales
La souche originelle des Bell Labs
1969 1ère version par Thomson et Ritchie (1969) : Philosophie :
(1) “small is beautifull” (on favorise les petits fichiers, petits blocs, etc.)
(2) “building blocks”
(3) “keep it simple and stupid” (algorithmes simples dès que possible)
(4) on fait le moins de traitements possibles dans le noyau.
1971 Version 1
1972 Version 2
1973 Unix réécrit en C
1974 Version 5
1975 Version 6
1978 Version 7
La souche AT&T
1981 System III
1983 System V
1985 System V R2.0
1986 System V R2.1
1987 System V R3
1989 System V R4.0, fusion des souches System V et SunOS 4.x
System V R4.2
La souche de l’Université de Californie, Berkeley
UNIX 32 V
BSD 4.1
1983 BSD 4.2 (1983)
1986 BSD 4.3 (1986)
1988 BSD 4.3 Tahoe (1988)
1990 BSD 4.3 Reno (1990)
1993 BSD 4.4 (1993)
Ces deux souches, SystemV et BSD, ont eu une très grande importance et les apports de chacune a
fortement marqué le domaine. De nombreuses versions constructeur d’Unix dérivent soit de l’une, soit
de l’autre.
La souche de l’Open Software Foundation)
C’est une souche industrielle issue du consortium OSF regroupant de nombreux constructeurs informatiques. Elle se voulait comme une alternative aux souches AT&T/BSD. Elle est technologiquement très
avancée.
1990
OSF
OSF
OSF
OSF
1.0
1.1
1.2
1.3
Souches libres issues de BSD
Elles dérivent toutes deux de la souche BSD 4.4.
• NetBSD 1.2 (1997)
• FreeBSD 2.2 (1997)
La souche NetBSD se voulait initialement multiplateformes (PC, Sun, Mac...). La souche FreeBSD était
pour sa part orientée PC. Cette distinction n’est plus aussi vraie aujourd’hui.
7
1.2. LA FONDATION FSF ET LE PROJET GNU
Souche Linux de Linus Torvalds; université d’Helsinky
Développée indépendamment des souches AT&T et BSD. Elle est souvent qualifiée de “Unix like” car
elle se conforme à la norme POSIX 1003.1.
1991
1994
1997
1999
Linux
Linux
Linux
Linux
0.02
1.0
2.0
2.2
On distingue deux niveaux de maturité:
• Les souches stables: ce sont des souches destinées à être utilisées par tous. Se reconnaissent par le
deuxième chiffre de la version qui est pair (e.g. version 2.0.35).
• Les souches de développement: ce sont des souches intermédiaires qui permettent le travail et
l’intégration de nouvelles fonctionalités. Se reconnaissent par le deuxième chiffre de la version qui
est impair (e.g. version 2.1.23). La durée de vie d’une telle souche est très faible afin de pouvoir
avoir un noyau le plus à jour possible vis-à-vis des nouveaux développements.
L’installation de Linux se fait par le biais de “distributions”, c’est-à-dire de packages contenant le noyau
Linux, certaines applications, des outils d’installation, des fichiers de configuration légerement différents,
etc. On trouve :
• Slackware
• SuSE
• Debian (plus orientée développement)
• RedHat (peut être la plus connue/installée, prévue pour une utilisation générale).
Ainsi on ne confondra pas le niveau du noyau avec celui de la distribution (e.g. en octobre 1999, RedHat
6.1 incluant le noyau Linux 2.2.12). Si Linux est un Unix non commercial, en revanche les distributions
le sont, mais à un tarif dérisoire !
1.2
1.2.1
La fondation FSF et le projet GNU
La fondation FSF
La FSF (Free Software Fundation) a été fondée au début des années 80 par R. M. Stallman. Son but est le
développement de logiciels libres, c’est-à-dire que l’on peut copier, modifier et redistribuer librement. La
seule contrainte est que les sources de ces logiciels doivent être disponibles gratuitement pour quiconque
en fait la demande. Ces logiciels peuvent être vendus mais c’est en pratique rarement le cas puisqu’il
existe toujours un moyen légal de se les procurer gratuitement.
1.2.2
Le projet GNU
GNU signifie “GNU is Not Unix” (définition récursive). Son but est de développer un système d’exploitation
complet, distribué suivant les règles de la FSF, et distinct d’Unix (d’où son nom). Le projet a débuté avec
la réalisation d’un éditeur, emacs. A suivi un compilateur C afin de pouvoir compiler le futur système,
gcc. Depuis un certain nombre de personnes se sont jointes afin d’écrire toutes sortes d’utilitaires.
Quelques réalisations majeures de GNU sont :
emacs éditeur très puissant, personnalisable. Il existe des variantes telles que xemacs doté d’une interface
graphique plus attrayante, pico-emacs qui est pour sa part allégé pour un chargement plus rapide. . .
gcc compilateur C et C++. Extremmement utilisé pour de nombreuses architectures (PC, Sun, SGI,
etc.) et versions du systèmes Unix du fait de la qualité du code produit et de la facilité de prise en
compte du jeu d’instruction d’un nouveau processeur.
gdb débugger symbolique très puissant associé à gcc.
De nombreuses commandes Unix (tar, awk, lex, yacc, find, ls, make, etc.) existent dans une version GNU
et sont souvent plus puissants que la commande d’origine.
Pour plus amples informations sur la FSF et le projet GNU, on se referera à [9].
8
CHAPTER 1. INTRODUCTION
Chapter 2
Gestion des utilisateurs
9
10
CHAPTER 2. GESTION DES UTILISATEURS
2.1
2.1.1
Principe
Les fichiers /etc/passwd et /etc/group
Ces fichiers ont les droits suivants :
-rw-r--r--rw-r--r--
1 root
1 root
sys
sys
2242 Jul 30 13:48 /etc/passwd
347 Jul 8 16:09 /etc/group
Le fichiers /etc/passwd
À chaque utilisateur sont associés des attributs permettant une identification précise et donnant des
informations contextuelles (nom complet, voir localisation) et administratives (répertoire principal, shell,
etc.). Ces informations sont regroupées dans le fichier /etc/passwd. Exemple :
roca:vFId6pGw5.rAc:50164:50056:Vincent Roca:/home/roca:/usr/bin/ksh
• Le premier champ d’une ligne de /etc/passwd est le nom de login (huit caractères maximum).
• Le deuxième champ, d’une longueur de 13 caractères, est construit à partir du mot de passe crypté
de l’utilisateur. Lors d’une connexion, le mot de passe fourni est utilisé pour refaire le calcul
et le résultat comparé à celui contenu dans ce champ. Des attributs supplémentaires permettent éventuellement de limiter dans le temps la validité d’un mot de passe. Il est possible à
l’administrateur d’invalider toute tentative de connexion en remplissant ce champ avec un mot
invalide (“*” par exemple).
• Chaque utilisateur possède un numéro d’identification (UID ou User IDentifier). Ici : 50164.
L’interêt de distinguer l’identification par nom de login et par UID est de permettre un stockage
compact de l’information. Ainsi à chaque fichier est associé l’UID de son propriétaire et non son
login.
• Un utilisateur appartient à un groupe lui même caractérisé par un numéro de groupe (GID, ou
Group IDentifier). Ici : 50056.
• Vient ensuite un champ textuel donnant des informations supplémentaires sur l’utilisateur (nom
complet en général).
• Puis on trouve le répertoire principal de l’utilisateur, ici /home/roca.
• Enfin on trouve le shell lancé lors de la connexion, /usr/bin/ksh (voir chapitre 4).
Le fichier /etc/group
Les groupes sont déclarés dans le fichier /etc/group. Exemple :
bin::1:root,bin,daemon
sirac::50056:
ecrins::50057:roca
Tout utilisateur possède un groupe par défaut (celui précisé dans /etc/passwd). Un utilisateur peut en
changer (commande newgrp) à condition d’y être autorisé. Ainsi l’utilisateur roca pourra passer de son
groupe d’origine, sirac, au groupe ecrins. Il aura ainsi accès aux fichiers accessibles au groupe ecrins.
Sur certains systèmes, e.g. NetBSD, la commande newgrp a disparu au profit d’un système implicite.
Un utilisateur pourra accéder directement à tous les fichiers accessibles à partir de l’un quelconque des
groupes auxquels /etc/group l’autorise.
11
2.1. PRINCIPE
Les utilisateurs particuliers
Il existe des utilisateurs particuliers :
Nom
root
deamon
bin
sys
adm
lp
UID
0
1
2 (SysV) ou 3 (BSD)
3 (SysV)
4 (SysV) ou 3 (BSD)
71 (SysV) ou 9 (BSD)
Rôle
super-utilisateur
utilisateur fictif des démons (rarement utilisé en pratique)
propriétaire de /bin et /usr/bin
utilisateur système
propriétaire des fichiers de log
impression
Le compte root est le plus célèbre et son UID est 0 sur tous les systèmes. Il a accès à toutes les ressources
de la machine et à tous les fichiers d’administration. Il peut créer et modifier les comptes utilisateurs
(le mot de passe en particulier). Certains de ces utilisateurs sont sinon fictifs et ne permettent pas la
création d’une session (le champ passwd crypté contient “*”).
2.1.2
Choisir un bon mot de passe
Logiciels de craquage de mots de passe
Le logiciel Crack tente de craquer les mots de passe utilisateurs. Il exploite des dictionnaires sur différents
thêmes, construit de faux mots de passe en leur appliquant des variations (majuscules, suffixes, renversements, etc.), les chiffre, puis compare le résultat avec les mots de passe chiffrés des utilisateurs. Il construit
peu à peu sa propre base de mots de passe chiffrés afin d’accélerer les traitements la fois d’après.
Efficacité : sur un fichier de 403 mots de passe (réels), Crack a trouvé 100 mots en 40 heures sur un Sun
Sparc10/40[2].
Technique pour choisir son mot de passe
Il existe deux règles :
• Sept caractères au minimum, huit caractères de préférence (la puissance des machines permet un
crackage brutal des mots de passe plus courts). Les éventuels caractères supplémentaires sont
ignorés.
• Choisir une phrase et prendre les premières lettres des mots, la ponctuation, etc.
Exemple : la phrase “Maitre Corbeau, que vous me semblez beau.” donnera le mot de passe
MC,qvmsb. On évitera cependant les phrases trop célèbres qui pourraient être elles aussi connues
des logiciels de craquage (et de ce point de vue l’exemple est très criticable !).
2.1.3
Le fichier /etc/shadow
Les logiciels de craquage ont besoin de connaitre les mots de passe chiffrés des utilisateur. Ceci est aisé
sur les anciens systèmes puisque le fichier /etc/passwd contient ces informations et est lisible par tous.
Pour améliorer la sécurité, sur les nouveaux systèmes, ce fichier est découpé en deux :
• /etc/passwd que tout utilisateur peut continuer de consulter mais qui ne contient plus les mots de
passe cryptés
• /etc/shadow1 qui contient les mots de passe cryptés et qui ne peut être consulté que par le root.
-r--------
1 root
sys
1117 Sep 12 14:48 /etc/shadow
Cette technique réduit considérablement le risque de craquage brutal des mots de passe.
1 nom
variant d’un système à un autre; s’appelle /etc/master.passwd sous FreeBSD
12
CHAPTER 2. GESTION DES UTILISATEURS
2.1.4
La gestion centralisée des utilisateurs: NIS et NIS+
NIS (Network Information Server) permet une gestion centralisée d’informations d’administration. Une
machine privilégiée (dite “serveur NIS primaire”) maintient à jour les fichiers concernés (tel /etc/passwd
mais pas seulement) et d’autres stations (dites “clients NIS”), membres d’un même groupe de machines
(“domaine NIS”), consultent ces fichiers (“map NIS”). Puisque le serveur NIS est une machine critique,
on crée des serveurs NIS secondaires qui peuvent répondre aux requêtes des clients en cas de problème
du primaire.
Exemple : lors d’un ls -l le système a besoin d’afficher en clair le login du propriétaire de chaque fichier à
partir de son UID. Ceci nécessite une requête au serveur NIS qui répond en envoyant l’information voulue.
La commande ls -l reprend alors son execution comme si l’information avait été lue dans /etc/passwd.
2.2
Commandes UNIX
Les commandes UNIX relatives aux utilisateurs sont les suivantes :
2.2.1
Lancer une nouvelle session sur la machine locale
login nom_de_login
La commande login permet de lancer une session sous le nom d’un autre utilisateur. Procède par
recouvrement2 . A la fin de la sous session, l’utilisateur est “délogé”. Les fichiers d’initialisation (voir
chapitre 4) sont exécutés.
su
su nom_de_login
su su - nom_de_login
La commande su permet de lancer une session sous le nom d’un autre utilisateur (par défaut le root)
sans se déloger. Au retour de la sous-session, on retombe sur la session initiale (à la différence de login).
Sans l’option -, la session est créée sans exécuter les fichiers d’initialisation de l’utilisateur. À l’inverse,
l’utilisation de l’option - permet de retrouver tout l’environnement de la session, de même que pour un
login (par exemple on acquiert le répertoire HOME du nouvel utilisateur).
2.2.2
Lancer une nouvelle session sur une machine distante: la connexion à
distance
Les commandes rlogin et telnet ont le même but : permettre une connexion à distance (figure 2.1).
Cependant leur origine est différente :
rlogin Origine Berkeley. Connexion entre systèmes Unix seulement à l’origine, désormais porté sur
d’autres systèmes.
telnet Standard (RFC854) permettant la connexion entre systèmes hétérogènes. Propose de nombreuses
options de contrôle de la communication.
Dans la pratique peu de différences existent entre ces deux commandes. Notons que telnet permet de
contacter un autre service que le démon telnetd en spécifiant son numéro de port TCP. Cette possibilité
est très utilisé pour vérifier que tel service (correspondant au numéro de port) répond (c’est à dire que le
démon associé est actif).
Les autorisations de connexion sans mot de passe
Il est possible d’autoriser des connexions à distance sans mot de passe. Pour cela il faut déclarer dans
le fichier $HOME/.rhosts de la machine cible (soit “machine2” sur la figure 2.1) tous les couples (login,
machine) autorisés à s’y connecter directement. L’utilisation de .rhosts sera nécessaire avec certaines
commandes “remote” (voir chapitre 6). Exemple :
2 En
fait login effectue un exec en interne d’où le recouvrement.
13
2.2. COMMANDES UNIX
utilisateur
machine1
session1
machine2
session2
telnet/rlogin
Figure 2.1: Connexion à distance par rlogin ou telnet.
$ more ~/.rhosts
roca typhon.lip6.fr
roca typhon
Attention l’utilisation de ce mécanisme peut mener très loin (et sans que l’on soit au courant !) si la
personne que l’on autorise à utiliser son compte autorise lui-même quelqu’un d’autre à faire de même etc.
On préferera une technique telle que la création d’un groupe dédié si l’on veut permettre à un groupe
d’utilisateurs de travailler conjointement sur un projèt.
2.2.3
Obtenir ou changer ses caractéristiques
id
who am i
passwd (ou yppasswd si NIS est utilise)
newgrp nouveau_groupe
2.2.4
who
Informations sur les utilisateurs
14
CHAPTER 2. GESTION DES UTILISATEURS
Chapter 3
Système de fichiers
15
16
CHAPTER 3. SYSTÈME DE FICHIERS
3.1
Formattage, partition et système de fichiers
Un disque, plus généralement un support à accès direct, n’est pas de suite utilisable. Formattage (souvent
fait d’origine), partitionnement et création d’un système de fichiers sont les trois étapes indispensables.
3.1.1
Formattage
Cette étape consiste en la préparation du support physique. C’est ici que la géométrie du disque est
précisée en termes de nombre de cylindres, nombre de têtes, nombre de secteurs et nombre de pistes.
Cette étape est donc d’un très bas niveau et sera rarement mise en oeuvre par les utilisateurs. Une
exception cependant est le formattage de bas niveau d’une disquette. Ceci peut se faire par la commande
fdformat. Ce formattage permettra ensuite la création d’un système de fichier Unix sur la disquette (cf.
ci-dessous).
3.1.2
Partition
Une partition est un découpage logique du disque. Cela revient à découper un disque physique en plusieurs
disques virtuels indépendants. Une partition a donc une taille fixée une fois pour toute.
Découper un disque en plusieurs partitions a de multiples avantages :
• des tailles trop importantes sont difficiles à gérer (les sauvegardes automatiques sont souvent faites
avec comme granularitée la partition)
• permet d’éviter un débordement d’une partition à une autre (cloisonement entre partitions systèmes
et utilisateurs)
• permet de gérer les droits de lecture/écriture partition par partition (voir le fichier /etc/fstab ou
équivalent)
• permet d’installer plusieurs systèmes d’exploitation sur le disque dans des partitions différentes
L’inconvénient est qu’une partition peut être pleine alors que les autres sont largement sous-utilisées !
La seule solution consiste alors à sauver le contenu des partitions, les détruire, et en créer de nouvelles !
Ou bien acheter un nouveau disque. . . Ou encore acheter un système AIX, HPUX. . . qui permettent une
augmentation dynamique de la taille d’une partition :-)
3.1.3
Système de fichiers local
Un système de fichiers (ou FS, “file system”) est une structure logique que l’on ajoute à chaque partition
afin de permettre son exploitation (manipulation des blocs, stockage d’une arborescence de fichiers, notion
d’“inode”, etc.).
• Sur les systèmes BSD, le système de fichier habituel est FFS (“Fast File System”). UFS en est une
évolution.
• Sous Linux, le système de fichiers habituel est Ext2fs.
• Sous Ouindoze, il y a plusieurs systèmes : FAT16, FAT32
3.2
L’arborescence de fichiers UNIX
On trouvera généralement les répertoires suivants :
/ : Appelé racine.
/bin : Contient les utilitaires et commandes indispensables.
/dev : Contient les “devices”, ou fichiers spéciaux permettant d’accéder aux périphériques physiques
(/dev/rmt* : lecteurs de bandes, /dev/fd* : lecteur de disquettes, disque etc.) et aux périphériques
logiques (pseudo-terminaux, services réseaux TCP et UDP, etc.).
/etc : Contient les fichiers de configuration tels que /etc/passwd, /etc/hosts. . .
17
3.3. SYSTÈME DE FICHIERS DISTANT: NFS
/lib : Contient les bibliothèques (“library” en anglais) indispensables (fichiers *.a
1
ou *.so 2 ).
/root : Répertoire principal de l’utilisateur “root”.
/sbin : Contient les commandes d’administration indispensables.
/tmp : Contient les fichiers temporaires créés par le système ou un utilisateur. Chacun y a accès et peut
y déposer des informations. Cependant /tmp peut être réinitialisé à tout moment (par exemple lors
du boot, tous les soirs, etc.).
/usr : Contient les fichiers et commandes supposées non indispensables. Sans lui le système fonctionne
mais n’est pas réellement utilisable.
/usr/X11 : les librairies et commandes relatives au système de fenêtrage X11. Contient en particulier /usr/X11/bin (la plupart des utilitaires en mode graphique, “window managers”,
jeux. . . ), /usr/X11/lib et /usr/X11/man.
/usr/bin : les autres utilitaires et commandes.
/usr/local : utilitaires et commandes additionnelles propres au site. Contient en général un grand
nombre de choses très, très utiles ! A avoir absolument dans son PATH.
/usr/lib : les autres bibliothèques.
/usr/include : fichiers d’include C, *.h.
/usr/sbin : les commandes d’administration un peu moins importantes.
/var : Contient les fichiers temporaires gérés par le système ainsi que des fichiers de taille variable.
/var/log : Contient les fichiers de “log”, c’est à dire les traces de tous les évenements étant survenus : problèmes, connexions, reboot. . .
/var/spool : Contient le courrier, les impressions en cours, etc.
/home ou /comptes ou /users : Contient les répertoires principaux des utilisateurs. Il fait souvent
partie d’une partition indépendante.
Cette arborescence, très incomplete, est donnée à titre d’exemple. Dans la pratique le type de système
(SystemV versus BSD) influera, ainsi que les spécificités locales au site. Ainsi sur un système V (Solaris)
on trouvera en plus :
/usr/5bin : utilitaires et commandes pour un profil SystemV.
/usr/ucb : utilitaires et commandes pour un profil BSD 3 .
/usr/ucblib : Comme /usr/lib mais pour le profil BSD.
/usr/ucbinclude : Comme /usr/include mais pour le profil BSD.
3.3
Système de fichiers distant: NFS
Principes de NFS
NFS (Network File System) est un système de fichiers permettant à une machine d’exploiter le disque
d’une autre machine via le réseau. On distingue (figure3.1) :
le client NFS : il s’agit de la machine accédant au système de fichiers distant, et
le serveur NFS : il s’agit de la machine exportant un système de fichiers local à des machines distantes.
Le bon fonctionnement de NFS nécessite que d’autres services soient opérationnels :
• le réseau, puisque l’accès au système distant passe par le réseau,
1 bibliothèque
statique, c’est à dire linkée avec l’executable lors de la compilation
dynamique, c’est à dire linkée lors du lancement de l’executable
3 l’ordre d’apparition de /usr/ucb et /usr/5bin dans la variable PATH donnera le profil recherché
2 bibliothèque
18
CHAPTER 3. SYSTÈME DE FICHIERS
machine1 - client NFS
machine2 - Serveur NFS
accès transparent
à la partition
/home distante
partition /home
connexion à travers le réseau
Figure 3.1: Montage par NFS d’une partition.
• la synchronisation des horloges des différentes machines collaborant à travers NFS (afin d’avoir une
vue cohérente des dates de modification des fichiers4 ),
• l’unicité des UID des utilisateurs entre les différentes machines afin de ne pas avoir de problèmes
de droit d’accès5 .
Un montage NFS nécessite par ailleurs que le serveur autorise le client à “monter” (terme technique) le
système de fichiers distant localement (ficher /etc/exports pour les systèmes BSD). Notons aussi que
le “point de montage” du FS distant au sein du FS local peut se faire à différents endroits. Ainsi il peut
y avoir des différences dans l’arborescence des machines clientes.
Montage NFS des répertoires principaux des utilisateurs
Par défaut, un utilisateur ayant un compte sur les machines A et B aura un répertoire principal sur
le disque de chacune des machines. Accéder aux fichiers qu’il a stocké sur B lorsqu’il se trouve sur A
nécessitera l’emploi d’un outil de copie à travers le réseau (e.g. FTP, voir chapitre 6).
Afin d’éviter ces problèmes et d’avoir une arborescence unique disponible quelle que soit la machine où
l’on se trouve, on identifie un “serveur de HOMES”, i.e. une machine disposant d’un gros disque qui
contiendra le répertoire principal de chaque utilisateur. Le système de fichiers associé est alors exporté
vers toutes les machines distantes sur lesquelles travaillent les utilisateurs. Les avantages sont multiples :
• plus de confort pour l’utilisateur qui retrouve tous ses fichiers quelle que soit la machine qu’il utilise,
• une gestion centralisée de tous les comptes utilisateurs, très utile dans le cas des sauvegardes,
Cela se paye en revanche par un temps d’accès un peu plus important, une charge réseau plus élevée, et
l’impossibilité de travailler en cas de problème réseau.
3.4
Propriétaire et droits d’un fichier
3.4.1
Principes généraux
$ ls -l *.ps
-rw-rw-r-1 roca
sirac
492518 Sep
3 12:12 Bourne.Shell.ps
L’utilisateur propriétaire du fichier est “roca”. Il peut être changé avec la commande chown. Par exemple :
chown truc_muche Bourne.Shell.ps
Le groupe propriétaire du fichier est “sirac”. Il peut être changé avec la commande chgrp. Par exemple :
chgrp ecrins Bourne.Shell.ps
À chaque fichier sont associés des droits. Voici le résultat du listage de tous les fichiers (même cachés,
c’est à dire commançant par un ”.”) du répertoire local :
$ ls -la
drwxr-xr-x
drwxr-xr-x
-rw-rw-r-4 C’est
5 I.e.
2 roca
14 roca
1 roca
sirac
sirac
sirac
512 Sep
1024 Sep
492518 Sep
8 16:04 .
8 15:23 ..
3 12:12 Bourne.Shell.ps
indispensable pour des outils tels que make qui reposent sur la comparaison des dates de modification.
à l’UID 50056 des machines A et B correspond bien la même personne physique.
3.5. NOTION DE QUOTAS
19
Le d initial (resp. son absence) indique un répertoire (resp. un fichier).
Chacun des trois groupes de trois caractères qui suit indique les droits qu’ont respectivement :
• l’utilisateur (abbrégé par u, ou ”user”, dans la commande chmod),
• les membres du groupe de l’utilisateur (abbrégé par g, ou ”group”, dans la commande chmod), et
• tous les autres utilisateurs (abbrégé par o, ou ”others”, dans la commande chmod).
Ces droits sont :
r indique un droit de lecture.
w indique un droit d’écriture.
x indique un droit d’exéctution.
La commande permettant leur modification est :
chmod <u et/ou g et/ou o><+ ou -><r et/ou w et/ou x> fichier(s)
Ainsi, pour enlever toute possibilité d’accès ‘a tout le monde en dehors de l’utilisateur pour le fichier
Bourne.Shell.ps, on utilisera :
chmod go-rwx Bourne.Shell.ps
Ces droits étant stockés sous forme numérique par le système, il est également possible de rentrer ces
valeurs par une suite de 1 à 3 digits octals6 . Chaque digit code les droits rwx:
r correspond à 4
w correspond à 2
x correspond à 1
Il suffit alors de faire la somme des droits désirés pour respectivement l’utilisateur, le groupe, les autres.
chmod 0640 Bourne.Shell.ps
passe les droits en : -rw-r-----.
3.4.2
Droits d’accès appliqués à un répertoire
Le même principe de droits s’applique également aux répertoires, la signification précise des droits étant
la suivante :
r autorise à lister le contenu du répertoire
w autorise la création de fichiers (l’autorisation décriture pour un fichier déja existant est régie par
les droits du fichier!)
x autorise à rentrer dans le répertoire
3.5
Notion de quotas
Les quotas permettent un partage équitable de l’espace disque entre les utilisateurs. On attribue à chacun
une taille maximale d’occupation du disque. Un débordement est toléré pendant quelques jours. Au dela
de ce délai, plus aucun fichier nouveau ne pourra être créé tant que l’utilisateur ne sera pas repassé sous
son quota.
Avantage par rapport à la technique consistant à avoir une partition par utilisateur : plus grande facilité
d’administration (sauvegarde, configuration), de plus l’espace non utilisé par un utilisateur peut être mis
à profit par un autre.
6 Il est en fait possible de spécifier un 4ème digit. Il permet de spécifier certaines propriétés qui dépassent le cadre de ce
manuel.
20
CHAPTER 3. SYSTÈME DE FICHIERS
3.6
3.6.1
Commandes Unix
Chemins relatifs et absolus
Deux types de chemins existent:
• absolue, c’est à dire spécifié à partir de la racine.
Exemple : /usr/X11/bin/fvwm.
• relatif, c’est à dire spécifié à partir de la position courante.
Exemple : doc/cours/intro_unix.ps, ../../cours/tp.
Le répertoire courant peut être désigné par “.” et le répertoire précédant par “..”.
3.6.2
Gestion des répertoires et fichiers
mkdir nom_de_repertoire
rmdir nom_de_repertoire
cd
cd
cd
cd
cd
cd
nom_du_repertoire
.
..
ou bien cd ~
~/nom_de_repertoire
~nom_d_utilisateur
pwd
ls
ls
ls
ls
ls
-l
-a
-d
-t
mv ancien_nom nouveau_nom
(convient pour renommer ou déplacer un fichier ou un répertoire)
ln -s fichier_existant nouveau_lien
cp fichier_original fichier_copie
rm
rm -f
rm -r
rm -rf
Attention à : rm -rf *
cat nom_fichier
more nom_fichier
3.6.3
df
df -k
df .
mount
Informations sur les systèmes de fichiers
(sur BSD)
(sur Systeme V)
21
3.6. COMMANDES UNIX
du
du -k
du -s
du -ks *
Exemples sous Linux
$ df
Filesystem
/dev/hda3
/dev/hda6
1024-blocks Used Available Capacity Mounted on
437191 402157
12455
97%
/
429352 379963
27215
93%
/home
On voit que se trouvent deux partitions seulement, toutes deux locales (visible par le nom des partitions
en /dev/hda).
Exemples sous Solaris
$ df -k
Filesystem
/dev/dsk/c0t3d0s0
/dev/dsk/c0t3d0s3
/proc
fd
/dev/dsk/c0t3d0s4
swap
meije:/comptes
meije:/promethee
kbytes
used
24063
19495
239943 172855
0
0
0
0
163223 105903
55748
236
1918374 1253717
1837939 1582685
avail capacity
2168
90%
43098
81%
0
0%
0
0%
41000
73%
55512
1%
472820
73%
71461
96%
Mounted on
/
/usr
/proc
/dev/fd
/opt
/tmp
/comptes
/promethee
Cet exemple montre la présence de deux montages NFS (pour les répertoires utilisateurs), exportés par
la machine meije. Les autres systèmes sont locaux (visible par la présence de /dev/dsk/).
22
CHAPTER 3. SYSTÈME DE FICHIERS
Chapter 4
Le Shell
23
24
CHAPTER 4. LE SHELL
4.1
Principes
Le shell est le premier processus d’une session. Sa nature est précisée dans le fichier /etc/passwd (cf.
Chapitre 2). Il a deux rôles :
• Interpréteur de commandes : Il constitue l’interface entre l’utilisateur et le système et permet, selon
les shells :
– l’écriture et l’éxecution des commandes,
– l’accès à un historique,
– l’édition de lignes de commandes,
– la completion,
– la gestion des entrées/sorties,
– la création d’alias,
– la gestion des jobs, etc.
• Langage de programmation : Cette programmation peut se faire de façon interactive (en ligne) ou
non (scripts, ou fichiers de commandes). Le shell possède de nombreuses fonctions de contrôle,
commandes internes (builtin), mécanismes de substitution de paramètres, etc.
Son fonctionnement en tant qu’interpréteur est le suivant :
Ouverture des E/S standards
entrée standard (stdin, ou fd=0), par défaut le clavier
sortie standard (stdout, ou fd=1), par défaut l’écran
sortie erreur standard (stderr, ou fd=2), par défaut l’écran
Lecture sur l’entrée standard
lecture de la commande jusqu’à la fin de ligne (\n)
interpretation des méta-caractères et opérateurs
Lancement de la commande
recherche du nom de la commande à l’aide du PATH (path)
en premier plan : fork()/exec(commande)/wait()/prompt
en arrière plan : fork()/exec(commande)/prompt
Exemple :
/bin/sh
attente...
l’utilisateur tape "date"
creation d’un clone
/bin/sh
attente...
/bin/sh
(fork)
lancement de la
commande (exec)
fin (exit)
/bin/date
Figure 4.1: Utilisation de la commande date en premier plan.
Pourquoi créer un nouveau processus pour éxecuter la commande ?
• indépedance du shell vis à vis de la commande. En cas de plantage, le shell n’est pas affecté.
• permet de lancer plusieurs commandes en tache de fond.
NB: on ne peut pas revenir en arrière apres un exec. Le recouvrement est définitif.
25
4.2. LEQUEL CHOISIR ?
4.2
Lequel choisir ?
De nombreux shells existent :
sh (”Bourne shell”, Steve Bourne) shell historique dont l’avantage est d’être disponible sur tous les Unix.
ksh (”Korn shell”) shell normalisé POSIX (P1003.2) et ISO (HP, Solaris). Puissant. C’est le shell par
défaut sous Solaris.
bash (”GNU Bourne again shell” de Brian Fox et Chet Ramey) ksh augmenté d’origine FSF, qui possède
la complétion. C’est le shell par défaut sous Linux. Tester c’est adopter !
zsh (”Z shell”) Ksh du domaine public. Peu utilisé.
csh (”C-shell”, Bill Joy) shell BSD, disponible sur tous les Unix, un peu plus puissant que sh, mais
incompatible et insuffisant pour une utilisation courante (pas d’historique).
tcsh (”Toronto C-shell”) version largement améliorée de csh, avec la complétion, shell tres utilisé.
Un tableau comparatif pour l’utilisation de ces shells est donné ci-dessous. Il en ressort que sh est à
préferer absolument pour l’écriture de scripts du fait qu’il est disponible sur toutes les machines, alors
que bash ou tcsh sont à privilégier dans le cas d’une utilisation en tant qu’interface utilisateur.
Shell
sh
ksh
bash
zsh
csh
tcsh
4.3
interface utilisateur
très limitée
bonne
très bonne
bonne
moyenne
très bonne
programmation
sûre, toujours disponible
normalisée
normalisée
normalisée
à déconseiller
à déconseiller
Notions de variables et d’environnement
4.3.1
Principe
Le shell permet la définition de variables par :
NOM_VARIABLE=valeur
On pourra ensuite les référencer au sein du shell. En revanche, par défaut ces variables ne sont pas
transmises aux processus créés par le shell. Pour qu’une variable puisse être transmise lors du execve
(par exemple DISPLAY), il faut qu’elle fasse partie de l’environnement. Cela se fait en “exportant” ces
dernières au moyen des commandes :
export NOM_VARIABLE
pour ksh
setenv NOM_VARIABLE
pour tcsh
4.3.2
Quelques variables d’environnement
Les variables d’environnement permettent de parametrer son environnement de travail. Certaines ont
des valeurs par défaut (initialisées dans le fichier de configuration commun par exemple). Toutes sont
personalisables dans la théorie, mais en pratique mieux vaut réflechir avant :-)
PATH : suite de chemins d’accès aux exécutables Exemple:
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11/bin:/usr/local/bin:.
L’ordre des chemins dans cette variable est important puisqu’il détermine l’ordre de recherche.
Ainsi, si deux versions d’une même commande existent, sera utilisée celle qui est trouvée en premier.
La présence d’un “.” dans cette variable permet d’exécuter les commandes se trouvant dans le
répertoire courant. Par contre il est préférable que le “.” se trouve après les répertoires systèmes
pour des raisons de sécurité1 .
1 Il se peut en effet qu’un utilisateur mal intentionné a ît installé une version modifiée d’une commande usuelle telle que ls
dans le répertoire /tmp. Tout utilisateur ayant un “.” avant /bin dans sa variable PATH et ayant fait un cd /tmp exécutera
alors la fausse commande ls !
26
CHAPTER 4. LE SHELL
LD LIBRARY PATH : suite de chemins d’accès aux bibliothèques. Même syntaxe que PATH.
MANPATH : suite de chemins d’accès aux manuels. Même syntaxe que PATH.
HOME : chemin d’accès au répertoire initial de l’utilisateur. Répertoire par défaut pour cd
USER : l’utilisateur courant
PWD : répertoire courant. Positionné automatiquement par cd
PS1 : prompt principal du shell en mode interpréteur. En général “$ ” pour un utilisateur, et “# ”
sous root
PS2 : prompt secondaire du shell en mode programmation
TERM : type de terminal (essayer vt100 ou xterm en cas de problèmes avec un éditeur)
DISPLAY : adresse de l’écran. Le format de la variable est
<nom de la station>:<numero d’ecran>[.0]
EDITOR ou VISUAL : éditeur par défaut à utiliser (vi, emacs, etc.)
PRINTER : imprimante par défaut
et bien d’autres encore. . . On pourra visualiser les valeurs courantes d’une variable ou de toutes les
variables par :
env
echo $PATH
4.4
Configuration de l’environnement
Elle se fait à deux endroits différents :
• dans des fichiers de configuration communs gérés par l’administrateur, et
• dans des fichiers de configuration individuels gérés par l’utilisateur.
La localisation et la syntaxe de ces fichiers dépend du shell choisit.
4.4.1
Fichier /etc/profile commun en ksh ou bash
Ce fichier d’initialisation commun est un point de passage obligé pour tous les logins. On y définit des
variables d’environnement à très longue durée de vie. Il est fourni par le constructeur et adapté par
l’administrateur aux spécificités locales. Il n’est pas modifiable par l’utilisateur.
Exemple :
# positionne les droits des nouveaux fichiers a 0777 - 027
# soit 0750 (rwxr-x---).
umask 027
USER=‘logname‘
# chemins minimaux pour les commandes et les manuels.
PATH=/usr/local/bin:/usr/ucb:/bin:/usr/bin:/usr/X11/bin
MANPATH=/usr/local/man:/usr/man:/usr/lang/man
MAIL=/var/spool/mail/$USER
# nom de la machine et de l’OS.
HOSTNAME=‘uname -n‘
OS=‘uname -s‘
REL=‘uname -r‘
OSREL=${OS}${REL}
export USER PATH MANPATH MAIL HOSTNAME OS REL OSREL
4.4. CONFIGURATION DE L’ENVIRONNEMENT
4.4.2
27
Fichiers de configuration en ksh ou bash
Il s’agit du fichier $HOME/.profile. Il contient les initialisations propres à l’utilisateur. On peut y :
• redéfinir (ou étendre) des variables proposées par /etc/profile (bien réfléchir avant !)
• définir de nouvelles variables : export VARIABLE=valeur
• exécuter des commandes et scripts d’initialisation (exemple: modification des droits d’accès par
défaut avec umask )
Pour prendre en compte des modifications du .profile, il faut alors :
• soit sortir de la session et se loger de nouveau,
• soit “ressourcer” le fichier par l’une des commandes :
source .profile
. .profile
. ~/.profile
Exemple de .profile :
export PATH=$PATH:$HOME/bin:. # nouveaux chemins personnels
export DISPLAY=:0
export PRINTER=lB110 # imprimante par defaut
alias ll=’ls -l’# quelques alias utiles
alias la=’ls -la’
umask=077 # donc: 0777 - 0077 donne les droits 0700, soit rwx-----# tout fichier cree aura par defaut ces droits restreints
A la différence de ksh, en bash on peut trouver :
• .bashrc_login : exécuté au login seulement d’un shell interactif de login
• .bashrc_logout : exécuté à la fin de session
• .profile : exécuté au login seulement en l’absence de .bashrc_login
• .bashrc : exécuté en cas d’un shell interactif non login (par exemple depuis le shell courant on
lance un nouveau shell).
Le plus simple est de n’avoir qu’un fichier .profile et de créer un lien de .bashrc vers .profile.
Cela évite bien des problèmes (par exemple lorsque l’on se retrouve sous ksh parce que bash n’est pas
disponible) et va dans le sens d’une plus grande simplicité.
4.4.3
Fichiers de configuration en csh ou tcsh
Ce sont les fichiers :
• .cshrc/.tcshrc : Fichier d’initialisation d’un C-shell
réinterprété à chaque invocation du csh/tcsh (donc pour chaque commande lancée)
• .login : Fichier d’initialisation d’un login C-shell
interprété à chaque login (après .[t]cshrc)
définition de nouvelles variables
peut-être “ressourcé” par : source .login
C’est ici que l’on met l’appel à /usr/games/fortune
• .logout : Fichier de clôture d’une session C-shell
C’est ici que l’on met le clear de l’écran
Exemple de syntaxe :
setenv
DISPLAY ma_console:0
28
CHAPTER 4. LE SHELL
4.5
Quelques fonctionnalités utiles de sh et ses successeurs
4.5.1
Les métacaractères ou caractères de remplacement
• Le constructeur * permet de désigner une chaine de caractères quelconque, éventuellement vide.
Ainsi :
* désigne tous les fichiers (hors fichiers cachés débutant par un “.”)
*.ps désigne tous les fichiers ayant l’extension .ps
• Le constructeur ? permet de désigner un caractère quelconque non vide. Ainsi :
? désigne tous les fichiers d’un seul caractère
exemple.? désigne tous les fichiers du type exemple.X
• Le constructeur [] permet de désigner un caractère quelconque parmis une liste. Ainsi :
v[123].txt désigne les fichiers v1.txt, v2.txt, et v3.txt
v[1-5].txt désigne les fichiers v1.txt, etc. jusqu’à v5.txt
[a-zA-Z]* désigne les fichiers commençant par une lettre minuscule ou majuscule (attention à ne
pas utiliser [a-Z] qui conduit à une erreur puisque les codes ASCII des majuscules sont avant
ceux des minuscules !).
On peut se servir du constructeur [!] pour exclure des caractères pris parmis une liste. Ainsi :
*[!a-z] désigne tous les fichiers se terminant par autre chose qu’une lettre minuscule.
Le problème des métacaractères
La génération de noms comportant des métacaractères pose problème. Pour dénoter de manière littérale
les métacaractères, plusieurs solutions sont possibles :
• On l’entoure de simples quotes ’.
• Dans une chaine entourée de doubles quotes ", tous les caractères sont pris littéralement sauf $ ‘ et
\ (backslash) afin de permettre la substitution de variables et de commandes. Pour rendre littéral
les caractères $ ‘ et \, on les fait précéder d’un \.
• Sinon (soit à l’extérieur d’une chaine délimitée par ’ ou ") on le fait précéder du caractère \.
De façon générale, le backslash est souvent un caractère d’échappement.
Exemples
• Détruire le fichier de nom “bi*zare” qui contient (par erreur) le caractère “*” :
rm "bi*zare"
rm ’bi*zare’
• Détruire tous les fichiers qui contiennent (par erreur) le caractère “*” :
rm *"*"*
rm *’*’*
• Désigner tous les fichiers du répertoire courant dont le nom, d’au moins trois caractères, commence
par un “.” :
ls .??*
4.5. QUELQUES FONCTIONNALITÉS UTILES DE SH ET SES SUCCESSEURS
4.5.2
29
La substitution de commandes
On veut affecter à une variable le résultat de l’exécution d’une commande. Pour cela on encadrera la
commande par des caractères backquote ‘.
Exemple : on veut affecter à la variable LISTE la liste des fichiers du type *.txt.
LISTE=‘ls *.txt‘
4.5.3
Bilan sur l’utilisation des différents caractères quote
’. . . ’ (simple quote) : chaine non interprétée
”. . . ” (double quote) : chaine de caractères avec substitution de commandes et de variables (les caractères $, ‘ et backslash ont une signification particulière)
‘. . . ‘ (back quote) : substitution de commandes
Exemple : Pour obtenir un prompt du type nom_machine:login>, on pourra utiliser :
export PS1="‘uname -n‘:‘logname‘> "
4.5.4
La notion d’alias
On peut facilement redéfinir le nom de commandes complexes (ou de suites de commandes) au moyen de
alias (raccourcis). Ainsi on trouvera souvent dans les fichiers de configuration :
alias ll=’ls -l’
alias la=’ls -la’
alias rm=’rm -i’
en ksh, ou bien :
alias ll
alias la
alias rm
ls -l
ls -la
rm -i
en tcsh. (pour ceux qui ont peur de faire des gaffes : -i pour interactif)
NB : ne pas confondre le caractère simple quote ’ avec les doubles quote ou back quote.
4.5.5
Redirection des E/S standards
On a vu que trois fichiers d’E/S spéciaux existent :
E/S
entrée standard
sortie standard
sortie erreur standard
“file descriptor”
stdin, ou fd 0
stdout, ou fd 1
stderr, ou fd 2
valeur par défaut
clavier
écran
écran
On peut redéfinir (on dit aussi rediriger) ces E/S standards au niveau du shell au moyen des caractères
< et > pour respectivement l’entrée et la sortie standard (on peut les voir comme des flèches).
Exemples d’utilisation
La commande bc offre la possibilité d’effectuer des calculs simples en ligne. Ainsi :
$ bc
5+2
7
quit
On peut aussi créer un fichier donnees comportant des lignes de calcul (ici la ligne : 5+2) et demander
à bc de le traiter :
30
CHAPTER 4. LE SHELL
$ bc <donnees
7
De même pour envoyer le résultat des calculs dans un fichier :
$ bc <donnees >resultat
et pour éviter d’écraser le fichier s’il existait déja (cad l’ouvrir en mode ajout) :
$ bc <donnees >>resultat
Les exemples vus ne s’appliquent qu’à l’entrée standard et à la sortie standard. Le mécanisme est en fait
plus général et s’applique en particulier à la sortie erreur. Ainsi :
commande 2> nom_fichier
envoie la sortie erreur dans le fichier (sans espace).
commande numero>&numero
envoie la sortie de numéro précisé en premier paramètre dans la sortie précisée en deuxième paramètre
(sans espaces nulle part). Ainsi :
cc -o essais essais.c > resultat 2>&1
à ne pas confondre avec :
cc -o essais essais.c 2>&1 > resultat
qui ne fait vraiment pas la même chose car l’ordre de déclaration est important. Dans le deuxième cas
stderr prend la valeur de stdout alors que ce dernier a encore sa valeur par défaut !
4.5.6
Exécution à la chaine
On peut cascader plusieurs commandes en chainant à chaque fois la sortie standard de la précédente
commande avec l’entrée standard de la commande suivante (figure 4.2. Ce chainage se fait gràce à des
”pipes” (ou tubes). On peut ainsi chainer un nombre quelconque de commandes.
stdin
stdout
stdin
ls -l ...
stdout
more
pipe
Figure 4.2: Exécution à la chaine de deux commandes.
Exemple :
$ ls -l /usr/bin | more
4.5.7
Exécution en séquence
On peut également exécuter en séquence des commandes. Une commande ne démarre alors que lorsque
la commande précédente est achevée.
Exemple : pour compiler un noyau Linux après avoir mis à jour toutes les dépendances. On sait que cela
va prendre un certain temps et entrer les trois commandes d’un coup permet de ne pas avoir à surveiller
en permanence l’évolution de la compilation.
$ make dep; make clean; make zImage
4.5.8
Exécution en premier plan ou arrière plan
Afin d’éviter que le shell n’attende la fin de la commande courante, on peut lancer celle-ci en tache de
fond. Cela se fait en ajoutant un caractère & en fin de ligne.
Exemple :
$ gcc -Wall -o essais essais.c &
4.5. QUELQUES FONCTIONNALITÉS UTILES DE SH ET SES SUCCESSEURS
4.5.9
31
La gestion des processus/jobs
Informations sur les processus
On utilisera: ps pour obtenir des informations sur les processus lancés par l’utilisateur courant (dans
toutes ses incarnations). On utilisera:
ps axl sous Linux
ps -elf sous Solaris
pour obtenir des informations sur tous les processus de la machine (systèmes et utilisateurs).
Exemple : sous Linux ps axl a donné :
$ ps axl
FLAGS
UID
100
0
40
0
40
0
40
0
40
0
40
0
40
0
140
0
140
0
100140
0
100040
2
140
0
100140
1
100140
0
100140
0
40
0
40
0
100140
0
140
0
100140
0
140
0
100100 50164
100100
0
100100
0
100100
0
100100
0
100100
0
100140
0
100100
0
100100
0
100100
0
40
0
0 50164
0 50164
100100
0
100000 50164
100000 50164
100000 50164
0 50164
100000 50164
100 50164
100 50164
100 50164
100000 50164
PID
1
2
3
4
5
6
7
79
171
180
191
202
213
228
239
251
262
274
288
300
318
331
332
333
334
335
336
339
392
425
541
337
340
355
356
359
360
361
363
366
393
426
543
986
PPID
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
318
331
340
355
355
359
359
359
363
392
425
541
543
PRI NI
0
0
0
0
-12 -12
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-12 -12
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4
0
-12 -12
0
0
0
0
12
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
10
0
14
0
SIZE
776
0
0
0
0
0
0
748
800
920
788
800
772
780
832
924
956
1024
1324
756
1092
1456
740
740
740
740
740
732
3176
3116
3256
1104
1168
1840
8632
1096
2108
2124
1628
1428
1204
1180
1180
972
RSS
388
0
0
0
0
0
0
356
432
548
412
448
340
400
408
576
584
656
816
336
500
944
308
308
308
296
296
232
2304
2188
2436
564
772
656
4720
564
1184
1224
988
684
812
788
788
520
WCHAN
link
get_more_bu
alloc_area_
setup_DMA
setup_DMA
setup_DMA
setup_DMA
load_aout_b
link
syslog
nanosleep
nanosleep
link
link
link
link
link
link
link
nanosleep
link
register_sy
SHATransfor
SHATransfor
SHATransfor
SHATransfor
SHATransfor
nanosleep
link
link
link
sigsuspend
register_sy
register_sy
register_sy
link
link
link
link
register_sy
SHATransfor
register_sy
STA
S
SW
SW<
SW
SW
SW
SW
S
S
S
S
S
S
S
S
S
S
S
S
S
S <
S
S
S
S
S
S
S
S
S
S
S <
S
S
R
S
S
S
S
S
S
S
S
R
TTY
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1
2
3
4
5
6
?
1
1
1
?
1
1
?
1
1
1
1
1
p2
p0
p3
p3
TIME
0:03
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:02
0:06
0:02
0:00
0:00
0:00
2:49
0:00
0:00
0:00
0:06
0:01
0:00
0:00
0:00
0:00
COMMAND
init
(kflushd)
(kswapd)
(nfsiod)
(nfsiod)
(nfsiod)
(nfsiod)
kerneld
syslogd
klogd
/usr/sbin/atd
crond
portmap
inetd
lpd
rpc.mountd
rpc.nfsd
/usr/sbin/amd -a /.autom
sendmail: accepting conn
gpm -t ps/2
/usr/local/bin/xntpd
/bin/login -- roca
/sbin/mingetty tty2
/sbin/mingetty tty3
/sbin/mingetty tty4
/sbin/mingetty tty5
/sbin/mingetty tty6
update (bdflush)
nxterm -display :0.0 -T
nxterm -display :0.0 -T
xterm -display :0.0 -T x
/usr/local/bin/xntpd
-bash
xinit
/usr/X11R6/bin/Xwrapper
sh /home/roca/.xinitrc
xclock -geometry 50x50-8
xload -update 3 -nolabel
fvwm
/usr/X11R6/lib/X11/fvwm/
-bash
-bash
-bash
ps axl
On constate que bon nombre de processus (démons) ont comme parent (champ PPID) le processus 1 de
propriétaire root (UID 0). Sinon la session en cours a comme père le processus de PID 331, à savoir
/bin/login roca ce qui est normal.
32
CHAPTER 4. LE SHELL
Suspension d’un processus
Supposons que l’on a lancé une commande en premier plan. Le shell attend sa fin. On peut alors
suspendre le processus en tapant : CTRL-Z
Le processus devient alors un “job” connu du shell. Un job est un processus particulier du point de vue
de ses relations avec son père (shell). Si un processus est identifié par un identificateur unique au niveau
du système, un job se voit attribuer en plus un numéro unique au niveau du shell courant seulement. On
pourra le désigner par “%” suivi de son numéro.
Plus généralement, on peut également suspendre un autre job ou processus par :
stop numero_de_processus
stop %numero_de_job
Reprendre l’exécution d’un processus/job
On utilisera : fg ou bg pour le redémarrer respectivement en premier plan ou en arrière plan.
Détruire un processus/job
On utilisera :
kill numero_de_processus
kill %numero_de_job
pour envoyer un signal de type SIGTERM. Un processus pouvant choisir d’ignorer ce signal, la commande
kill peut ne pas avoir d’effet.
À l’inverse :
kill -9 numero_de_processus
kill -9 %numero_de_job
génère un signal SIGKILL qu’un processus ne peut ignorer ni redéfinir. La destruction du processus est
donc assurée (si l’on a les droits requis).
4.5.10
Accès à un historique et profile de l’interface utilisateur
Deux profils d’interface utilisateur existent: un profile vi et un profile emacs. Ainsi les utilisateurs de
l’un ou de l’autre de ces éditeurs pourront retrouver les commandes usuelles lorsqu’ils voudront éditer
une ligne et accéder à l’historique, faire des recherches dans celui-ci. . .
Sous ksh/bash, la commande : set -o vi permet de sélectionner le profile vi. De même la commande :
set -o emacs permet de sélectionner le profile emacs (surement plus intuitif pour les non initiés).
NB : il existe une ancienne version d’historique utilisant la commande history. Elle est désormais tombée
en désuétude.
4.6
Ecriture de scripts
Voici quelques exemples de scripts Bourne shell (sh). Cette section donne seulement quelques pistes pour
l’écriture de scripts. On se réferera à [3] pour de plus amples informations. On regardera également les
interpréteurs awk et perl très couramment employés lors de l’écriture de scripts.
Exemple 1
#!/bin/sh
# Ce script renomme tous les fichiers dont l’extension est
# donnee en premier parametre en remplacant cette extension
# par celle donnee en deuxieme parametre.
if [ $# != 2 ];
then
echo "bad arguments"
echo "usage: $0 from_ext to_ext"
4.7. ALLER PLUS LOIN. . .
33
exit 1
fi
l_files=‘ls *.$1‘
for i in $l_files
do
new_name=‘basename $i $1‘$2
mv $i $new_name
echo "file $i renamed to $new_name"
done
Exemple 2
files=‘find $2 -print‘
for i in $files ; do
output=‘grep -n $1 $i‘
if [ -n "$output" ] ; then
echo "****** $i:\n$output"
fi
done
NB : On rappelle que la commande grep recherche une chaine de caractères dans un fichier. De plus
l’option -n de if retourne vrai si la longueur d’une chaine est non nulle.
• Que fait ce script ?
• Quel nom lui donneriez-vous ?
4.7
Aller plus loin. . .
On se reportera avec profit aux références suivantes :
• [3] pour le Bourne Shell,
• [6] pour le Korn Shell, et
• [5] pour csh et tcsh.
34
CHAPTER 4. LE SHELL
Chapter 5
Systèmes de fenêtrage
35
36
CHAPTER 5. SYSTÈMES DE FENÊTRAGE
5.1
Principes
5.1.1
Historique
Le projet X-Xindow a débuté au MIT en 1984. Il est issu de la fusion des projets Athena du MIT et du
système de fenêtrage W de l’université de Stanford. D’où son nom, X, lettre suivant W dans l’alphabet.
X n’est pas un produit commercial mais un Freeware. La version distribuée actuellement (1997) est
X11R6. Il a servi de base à plusieurs systèmes de fenêtrage constructeurs :
Openwindows :
origine : Sun Microsystems
“look and feel” OPENLOOK
Motif :
origine : OSF
“look and feel” Motif
X Window System :
origine : MIT
“look and feel” MIT Athena
5.1.2
Architecture
X-Window est un système de gestion de fenêtres, pouvant fonctionner de façon transparente à travers
un réseau, et basé sur une architecture client/serveur. Il est destiné à la création et la manipulation de
fenêtres sur des écrans de type bitmap. Il permet de développer des applications graphiques (appelées
clients) indépendamment du matériel, du système d’exploitation, de la localisation des machines, et de
l’aspect de l’interface graphique (pris en charge par une application spécifique, le “window manager”, cf.
ci-dessous).
Terminologie :
serveur X Désigne la machine où se trouve l’écran physique. C’est lui qui fournit les ressources utilisées
par les clients, d’où son nom.
client Désigne les applications graphiques (y compris les “window manager”).
machine1
gère clavier
écran, souris
échanges locaux
(IPC)
serveur X
client1 lib X11
export DISPLAY=:0
connexion à travers
le réseau (TCP)
machine2
client2 lib X11
export DISPLAY=machine1:0
Figure 5.1: Relations clients/serveur dans l’architecture X11.
La communication client/serveur (figure 5.1) est prise en charge par la librairie X11. Celle-ci assure
une communication transparente entre client et serveur, que ceux ci soient sur la même machine (on
utilise alors des mécanismes de communication locale) ou sur des machines différentes (on utilise alors
des communications réseau). Ceci est complètement caché aux applications (clients). La seule contrainte
est de positionner correctement la variable DISPLAY puisque c’est celle-ci qui permet d’annoncer à la
librairie X11 où se trouve le serveur X.
5.2
Les “window managers”
Un utilisateur n’accède pas directement à X-Window, mais utilise un “window manager” ou gestionnaire
de fenêtres. Ce gestionnaire de fenêtres apporte une interface utilisateur graphique (ou GUI, Graphical
User Interface) caractéristique. Vu de X-windows, il s’agit d’un client au même titre que les autres
applications. De très nombreux gestionnaires existent :
5.3. CONFIGURATION D’UN SYSTÈME DE FENÊTRAGE
37
olwm : OPENLOOK Window Manager
Développé par un groupe de constructeurs dont Sun, AT&T, XEROX, etc.
mwm : Motif Window Manager
Développé par l’OSF
twm : Gestionnaire de fenêtre standard X
Développé par le MIT
olvwm : Version “bureau virtuel” de olwm
tvtwm : Version “bureau virtuel” de twm
fvwm : F? Virtual Window Manager
Redesigné à partir de twm avec comme objectif de limiter les besoins en mémoire, et offrir un
bureau virtuel.
fvwm2 : une variante de fvwm
fvwm95 : encore une variante de fvwm avec un look-and-feel “ouindoze”
afterstep : dérive de fvwm
windowmaker : dérive de fvwm
enlightment : dérive de fvwm
cde : Common Desktop Environment
kde : K Desktop Environment
Très puissant et convivial, de nombreux utilisateurs, distribué sous licence GNU à l’URL :
http://www.kde.org/
gnome : (GNU Network Object Model Environment) Le dernier projet d’environnement graphique de
GNU, très ambitieux (arrive avec de nombreuses applications dans tous les domaines). À suivre
sur: http://www.gnome.org/
La configuration de ces différents gestionnaires est sauvée au sein de fichiers présents dans le répertoire
principal de l’utilisateur (.olwmrc, .mwmrc, .twmrc, .fvwmrc. . . ). La syntaxe utilisée est bien sûr
différente.
5.3
Configuration d’un système de fenêtrage
5.3.1
Lancement de l’environnement graphique
Le lancement de l’environnement graphique peut se faire de deux façons :
• Automatiquement, la console étant d’emblée en mode graphique grace au démon xdm.
• Manuellement, au moyen de la commande xinit, (ou openwin dans le cas d’un Sun).
NB : sur certains systèmes on trouvera des scripts appellés xstart, ou startx pour lancer automatiquement xinit.
5.3.2
Configuration de l’espace de travail en mode automatique
xdm recherche un fichier $HOME/.xsession dans le répertoire principal de l’utilisateur. Noter que ce
fichier doit avoir des droits d’éxécution puisqu’il s’agit d’un script.
Exemple de fichier .xsession :
38
CHAPTER 5. SYSTÈMES DE FENÊTRAGE
#!/bin/sh
# no -f in the previous line so .profile gets run to set $PATH
twm &
xrdb -load "$HOME/.Xresources" # Ajout des definitions utilisateurs
xclock -geometry 50x50-0+0 &
xbiff -geometry 50x50-51+0 &
xterm -geometry 80x24 -T login
On prendra soin de lancer en tache de fond les commandes qui ne retournent pas immédiatement. La
dernière commande en revanche devra être lancée en premier plan car sa fin conduit la session graphique
à s’achever elle aussi. Ainsi, dans l’exemple précédent, faire un exit dans la fenêtre login conduit à la
fermeture de la session.
L’option geometry permet quant à elle de préciser :
• la taille (en pixel dans le cas de xclock/xbiff ou en caractères dans le cas de xterm), et
• la position de la fenêtre par rapport à un coin. Ainsi :
+0+0 aligne la fenêtre sur le coin supérieur gauche de l’écran,
-0+0 aligne la fenêtre sur le coin supérieur droit,
+0-0 aligne la fenêtre sur le coin inférieur gauche, et
-0-0 aligne la fenêtre sur le coin inférieur droit.
Ceci se conçoit très bien en se souvenant que l’écran est numéroté de gauche à droite et de haut en
bas. Le caractère + indique une position par rapport à l’origine, et le caractère - une position par
rapport à la limite de l’écran.
Si aucun fichier n’est trouvé, alors xdm lance le “window manager” par défaut du système.
En cas d’erreur dans le fichier de configuration (par exemple on oublie de lancer la dernière commande en
premier plan), alors il se peut que l’on n’aît plus la main. Une solution consiste alors à valider le mot de
passe (dans la fenêtre xdm) par F1 au lieu de enter. On obtient alors une fenêtre dans laquelle on peut
éditer le fichier .xsession. Une autre solution consiste à passer par la session d’un autre utilisateur, à
se loguer sous son nom, puis à modifier le fichier (on est en mode texte).
5.3.3
Configuration de l’espace de travail en mode manuel
xinit recherche un fichier $HOME/.xinitrc dans le répertoire principal de l’utilisateur et le cas échéant
l’éxécute (c’est un script).
Exemple de fichier .xinitrc :
#!/bin/sh
xrdb -load "$HOME/.Xresources" # Ajout des definitions utilisateurs
xclock -geometry 50x50-0+0 &
xterm -geometry 80x24+0-0 &
twm
Là aussi on prendra soin à lancer en tache de fond les commandes qui ne retournent pas immédiatement.
La dernière commande en revanche devra être lancée en premier plan car sa fin conduit xinit à s’achever
lui aussi.
Si aucun fichier n’est trouvé, alors xinit exécute :
xterm
5.3.4
-geometry
+1+1
-n
login
-display
:0
Configuration du “window manager”
Nous n’abordons ici que la configuration de twm. Elle se fait facilement au sein du fichier $HOME/.twmrc.
On y trouvera en particulier la définition des menus déclenchés par les bouttons de la souris.
Extrait de fichier .twmrc :
5.3. CONFIGURATION D’UN SYSTÈME DE FENÊTRAGE
39
menu "button1"
{
"LOGIN"
f.title
"machine1"
!"xterm -display $DISPLAY -T machine1 -ls -sb -sl 400
-vb -geometry 80x24 -e rlogin machine1.lip6.fr &"
"machine2"
!"xterm -display $DISPLAY -T machine2 -ls -sb -sl 400
-vb -geometry 80x24 -e rlogin machine1.lip6.fr &"
}
menu "button2"
{
"TOOLS"
"xbiff"
"xcalc"
"xclock"
"xlock"
"xterm"
"xv"
}
menu "button3"
{
"WINDOW MGMT"
"Screen Refresh"
"Move"
"Resize"
"Raise"
"Lower"
"Destroy"
"Zoom"
"Mouse fast"
"Mouse int"
"Mouse slow"
" "
"ICONES"
"TWM"
}
menu "ICONES"
{
"Show Icon Mgr"
"Hide Icon Mgr"
}
menu "TWM"
{
"twm Version"
"Source .twmrc"
"Exit twm"
}
f.title
!"xbiff &"
!"xcalc &"
!"xclock -geometry 80x80 -update 1 &"
!"xlock -mode blank &"
!"xterm -geometry 80x24 -ls -sb -sl 400 -display $DISPLAY &"
!"xv &"
f.title
f.refresh
f.move
f.resize
f.raise
f.lower
f.destroy
f.zoom
!"xset m 5 1 &"
!"xset m 3 1 &"
!"xset m 1 1 &"
f.title
f.menu "ICONES"
f.menu "TWM"
f.showiconmgr
f.hideiconmgr
f.version
f.twmrc
f.quit
En fait la configuration manuelle par édition du fichier de ressources est de plus en plus pénible du fait
de la complexité croissante des environnements. Avec les environnements modernes (i.e. post fvwm), ce
n’est plus d’actualité et cette opération se fait graphiquement.
5.3.5
Configuration des applications
La personalisation des applications se fait au moyen des fichiers $HOME/.Xdefaults ou $HOME/.Xresources
et de la commande xrdb. Voici un exemple de fichier .Xresources :
emacs*Geometry: 80x65-0-0
emacs*Background: rgb:5b/76/86
emacs*Foreground: white
40
CHAPTER 5. SYSTÈMES DE FENÊTRAGE
emacs*Cursor: white
emacs*BorderColor: white
emacs*Font: 6x10
Xmris.Up: Up
Xmris.Down: Down
Xmris.Left: Left
Xmris.Right: Right
Il suffit alors d’utiliser la commande :
$ xrdb -load $HOME/.Xresources
5.3.6
Configuration du clavier
La configuration du clavier se fait au moyen de la commande xmodmap et du fichier \$HOME/.Xmodmap.
On pourra se réferrer à [8].
5.3.7
Configuration de xterm
La commande xterm permet de créer une nouvelle fenêtre de travail en mode texte. De très nombreux
paramêtres sont définissables. Exemple :
xterm -ls -sb -sl 2000 -vb &
• -ls (“login shell”) permet de prendre en compte les fichiers d’initialisation après login (e.g.
.profile).
• -sb (“scrollbar”) permet d’accéder à un ascenceur.
• -sl 2000 (“scroll lines”) permet de spécifier le nombre de lignes sauvegardées et accessibles par
l’ascenceur. On utilisera avec profit une valeur supérieure aux 64 par défaut. Par contre cela
nécessitera plus de mémoire !
• -vb (“visual bell”) permet d’avoir un “flash” à l’écran plutot qu’un “bip” en cas d’erreur.
Au sein de la fenêtre xterm, on pourra aussi accéder à des menus de configuration. Pour cela on utilise :
CTRL-bouton_gauche (envoit de signaux), CTRL-bouton_milieu (nombreuses options), et CTRL-bouton_droit
(taille des fontes).
5.4
Sécurité sous X Windows
Le système X-Windows étant distribué, les clients peuvent venir de n’importe quelle machine du réseau,
et sur ces machines de n’importe quel utilisateur. La couche de sécurité de X11 a pour but de n’autoriser
l’accès qu’à des machines ou utilisateurs spécifiques. On a deux possibilités :
Utilisation du mécanisme xhost
L’autorisation se fait sur la base de l’ adresse IP de la machine cliente. Cela signifie que n’importe qui
se connectant sur cette machine peut contrôler l’écran du serveur. Cette méthode n’est théoriquement
valable que sur des systèmes monoutilisateur (typiquement des ordinateurs personnels).
Exemples :
xhost + inox.lip6.fr
xhost +
xhost - xenon.lip6.fr
xhost
Le caractère + permet d’autoriser une machine (ou toutes les machines) alors que le caractère - permet
d’interdire l’accès à une machine. Il faut noter que ces commandes ne peuvent s’exécuter que sur le
serveur puisque c’est lui qui doit autoriser les machines clientes.
5.4. SÉCURITÉ SOUS X WINDOWS
41
Utilisation du mécanisme xauth
L’autorisation se fait sur la base d’une clé (qui peut être combinée avec un protocole de partage de fichiers
réseau comme NFS ou un “remote shell”). L’autorisation est donc au niveau de l’utilisateur lui-même,
ou du moins de la connaissance d’une clé d’accès.
Une utilisation courante de xauth consiste à extraire l’information (clé) sur le serveur, puis à la transmettre à la machine cliente par un “remote shell” qui exécute xauth. Cela donne :
xauth extract - $DISPLAY | rsh machine_cliente xauth merge Celà nécessite bien sûr que l’on ait l’autorisation d’exécuter un rsh sur la machine cliente (le fichier
.rhosts sur cette dernière machine doit contenir une ligne pour la machine serveur X).
42
CHAPTER 5. SYSTÈMES DE FENÊTRAGE
Chapter 6
Quelques outils
43
44
CHAPTER 6. QUELQUES OUTILS
6.1
man
Manuel en ligne. Essentiel en cas de doute ou pour connaitre les paramètres d’une commande. . .
Les manuels sont organisés en sections. En particulier :
• Section 1 : commandes utilisateur
• Section 2 : appels système
• Section 3 : fonctions des bibliothèques C. Des sous-sections sont définies :
– 3c est consacrée à la bibliothèque C,
– 3m à la bibliothèque mathématique,
– 3n à la bibliothèque réseaux, etc.
Par défaut man ne donne le manuel que de la première section où il trouve la commande cherchée. Dans
le cas où plusieurs entrées ont le même nom, alors il faudra soit spécifier la bonne section (option -s ou
-S, ou bien directement le numéro), soit toutes les passer en revue (option -a).
Existe aussi une version X11 du man : xman.
6.2
La commande info de GNU
La documentation des outils GNU se fait non avec le man (les pages man ne sont plus maintenues à jour)
usuel mais avec l’outil info. Celui-ci permet de se déplacer dans l’arborescence de l’aide GNU, d’effectuer
des recherches, etc.
6.3
find
Sa syntaxe générale est : find chemins expressions
De très nombreuses utilisations sont possibles. Par exemple :
• Liste de fichiers : C’est l’utilisation la plus simple de find. Ainsi :
$ find /etc -print
/etc
/etc/hosts
/etc/csh.cshrc
/etc/exports
/etc/group
/etc/host.conf
/etc/hosts.allow
/etc/hosts.deny
/etc/motd
/etc/passwd
/etc/mtab
/etc/profile
/etc/protocols
/etc/securetty
/etc/services
[...]
La présence de l’option -print est indispensable. Dans le cas contraire, le résultat de la recherche
n’est pas affiché.
• Recherche d’un fichier dans une arborescence :
find repertoire -name nom_fichier_cherche -print
La présence de l’option -print est ici aussi indispensable pour obtenir l’affichage des fichiers trouvés.
45
6.4. CPIO
• Exécuter une commande Unix sur certains fichiers :
Par exemple, pour changer de mode de tous les fichiers d’un répertoire, on utilisera :
find repertoire -exec chmod u+w {} \;
L’option -exec permet d’exécuter une commande Unix classique sur les fichiers sélectionnés par
find. Chaque fichier sélectionné peut être désigné dans la commande par {}. Enfin la commande
doit se finir par un \;.
Pour détruire tous les fichiers core :
find repertoire -name core -print -exec rm {} \;
L’option -print permet d’afficher les fichiers qui sont détruits.
• Créer une archive :
find est souvent utilisée couplée à la commande d’archivage cpio pour créer des archives. Exemple :
find repertoire -print | cpio -ocBd > /dev/rmt0
La raison en est que find produit une liste de fichiers avec leur chemin d’accès complet, chose que
ne permet pas la commande ls. Cette liste désigne alors les fichiers concernés par l’archivage.
6.4
cpio
Permet de créer une archive sur disque (on spécifie un nom de fichier), bande (on spécifie le device de la
bande, en général de la forme /dev/rmt), ou disquette (en général /dev/fd). Comme cpio lit sur son
entrée standard et écrit sur sa sortie standard, il faudra en général redéfinir celles-ci.
cpio -o permet de créer une archive, alors que cpio -i permet de lire une archive.
Exemple :
find . -print | cpio -ocv > /tmp/archive_doc.cpio
crée le fichier d’archive /tmp/archive_doc.cpio contenant tous les fichiers du répertoire courant et en
dessous. L’option c permet d’avoir des entêtes en ASCII afin d’améliorer la portabilité.
cpio -icvd < /tmp/archive_doc.cpio
recopie dans le répertoire courant tous les fichiers de l’archive /tmp/archive_doc.cpio en créant au
besoin les répertoires (option d).
6.5
tar
De même que cpio, tar permet de créer une archive sur disque (on spécifie un nom de fichier dont
l’extension est par convention .tar), bande (on spécifie le device de la bande, en général de la forme
/dev/rmt), ou disquette (en général /dev/fd). tar est plus simple d’emploi car il ne nécessite pas d’être
couplé à cpio.
tar cvf /dev/fd0 .
crée (option c pour “create”) une archive sur disquette à partir de tous les fichiers contenus dans le
repertoire courant et en dessous.
tar tvf /dev/fd0
examine (option t pour “table of contents”) le contenu du fichier d’archive se trouvant sur la disquette.
Aucun fichier n’est extrait !
tar xvf /dev/fd0
extrait (option x pour “extract”) le contenu du fichier d’archive se trouvant sur la disquette et recopie
les fichiers dans le répertoire courant.
La version GNU de tar permet de compresser/décompresser dans la foulée l’archive. Il suffit d’ajouter
l’option “z”. Par convention l’extension d’un tel fichier d’archive est .tgz.
46
CHAPTER 6. QUELQUES OUTILS
6.6
compress/uncompress et gzip
Permettent la compression/décompression de fichiers. Le fichier compressé a par convention l’extension
.Z.
compress fichier
uncompress fichier.Z
On preferrera en général gzip, plus rapide et conduisant à de meilleurs taux de compression que compress.
En revanche il peut ne pas être installé sur toutes les machines (logiciel GNU). Le fichier compressé a
par convention l’extension .gz.
gzip fichier
gzip -d fichier.gz
6.7
L’outil d’archivage/compression zip/unzip
Cet outil, à l’instar de gzip et tar, permet de créer des archives qui sont d’emblée compressées. Le fichier
est par convention nommé .zip. Il s’utilise comme suit :
zip fichier_d_archive.zip fichier
zip -r fichier_d_archive.zip repertoire
Pour décompresser l’archive, on utilisera :
unzip fichier_d_archive.zip
6.8
Les Mtools
Il est possible d’accéder en lecture/écriture à une disquette formattée sous DOS. Pour cela on utilisera
les outils du package mtools :
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
mattrib:
mbadblocks:
mcd:
mcopy:
mdel:
mdeltree:
mdir:
mformat:
minfo:
mlabel:
mmd:
mmount:
mpartition:
mrd:
mmove:
mren:
mtype:
xcopy:
change MS-DOS file attribute flags
tests a floppy disk, and marks the bad blocks in the FAT
change MS-DOS directory
copy MS-DOS files to/from Unix
delete an MS-DOS file
recursively delete an MS-DOS directory
display an MS-DOS directory
add an MS-DOS filesystem to a low-level formatted floppy
get information about an MS-DOS filesystem.
make an MS-DOS volume label
make an MS-DOS subdirectory
mount an MS-DOS disk
create an MS-DOS as a partition
remove an MS-DOS subdirectory
move or rename an MS-DOS file or subdirectory
rename an existing MS-DOS file
display contents of an MS-DOS file
recursively copy a dos directory into another
Très pratique pour échanger des fichiers entre DOS et Unix. Cependant, si l’on désire sauvegarder sur
disquette des fichiers/arborescence Unix, on aura intérêt à utiliser tar ou cpio. En effet, les Mtools
génèrent des problèmes de noms (8+3 caractères, en majuscules) du fait des limitations de DOS.
6.9. BILAN SUR L’UTILISATION DES DISQUETTES
6.9
47
Bilan sur l’utilisation des disquettes
Trois techniques existent donc pour exploiter un support type disquette :
• les mtools qui permettent un accès immédiat et simple à une disquette formattée sous DOS.
• la création d’une archive directement sur la disquette, que ce soit par cpio ou par tar (cf. exemples).
Simple mais une erreur du support magnétique (mauvais bloc) conduira à l’impossibilité d’exploiter
l’archive1 . Il faut donc impérativement contrôler l’archive après création.
• la création et le montage d’un système de fichier UNIX sur la disquette (section 3.1.3). Plus
complexe mais totalement intégré à l’arborescence UNIX.
Ces trois techniques sont donc fortement complémentaires.
6.10
head et tail
Ces commandes permettent respectivement l’affichage des premières et dernières lignes (nombre paramétrable)
d’un fichier.
head -n nombre_de_lignes fichier
6.11
wc
La commande wc (“word count”) permet d’obtenir le nombre de charactères (wc -c fichier), de mots
(wc -w fichier), ou de lignes (wc -l fichier) d’un ou plusieurs fichiers.
6.12
diff
Permet la comparaison de deux fichiers et l’affichage des différences.
$ cat fichier1.txt
Ceci est un fichier de test.
$ cat fichier2.txt
Ceci est un fichier de test different
du premier.
$
$ diff fichier1.txt fichier2.txt
1c1,2
< Ceci est un fichier de test.
--> Ceci est un fichier de test different
> du premier.
La commande rapporte les différences observées entre les deux fichiers et fait des rapports : “c” indique
un changement entre la ligne “1” du premier fichier et les lignes “1 à 2” du deuxième. Suivent précédés
du caractère “<” et/ou “>” les lignes en question. D’autres codes existent : “a” pour indiquer un ajout,
“d” pour indiquer une suppression.
6.13
grep
Permet de faire des recherches de chaines de caractères dans des fichiers. Extremmement utile donc.
$ grep roca /etc/*
/etc/group:invite::200:roca
/etc/group:sirac::50056:roca
/etc/group:ecrins::50057:roca
/etc/passwd:roca:Scs0qsrFixhnz:60164:50056:Vincent Roca:/home/roca:/bin/bash
1 Il
n’y a pas de formattage de bas niveau susceptible de mettre de coté les mauvais blocs.
48
CHAPTER 6. QUELQUES OUTILS
auxquelles s’ajoutent de nombreuses lignes de messages d’erreur (l’utilisateur ne possède pas de droit de
lecture, ou bien il s’agit ’un répertoire, non d’un fichier).
6.14
Editeur vi
Cet éditeur peut sembler compliqué à utiliser, mais il est très puissant (ce qui reste un doux euphémisme),
et de plus a l’avantage considérable de fonctionner sur tous les systèmes, quelle que soit leur origine et le
type d’installation (même les plus élémentaires). Il possède trois modes:
déplacement :
C’est le mode par défaut. Il permet le déplacement à l’aide des touches du curseur sur n’importe
quel caractère de l’écran. On le quitte généralement:
• pour passer en mode d’insertion en tapant i (insertion), a (ajout) ou o (nouvelle ligne). . .
• pour passer en mode de commande en tapant : (commande) ou / (recherche).
commande :
Il permet d’entrer des commandes similaires à celles de ed, l’éditeur ligne d’Unix. On quitte ce
mode en executant la commande spécifiée avec RETURN.
insertion :
Ce mode permet d’entrer des caractères. On y rentre par i a A o O. . . On quitte ce mode avec
ESCAPE (si l’on ne sait plus dans quel mode on se trouve, taper ESCAPE).
En cas de “panne” (crash de la machine, déconnexion brutale, etc.), on pourra récuperer un état très
proche de l’état avant panne grace à l’option : vi -r fichier
On pourra se référer à [1].
Quelques commandes ed utiles sous vi
• Supprimer 8 lignes à partir d’un numéro de ligne donné :
:numero_ligne,numero_ligne+8d
• Idem à partir de la ligne courante :
:.,.+8d
• Supprimer tout le texte depuis la ligne courante jusqu’à la fin du fichier :
:.,$d
• Supprimer la première occurence d’une expression dans tout le texte (par exemple les “> ” ajoutés
par le mail lors d’un forward) :
:1,$s/> //
• Substituer un mot à un autre :
:1,$s/mot_initial/mot_nouveau/g
• Mettre en commentaires (à la mode C++) 8 lignes à partir de la ligne courante :
:.,.+8ds/^/\/\/ /
49
6.15. EDITEUR EMACS
Les options internes de vi
L’éditeur vi possède un certain nombre d’options internes que l’utilisateur peut sélectionner à tout
moment.
On obtient leur liste par : :set all
On active une option par : :set nom_option ou bien :set nom_option=valeur
On supprime une option par : :set no nom_option
Quelques options utiles :
autotindent indentation automatique
number numérotation automatique
Extensions de vi
Des extensions à vi existent :
vim (VI improved) Très puissant, à utiliser absolument (d’ailleurs on n’a pas le choix) lorsque c’est
disponible (e.g. Linux).
gvim Version graphique de vi.
viper C’est le mode émulation vi sous emacs. On dispose de l’interface graphique d’emacs tout en
utilisant les commandes (au moins les principales) de vi.
6.15
Editeur emacs
On se rapportera à [8].
6.16
a2ps
Effectue la mise en page de fichiers texte (listings par exemple) avant impression. Le fichier généré est
un postscript et est envoyé sur la sortie standard.
a2ps fichier.txt > fichier.ps
a2ps -n fichier.txt > fichier.ps
L’option -n demande la numérotation des lignes du fichier.
6.17
ghostview et acroread
L’outil ghostview permet la visualisation de fichiers au format postscript. L’outil gv qui lui a désormais
succédé est beaucoup plus convivial.
L’outil acroread (tm) (“acrobat reader” de la société Adobe) permet la visualisation de fichiers au
format pdf. Un outil similaire dans le domaine public (avec binaire et sources) est xpdf. Il est cependant
beaucoup plus limité. En revanche, créer des documents au format pdf nécessite de disposer de l’outil
commercial Adobe spécifique.
6.18
ping
Permet de tester l’accessibilité (réseau) d’une machine. Il existe deux types d’utilisation :
• Le test d’accessibilité simple. On vérifie qu’une machine peut être atteinte. Ainsi sous Solaris on
utilisera :
$ ping xenon.lip6.fr
xenon.lip6.fr is alive
(dans le cas Solaris)
50
CHAPTER 6. QUELQUES OUTILS
Une réponse positive ne permet pas d’affirmer que la machine est fonctionnelle, simplement qu’elle
est en mesure de communiquer (très précisement qu’elle est accessible par le protocole ICMP).
• La mesure de la qualité de transmission (taux de pertes, temps moyen d’aller-retour). C’est le
défaut sous les systèmes autres que Solaris :
$ ping xenon.lip6.fr
(dans le cas non Solaris)
$ ping -s xenon.lip6.fr
(dans le cas Solaris)
PING xenon.lip6.fr: 56 data bytes
64 bytes from xenon.lip6.fr (192.199.61.33): icmp_seq=0. time=61. ms
64 bytes from xenon.lip6.fr (192.199.61.33): icmp_seq=1. time=47. ms
^C
----xenon.lip6.fr PING Statistics---2 packets transmitted, 2 packets received, 0% packet loss
round-trip (ms) min/avg/max = 47/54/61
6.19
ftp
Voici un résumer des principales commandes disponibles sous la ligne de commande FTP :
help
ls ou dir
bin : Indispensable pour transferer des fichiers non textes. En effet, dans le cas contraire une interprétation des octets transmis est effectuée.
get et put : Rappatrier ou envoyer un fichier. Le nom du fichier doit être complêtement spécifié.
mget et mput : Rappatrier ou envoyer un ou plusieurs fichiers. Utilisation possible du “*”. Par défaut
une confirmation est demandée.
prompt : permet d’éviter la demande de confirmation lors d’un mget ou mput. Très utile lorsque l’on
doit transférer de nombreux fichiers.
hash : demande l’affichage d’un marqueur à chaque bloc (de taille 1024, 4096, etc. suivant les systèmes)
reçu. Cela permet de suivre le bon déroulement du transfert.
FTP permet d’accéder à des serveurs anonymes, c’est-à-dire pour lesquels l’on n’a pas besoin d’avoir un
compte sur la machine serveur. Le login à utiliser est alors “anonymous”, ou ce qui est équivalent (mais
plus rapide à taper) “ftp”. Il est alors d’usage de donner son adresse mail en guise de mot de passe.
6.20
Les commandes “remote”
Cette catégorie regroupe en particulier les commandes :
rsh (“remote shell”) exécution d’un shell à distance.
Syntaxe :
rsh machine commande
rsh machine
rsh se connecte à la machine distante, et y exécute la commande. Les E/S standards sont redéfinies
pour que l’exécution distante apparaisse locale. Si aucune commande n’est spécifiée, alors rsh
effectue un rlogin sur la machine. Il est d’ailleurs souvent utilisé à cette fin.
Exemple :
rsh machine2 ls -l /tmp > contenu.txt
La liste des fichiers sous /tmp de machine2 est envoyée dans le fichier local contenu.txt.
6.21. LE SERVICE DE MESSAGERIE
51
rcp (“remote copy”) copie de fichiers entre machines distantes.
Syntaxe :
rcp [-r] source destination
où source et destination sont soit un fichier ou répertoire local, soit un fichier ou répertoire distant.
Dans ce dernier cas la syntaxe est :
machine:fichier
login@machine:fichier
suivant que l’on a ou non le même nom de login. Aucun mot de passe n’est demandé, ce qui nécessite
que la machine locale soit déclarée dans le fichier $HOME/.rhost distant (voir chapitre 2.
Exemple :
rcp machine2:$HOME/doc/rapport.ps .
rcp fichier.c machine2:$HOME/projet
Des versions sécurisées existent. Elles guarantissent la confidentialité des échanges et en cas d’interception
des paquets par un tiers, ce dernier ne pourra lire les informations qui sont chiffrées (à moins de casser
la clé mais c’est un autre problème). Ces versions sont à privilégier absolument 2 . . .
ssh (“secure shell”)
S’utilise de la même façon que rsh.
scp (“secure copy”)
S’utilise de la même façon que rcp.
6.21
Le service de messagerie
Il fait intervenir :
• des agents de transfert qui acheminent les messages de façon asynchrone. Il s’agit en général de
sendmail dans le monde Unix. Le protocole de transfert de mails est alors SMTP, ou “Simple Mail
Transfer Protocol”.
• des programmes utilisateurs pour la lecture et l’écriture de messages. C’est ce dernier qui accède à
la boite aux lettres de l’utilisateur. On peut citer :
– mail,
– mailx,
– elm,
– pine,
– xmh et exmh,
– netscape,
– emacs.
Certains de ces outils (tel elm) s’utilisent en mode texte ce qui est d’un secours inappréciable lorsque l’on
est connecté à distance et que l’on ne peut exporter le DISPLAY (parce que l’on traverse un firewall par
exemple).
2 Avez vous déja vu transiter votre mot de passe en clair sur le réseau lorsque tcpdump intercepte les paquets d’une
session telnet ? Cela fait froid dans le dos.
52
CHAPTER 6. QUELQUES OUTILS
6.21.1
Format des adresses mail
De nombreux formats d’adresses mail existent. Ils doivent tous être acceptés. Ainsi :
[email protected] Adresse générique à préférer.
[email protected] Adresse simple ne mentionnant que le nom de login.
[email protected] Adresse avec nom de login et machine de login. Ce format est à éviter car il
est trop précis. Il a en revanche l’intéret de fonctionner lorsque l’on n’est connu que dans la machine
et non dans la base lip6.fr (dans ce cas là).
Dans la mesure du possible on se restreindra à l’adresse générique qui fournit le minimum d’informations
(et donc qui a le plus de chance de rester valable longtemps tout en limitant les risques de piratage).
6.21.2
Format des messages
Un courrier est composé de deux parties :
• un corps de message contenant l’information utilisateur, et
• un entête contenant des informations de routage du message (manipulées par le sendmail) et des
information initialisées par l’utilisateur (sujet, destinataire(s), etc.).
Parmis l’entête on trouvera entre autres :
To : le ou les destinataires principaux du message
CC (carbon copy) : personne à qui sera envoyée une copie du message
BCC (blind carbon copy) : idem mais sans que les autres destinataires en soient informés
From : premiere ligne du message, donne l’identité de l’expéditeur, ou le propriétaire de la liste dans le
cas où le message a été envoyé sur une liste.
Sender expéditeur réel du message
6.21.3
Ajout d’une signature
Il est possible de créer un fichier de signature qui sera ensuite automatiquement inséré à la fin des mails.
Il s’agit en général de $HOME/.signature (vérifier sur la configuration du mailer).
6.21.4
Transférer des fichiers binaires avec uuencode/uudecode
Le service de messagerie a certaines limites, et en particulier les données sont des caractères ASCII sur 7
bits. Les longueurs de lignes sont elles aussi limitées. Le service de messagerie tel quel est donc inadapté
à l’envoi de données binaires (exécutable ou fichier compressé par exemple).
NB : les mailers évolués (e.g. netscape Communicator) gèrent automatiquement l’encodage/décodage
(voir MIME ci-dessous).
Encodage et transfert
La transformation binaire vers ASCII 7 bits se fait sous le shell par :
uuencode fichier_bin_source fichier_apres_decodage > fichier_uuencode
Le premier paramêtre est le fichier binaire source. Le deuxième est le nom du fichier a créer apres
réception et décodage par le destinataire du courrier. Enfin comme uuencode envoie le fichier encodé sur
la sortie standard, il faut rediriger celle-ci dans un fichier.
On peut alors transferer le fichier fichier_uuencode par mail.
6.22. LE DÉBUGGER GDB ET SES EXTENSIONS XXGDB ET DDD
53
Décodage après réception
Après réception du message, il faut l’éditer afin de supprimer les entêtes du mails et éventuels commentaires ajoutés par l’emetteur.
Le retour au fichier binaire se fait alors par :
uudecode fichier_uuencode
Un fichier binaire de nom celui précisé lors de l’encodage (fichier_apres_decodage) est alors crée.
6.21.5
Les extensions du service de messagerie
Il s’agit de :
ESMTP (Extended SMTP)
MIME (Multipurpose Internet Mail Extensions) : apporte une forte structuration du corps du message
en spécifiant la nature des données transportées : texte, images, audio, video au format MPEG,
multiparties, message pour encapsuler un autre message application pour tout le reste. L’encodage
des données peut lui aussi être spécifié : 7 bits, 8 bits, binaire, hors ASCII 7 bits (ou “quoted
printable”), en base 64. Ceci sera le plus souvent automatiquement géré par le mailer (notion de
document attaché).
6.21.6
Les messages de taille (très) importante
Certains agents de transferts sont configurés pour réagir d’une certaine façon aux messages de taille
importante (de l’ordre du Méga-octet et au dessus). Celà peut consister :
• en un découpage du message en fragments de taille réduite,
• en une troncature du message (le plus courant), voir
• en le refus pur et simple du message.
On utilisera avec avantage un outil de compression dans la cas d’un fichier important. Il faudra alors :
compresser le fichier, puis uuencoder le fichier compressé. Après réception du message la démarche
inverse devra être adoptée : décodage puis décompression. On pourra également utliiser un utilitaire de
découpage de fichier.
6.22
Le débugger gdb et ses extensions xxgdb et ddd
TO DO. . .
6.23
LATEX: un outil de formatage de documents
En dépit de son aspect vieillot et peu convivial, cet outil (libre) permet de créer des documents de qualité
professionelle (de nombreux éditeurs imposent son utilisation) sous de nombreux systèmes. Il s’agit en
fait d’un ensemble d’outils et de “packages” qui permettent d’écrire des documents en mode texte (donc
avec votre éditeur de texte préferé) en spécifiant manuellement les instructions de formatage (c’est là que
c’est un peu compliqué puisqu’il s’agit par exemple de savoir que \emph{mon texte} permet de mettre
en exergue le bloc : mon texte.
Une fois le texte saisi, on doit “compiler” (et oui :-) le fichier d’extension .tex avec :
latex fichier.tex
Cette commande va générer, s’il n’y a pas d’erreur grave, un fichier d’extension .dvi qui peut être
visualisé par :
xdvi fichier.dvi
On peut aussi, à partir du fichier .dvi générer un fichier postscript par :
54
CHAPTER 6. QUELQUES OUTILS
dvips fichier.dvi -o fichier.ps
Utiliser LATEXn’est donc pas abérent, même si par ailleurs des traitements de textes WYSIWYG reluisants
existent. Un apprentissage progressif des possibilités de LATEXvous permettra d’arriver facilement à des
résultats de qualité irréprochable, surtout si vous restez proche de la présentation “standard” (et sans
criser parce que ce @#!* de @}[! a encore planté). Le présent document (ainsi que la plupart de ceux
cités en bibliographie ont été réalisés sous LATEX. Pour en savoir plus. . . [7].
Bibliography
[1] S. Bourne, “Le système Unix”, InterÉditions, ISBN 2-7296-0014-0, 1991.
[2] T. Besançon, P. David, J. Marchand, “Administration système Unix (version 2.0)”,
ftp://ftp.lps.ens.fr/pub/users/besancon/cookbook/2.0/, 1er avril 1996. Ce document (trés volumineux) n’est en aucun cas un guide d’introduction à Unix mais certaines sections pourront cependant être lues avec intéret.
[3] B.
Cassagne,
“Le
Bourne
shell
(sh)”,
Institut
IMAG,
Grenoble,
ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/SHELL/Bourne.Shell.ps, septembre 1991. Document très sérieux et didactique sur l’utilisation du shell historique. Un must à posséder absolument !
[4] P. Dax,
“Le Shell :
notes
mlv.fr/ dr/COURS/shell.html, 1997.
de
cours”,
ENST,
Paris,
http://massena.univ-
[5] P. Dubois, “Using csh and tcsh”, O’Reilley and Associates, Inc., ISBN 1-56592-132-1, août 1997.
[6] JF.
Pujol,
“Guide
du
KornShell
sous
UNIX”,
Institut
IMAG,
ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/SHELL/Korn.Shell.ps, août 1993.
Grenoble,
[7] Christian Rolland, “LATEXpar la pratique”, Éditions O’Reilly, 1ère édition, ISBN 2-84177-073-7,
octobre 1999. Une des trés nombreuses références sur LATEX.
[8] M. Schaefer, “Courte information sur le système Unix et les réseaux informatiques”, Alphanet NF, http://www.pasteur.fr/other/computer/unix/unixguide.html, ou bien ftp://ftp.univlyon1.fr/pub/doc/francais/unixguide/2.123/, août 1995. Ce guide, qui a les mêmes objectifs que
le présent document, pourra être consulté avec intéret (il m’a d’ailleurs servi de base pour certains
aspects :-) Il reste cependant assez confus dans son organisation.
[9] R. Stallman, “GNU’s Not Unix!” http://www.fsf.org/, 1999.
[10] On trouvera de nombreuses documentations système, langage, outils sur le site de l’IMAG :
ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/, A aller voir absolument. . .
Le présent guide a très largement bénéficié (et s’est souvent inspiré) des ouvrages et documents précédents. Que leurs auteurs respectifs en soient vivement, vivement, remerciés.
Un grand merci également à Le Hong Ly pour sa relecture.
55