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: 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à. 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 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.