ABC d'Unix
Revision: 2.3
Christian Queinnec
Université Paris 6 --- Pierre et Marie Curie
LIP6, 4 place Jussieu, 75252 Paris Cedex
France -- Email: Christian.Queinnec@lip6.fr
Cet ouvrage a été réalisé dans le cadre d'un cours professé à l'École
Nationale Supérieure des Techniques Avancées vers 1984-1986. Il a été
édité chez Eyrolles en 1985 mais est, depuis longtemps, introuvable.
Il recouvre maintenant une seconde jeunesse, sur le réseau, et, bien
sûr, sur le cédérom VideoC. Il était initialement écrit en nroff, je
l'ai converti en LATEX (avec un script en Perl et des flopées de
macros Emacs). J'ai également corrigé quelques fautes d'orthographe et
tenté de récupérer les dessins originellement créés en MacPaint. Le
processus de traduction a dû introduire de nouvelles erreurs que votre
sagacité réactive ne manquera pas de me signaler.
Tout cela a un petit goût des années 1980 (j'ai cependant supprimé
deux annexes particulièrement obsolètes) mais comme la connaissance
de sh n'a pas vraiment percé depuis, ce petit ouvrage a
encore de l'avenir.
Cette nouvelle version est placée sous la licence OPL (pour
OpenContent License dont le texte est disponible en
http://www.opencontent.org/opl.shtml). Ce livre est
également disponible sur le réseau en
http://www-spi.lip6.fr/~queinnec/WWW/VideoC/.
Paris 1985 --- Paris 1999.
Chapitre 1 : Prologue
UNIX est un système de production de programme. Il a lui-même profité
de ses nombreuses qualités aussi est-il remarquablement documenté.
Toutefois cette documentation, que plus de dix années d'utilisation
ont largement éprouvée, peut, à première vue, souffrir de deux défauts:
-
Elle est en américain ;
-
Elle est extrêmement concise ! Tout y est dit, rien n'y est répété et
tout ce qui est omis est, en général, faux !!!
Afin de n'être ni une pâle traduction ni une logorrhéïque paraphrase,
nous avons pris le parti de ne présenter que les éléments qui vous
permettront de pénétrer de plein pied dans le monde d'essaiera-t'on de dégager les principaux concepts de sa
philosophie afin que se cristallise en votre esprit un modèle
adéquat de ce merveilleux système. L'essence occulte les détails et
seuls ceux caractéristiques d'UNIX trouveront ici place. Ne cherchez
donc pas tout dans cet ouvrage ! Les réponses à vos questions se
trouvent
dans la documentation complète
UNIX Programmer's Manual, Volume 1 et suivants
qui existe probablement en de nombreux exemplaires dans votre
bibliothèque ou dans les parages de votre centre de calcul. Si vos
besoins vous l'imposent, exigez la !!! S'en priver serait en effet
vous exposer à des travaux fastidieux et superflus. L'apprentissage
efficace d'un programme, quelqu'il soit et aussi soigné soit-il, ne
saurait s'acquérir sans documentation ; si quelques essais relatifs à
un objet précis lèvent un doute, ils ne peuvent à eux seuls la
remplacer.
L'ouvrage abordera successivement les objets d'UNIX, les principales
commandes (mais sans détailler leurs multiples options : consulter
pour cela la documentation de référence), le système de gestion des
fichiers et enfin l'interface avec l'utilisateur qui nous a toujours
semblé négligée dans ce genre d'ouvrage, qui est un exemple
intéressant du concept des couches logicielles et qui, enfin, est
responsable de tant de déboires et d'incompréhension dans le maniement
d'UNIX.
UNIX est un tout que ce livre s'efforce de présenter linéairement.
Certains détails ou exemples ne se laisseront comprendre qu'après une
assimilation superficielle de l'ensemble. Ils ont néammoins été
inclus car de nombreux points d'UNIX sont classiques parmi les
systèmes d'exploitation et un exemple d'emploi renseigne alors plus
que de verbeuses explications. Ils constituent autant de prétextes à
une exploration plus approfondie, voire même plus expérimentale, du
manuel de référence, du système d'exploitation et de ses utilitaires.
Chapitre 2 : Rudiments
UNIX est né au début des années 1970, créé par Ken THOMPSON et Dennis
RITCHIE. Quoique donc déjà assez vieux, ses qualités le font
considérer comme moderne. Il lui aura fallu près de dix ans pour
qu'il se répande dans toutes les industries du Nouveau et de l'Ancien
Monde. UNIX est maintenant un standard de facto : c'est le système le
plus reproduit au monde (en nombre d'incarnations sur différents types
d'ordinateurs). Il est considéré comme
LE système, par excellence, de développement de programmes.
Le terme UNIX possède plusieurs significations complémentaires mais
ne saurait se borner à l'une de celles là.
-
C'est tout d'abord un système d'exploitation multitâches et
multi-utilisateurs conçu pour miniordinateurs.
-
C'est une large collection de programmes utiles (des « utilitaires »
au plein sens du terme) obtenu par sélection quasi-naturelle (des
statistiques d'emploi ont permis d'écarter les programmes boudés des
utilisateurs. Par ailleurs, avant de vous lancer dans la
programmation spécifique d'un outil logiciel quelconque, relisez la
documentation : il y a peu d'outils généraux qu'UNIX ne procure pas
sous une forme ou une autre !)
-
C'est enfin, parmi ces derniers, des interprètes de commandes (*sh).
UNIX est très lié au langage C qui a servi à sa programmation
quasi-complète. La seule existence d'un compilateur C sur une machine
permet d'envisager sereinement le transport entier d' UNIX sur cette
même machine : l'effort est donc réduit, ce qui incite de nombreux
constructeurs à n'offrir qu' UNIX comme système d'exploitation.
Un système d'exploitation est un logiciel capable de mettre en
oeuvre un ordinateur et ses
périphériques pour y créer, exécuter, manipuler et archiver des
programmes ou des données. UNIX est multitâches : il est capable de
mener de front plusieurs tâches à la fois, c'est-à-dire d'exécuter
plusieurs programmes en quasi-simultanéité pour les utilisateurs (qui
n'ont du temps qu'une perception imprécise) mais séquentiellement,
pour lui, pendant de courts laps de temps de l'ordre d'une fraction de
seconde.
Le noyau (ou coeur d') UNIX, ainsi nomme-t'on cette partie réduite
au seul système d'exploitation, peut être considéré comme un ensemble
de sous-programmes fortement liés répondant à diverses
fonctionnalités. Les « UNIX-like » ne sont que des noyaux différents
procurant des interfaces d'appels plus ou moins équivalentes.
Chapitre 3 : Système de fichiers
Le système de gestion de fichiers d'UNIX
est arborescent.
Il se compose
-
d'une racine (généralement dessinée en haut) et nommée,
en anglais
root quoique orthographiée
/
-
de branches ou répertoires ou encore catalogues (directory)
-
de feuilles ou fichiers (file).
Par exemple,
La même chose vue sous une forme véritablement arborescente :
les systèmes classiques associent, en général, un répertoire à
chaque support physique, ce répertoire contient la liste de tous les
fichiers présents sur le support.
Sous UNIX, cette notion a été généralisée puisqu'un répertoire est
un agrégat de fichiers ou de répertoires.
Par exemple
/ u bin usr ucb
sont des répertoires,
more sh termcap passwd
sont des fichiers.
Un arbre est un exemple de structure hiérarchisée.
L'intérêt en est de pouvoir regrouper ses fichiers par thèmes
(un même langage, un même problème, un même utilisateur ...)
et ainsi combattre l'inflation horizontale où un nombre important
de fichiers coexistent sans rapport aucun.
En outre certaines commandes permettent de facilement manipuler des groupes
entiers de fichiers (cf. expansion) et donc d'aisément entretenir son
arborescence personnelle.
Par exemple
mv /u/queinnec /usr
taille la branche
/u/queinnec et la greffe sur
/usr.
Les fichiers normaux sont des suites d'octets éventuellement vides.
Les répertoires sont des fichiers un peu particulier contenant
les noms de leurs branches ou feuilles ainsi qu'un numéro (inode)
permettant de les localiser sur le support physique. Les fichiers
spéciaux servent d'interface avec l'extérieur et sont usuellement
regroupés dans le répertoire
/dev (comme device).
Chapitre 4 : Éditeur de textes
Un éditeur de textes (piètre traduction de
text editor)
est un programme permettant la manipulation de textes, c'est-à-dire l'ajout,
la modification, la suppression, le déplacement
de chaines de caractères ...Ce manuel a, par exemple, entièrement été saisi au moyen d'un éditeur de textes.
C'est un très important programme puisqu'un programmeur passe le plus clair
de son temps devant (plus de 75
Les éditeurs se partagent en trois classes suivant la vision qu'ils offrent
du texte édité
ligne |
(unidimensionnel) |
écran ou pleine page |
(bidimensionnel) |
multifenêtre |
(tridimensionnel) |
Les plus anciens (par exemple
ed)
sont du premier type.
Les interactions se font principalement au sein d'une ligne sur laquelle
on est positionné.
On n'a jamais qu'une vision toujours partielle du texte édité et le
plus souvent restreinte à une seule ligne.
Les nouveaux (vi,
screen,
emacs...)
sont dits « pleine page ».
Ils obéissent au grand principe suivant : On ne voit sur l'écran
que ce qui se trouve dans le texte édité, toute modification apportée au
texte est donc immédiatement visualisée sur l'écran.
On développe par là même une édition de textes par essais/erreurs et donc
un apprentissage aisé puisque l'on perçoit toujours ce que l'on altère.
vi est l'éditeur classique d'UNIX,
emin
est une version d'emacs réalisée en France par G.Berry
(Ecole des Mines, Sophia-Antipolis).
emacs est un merveilleux éditeur distribué sur de nombreuses machines et sous
de nombreux systèmes (DEC, HIS ...)
La troisième classe procure la possibilité de scinder l'écran physique en
de multiples fenêtres (emacs,
winnie
(winnie est dû à P.Amar (Non Standard Logic).)
...)
permettant ainsi de nombreuses vues simultanées sur plusieurs textes.
Il est alors courant d'avoir le texte à mettre au point dans une fenêtre,
sa compilation dans une seconde, et sa mise au point dans une troisième,
enfin, de virevolter de l'une à l'autre suivant les problèmes.
Chapitre 5 : Interface
L'interface entre machine et utilisatrice/teur est supposé constituée
d'un clavier et d'un écran (c'est maintenant la combinaison la plus
courante).
Le clavier sert à émettre des caractères vers la machine, l'écran
visualise les réponses.
Les chapitres précédents ont montré comment les tâches pouvaient
requérir des flux en entrée et comment l'on pouvait détourner des flux de
sortie vers l'écran.
Clavier et écran sont connus comme étant le fichier spécial
/dev/tty.
En fait, tout caractère frappé au clavier n'est pas nécessairement
transmis à la tâche le requérant.
S'intercale en effet, entre clavier et tâches, une interface interprétant
tous les caractères entrant et sortant.
Certains caractères particuliers provoquent des traitements au niveau de
l'interface tandis que les autres sont seulement transmis.
Une commande (stty
pour Set TeleTYpe)
et des appels au noyau
UNIX
(ioctl
pour Input/Output ConTroL)
permettent de gérer cette interface.
L'interface, aussi appelée
handler,
est le programme le plus proche (au sens physique) du couple clavier-écran.
Ce n'est pas une tâche et les caractères qu'elle reçoit directement du
clavier ou émet non moins directement sur l'écran ne forment pas des flux.
Ce n'est au sens d'UNIX,
qu'un fichier spécial :
/dev/tty.
Ce fichier est « doublement » spécial puisque, bien que son nom soit unique,
il désigne pour toute utilisatrice/teur son propre couple clavier-écran.
Chapitre 6 : Presque le fin mot !
Le but de ce chapitre est de vous permettre d'appréhender
l'essence des tâches.
Il ne constitue ni une introduction à C (cf. bibliographie), ni un exposé
des parties 2 et 3 du Manuel
UNIX
(appels systèmes et librairies d'utilitaires).
Les appels que nous détaillerons sont
fork,
exec et
pipe.
Ces trois appels sont les primitives les plus originales d'UNIX.
Annexe A : Bibliographie
P. Amar
Winnie manuel de Référence,
LRI Orsay, 1983
M.F. Banahan, A. Ruther
UNIX the book,
Sigma Technical Press, 1982
S.R. Bourne
The UNIX System,
Addison-Wesley, 1982
J. Chailloux
Le_Lisp de l'INRIA, Le Manuel de Référence,
1985
K.Christian
The UNIX Operating System,
Wiley Interscience, John Wiley and Sons, 1983
???. Dax
Le langage C,
Eyrolles, 1984
???. Drappier, ???. Mauffrey
C par l'exemple,
Eyrolles, 1984
A.R. Feuer
The C Puzzle Book,
Prentice-Hall Software Series, 1978
B.W. Kernighan, R. Pike
The UNIX Programming Environnement,
Prentice-Hall Software Series, 1984
B.W. Kernighan, D.M. Ritchie
The C Programming Language,
Prentice-Hall Software Series, 1978
D.M. Ritchie, K. Thompson
The UNIX Time-Sharing System,
Bell System Technical Journal, Vol 57, #6, pp1905-1929, 1978
R.Thomas, J.Yates
A User Guide to the UNIX System,
Osborne/McGrawHill, 1982
Votre marchand d'ordinateur ...
UNIX Programmer's Manual, Vol 1
Annexe B : L'alphabet ASCII
Octal Hexadécimal Code
Décimal Représentation Nom
0 0 0 ^@ NUL Null
1 1 1 ^A SOH Start Of Heading
2 2 2 ^B STX Start Of Text
3 3 3 ^C ETX End Of Text
4 4 4 ^D EOT End Of Transmission
5 5 5 ^E ENQ Enquiry (Who are you ?)
6 6 6 ^F ACK Acknowledge
7 7 7 ^G BEL Bell
10 8 8 ^H BS Backspace
11 9 9 ^I HT Horizontal Tabulation
12 10 A ^J LF Line Feed
13 11 B ^K VT Vertical Tabulation
14 12 C ^L FF Form Feed
15 13 D ^M CR Carriage Return
16 14 E ^N SO Shift Out
17 15 F ^O SI Shift In
20 16 10 ^P DLE Data Link Escape
21 17 11 ^Q DC1 Device Control 1
22 18 12 ^R DC2 Device Control 2
23 19 13 ^S DC3 Device Control 3
24 20 14 ^T DC4 Device Control 4
25 21 15 ^U NAK Negative Acknowledge
26 22 16 ^V SYN Synchronous idle
27 23 17 ^W ETB End of Transmission Block
30 24 18 ^X CAN Cancel previous data
31 25 19 ^Y EM End of Medium
32 26 1A ^Z SUB Substitute character
33 27 1B ^[ ESC Escape
34 28 1C ^\ FS File Separator
35 29 1D ^] GS Group Separator
36 30 1E ^^ RS Record Separator
37 31 1F ^_ US Unit Separator
40 32 20 SP Space
177 127 7F ^? DEL Delete
Octal Décimal Hexa Lettre Octal Décimal Hexa Lettre
40 32 20 SP 120 80 50 P
41 33 21 ! 121 81 51 Q
42 34 22 " 122 82 52 R
43 35 23 # 123 83 53 S
44 36 24 $ 124 84 54 T
45 37 25 % 125 85 55 U
46 38 26 & 126 86 56 V
47 39 27 ' 127 87 57 W
50 40 28 ( 130 88 58 X
51 41 29 ) 131 89 59 Y
52 42 2A * 132 90 5A Z
53 43 2B + 133 91 5B [
54 44 2C , 134 92 5C \
55 45 2D - 135 93 5D ]
56 46 2E . 136 94 5E ^
57 47 2F / 137 95 5F _
60 48 30 0 140 96 60 `
61 49 31 1 141 97 61 a
62 50 32 2 142 98 62 b
63 51 33 3 143 99 63 c
64 52 34 4 144 100 64 d
65 53 35 5 145 101 65 e
66 54 36 6 146 102 66 f
67 55 37 7 147 103 67 g
70 56 38 8 150 104 68 h
71 57 39 9 151 105 69 i
72 58 3A : 152 106 6A j
73 59 3B ; 153 107 6B k
74 60 3C < 154 108 6C l
75 61 3D = 155 109 6D m
76 62 3E > 156 110 6E n
77 63 3F ? 157 111 6F o
100 64 40 @ 160 112 70 p
101 65 41 A 161 113 71 q
102 66 42 B 162 114 72 r
103 67 43 C 163 115 73 s
104 68 44 D 164 116 74 t
105 69 45 E 165 117 75 u
106 70 46 F 166 118 76 v
107 71 47 G 167 119 77 w
110 72 48 H 170 120 78 x
111 73 49 I 171 121 79 y
112 74 4A J 172 122 7A z
113 75 4B K 173 123 7B {
114 76 4C L 174 124 7C |
115 77 4D M 175 125 7D }
116 78 4E N 176 126 7E ~
117 79 4F O 177 127 7F DEL
Ce document a été traduit de LATEX par
HEVEA et HACHA.