Docstoc

shell-unix

Document Sample
shell-unix Powered By Docstoc
					                                     ii                                                                                       TABLE DES MATI RE




                                     Table des mati res
Universit de Nice Sophia-Antipolis
                                     Pr sentation du polycopi                                                                                                                 i

                                     I Connaissances de base
                                     1 G n ralit s sur Unix
             Unix                         1.1
                                          1.2
                                          1.3
                                              Syst mes d'exploitation . . . .
                                              Historique . . . . . . . . . . .
                                              Standards et versions d'Unix .
                                                                                 ....
                                                                                 ....
                                                                                 ....
                                                                                          .
                                                                                          .
                                                                                          .
                                                                                              .
                                                                                              .
                                                                                              .
                                                                                                  .
                                                                                                  .
                                                                                                  .
                                                                                                      .
                                                                                                      .
                                                                                                      .
                                                                                                          .
                                                                                                          .
                                                                                                          .
                                                                                                              .
                                                                                                              .
                                                                                                              .
                                                                                                                  .
                                                                                                                  .
                                                                                                                  .
                                                                                                                      .
                                                                                                                      .
                                                                                                                      .
                                                                                                                          .
                                                                                                                          .
                                                                                                                          .
                                                                                                                              .
                                                                                                                              .
                                                                                                                              .
                                                                                                                                  .
                                                                                                                                  .
                                                                                                                                  .
                                                                                                                                      .
                                                                                                                                      .
                                                                                                                                      .
                                                                                                                                          .
                                                                                                                                          .
                                                                                                                                          .
                                                                                                                                              .
                                                                                                                                              .
                                                                                                                                              .
                                                                                                                                                  .
                                                                                                                                                  .
                                                                                                                                                  .
                                                                                                                                                      .
                                                                                                                                                      .
                                                                                                                                                      .
                                                                                                                                                          .
                                                                                                                                                          .
                                                                                                                                                          .
                                                                                                                                                              .
                                                                                                                                                              .
                                                                                                                                                              .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                          1.4 Propri t s d'Unix . . . . . . .    ....     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
                et                        1.5 Structure d'Unix . . . . . . .
                                              1.5.1 Noyau . . . . . . . . .
                                              1.5.2 Shell . . . . . . . . . .
                                                                                 ....
                                                                                 ....
                                                                                 ....
                                                                                          .
                                                                                          .
                                                                                          .
                                                                                              .
                                                                                              .
                                                                                              .
                                                                                                  .
                                                                                                  .
                                                                                                  .
                                                                                                      .
                                                                                                      .
                                                                                                      .
                                                                                                          .
                                                                                                          .
                                                                                                          .
                                                                                                              .
                                                                                                              .
                                                                                                              .
                                                                                                                  .
                                                                                                                  .
                                                                                                                  .
                                                                                                                      .
                                                                                                                      .
                                                                                                                      .
                                                                                                                          .
                                                                                                                          .
                                                                                                                          .
                                                                                                                              .
                                                                                                                              .
                                                                                                                              .
                                                                                                                                  .
                                                                                                                                  .
                                                                                                                                  .
                                                                                                                                      .
                                                                                                                                      .
                                                                                                                                      .
                                                                                                                                          .
                                                                                                                                          .
                                                                                                                                          .
                                                                                                                                              .
                                                                                                                                              .
                                                                                                                                              .
                                                                                                                                                  .
                                                                                                                                                  .
                                                                                                                                                  .
                                                                                                                                                      .
                                                                                                                                                      .
                                                                                                                                                      .
                                                                                                                                                          .
                                                                                                                                                          .
                                                                                                                                                          .
                                                                                                                                                              .
                                                                                                                                                              .
                                                                                                                                                              .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                          1.6 Organisation des syst mes de       chiers   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
programmation du shell                        1.6.1 Syst me de chiers . .
                                              1.6.2 Types de chiers . . .
                                                                                 ....
                                                                                 ....
                                                                                          .
                                                                                          .
                                                                                              .
                                                                                              .
                                                                                                  .
                                                                                                  .
                                                                                                      .
                                                                                                      .
                                                                                                          .
                                                                                                          .
                                                                                                              .
                                                                                                              .
                                                                                                                  .
                                                                                                                  .
                                                                                                                      .
                                                                                                                      .
                                                                                                                          .
                                                                                                                          .
                                                                                                                              .
                                                                                                                              .
                                                                                                                                  .
                                                                                                                                  .
                                                                                                                                      .
                                                                                                                                      .
                                                                                                                                          .
                                                                                                                                          .
                                                                                                                                              .
                                                                                                                                              .
                                                                                                                                                  .
                                                                                                                                                  .
                                                                                                                                                      .
                                                                                                                                                      .
                                                                                                                                                          .
                                                                                                                                                          .
                                                                                                                                                              .
                                                                                                                                                              .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                     2 Acteurs/objets du monde Unix
                                          2.1 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        .   .   .
           Version 3.0                        2.1.1 Un utilisateur dans le syst me . . . . . . . . . . . . . . . . . .                                            .   .   .
                                              2.1.2 Super-utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . .                                          .   .   .   1
                                              2.1.3 Administrateur du syst me . . . . . . . . . . . . . . . . . . . .                                             .   .   .   1
          Richard Grin                    2.2 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                                              2.2.1 Signaux envoy s aux processus . . . . . . . . . . . . . . . . . .
                                                                                                                                                                  .
                                                                                                                                                                  .
                                                                                                                                                                      .
                                                                                                                                                                      .
                                                                                                                                                                          .
                                                                                                                                                                          .
                                                                                                                                                                              1
                                                                                                                                                                              1
                                              2.2.2 Terminal de contr le d'un processus, ex cution en arri re-plan                                                .   .   .   1
           31 juillet 1998                    2.2.3 Propri taires et groupes e ectifs et r els d'un processus . . . .                                             .   .   .   1
                                              2.2.4 Cr ation d'un nouveau processus, arbre des processus . . . . .                                                .   .   .   1
                                          2.3 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        .   .   .   1
                                              2.3.1 i-node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                          .   .   .   1
                                              2.3.2 Structure interne des r pertoires . . . . . . . . . . . . . . . . .                                           .   .   .   1
                                              2.3.3 Propri taire et groupe d'un chier . . . . . . . . . . . . . . . .                                             .   .   .   1
                                              2.3.4 Mode d'acc s au chier . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   1
                                          2.4 Protection des chiers . . . . . . . . . . . . . . . . . . . . . . . . . .                                           .   .   .   1
TABLE DES MATI RES                                                                                           iii   iv                                                                   TABLE DES MATI RE
       2.4.1 Droits associ s aux autorisations . . . . . . . . . . . . . . . . . . .                         16    6 Commandes d'observation du syst me                                                                             3
       2.4.2 Autorisations set user id et set group id . . . . . . . . . . . . . .                           16         6.1 Date et Heure (date) . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   3
       2.4.3 M canisme de protection des chiers . . . . . . . . . . . . . . . . .                            17         6.2 Nom de l'ordinateur (hostname) . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   3
                                                                                                                        6.3 Nom du syst me d'exploitation (uname) . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   3
3 Premiers pas dans le syst me                                                                               18         6.4 Information sur les utilisateurs (who, nger) . . . . . . .      .   .   .   .   .   .   .   .   .   .   3
  3.1 Entr e dans le syst me . . . . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   18         6.5 Derni res connexions au syst me (last) . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   3
      3.1.1 Changer son mot de passe (passwd) . . . . . . . . . . . .                .   .   .   .   .   .   18         6.6 Syst me Network Information Service (NIS) . . . . . .           .   .   .   .   .   .   .   .   .   .   3
      3.1.2 D marrage d'une session . . . . . . . . . . . . . . . . . .              .   .   .   .   .   .   19         6.7 Espace disque occup . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   3
  3.2 Sortie du syst me . . . . . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   19
  3.3 Touches sp ciales . . . . . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   19             6.7.1 Place occup e par la branche d'un r pertoire (du)         .   .   .   .   .   .   .   .   .   .   3
  3.4 Format des commandes Unix . . . . . . . . . . . . . . . . . . . .              .   .   .   .   .   .   20             6.7.2 Place libre d'un syst me de chiers (df) . . . . . .       .   .   .   .   .   .   .   .   .   .   3
  3.5 Consultation du manuel en ligne (man) . . . . . . . . . . . . . .              .   .   .   .   .   .   21         6.8 Nom du terminal utilis (tty) . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   3
  3.6 Nom d'un chier, nom absolu, nom relatif . . . . . . . . . . . .                .   .   .   .   .   .   22
  3.7 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   22    7 Commandes pour la gestion des processus                                                                        4
      3.7.1 Lancer une commande, supprimer un processus . . . . .                    .   .   .   .   .   .   22         7.1   Processus en cours d'ex cution (ps) . . . . . . . . . . . . . . . . . . . . . .                       4
      3.7.2 Nom d'une commande, variable PATH . . . . . . . . . .                    .   .   .   .   .   .   22         7.2   Supprimer un processus en cours d'ex cution (kill) . . . . . . . . . . . . . .                        4
      3.7.3 Nom complet et type d'une commande (whence, whereis)                     .   .   .   .   .   .   23         7.3   Lancement automatique de processus des moments donn s (at, crontab) .                                 4
      3.7.4 Compl tion des commandes par zsh . . . . . . . . . . . .                 .   .   .   .   .   .   24         7.4   Gestion du plan d'un processus par le shell . . . . . . . . . . . . . . . . . .                       4
                                                                                                                   8 A cher, imprimer, envoyer le contenu d'un chier                                                                4
II Commandes                                                                                                 25         8.1 A cher le contenu d'un chier, concat ner plusieurs chiers (cat) - Notion
                                                                                                                            de redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      4
4 Commandes li es l'arborescence des chiers                                                                  27         8.2 A cher les octets d'un chier (od) . . . . . . . . . . . . . . . . . . . . . .                           4
  4.1 Visualisation de l'arborescence (ls) . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   27         8.3 A cher page page (more) - Notion de pipe . . . . . . . . . . . . . . . . .                              4
  4.2 Information d taill e sur les chiers (ls -l) . . . . . . . .   .   .   .   .   .   .   .   .   .   .   28         8.4 Sorties sur les imprimantes . . . . . . . . . . . . . . . . . . . . . . . . . . .                       4
      4.2.1 Format d'a chage . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   28             8.4.1 Informations sur le syst me d'impression (lpstat, printcap) . . . . .                             4
      4.2.2 Types de chiers . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   29             8.4.2 Lancement d'une requ te d'impression (lpr) . . . . . . . . . . . . .                              4
      4.2.3 Mode d'acc s au chier . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   29             8.4.3 Informations sur les requ tes d'impression (lpq) . . . . . . . . . . .                            4
      4.2.4 Nombre de liens . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   30             8.4.4 Suppressions de requ tes d'impression (lprm, cancel) . . . . . . . .                              4
  4.3 Se d placer dans l'arborescence (cd) . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   30         8.5 Envoyer le contenu d'un chier (mail) . . . . . . . . . . . . . . . . . . . . .                          4
  4.4 A cher le r pertoire courant (pwd) . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   30         8.6 Mise en page (pr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       4
  4.5 Caract res sp ciaux pour le shell . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   30
      4.5.1 G n ration des noms de chiers (*,?, ) . . . . . .        .   .   .   .   .   .   .   .   .   .   30         8.7 Passer en Postscript (a2ps) . . . . . . . . . . . . . . . . . . . . . . . . . . .                       4
      4.5.2 Le caract re sp cial . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   31    9 Gestion des chiers                                                                                             5
      4.5.3 Le caract re sp cial # . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   32         9.1   Copier des chiers (cp) . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   5
      4.5.4 Autres caract res sp ciaux . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   32
  4.6 A cher le type d'un chier ( le) . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   32         9.2   Liens avec m me num ro de i-node (ln) . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   5
  4.7 Rechercher des chiers dans l'arborescence ( nd, locate)        .   .   .   .   .   .   .   .   .   .   32         9.3   Liens symboliques (ln -s) . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   5
                                                                                                                        9.4   Supprimer des chiers (rm) . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   5
5 Protection des chiers                                                                                      35         9.5   D placer, renommer des chiers (mv) . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   5
  5.1 Changement des autorisations (chmod) . . . . . . . . . . . . . . . . . . . .                           35         9.6   Sauvegarder sur les lecteurs de disquettes des stations Sun       .   .   .   .   .   .   .   .   .   5
  5.2 Masque pour les autorisations (umask) . . . . . . . . . . . . . . . . . . . .                          36         9.7   Compression et d compression (zip, gzip, compress) . . . .        .   .   .   .   .   .   .   .   .   5
TABLE DES MATI RES                                                                                                                v   vi                                                                     TABLE DES MATI RE
10 Travail sur les r pertoires                                                                                                   55             13.9.1 Description g n rale de l' diteur . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   8
   10.1   Cr er un r pertoire (mkdir) . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   55             13.9.2 Structure d'une ligne de programme . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   8
   10.2   Supprimer un r pertoire (rmdir, rm -r)) . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   55             13.9.3 Format pour indiquer les lignes traiter . . .         .   .   .   .   .   .   .   .   .   .   .   .   8
   10.3   Changer le nom d'un r pertoire (mv) . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   55             13.9.4 Ex cution du programme . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   8
   10.4   Copier l'arborescence d'un r pertoire (cp -r) . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   56             13.9.5 Commandes . . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   8
   10.5   Lien symbolique (ln -s) . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   56        13.10Un langage d' dition de chiers (awk) . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   8
   10.6   Pliage de r pertoires en une seul chier (tar, cpio)            .   .   .   .   .   .   .   .   .   .   .   .   .   .   57             13.10.1Description g n rale de la commande . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   8
                                                                                                                                                13.10.2Champs . . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   8
11 Expressions r guli res                                                                                                        58             13.10.3Structure d'un programme . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   8
   11.1 Expressions r guli res repr sentant un seul caract re . . . . . . . . . . . . 58                                                        13.10.4Cas particuliers pour une ligne de programme          .   .   .   .   .   .   .   .   .   .   .   .   8
   11.2 Expressions r guli res repr sentant un ensemble de caract res d'un seul type 59                                                         13.10.5S lecteurs . . . . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   8
   11.3 Autres expressions r guli res . . . . . . . . . . . . . . . . . . . . . . . . . . 60                                                    13.10.6Actions . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   8
                                                                                                                                                13.10.7Fonctions, op rateurs . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   8
12 diteur de texte (emacs, xemacs)                                                                                               62        13.11Exemples de programmes . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   8
   12.1 Entr e et sortie . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62        13.12Tableaux . . . . . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   8
        12.1.1 Lancer emacs . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62        13.13D'autres commandes de manipulation de chiers . . .           .   .   .   .   .   .   .   .   .   .   .   .   8
        12.1.2 Sortir de emacs . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
   12.2 Concepts de base . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
        12.2.1 Description d'une fen tre emacs . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63   III M canismes d'interpr tation du shell                                                                               8
        12.2.2 Commandes et associations de cl s         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
        12.2.3 Bu ers et fen tres . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66   14 Interpr tation du shell. M canismes de base                                                                         9
        12.2.4 Point d'insertion, marque, r gions .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67        14.1 G n ralit s sur le shell . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   9
        12.2.5 Mode de travail . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68             14.1.1 D nition . . . . . . . . . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   9
   12.3 Commandes . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68             14.1.2 Compatibilit des di rents shells . . . . . . . . . . . .                  .   .   .   .   .   .   .   9
        12.3.1 Commandes de base . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68             14.1.3 Commandes et processus, commandes internes au shell                       .   .   .   .   .   .   .   9
        12.3.2 Autres commandes . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71             14.1.4 Prompts . . . . . . . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   9
   12.4 Personnalisation de emacs . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71             14.1.5 Environnement d'une commande ou d'un shellscript . .                      .   .   .   .   .   .   .   9
   12.5 Compl ments pour les versions graphiques         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72             14.1.6 Code retour d'une commande . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   9
                                                                                                                                           14.2 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   9
13 Manipulation des donn es des chiers                                                                                           73             14.2.1 Redirections de la sortie standard . . . . . . . . . . . .                .   .   .   .   .   .   .   9
   13.1 Tri (sort) . . . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   73             14.2.2 Redirection du chier d'erreur (2>) . . . . . . . . . . .                  .   .   .   .   .   .   .   9
   13.2 Recherche d'une cha ne de caract res (grep) . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   74             14.2.3 Envoi d'un message d'erreur (>&2) . . . . . . . . . . .                   .   .   .   .   .   .   .   9
   13.3 Compter les caract res, les mots, les lignes (wc) .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   74             14.2.4 Redirection de l'entr e standard (<) . . . . . . . . . .                  .   .   .   .   .   .   .   9
   13.4 Conversion, suppression de caract res (tr) . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   75             14.2.5 Pseudo- chier /dev/null . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   9
   13.5 Fractionnement vertical (cut) . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   76        14.3 Pipe (j) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   9
   13.6 Comparaison du contenu de 2 chiers . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   78        14.4 Regroupement des commandes . . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   9
        13.6.1 Di rences entre deux chiers texte (di ) .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   78             14.4.1 Regroupement entre parenth ses . . . . . . . . . . . . .                  .   .   .   .   .   .   .   9
        13.6.2 galit du contenu de 2 chiers (cmp) . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   78             14.4.2 Regroupement entre accolades . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   9
   13.7 Traiter les lignes cons cutives identiques (uniq) .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   79        14.5 Processus en arri re-plan (&) . . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   9
   13.8 Extraire le d but ou la n d'un chier . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   79             14.5.1 Gestion des jobs par ksh ou zsh . . . . . . . . . . . .                   .   .   .   .   .   .   .   9
        13.8.1 D but d'un chier (head) . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   79        14.6 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   9
        13.8.2 Fin d'un chier (tail) . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   79        14.7 Substitution de commande . . . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   9
   13.9 Un diteur non interactif (sed) . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   80        14.8 M canismes d'interpr tation . . . . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   9
TABLE DES MATI RES                                                                                              vii   viii                                                                   TABLE DES MATI RE
  14.9 Inhiber l'interpr tation du shell . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .    99                  16.5.4 Modi cation interactive de la valeur d'une variable sous zsh (vared) 12
  14.10Recherche d'une commande par le shell . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   100                  16.5.5 Tableaux sous ksh et zsh . . . . . . . . . . . . . . . . . . . . . . . . 12
  14.11Lancement de l'ex cution d'un shellscript . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   100
       14.11.1Lancement par le nom du shellscript . . . . . . .        .   .   .   .   .   .   .   .   .   .   100
       14.11.2Lancement par l'appel de la commande interne .           .   .   .   .   .   .   .   .   .   .   102    IV Programmation                                                                                                     12
       14.11.3Lancement par l'appel explicite d'un shell . . . .       .   .   .   .   .   .   .   .   .   .   102
  14.12Lancement explicite d'un shell . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   103    17 Programmation des shellscripts                                                                                    12
                                                                                                                             17.1 Tests divers (test, ... ], ... ]]) . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   12
15 Variables, environnement                                                                                    104           17.2 D caler les param tres de position (shift) . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   12
  15.1 Param tres, variables de position . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   104           17.3 Sortie d'un shellscript (exit) . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   12
       15.1.1 Param tres des shellscripts . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   104           17.4 Les structures de contr le . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   12
       15.1.2 Donner des valeurs aux param tres de position (set) . . .                .   .   .   .   .   .   104                17.4.1 if .. then .. else .. . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   12
  15.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   105                17.4.2 case ... esac . . . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   12
       15.2.1 Identi cateur . . . . . . . . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   105                17.4.3 for ... do ... done . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   12
       15.2.2 A ectation . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   105                17.4.4 while ... do ... done . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   13
       15.2.3 D signation de la valeur de la variable ($) . . . . . . . .              .   .   .   .   .   .   105                17.4.5 until ... do ... done . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   13
       15.2.4 D composition en mots des valeurs des variables de zsh .                 .   .   .   .   .   .   106                17.4.6 Instructions li es aux boucles (continue, break) .        .   .   .   .   .   .   .   .   .   .   13
       15.2.5 Supprimer une variable (unset) . . . . . . . . . . . . . .               .   .   .   .   .   .   106                17.4.7 Probl mes avec les boucles redirig es et les pipes .      .   .   .   .   .   .   .   .   .   .   13
       15.2.6 Variables sp ciales du shell . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   106           17.5 Interception des signaux . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   13
       15.2.7 A cher la valeur d'une variable (echo) . . . . . . . . . .               .   .   .   .   .   .   108           17.6 Commandes internes diverses . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   13
       15.2.8 Entr e de la valeur d'une variable au clavier (read) . . .               .   .   .   .   .   .   108           17.7 R cursivit dans l'ex cution des shellscripts . . . . . . .       .   .   .   .   .   .   .   .   .   .   13
       15.2.9 Port e d'une variable (export), environnement de travail                 .   .   .   .   .   .   109           17.8 Calculs, traitement des cha nes de caract res . . . . . . .      .   .   .   .   .   .   .   .   .   .   13
       15.2.10Visualisation des variables disponibles (set, printenv) . .              .   .   .   .   .   .   110                17.8.1 Commande expr . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   13
  15.3 Personnalisation de l'environnement . . . . . . . . . . . . . . . .             .   .   .   .   .   .   110                17.8.2 Commande let . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   13
       15.3.1 Options des shells (set, setopt) . . . . . . . . . . . . . . .           .   .   .   .   .   .   110           17.9 Traitement des cha nes de caract res . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   13
       15.3.2 Fichiers de personnalisation . . . . . . . . . . . . . . . .             .   .   .   .   .   .   110           17.10Aide pour traiter les options (getopts) . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   13
  15.4 Strat gie pour la personnalisation de l'environnement . . . . . .               .   .   .   .   .   .   112           17.11Mise au point des shellscripts (set -xv) . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   13
16 Compl ments sur le shell                                                                                    113
  16.1 Listes de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       .   113
  16.2 Ordre de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      .   114
  16.3 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                     .   114
  16.4 Compl ments sur les redirections . . . . . . . . . . . . . . . . . . . . . .                        .   115
       16.4.1 Redirection de l'entr e standard sur chier inclus (<<) . . . . . .                           .   115
       16.4.2 Redirection pour tout un shell (exec) . . . . . . . . . . . . . . . .                        .   116
       16.4.3 Descripteurs de chier sup rieurs 2 . . . . . . . . . . . . . . . .                           .   116
       16.4.4 Redirection vers un chier d sign par son descripteur . . . . . . .                           .   117
       16.4.5 Ordre d' valuation des redirections . . . . . . . . . . . . . . . . .                        .   117
       16.4.6 Redirection sans commande avec zsh . . . . . . . . . . . . . . . .                           .   118
  16.5 Compl ments sur les variables . . . . . . . . . . . . . . . . . . . . . . . .                       .   118
       16.5.1 Valeurs par d faut pour les variables . . . . . . . . . . . . . . . .                        .   118
       16.5.2 Modi er l'environnement d'une commande . . . . . . . . . . . . .                             .   119
       16.5.3 Facilit s de ksh et zsh pour le traitement des valeurs de variables                          .   119
                                                                                         ix




Pr sentation du polycopi
    Ce polycopi est un support du cours donn dans di rentes li res de l'Universit de
Nice-Sophia Antipolis.
    Le cours est une introduction au syst me d'exploitation Unix. Le but est de pr senter,
   travers des cas concrets d'utilisation sous le syst me Unix, les concepts essentiels des
syst mes d'exploitation utiles un utilisateur averti.
    La programmation des shellscripts qui fait si souvent gagner un temps pr cieux dans
l'ex cution des t ches r p titives ou complexes est pr sent e la n de ce cours et en
                                                                                                Premi re partie
pr sente en fait l'aboutissement.
    Les chapitres de ce support de cours ne suivent pas n cessairement l'ordre de leur
pr sentation dans orale le cours. Ce polycopi est plut t un manuel de r f rence qui aidera
                                                                                              Connaissances de base
l'utilisateur se remettre rapidement en m moire les principales commandes et concepts
d'Unix. L'exhaustivit (impossible de toute fa on) n'a pas t recherch e. Une lecture du
manuel en ligne (commande man ) est indispensable pour conna tre toutes les commandes
et options de la derni re version install e. Mais cette aide en ligne est crite en anglais
et les informations essentielles sont souvent noy es dans les tr s nombreuses options et
commandes, et les exemples sont trop souvent absents.
    Ce cours n'aborde ni l'administration d'un syst me Unix ni la programmation syst me,
m me s'il donne quelques rudiments d'information concernant ces deux th mes.
    Il ne suppose aucune connaissance en informatique si ce n'est quelques notions l men-
taires sur l'architecture des ordinateurs et sur la programmation.
    Un autre polycopi rassemble les notions et commandes li es l'utilisation des r seaux
informatiques. Ces deux cours devront tre compl t s par quelques connaissances de base
de l'interface graphique X Window, en particulier les notions de gestionnaire de fen tres
et de ressources.
    Le lecteur interess par l'impl mentation des di rents Unix pourra consulter le livre
 Unix Internals crit par Uresh Vahalia, ditions Prentice Hall (disponible la biblioth que
de l'universit de Nice).
    Les remarques et les corrections d'erreurs peuvent tre envoy es par courrier lectro-
nique l'adresse grin@unice.fr, en pr cisant le sujet Poly Unix et programmation du
shell et la date de la version du polycopi .
Chapitre 1
G n ralit s sur Unix
1.1 Syst mes d'exploitation
    Unix est un syst me d'exploitation.
    Un syst me d'exploitation est un logiciel qui fournit un environnement d'ex cutio
pour les programmes qui vont s'ex cuter sur l'ordinateur. Il doit g rer en particulier le
ressources que vont se partager les programmes. Il a, entre autres, la charge des fonction
suivantes, essentielles pour la bonne marche d'un ordinateur :
      gestion du processeur
      gestion de la m moire centrale
      gestion du syst me de chiers
      gestion des p riph riques
    Un ordinateur ne peut fonctionner sans syst me d'exploitation. Un ordinateur donn
peut fonctionner avec plusieurs syst mes d'exploitation par exemple, certains PC pe
mettent l'utilisateur de travailler sous Unix ou sous Windows 95 ou NT.

1.2 Historique
1969 Ken Thompson crit Unix en assembleur dans les laboratoires de Bell (AT&T).
1973 Dennis Ritchie et Ken Thompson r crivent Unix en langage C (seulement 10 % e
    assembleur).
1974 Unix est distribu aux universit s am ricaines.
1975 Premi re version d'Unix commercialis e (licence pour le code source version 6).
1977 Unix BSD (Berkeley Software Development) 1.0 de l'universit de Berkeley au
      tats Unis.
4                                           CHAPITRE 1. G N RALIT S SUR UNIX                 1.5. STRUCTURE D'UNIX
1979 Unix Version 7. Commercialisation d'une licence binaire (moins on reuse que la            SHELLSCRIPTS                   APPLICATIONS
      licence pour le code source).
1984 Unix Syst me V                                                                                            SHELL

1991 Unix OSF/1                                                                                               NOYAU UNIX

                                                                                                              MATERIEL

1.3 Standards et versions d'Unix
                                                                                                                             Fig.   1.1 Structure d'Unix
    Unix est un syst me ouvert : il n'est pas li un constructeur d'ordinateur ou une
soci t d' dition de logiciels AT&T a largement di us le code source d'Unix dans les               portable,
universit s ses d buts et de multiples Unix ont t d velopp s par des soci t s di rentes.
Tous les grands constructeurs ont leur Unix, r crit enti rement par eux ( Unix-like ) ou          dont les syst me de chiers sont hi rarchis s en arbre,
d velopp partir d'une licence achet e AT&T ( Unix-based ). Tous ces Unix respectent
un minimum de normes et il n'est pas trop di cile de porter une application d'un Unix             qui o re une compatibilit totale des entr es-sorties (pour Unix, les p riph rique
vers l'autre.                                                                                     sont des chiers voir 1.6.2),
    Les di rentes versions d'Unix taient issues de Syst me V de AT&T ou de Unix BSD               pour lequel il est tr s facile d'ajouter de nouvelles commandes sans modi er le noya
de l'universit de Berkeley. Au d but des ann es 1990, Open Software Fondation (OSF) a             (gr ce la grande puissance des langages des shells).
d velopp un nouvel Unix : OSF/1.
    Le syst me Solaris actuellement utilis sur de nombreux ordinateurs de l'universit de
Nice est issu de Unix Syst me V.
    La plupart des commandes que vous utiliserez en tant qu'utilisateur ordinaire ou d ve-
                                                                                             1.5 Structure d'Unix
loppeur d'applications sont les m mes dans toutes les versions d'Unix. Les di rences les
plus sensibles se trouvent au niveau de l'administration du syst me.
                                                                                             1.5.1 Noyau
    La tendance actuelle est au rapprochement des di rentes versions d'Unix, au moins au         Le noyau est la partie centrale d'Unix. Il se charge des t ches essentielles pour la bonn
niveau de l'utilisateur et du d veloppeur, autour de normes d nies par des groupements       marche du syst me : gestion du syst me des chiers, gestion du processeur et de la m moir
d'utilisateurs, des constructeurs d'ordinateurs ou des diteurs de logiciels. Ces normes      centrale. Les drivers de p riph riques sont int gr s au noyau. Ils g rent les changes (le
sp ci ent des interfaces : elles d nissent les signatures et s mantiques (mais pas les im-   entr es-sorties) entre l'unit centrale et les p riph riques.
pl mentations) des fonctions qui constituent ces interfaces. Les trois normes principales        Le noyau met la disposition des autres programmes des proc dures appel es primitive
sont SVID (System V Interface De nition), POSIX (Portable Operating System based on          Les autres programmes peuvent inclure dans leur code des appels syst me qui lancen
unIX) de l'IEEE et CAE (Common Applications Environment) de X/Open.                          l'ex cution de ces primitives. Les primitives permettent de lancer de nouveaux processu
                                                                                             de lire ou d' crire sur des chiers, d'obtenir plus de place en m moire centrale, etc... Ce
                                                                                             appels syst me sont r pertori s dans la section 2 du manuel en ligne (voir 3.5).
1.4 Propri t s d'Unix                                                                            Ce fonctionnement par primitives permet en particulier de r soudre les probl mes d'ac
                                                                                             c s concurrent aux informations du syst me (sur un syst me mono-processeur). En e e
    Unix est un syst me d'exploitation                                                       les appels syst me font entrer l'ex cution en mode noyau. Dans ce mode le processus es
                                                                                             assur de garder le processeur jusqu'au retour au mode utilisateur quand l'appel syst m
      d'usage g n ral,                                                                       est termin .
      multi-utilisateurs, multi-t ches,
                                                                                             1.5.2 Shell
      interactif,
                                                                                                Le shell est l'interpr teur de commandes. Quand un utilisateur tape des commande
      orient temps partag ,                                                                  Unix, ces commandes sont lues par le shell qui e ectue ventuellement des traitement
6                                            CHAPITRE 1. G N RALIT S SUR UNIX                   1.6. ORGANISATION DES SYST MES DE FICHIERS
avant de lancer l'ex cution de la commande. Le shell est une couche logicielle bien s par e                                                   /
du noyau. Il existe plusieurs shells dont les plus utilis s sont :
     le Bourne shell sh , le shell standard d'Unix AT&T,
     le C-shell csh , le shell d'Unix BSD sa syntaxe rappelle le langage C,
                                                                                                      dev               etc               usr               students              bin         tmp
     le Korn-shell ksh est une extension du Bourne shell. Il poss de toutes les commandes
     du Bourne shell (et il se comporte presque exactement comme lui pour ces com-                                                                                            Commandes
     mandes) et il comprend aussi d'autres commandes et fonctionnalit s qui facilitent le       Fichiers spéciaux
     travail de l'utilisateur comme, par exemple, la gestion de l'historique des commandes      (périphériques)                                   classe1               classe2
     tap es par l'utilisateur, qui existe aussi dans le C-shell. On le trouve maintenant dans
     la plupart des distributions Unix.                                                                        Commandes et fichiers
                                                                                                                   système                                    bibi
     le Z shell zsh est une extension du Korn-shell. Il o re en particulier la compl tion et
     la correction de commande : l'utilisateur peut lui demander de compl ter un nom de
     commande et il propose des corrections l'utilisateur lorsque la commande comporte                       bin              ucb                     local                 lib
     une erreur, par exemple lorsqu'une commande a t mal orthographi e.
    Certaines commandes la disposition de l'utilisateur, sont programm es dans le shell                Commandes         Commandes
et celui-ci peut donc les ex cuter directement. Elles sont peu nombreuses on trouve par                                                              emacs
exemple les commandes cd ou pwd. On les appelle les commandes internes au shell. Les                                                    bin                           lib
                                                                                                                                                                                  toto
autres commandes sont des commandes externes au shell. Pour les ex cuter le shell lance
un programme qui correspond un chier ex cutable situ dans l'arborescence des chiers.                                                 Commandes
    Le shell poss de un v ritable langage avec des structures de programmation (alterna-
tives, r p titions,...) et l'utilisateur peut crire ses propres commandes dans ce langage (le                                                                   bin               Fichiers de
programme s'appelle un shellscript). Une fois crites, ces nouvelles commandes peuvent                                                                                             l’étudiant toto
 tre utilis es exactement comme les commandes classiques d'Unix.                                                                                      Commandes de
    Le shell que nous utiliserons est zsh.                                                                                                            l’étudiant toto

                                                                                                                              Fig.   1.2 Arborescence des chiers
1.6 Organisation des syst mes de chiers
                                                                                                Des utilitaires de r seaux (comme NFS) permettent m me de voir des syst mes implant
1.6.1 Syst me de chiers                                                                         sur des machines di rentes comme s'ils appartenaient une m me arborescence.
                                                                                                   L'arborescence totale ressemble l'arborescence de la gure 1.2.
    Les chiers d'Unix sont enregistr s dans un ensemble structur hi rarchiquement en
arbre, appel syst me de chiers. Un syst me de chiers est compos d'une racine et de
noeuds qui sont des chiers r pertoires (ces chiers contiennent des r f rences d'autres          1.6.2 Types de chiers
  chiers), et de chiers ordinaires qui contiennent des donn es et des programmes.                  Unix utilise les types de chiers suivants :
    En g n ral, plusieurs syst mes de chiers sont mont s sur le syst me racine , c'est
   dire celui qui contient le r pertoire / (voir commande df en 6.7.2). Ces syst mes sont        chiers ordinaires : ils contiennent les donn es ou les programmes. Ils n'ont aucun
enregistr s sur des disques physiques di rents ou sur un m me disque mais sur des parti-             structure particuli re : ils sont consid r s comme une suite d'octets. Il n'y a pa
tions di rentes (un disque physique peut tre divis en plusieurs disques logiques appel s             de notion d'enregistrement ni d'acc s par index. Si on veut un s quentiel index , o
partitions). Tous ces syst mes de chiers sont vus par l'utilisateur comme un seul syst me.           le programme (ou on l'ach te dans le commerce) !
8                                             CHAPITRE 1. G N RALIT S SUR UNIX
      On peut cependant distinguer trois grands types de chiers ordinaires :
           les chiers binaires ex cutables, crits dans le code du processeur de la machine,
           qui ont une structure particuli re reconnue par le noyau Unix.
           les chiers de textes qui sont structur s en lignes.
           En Unix, le caract re de n de ligne est par convention le caract re de code
           ASCII 10 ( linefeed en anglais).
                                                                                                 Chapitre 2
           On remarquera que ce n'est pas le m me caract re que celui utilis par les
           syst mes d'exploitation MS-DOS (sur PC) ou Mac-OS (sur Macintosh), ce qui
           oblige e ectuer un traitement minimum pour transf rer des chiers de textes            Acteurs/objets du monde Unix
           entre ces syst mes.
           les autres chiers qui n'ont pas de structure particuli re pour Unix (mais peuvent
           avoir une structure particuli re adapt e au logiciel qui les a cr s).                     Ce chapitre expose quelques notions et concepts de base sur le fonctionnement d'Unix
r pertoires : ils sont les noeuds de la structure arborescente des chiers. Ils contiennent les   Les commandes associ es ces notions seront tudi es dans les chapitres suivants.
      identi cateurs (i-nodes) d'autres chiers. Ils correspondent des sous-biblioth ques             Les acteurs/objets principaux que l'on rencontre en Unix sont les utilisateurs, les pro
      ou dossiers qui contiennent d'autres chiers.                                               cessus et les chiers.
  chiers sp ciaux : ils sont li s un p riph rique (/dev/tty01 est par exemple li un
      terminal) ils correspondent des programmes (pilotes drivers en anglais) qui g rent         2.1 Utilisateurs
      les changes avec les p riph riques : disques, terminaux, imprimantes, streamers, lec-
      teurs de bandes, etc.                                                                      2.1.1 Un utilisateur dans le syst me
liens symboliques : ils contiennent le nom d'un autre chier et permettent des indirec-           Nom, mot de passe, uid
      tions.
                                                                                                     Un utilisateur est rep r par son nom qu'il doit taper au moment de l'entr e dans
sockets : ils sont utilis s pour les liaisons inter-processus ils ne seront pas tudi s ici.      syst me.
    Unix Syst me V utilise aussi les pipes nomm s qui sont utilis s pour la communication            Chaque nom correspond un num ro d'utilisateur (un nombre entier) : le uid (use
entre les processus. Ils ne seront pas tudi s ici.                                               identi er ). Plusieurs utilisateurs peuvent avoir un m me uid mais cette possibilit n'es
                                                                                                 utilis e que pour quelques pseudo-utilisateurs du syst me qui ont par exemple besoin de
                                                                                                 autorisations du super-utilisateur (voir 2.1.2) pour accomplir une t che bien d nie.
                                                                                                     Un utilisateur s'authenti e lors de son entr e dans le syst me gr ce son mot de pass

                                                                                                 Groupes d'un utilisateur
                                                                                                     Un utilisateur appartient un groupe d'utilisateurs dont le num ro est enregistr dan
                                                                                                 la ligne r serv e cet utilisateur dans le chier /etc/passwd (ou dans les chiers syst m
                                                                                                 qui jouent un r le quivalents voir ci-dessous page 10 la section sur les chiers syst me)
                                                                                                     La notion de groupe permet plusieurs utilisateurs de partager certains droits pou
                                                                                                 l'utilisation des chiers appartenant au groupe (voir 2.4 et 2.3.3).
                                                                                                     La plupart des Unix modernes permettent un utilisateur d'appartenir plusieur
                                                                                                 groupes en plus de son groupe principal (celui qui est enregistr dans le chier des mot
                                                                                                 de passe).
10                                CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX                     2.2. PROCESSUS                                                                                   1
    Les groupes ne sont pas g r s de la m me fa on par les di rents types d'Unix. Nous         2.1.2 Super-utilisateurs
n' tudierons pas cette notion en d tails dans ce cours.                                           Les utilisateurs de uid 0 sont appel s des super-utilisateurs. Ces utilisateurs ont de
                                                                                               droits que les autres utilisateurs n'ont pas. Ils peuvent, par exemple, changer le mot d
R pertoire HOME                                                                                passe des autres utilisateurs et changer les autorisations ou le propri taire de n'import
                                                                                               quel chier de l'arborescence.
   Un utilisateur poss de un r pertoire HOME dans lequel il est positionn lorsqu'il entre
dans le syst me. Ce r pertoire est choisi par l'administrateur en fonction de l'utilisateur.   2.1.3 Administrateur du syst me
En g n ral, le nom terminal de ce r pertoire est le nom de l'utilisateur et il est plac dans
un r pertoire r serv sa fonction dans l'institution. Par exemple, l' tudiant jean en              Un syst me Unix doit tre g r par un administrateur qui est responsable du bo
deuxi me ann e d'informatique aura le r pertoire HOME /students/info2/jean .                   fonctionnement du syst me. Voici quelques unes de ses t ches :
                                                                                                     enregistrer les nouveaux utilisateurs et cr er leur environnement de travail,
Programme de d marrage                                                                               installer les nouvelles versions des logiciels,
   L'administrateur attribue chaque utilisateur un programme de d marrage qui sera
ex cut quand l'utilisateur entrera dans le syst me. Pour vous, c'est le shell zsh.                   rep rer les probl mes qui emp chent le syst me de fonctionner correctement,
                                                                                                     nettoyer p riodiquement le disque des chiers non utilis s,
Attributs d'un utilisateur                                                                           e ectuer r guli rement des sauvegardes des donn es et des programmes.
     En r sum , chaque utilisateur est associ :                                                   Pour beaucoup des t ches qu'il doit accomplir, l'administreur doit entrer dans le syst m
                                                                                               comme super-utilisateur.
       un nom,
       un mot de passe,                                                                        2.2 Processus
                                                                                                   L'unit d'ex cution est le processus. Toute action est ex cut e par un processus. Tous le
       un uid,                                                                                 Unix modernes o rent une unit plus l g re appel e thread qui permet un processus d
                                                                                               faire ex cuter une t che par plusieurs sous-t ches qui s'ex cutent en parall le et partagen
       un ou plusieurs groupes,                                                                le m me espace m moire. Nous ne les tudierons pas dans ce cours.
                                                                                                   Chaque processus est identi par le syst me par un num ro de processus (pid proces
       un r pertoire HOME ,                                                                    identi er ).
                                                                                                   Une commande tap e par l'utilisateur peut engendrer un ou plusieurs processus, o
       un programme de d marrage.                                                              n'engendrer aucun nouveau processus si la commande est interne au shell.
                                                                                                   Unix est multi-t che. Tous les processus en cours d'ex cution se partagent le processeur
                                                                                               de la machine. Chaque processus re oit l'usage du processeur pendant un laps de temp
Fichiers syst me                                                                               assez court (environ un centi me de seconde) pour que l'utilisateur ne s'aper oivent pa
    Les informations sur un utilisateur sont enregistr es dans le chier /etc/passwd. Pour      de la pr sence des autres processus pendant les p riodes d'interaction avec le programm
des raisons de s curit ou de commodit (pour g rer un r seau de machines), l'administra-        (entr es-sorties avec le clavier ou avec la souris).
teur peut ajouter des utilitaires de gestion du syst me ( Yellow pages ou NIS, Kerberos ,          Un processus travaille dans son propre environnement (en particulier avec ses propre
etc.). Dans ce cas, le chier /etc/passwd peut ne pas contenir toutes les informations          variables). A un moment donn , son environnement est repr sent par une image qui es
concernant les utilisateurs (par exemple, les mots de passe sont remplac s par * ) ou          une sorte de clich (au sens photographique) du processus.
m me aucune information sur certains utilisateurs (ces informations ne sont enregistr es         1. m me si la machine est a plusieurs processeurs, ceux-ci sont habituellement bien moins nombreu
que sur certaines machines du r seau voir en particulier 6.6).                                 que les processus
12                               CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX                        2.2. PROCESSUS                                                                            1
     L'image d'un processus est compos e de :                                                     1    HUP(hangup ) envoy ses processus quand on sort de la session de travail ou
                                                                                                          quand se d connecte par un modem
       son code                                                                                   2 INT   envoy au processus en avant-plan dans le terminal dans lequel la touche
                                                                                                          d'interruption a t tap e (voir 3.3 et 3.7.1)
       les donn es associ es (trait es par le code)                                               3 QUIT comme INT, mais cr e souvent un chier core
                                                                                                  9 KILL signal qui ne peut tre intercept (voir commande trap en 17.5) et qui va
                                                                                                          donc tuer coup s r le processus qui le re oit
       les chiers ouverts et leur tat                                                             15 TERM (terminate ) envoy par d faut par la commande kill (voir 7.2). Pour
                                                                                                          terminer un processus d'une mani re l gante si possible
       le r pertoire courant                                                                      18 TSTP suspend un processus (touche Ctrl Z)
                                                                                                  19 CONT pour continuer apr s une suspension
       les informations du syst me sur le processus (propri taire, terminal associ , etc.)
                                                                                                 2.2.2 Terminal de contr le d'un processus, ex cution en arri re
    On remarquera en particulier qu' un moment donn de son ex cution un processus a                    plan
un r pertoire courant o il est situ .
    Tout le code du programme n'est pas n cessairement en m moire durant l'ex cution.                Les processus lanc s par un utilisateur restent li s au terminal d'o ils ont t lanc
Le code est d coup en pages par le syst me et seules les pages n cessaires sont charg es en      appel terminal de contr le du processus. Le syst me peut ainsi rep rer les processus qu
m moire centrale. Au cours de l'ex cution du programme des pages peuvent tre transpor-           recevront le signal engendr par la frappe de la touche d'annulation ou les processus qu
t es du disque vers la m moire centrale si la page n'est plus n cessaire et que le syst me a     seront arr t s si l'utilisateur teint son terminal.
besoin de place en m moire centrale, et faire le chemin inverse lorsque la page est n cessaire       Un utilisateur peut lancer certains processus en arri re-plan (voir 14.5). Ces processu
  l'ex cution du programme. Ce syst me de gestion de la m moire s'appelle le demand              deviennent ind pendants du terminal : ils s'ex cutent sans intervention de l'utilisateur e
paging . La zone du disque r serv e ces allers et retours s'appelle la zone de swap .            sans que celui-ci ait attendre la n de leur ex cution. Il peut ainsi lancer plusieurs t che
                                                                                                 en parall le (mais sans r elle synchronisation entre elles). Ces processus ne seront pa
                                                                                                 arr t s si l'utilisateur appuie sur la touche d'annulation mais ils peuvent toujours tre tu
2.2.1 Signaux envoy s aux processus                                                              par la commande kill (voir 7.2). Ils ne peuvent pas lire les caract res tap s sur le termina
                                                                                                 mais ils peuvent toujours y crire.
    Durant son ex cution, un processus peut recevoir un signal. La plupart des signaux               Des processus peuvent tre lanc s automatiquement par le syst me, en arri re-pla
interrompent l'ex cution du processus mais celui-ci peut les intercepter. Il peut alors ef-      (comme le syst me de spool pour l'impression tudi en 8.4). Ces processus sont appe
fectuer un traitement sp cial et choisir ensuite de continuer s'ex cuter ou d'arr ter son        l s des daemons, acronyme de l'anglais deferred auxiliary execution monitor c'est- -dir
ex cution (voir 7.2 et 17.5).                                                                    programme de contr le d'ex cution di r e. On les appelle souvent d mons en fran ais
    Les signaux peuvent tre envoy s par :
       un processus, avec la commande ou l'appel syst me kill (voir 7.2),                        2.2.3 Propri taires et groupes e ectifs et r els d'un processus
                                                                                                     Chaque processus a un propri taire e ectif et un propri taire r el. Le propri taire r
       le noyau, engendr s par la frappe d'une touche du clavier par l'utilisateur pour in-      est l'utilisateur qui a lanc la commande qui a g n r les processus. Le propri taire e ect
       terrompre (ou stopper momentan ment) tous les processus li s au terminal (notion          d termine les droits du processus dans le syst me et en particulier les actions autoris e
        tudi e en 2.2.2),                                                                        sur les chiers (voir 2.4).
                                                                                                     Le plus souvent le propri taire e ectif est le propri taire r el. Il existe une exceptio
       le noyau, engendr s par des erreurs venant du mat riel ou du logiciel.                    importante li e la notion de set user id tudi e en 2.4.2.
                                                                                                     De m me, chaque processus a un groupe r el (le groupe de l'utilisateur qui a lanc l
   Voici quelques num ros, noms et descriptions de signaux utiles conna tre (on les trouve       commande qui a g n r les processus) et un groupe e ectif (voir 2.4.2). Nous n' tudieron
dans le chier /usr/include/signal.h) :                                                           pas ces notions en d tails dans ce cours.
14                             CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX                       2.4. PROTECTION DES FICHIERS                                                             1
2.2.4 Cr ation d'un nouveau processus, arbre des processus                                    2.3.3 Propri taire et groupe d'un chier
   Chaque processus (sauf le processus de pid 1) est cr par son processus parent. On a           Au moment de sa cr ation, le propri taire d'un chier est l'utilisateur qui l'a cr . Seu
ainsi un arbre g n alogique des processus cr s dans une session. Les pid ainsi que les pid    un super-utilisateur (voir 2.1.2) peut changer le propri taire d'un chier.
des parents de tous les processus sont a ch s par la commande ps.                                Un chier a aussi un groupe qui est le nom d'un groupe d'utilisateur. C'est le plu
                                                                                              souvent le groupe de l'utilisateur qui a cr le chier. Cette notion de groupe facilite
                                                                                              partage de chiers entre plusieurs utilisateurs. Nous n' tudierons pas cette notion en d tai
2.3 Fichiers                                                                                  dans ce cours.
    Les donn es (que l'on veut conserver entre deux sessions) et les programmes sont enre-
gistr s dans des chiers.                                                                      2.3.4 Mode d'acc s au chier
    On a vu en 1.6 que Unix utilise aussi la notion de chier pour organiser l'ensemble des        A chaque chier sont attach es les autorisations pour le propri taire du chier, pou
 chiers (r pertoires) et pour travailler avec les p riph riques ( chiers sp ciaux).           les membres du groupe du chier (mais sans le propri taire), pour les autres ( le rest
                                                                                              du monde , ceux qui ne sont pas le propri taire et qui n'appartiennent pas au groupe d
                                                                                                chier). Ces autorisations forment le mode d'acc s au chier. Elles sont a ch es par l
2.3.1 i-node                                                                                  commande ls -l (voir gure 4.2 et section 4.2) juste apr s le type du chier.
   Outre le contenu du chier, le syst me conserve d'autres informations (par exemple le           Les autorisations peuvent tre (leur signi cation exacte sera tudi e en 2.4.1) :
propri taire) sur chacun des chiers de l'arborescence.
   Ces informations lui seront utiles pour la gestion et la s curit du syst me. Ces infor-         l'autorisation de lecture ( r pour la commande     ls -l   )
mations ne sont pas enregistr es avec le contenu du chier, elles sont enregistr es dans la
table des i-nodes (une table pour chaque syst me de chiers) qui est conserv e dans un              l'autorisation d' criture ( w pour la commande     ls -l   )
endroit sp cial sur le disque. Chaque chier a un num ro de i-node (un nombre entier) qui
indique dans quelle entr e de la table des i-nodes les informations syst me le concernant          l'autorisation d'ex cution ( x pour la commande     ls -l      )
sont rang es.
                                                                                                 Il existe aussi des autorisations sp ciales r serv es certains chiers ex cutables (elle
                                                                                              accordent des droits sp ciaux aux processus qui ex cutent ces chiers elles sont tudi e
2.3.2 Structure interne des r pertoires                                                       en d tail en 2.4.2) :
    La liaison entre les noms des chiers et les informations enregistr es dans le i-node du        set user id suid en abr g ( s    la place du x dans les autorisations du propri tair
 chier se fait gr ce aux r pertoires.                                                              pour la commande ls -l )
    Les r pertoires sont des chiers de l'arborescence mais leur contenu di re des chiers
ordinaires. Un chier r pertoire contient le nom et le num ro de i-node des chiers plac s           set group id sgid en abr g ( s       la place du x dans les autorisations du group
directement sous ce r pertoire dans l'arborescence des chiers.                                     pour la commande ls -l )
    Les informations concernant un chier sont donc conserv es dans trois endroits di -
rents :
     le nom du chier est conserv dans le r pertoire contenant le chier,
                                                                                              2.4 Protection des chiers
                                                                                                 La protection des chiers en Unix est fond e sur les droits des processus sur les chier
     les informations syst me sont conserv es dans le i-node du chier,                        (rappelons que le processus est l'unit l mentaire d'ex cution en Unix). Un processus n'es
                                                                                              pas autoris faire n'importe quelle action sur les chiers. Par exemple, il peut avoir
     le contenu du chier (les donn es) est enregistr dans les blocs du disque dont les        droit de lire le contenu d'un chier mais pas de supprimer ce chier. Nous allons examine
     adresses sont dans le i-node.                                                            dans cette section comment sont d termin s les droits d'un processus sur un chier.
16                               CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX                          2.4. PROTECTION DES FICHIERS                                                             1
2.4.1 Droits associ s aux autorisations                                                            2.4.3 M canisme de protection des chiers
    Les autorisations qui constituent le mode d'acc s au chier ne d nissent pas toujours              On a vu en 2.4.1 les actions qu'un processus a le droit d'e ectuer sur un chier elle
d'une fa on vidente les actions qu'un processus a le droit d'ex cuter sur le chier. Par            d pendent des autorisations que ce processus a sur le chier lui-m me et sur les r pertoire
exemple, un processus peut avoir le droit de supprimer un chier sans avoir l'autorisation          parents de ce chier. Voici les r gles qui d terminent les autorisations d'un processus su
 w sur ce chier. On peut aussi s'interroger sur la signi cation de l'autorisation x pour           un chier :
un r pertoire.
    L'autorisation de lecture correspond au droit de lire le contenu du chier, l'autorisation           si le propri taire e ectif du processus et le propri taire du chier sont les m mes, le
d' criture correspond au droit d' crire dans le chier, l'autorisation d'ex cution correspond            autorisations du processus sont les autorisations du chier accord es au propri tair
au droit d'ex cution du chier si le chier n'est pas un r pertoire et au droit de travailler             sinon, si le groupe du chier est le groupe e ectif du processus ou l'un des groupe
dans son arborescence si le chier est un r pertoire.                                                    de l'utilisateur chier, les autorisations du processus sont les autorisations du chie
    Pratiquement, on a le tableau suivant :                                                             accord es au groupe,
  Type de Fichier          Fichier ordinaire                 R pertoire
  Autorisation                                                                                          sinon, les autorisations du processus seront celles accord es aux autres .
  Lecture             r lire le contenu du chier             lister les sous- chiers
  Ecriture           w modi er le contenu du chier ajouter, enlever des sous-
                                                               chiers
  Ex cution           x ex cuter le chier                    travailler dans le r pertoire
    Pour mieux comprendre le tableau ci-dessus il est bon de se rappeler la structure interne
d'un r pertoire (voir 2.3.2). Ainsi, on comprend que, si on veut supprimer un chier d'un
r pertoire, il faut et il su t d'avoir l'autorisation d' crire dans le r pertoire (pour e acer
l'entr e correspondant au chier dans le r pertoire).
    Donc, si l'on veut prot ger un chier sans interdire l'acc s au r pertoire dans lequel il
est situ , il faut enlever l'autorisation d' criture dans le r pertoire parent pour interdire
la suppression de ce chier et enlever l'autorisation d' criture sur le chier lui-m me pour
interdire la modi cation du chier.

2.4.2 Autorisations set user id et set group id
    Les droits d'un processus sur un chier d pendent du propri taire et du groupe e ectifs
d'un processus et pas du propri taire et du groupe r els.
    Habituellement le propri taire et le groupe e ectifs sont le propri taire et le groupe r els
(l'utilisateur qui a lanc le processus, et son groupe). Cependant, si le code ex cut par
un processus est celui d'un chier binaire qui a le bit set user id (resp. group user id )
positionn , le propri taire e ectif (resp. le groupe e ectif) du processus est le propri taire
(resp. le groupe) du chier binaire.
    Ce fait est par exemple utilis par la commande passwd pour permettre un simple
utilisateur de changer son mot de passe dans des chiers qu'il n'est pas normalement
autoris modi er : seul le super-utilisateur root a le droit de modi er le chier des mots
de passe mais la commande passwd a l'autorisation set user id et appartient root. Le
simple utilisateur a donc tous les droits de root le temps qu'il ex cute la commande passwd
(qui ne lui permet de modi er que son propre mot de passe). Il r cup re ses droits de
simple utilisateur d s la n de l'ex cution de la commande passwd.
18                                CHAPITRE 3. PREMIERS PAS DANS LE SYST ME                       3.2. SORTIE DU SYST ME                                                                   1
                                                                                                     Dans un mot de passe on peut utiliser tous les caract res sauf # et @. Dans les compa
                                                                                                 raisons pour tester si un mot de passe est valable, les majuscules et les minuscules ne son
                                                                                                 pas quivalentes.
                                                                                                     Pour des raisons de s curit , l'administrateur peut imposer la modi cation du mot d
                                                                                                 passe intervalles r guliers.
Chapitre 3                                                                                       3.1.2 D marrage d'une session
Premiers pas dans le syst me                                                                        Apr s que l'utilisateur ait entr son nom et son mot de passe, certaines actions son
                                                                                                 automatiquement e ectu es par Unix :
                                                                                                    - le shell de d marrage est lanc (le plus souvent zsh pour les tudiants de l'universit
                                                                                                      de Nice),
   Ce chapitre donne quelques informations utiles pour commencer travailler dans un
syst me Unix. Certaines notions voqu es sont d velopp es dans la suite du cours (par                - le r pertoire HOME devient le r pertoire courant,
exemple, les chiers de con guration du shell).                                                      - des chiers d'initialisation sont automatiquement lanc s. Ils initialisent l'environne
                                                                                                      ment de l'utilisateur. Ils donnent en particulier des valeurs initiales aux variable
3.1 Entr e dans le syst me                                                                            TERM (nom du type de terminal, le plus souvent xterm si on travaille sous X
                                                                                                      Window) et PATH (voir 3.7.2). Ces chiers sont tudi s plus en d tails en 15.3.
    Lorsqu'un terminal est allum , certains processus sont automatiquement lanc s par le         Remarque 3.2
syst me pour g rer les entr es et les sorties depuis ce terminal. En particulier, un processus        Si on travaille sous X Window, une variable importante est DISPLAY qui indiqu
est lanc pour attendre l'entr e d'un nom d'utilisateur et d'un mot de passe.                          aux clients X (programmes qui utilisent le syst me graphique X Window) avec qu
    Le nom d'utilisateur est attribu par l'administrateur du syst me.                                 terminal clavier- cran-souris ils doivent travailler.
3.1.1 Changer son mot de passe (passwd)                                                          3.2 Sortie du syst me
    Par prudence, l'utilisateur doit changer le mot de passe que l'administrateur lui a
attribu lorsqu'il entre pour la premi re fois dans le syst me.                                       La commande exit permet de sortir d'un shell. S'il s'agit du shell de connexion, l
 passwd                                                                                          session de travail se termine.
permet d'entrer un nouveau mot de passe.
Remarque 3.1
     Sur les syst mes dont les mots de passe sont g r s par le syst me NIS (voir 6.6),
                                                                                                 3.3 Touches sp ciales
     les mots de passe (et plusieurs autres chiers utilis s par le syst me) de plusieurs            Quelques touches/caract res ont des signi cations sp ciales (Ctrl C s'obtient au clavie
     machines sont centralis s sur une seule machine. La commande pour changer le mot            en maintenant appuy e la touche Ctrl] du clavier tout en appuyant sur la touche C) :
     de passe est alors yppasswd qui a la syntaxe :                                               Ctrl S interrompt la transmission des caract res entre le terminal et le programme e
       yppasswd nom-login
                                                                                                          cours
                                                                                                  Ctrl Q r tablit la transmission en lib rant tous les caract res tap s depuis un pr c
    L'utilisateur doit entrer l'ancien mot de passe avant de donner le nouveau. Pour viter                dent Ctrl S
des fautes de frappe (impossibles voir puisque le mot de passe ne s'a che pas l' cran),           Ctrl D est transmis comme une n de chier par le driver de terminal s'il est l'uniqu
le nouveau mot de passe doit tre entr deux fois. Seul le propri taire du mot de passe (ou                 caract re d'une ligne (voir 8.1).
le super utilisateur) peut entrer un nouveau mot de passe. Le mot de passe doit comporter                 Elle permet donc de terminer un shell la place de la commande exit, sauf
au moins 6 caract res.                                                                                    l'utilisateur inhibe cette fonction pour viter des sorties involontaires en pla an
20                                CHAPITRE 3. PREMIERS PAS DANS LE SYST ME                      3.5. CONSULTATION DU MANUEL EN LIGNE (MAN)                                              2
         la commande interne set -o ignoreeof du shell dans un chier d'initialisation           3.5 Consultation du manuel en ligne (man)
         du shell (voir 15.3). Il est en e et facile de taper par erreur Ctrl] D au lieu, par
         exemple, de Shift] D.                                                                     La commande man permet de consulter le manuel de r f rence des commandes Unix
         La touche Ctrl] D permet aussi d'e acer le caract re sur lequel se trouve le            man -s    num ro-section ] commande
         curseur quand on modi e une ligne de commande.                                         a che les pages du manuel de r f rence sur la commande et dans la section indiqu e. Su
 Ctrl C interrompt l'ex cution d'une commande                                                   certaines versions de man le num ro de la section est donn seul, sans tre pr c d d
 Ctrl U e ace la ligne de commande en cours d' criture                                          l'option -s . 1 est le num ro de section par d faut.
   Les quatre ches permettent de rappeler les commandes d j tap es et de se d placer                Les di rentes sections sont les suivantes (sur un Unix Solaris on peut trouver de
dans ces commandes pour les modi er (tout caract re tap s'ins re dans la commande).             variantes sur les di rents Unix) :
                                                                                                  1. commandes pour l'utilisateur (ls, sort, etc.),
3.4 Format des commandes Unix                                                                     2. appels syst me (pour les programmeurs en langage C),
    Une grande partie des commandes Unix ont t crites l'origine par des utilisateurs
et ont t int gr es dans le lot des commandes standards. Dans un premier temps, aucune             3. fonctions diverses de di rentes librairies (pour les programmeurs en langage C),
syntaxe standard n'avait t clairement choisie pour le format des options des commandes.
Une cons quence f cheuse est que certaines options qui se correspondent dans des com-             4. information sur les formats de chiers (passwd, group, etc.),
mandes di rentes, peuvent avoir des noms et des syntaxes di rentes. Par exemple, pour             5. informations diverses,
d signer un s parateur de champ, la commande sort utilise -d alors que la commande
 cut utilise -t .                                                                                 6. jeux et d monstrations,
    La syntaxe g n rale des commandes Unix est :
 commande options... arguments...                                                                 Les informations pour l'administration du syst me sont donn es dans la section 1M.
   Les arguments indiquent les objets sur lesquels la commande va agir et les options             Chaque section a une entr e particuli re intro qui la d crit et donne quelques info
indiquent des variantes dans l'ex cution de la commande.                                        mations g n rales.
   Les options sont le plus souvent pr c d es d'un tiret - . L'ordre des options est le plus
souvent indi rent et plusieurs options peuvent tre regroup es derri re un seul tiret.           Exemples 3.3
   Les arguments peuvent tre absents et, dans ce cas, prennent des valeurs par d faut.           (a) man man
Exemples 3.1                                                                                     (b)   man ls
 (a) date
                                                                                                 (c)   man -s 2 intro   (ou man   2 intro   suivant les Unix)
 (b)   ls -la
                                                                                                 man -k mot-cl
 (c)   ls -l /users/students                                                                    a che une ligne sur chaque entr e (en g n ral le nom d'une commande Unix) du manu
                                                                                                qui contient mot-cl dans la section NAME (qui comporte une description succincte d
 (d)   ls /users/students                                                                       la commande) du manuel.
   Dans les manuels de r f rence,                                                               Remarque 3.3
  ] indique les options ou les arguments facultatifs,                                               Pour que cette option fonctionne, l'administrateur doit e ectuer une indexation pr a
arg... indique que l'argument arg peut tre r p t .                                                  lable des noms de commandes qui sont r pertori es dans le manuel.
Exemple 3.2                                                                                     Exemple 3.4
       ls   -abcCdfFgilmnopqrRstux]       files...]                                                    man -k directory
22                                CHAPITRE 3. PREMIERS PAS DANS LE SYST ME                       3.7. COMMANDES                                                                           2
3.6 Nom d'un chier, nom absolu, nom relatif                                                      peuvent tre appel es par leur nom terminal. Il n'est pas n cessaire de taper leur nom
                                                                                                 absolu ou relatif.
    Le nom terminal est compos d'au plus 14 caract res si l'on veut rester compatible                On peut par exemple taper 'man' au lieu de '/bin/man' parce que le r pertoire /bi
avec toutes les versions d'Unix syst me V (jusqu' 255 caract res dans toutes les versions        fait partie de la liste de r pertoires de la variable PATH.
r centes d'Unix). Tous les caract res du code ASCII sont autoris s sauf / et le caract re            On peut a cher la valeur de PATH avec la commande (en g n ral la liste est plu
de code 0.                                                                                       longue que la r ponse donn e ici (~) est le prompt) :
    Le nom (ou chemin) absolu est compos du nom terminal pr c d du chemin d'acc s                (~) echo $PATH
  ce chier depuis la racine. Par exemple, /users/students/jean/a che Le premier /                /bin:/usr/bin:/users/students/toto/bin:/usr/ucb:.
d signe le r pertoire racine. Les / suivants servent de s parateurs entre les noms des           La valeur est une suite de noms de r pertoires s par s par : . Le r pertoire courant peu
r pertoires et le nom terminal.                                                                   tre indiqu par un . , ou par : au d but ou la n de la liste.
    Ce nom absolu est souvent lourd manier car il peut tre tr s long. Un chier peut tre              Pour des raisons de s curit , il n'est pas conseill de mettre le r pertoire courant a
d sign par son nom (ou chemin) relatif qui correspond la position du chier relativement          d but de la liste. En e et, la liste est parcourue de gauche droite pour rechercher un
au r pertoire courant o se trouve le processus qui d signe le chier (voir 2.2). Un nom est       commande et on n'est pas certain de ne pas avoir par exemple un chier ls pi g dan
relatif quand il ne commence pas par un / .                                                      le r pertoire courant, lorsque l'on se d place dans l'arborescence et que l'on lance cett
                                                                                                 commande.
Exemple 3.5                                                                                          Cette variable est initialis e par l'administrateur du syst me au moment de la cr atio
    Si l'utilisateur (plus pr cis ment le processus qui ex cute le shell courant de l'utilisa-   de l'utilisateur. L'utilisateur peut ensuite modi er sa valeur. Le plus souvent cette valeu
    teur) se trouve dans le r pertoire /users/students/jean , il pourra d signer le chier        est donn e dans le chier .zshenv si on travaille avec zsh (voir 15.3).
    de l'exemple ci-dessus par a che . S'il se trouve dans le r pertoire /users/students ,
    il pourra d signer ce chier par jean/a che .                                                 Remarque 3.4
                                                                                                     La variable PATH n'est utilis e pour rechercher une commande que si le nom de l
     Noms relatifs particuliers :                                                                    commande ne comporte aucun / . Si vous tapez bin/cmd , la commande ne ser
.        d signe le r pertoire courant (o l'on se trouve)                                            recherch e que dans le r pertoire bin situ sous le r pertoire courant et pas sou
..       d signe le r pertoire parent du r pertoire courant                                          tous les r pertoires bin de tous les r pertoires list s dans la variable PATH. Tape
                                                                                                      ./cmd est un bon moyen d'ex cuter une commande de son r pertoire courant, alor
                                                                                                     que cmd risque d'ex cuter un autre cmd situ dans un des r pertoires de la variab
3.7 Commandes                                                                                        PATH.
3.7.1 Lancer une commande, supprimer un processus                                                3.7.3 Nom complet et type d'une commande (whence, whereis)
    Lorsqu'il a la main (le prompt est a ch ) l'utilisateur peut lancer une commande en              Comme on vient de le voir, la facilit o erte par la variable PATH provoque parfois de
tapant son nom suivi ventuellement de ses options et de ses arguments.                           probl mes. Sous ksh et zsh (mais pas sous sh ), la commande whence permet de savoir o
    La plupart des commandes peuvent s'interrompre en tapant sur la touche d'annulation.         se situera la commande ex cut e :
Cette touche est le plus souvent Ctrl] C ou la touche DEL].                                       whence    -vp] commande
    Certaines commandes peuvent se prot ger contre une interruption par la touche d'annu-        indique comment serait interpr t e la commande si elle tait tap e : fonction, command
lation. Dans ce cas, on peut tout de m me les interrompre par la commande kill (voir 7.2).       interne du shell, alias ou chemin absolu pour un chier situ dans un des r pertoires de l
    Un processus lanc en arri re-plan est automatiquement prot g d'une interruption par          variable PATH.
la touche d'annulation et la seule fa on de l'interrompre est d'utiliser la commande kill.           -v est l'option verbeuse un peu plus bavarde . Avec l'option -p, on demande de n
                                                                                                 rechercher que les chiers ex cutables (et pas les fonctions, commandes internes ou alias
3.7.2 Nom d'une commande, variable PATH                                                              Certaines commandes peuvent se retrouver plusieurs endroits de l'arborescence. C
                                                                                                 sont souvent des versions di rentes. On peut par exemple avoir les versions Unix BSD
   Pour faciliter le travail de l'utilisateur, les commandes qui sont situ es dans la liste      et Unix OSF d'une commande. Pour retrouver toutes les versions qui se trouvent de
des r pertoires enregistr e dans la variable PATH (attention, le nom est en majuscules)          emplacements standards de l'arborescence, on dispose de la commande whereis . Cett
24                                 CHAPITRE 3. PREMIERS PAS DANS LE SYST ME                                          2
commande donne aussi les emplacements de pages du manuel en ligne et des sources des
programmes.

3.7.4 Compl tion des commandes par zsh
   Avec zsh, l'utilisateur peut utiliser la touche Tab] pour compl ter les noms de com-
mandes ou les noms de chiers.
   S'il y a plusieurs possibilit s, zsh compl te avec le plus de caract res qu'il peut et envoie
un beep sonore. L'utilisateur peut avoir les di rentes possibilit s en tapant Ctrl D.
   S'il ne peut compl ter, il envoie un beep sonore.
   Pour entrer une tabulation dans une commande, l'utilisateur doit la faire pr c der de
Ctrl V.

                                                                                                   Deuxi me partie
                                                                                                    Commandes
                                                                                        2




Chapitre 4
Commandes li es l'arborescence des
 chiers
4.1 Visualisation de l'arborescence (ls)
 ls   options...]    fichiers...]
donne des informations pour chaque chier sp ci (pour le r pertoire en cours si aucu
 chier n'est sp ci ). Le type d'information donn d pend du type du chier :
      si le chier cit est un r pertoire, ls a che des renseignements sur les chiers (de tou
      types, pas seulement les chiers ordinaires) qui sont directement sous ce r pertoir
      Sans option, seuls les noms terminaux (pas les noms absolus ou relatifs) des chier
      sont donn s.
      si un chier cit n'est pas un r pertoire, ls a che des renseignements sur ce chie
      Le nom du chier est donn (tel qu'il a t donn dans la ligne de commande : nom
      relatif ou absolu). Sans option, c'est surtout utile quand on emploie des caract re
      sp ciaux (* ou ? par exemple, tudi s en 4.5) dans la ligne de commande.
Options
-l        format d taill (voir 4.2)
-a        liste aussi les noms de chiers qui commencent par un . (qui ne sont pas no
          malement list s)
-A        comme l'option -a mais les r pertoires . et .. ne sont pas a ch s
-d        si l'argument est un r pertoire, liste seulement son nom (et pas les chiers qu
          sont sous ce r pertoire)
-t        trie par date de derni re modi cation (sinon la liste des chiers est tri e pa
          d faut par ordre alphab tique), les plus r cemment modi s en premier
-i        a che au d but de la ligne le num ro de i-node des chiers
-R        listage r cursif des sous-r pertoires
-g        a che le groupe du chier quand elle est associ e l'option -l (utile seulemen
          en Unix BSD voir remarque (a) de 4.2.1)
28     CHAPITRE 4. COMMANDES LI ES L'ARBORESCENCE DES FICHIERS                             4.2. INFORMATION D TAILL E SUR LES FICHIERS (LS -L)                                        2
$ ls -l /                                                                                                         nom du                     taille du                   nom du
total 20954                                                                                 autorisations       propriétaire                  fichier                    fichier
lrwxrwxrwx     1   root       system          7   Apr   26    1995   bin -> usr/bin
drwxr-xr-x     6   root       system       6144   Jan   18   07:02   dev                     drwxr-xr-x        15 root           system         4608 Jan 19 07:02 etc
drwxr-xr-x    15   root       system       4608   Jan   18   07:02   etc
lrwxrwxrwx     1   root       system          7   Apr   26    1995   lib -> usr/lib        type du          nombre               nom du                  date de dernière
drwxr-xr-x     2   root       system        512   Feb    3    1995   mnt
                                                                                           fichier          de liens             groupe                   modification
drwxr-xr-x     4   root       system        512   Sep   19   10:52   net
drwxr-xr-x    10   root       system       2560   Jun   23    1995   sbin                               Fig.   4.2 Format de sortie d'une ligne de la commande ls -lg
drwxr-xr-x    25   root       system        512   Dec    7   10:15   students
drwxrwxrwt     3   root       system       5120   Jan   18   08:45   tmp
drwxr-xr-x     4   root       system        512   Jan   13    1995   users
                                                                                           Remarques 4.1
drwxr-xr-x    22   root       system        512   Dec   19   13:07   usr
                                                                                            (a) Les versions Unix OSF et Syst me V de ls a chent le nom du groupe du chie
drwxr-xr-x    20   root       system        512   Apr   26    1995   var
                                                                                                avec l'option -l . En Unix BSD, le groupe s'a che avec l'option -g . Si on veu
-rwxr-xr-x     1   root       bin       9246472   Jun   23    1995   vmunix
                                                                                                r cup rer une information dans une des colonnes il est donc pr f rable d'associe
........
                                                                                                toujours l'option -g l'option -l .
                   Fig.   4.1 Format de sortie de la commande ls -lg                        (b) Les dates sont a ch es avec l'ann e, ou l'heure et la minute selon que la date es
                                                                                                plus ou moins r cente (six mois avant la date actuelle).
-L       si un chier est un lien symbolique, cette option indique que l'on veut des ren-
        seignements sur le chier point par le lien et pas sur le chier lui-m me (voir      4.2.2 Types de chiers
        commande ln en 9.3)
                                                                                               Le type du chier est a ch l'aide du premier caract re de la ligne de description d
Exemples 4.1                                                                                 chier :
 (a) ls -l bin /usr/bin                                                                                chier ordinaire
                                                                                            d        r pertoire (directory)
 (b) ls -ld a*                                                                              b          chier sp cial de type bloc (essentiellement les disques)
     a che les informations sur les chiers du r pertoires courant (dont le nom commence     c          chier sp cial de type caract re (disque, streamer, terminal, etc.)
     pas par un a ). L'option -d est indispensable pour ne pas entrer dans les sous-        l        lien symbolique
     r pertoires s'il y en a dont le nom commence par a .                                   s        socket
 (c) ls -t f* | head -1                                                                        Pour les liens symboliques, le nom du chier point est donn la suite des autre
     a che le nom du chier le plus r cemment modi parmi tous les chiers du r pertoire      renseignements sur le chier :
     courant, dont le nom commence par un f .                                                 lrwxrwxrwx       1 root          1200   Feb 25 20:09 fich      -> fichierP
                                                                                               Pour les chiers sp ciaux, la taille n'a aucun sens elle est remplac e par le majeur e
                                                                                           le mineur : le majeur d signe le pilote (le programme de gestion du p riph rique driver e
4.2 Information d taill e sur les chiers (ls -l)                                           anglais) et le mineur d signe le p riph rique particulier g r par ce pilote :
                                                                                               crw-rw-rw-      1 root       39,6 Feb 25 20:09 tty01
4.2.1 Format d'a chage
   Un exemple de format d'a chage de la commande ls -l appliqu e un r pertoire est         4.2.3 Mode d'acc s au chier
donn la gure 4.1. Une premi re ligne donne le nombre de blocs de 1024 octets qu'oc-
cupent l'ensemble des chiers list s par la commande. Le format d'une ligne est d taill        Les autorisations (on dit aussi le mode d'acc s au chier) du chier sont indiqu e
dans la gure 4.2.                                                                          par les neuf caract res qui suivent le type du chier. Les trois premiers caract res sont le
                                                                                           autorisations du propri taire du chier, les trois suivants sont les autorisations du groupe d
30       CHAPITRE 4. COMMANDES LI ES L'ARBORESCENCE DES FICHIERS                                  4.5. CARACT RES SP CIAUX POUR LE SHELL                                                                         3
 chier et les trois derniers sont les autorisations des autres (qui ne sont pas le propri taire   ?           d signe un caract re quelconque,
et qui n'appartiennent pas au groupe).                                                                c1 -c2] ou c1 c2...]
                                                                                                           d signe un caract re sp ci par l'int rieur des crochets. Par exemple, a-z
4.2.4 Nombre de liens                                                                                      d signe une lettre minuscule et AEIOUY] d signe une voyelle majuscule.
                                                                                                           On peut aussi d signer un caract re quelconque qui n'est pas parmi les caract re
    Pour les chiers ordinaires il s'agit du nombre de chiers ayant le m me num ro de                       sp ci s entre les crochet en faisant suivre le crochet ouvrant du caract re ^
i-node.                                                                                                    Par exemple, sous zsh, ^0-9] d signe un caract re qui n'est pas un chi r
    Pour les r pertoires, il indique le nombre de sous-r pertoires du r pertoire (augment                  Attention, sous sh et ksh, il faut crire !0-9] 1 .
de 2, car . et .. sont compt s).                                                                   n       supprime la signi cation sp ciale du caract re suivant.
                                                                                                  Exemple 4.3
4.3 Se d placer dans l'arborescence (cd)                                                              Si l'utilisateur tape la commande
                                                                                                          ls -l bin/A 0-9]*
 cd    r pertoire]                                                                                        la commande suivante sera lanc e apr s l'interpr tation du shell :
d place le processus dans r pertoire (r pertoire HOME par d faut).
                                                                                                          ls -l bin/A1abc bin/A2xy
Exemple 4.2                                                                                           si les 2 chiers A1abc et A2xy sont les deux seuls chiers du r pertoire bin qu
       cd /users/students/jean                                                                        commencent par un A suivi d'un chi re.
   Une facilit o erte par zsh est bien utile quand on a besoin de travailler entre deux           Remarque 4.2
r pertoires :                                                                                         Attention, * ne peut d signer une cha ne de caract res qui comprend un / o
     cd -                                                                                             une cha ne de caract res qui commence par un . si ce . est plac en t te ou just
     permet de se d placer dans le r pertoire o l'on tait avant le dernier d placement.               derri re un / . Ces deux exceptions sont aussi valables pour les caract res sp ciau
                                                                                                       ? et ] .
4.4 A cher le r pertoire courant (pwd)                                                                Autrement dit, le caract re . doit tre explicitement d sign s'il est plac au d bu
                                                                                                      d'un nom terminal de chier. Par exemple, si on veut tous les chiers du r pertoir
 pwd
                                                                                                      courant qui se terminent par la lettre c (y compris ceux qui commencent par un .
    Il est souvent plus prudent de taper cette commande avant d'e ectuer une commande                 il faut taper
dangereuse (suppression de chiers par exemple) pour savoir o l'on est plac dans l'arbo-                   ls -d .*c *c
rescence.                                                                                             L'interpr tation par le shell de ces caract res sp ciaux peut avoir des e ets ind sirable
                                                                                                  car le shell l'e ectue n'importe o dans une commande. On peut utiliser \ pour vite
4.5 Caract res sp ciaux pour le shell                                                             cette interpr tation sur le caract re suivant. On peut aussi utiliser " ou ' pour emp che
                                                                                                  l'interpr tation sur une portion de texte (voir 14.9).
4.5.1 G n ration des noms de chiers (*,?, )                                                       4.5.2 Le caract re sp cial
    Les caract res * ? ] sont interpr t s par le shell quand ils gurent dans une com-
mande. Cette interpr tation s'appelle la g n ration des noms de chiers. Le shell interpr te          Pour ksh et zsh (mais pas pour sh ), le caract re ~ (seul ou plac en t te de mot)
chaque mot qui les contient comme un mod le de noms de chiers : il remplace le mot par            une signi cation particuli re :
une liste alphab tique des noms des chiers qui correspondent ce mod le.                                    d signe le r pertoire HOME de l'utilisateur,
    Si aucun chier ne correspond au mod le, le mod le est laiss tel quel par sh et ksh. Pour          utilisateur
zsh, c'est le cas si l'option NO_NOMATCH est positionn e (voir 14.1.2), sinon, zsh interrompt                 d signe le r pertoire HOME de l'utilisateur indiqu .
l'interpr tation de la commande et ne lance pas son ex cution.                                       1. Il faut se souvenir (voir 14.11.1) que, sous zsh et sans indication particuli re, un shellscript est ex cu
 *         d signe z ro, un ou plusieurs caract res,                                              par sh et il faut donc utiliser cette syntaxe dans les shellscripts
32       CHAPITRE 4. COMMANDES LI ES L'ARBORESCENCE DES FICHIERS                                  4.7. RECHERCHER DES FICHIERS DANS L'ARBORESCENCE (FIND, LOCATE)3
Exemples 4.4                                                                                      reconnait les caract res *, ?, ] (attention, la n gation des caract res entre crochets es
 (a) cp ~/fich    ~/bin                                                                           donn e par un ! et pas par un ^). Un . n'est reconnu en d but de nom que s'il est donn
 (b)   ls -l ~toto/bin/fich
                                                                                                  explicitement.
                                                                                                  Exemple 4.5
4.5.3 Le caract re sp cial #                                                                           find /usr -name "info*" -print

    Dans les shellscripts, le shell consid re que tout mot qui commence par un # est le                recherche tous les chiers situ s sous /usr dont le nom commence par info. On do
d but d'un commentaire qui va jusqu' la n de la ligne. Si un mot commence par un #                     entourer info* avec des guillemets pour viter le remplacement (par le shell) de * pa
et n'introduit pas un commentaire, il faut donc le faire pr c der de n . Un # l'int rieur              des noms de chiers (voir 14.8).
d'un mot n'est pas consid r comme un caract re sp cial.                                               La commande nd a de nombreuses autres options qui permettent de rechercher le
Remarques 4.3                                                                                      chiers qui v ri ent certains crit res. En voici quelques unes :
  (a) En mode interactif (c'est- -dire lorsque la commande est tap e directement au clavier        -size n        taille en nombre de blocs de 512 octets
       par l'utilisateur), zsh (mais pas ksh ) ne consid re pas # comme un caract re sp cial.      -mtime n nombre de jours depuis la derni re modi cation
                                                                                                   -atime n nombre de jours depuis le dernier acc s
 (b) Voir le cas particulier d'un chier ex cutable dont la premi re ligne commence par                Dans les options ci-dessus, n peut tre remplac par +n (nombre sup rieur n) ou pa
      #! en 14.11.1.                                                                              -n (nombre inf rieur n).
                                                                                                   -user nom propri taire
4.5.4 Autres caract res sp ciaux                                                                   -type t        type du chier (un f pour un chier ordinaire et les autres abr viation
                                                                                                                  comme dans la commande ls -l voir 4.2)
    Sous zsh, ! et la tabulation sont des caract res particuliers.                                -perm nb_octal
    ! est li   l'historique des commandes. Si on veut l'utiliser dans un autre sens, il faut le                  est vrai si le chier a les autorisations nb_octal
faire pr c der de \. Ce caract re tant li l'historique des commandes n'a d'utilit qu'en           -perm -nb_octal
interactif. zsh ne le consid re donc pas comme un caract re sp cial dans un shellscript.                          est vrai si le chier a au moins les autorisations nb_octal
    La tabulation permet la compl tion de commande. Si on veut ins rer une tabulation                 Les deux options -exec et -ok permettent d'ex cuter une commande sur les chier
dans une commande, on la fait pr c der de Ctrl V .                                                qui v ri ent les crit res pr c dents. Le chier examin peut tre d sign par {} (isol de
                                                                                                  autres caract res) dans la commande. Ces deux options renvoient vrai si le code retour d
                                                                                                  la commande est 0 (voir 14.1.6). L'option -ok demande une con rmation de l'utilisateu
4.6 A cher le type d'un chier ( le)                                                               avant l'ex cution de la commande. Il ne faut pas oublier le          nal qui indique que l
                                                                                                  commande est nie. Il doit tre pr c d par \ pour que le shell ne l'interpr te pas.
 file fichiers...                                                                                 -exec commande n
tente de deviner le type de chier (r pertoire, ex cutable binaire, shellscript, ASCII, lan-       -ok commande n
gage, etc.).                                                                                          Toutes ces options peuvent tre reli es par les op rateurs logiques ! (n gation), -o
                                                                                                  (ou logique) et regroup es avec des parenth ses. Le et logique est obtenu par la juxtapo
4.7 Rechercher des chiers dans l'arborescence ( nd, lo-                                           sition des options.
                                                                                                      Les options sont examin es (et ex cut es pour -print, -exec et -ok) tant que la cond
    cate)                                                                                         tion peut tre satisfaite pour le chier en cours d'examen. D s que la condition ne peu
                                                                                                  plus tre satisfaite nd passe au chier suivant.
 find r pertoires... -name mod le-nom -print
a che les noms des chiers dont les noms correspondent mod le-nom et situ s dans                   Exemples 4.6
l'arborescence des r pertoires.                                                                    (a) find ~ -mtime -10 -print
    mod le-nom peut comporter des caract res sp ciaux semblables aux caract res sp ciaux               a che les noms des chiers de l'arborescence du r pertoire HOME de l'utilisateu
utilis s dans la g n ration des noms de chiers par le shell (voir 4.5). Plus exactement, nd            qui ont t modi s dans les dix derniers jours.
34       CHAPITRE 4. COMMANDES LI ES L'ARBORESCENCE DES FICHIERS                                                                                                                         3
 (b)   find /users -user toto -mtime -10 -exec ls -ld {} \
       a che des renseignements d taill s sur les chiers de l'arborescence de /users, qui
       appartiennent toto et qui ont t modi s dans les 10 derniers jours.
 (c)   find ~toto ! -user toto -exec ls -ld {} \
       a che des renseignements d taill s sur les chiers qui n'appartiennent pas
       dans son r pertoire HOME.
                                                                                      toto
                                                                                              Chapitre 5
 (d)   find ~toto -perm -002 -exec ls -ld {} \
       a che des renseignements d taill s sur les chiers du r pertoire HOME de toto, qui
       ont (au moins) l'autorisation d' criture pour les autres.                              Protection des chiers
 (e)   find ~ -name core -ok rm {} \
       supprime (apr s con rmation par l'utilisateur) tous les chiers core situ s sous le
       r pertoire HOME.
       Les chiers core sont cr es automatiquement quand certains programmes s'inter-
                                                                                              5.1 Changement des autorisations (chmod)
       rompent par suite d'une erreur. Ils peuvent servir aux experts pour trouver la cause    chmod    -R] mode-acc s fichiers...
       de l'erreur.                                                                           donne des autorisations aux chiers. Seuls le propri taire du chier et le super utilisateu
 (f)   find . \( -name "*.java" -o -name "*.html" \) -exec more {} \
                                                                                              peuvent utiliser chmod.
       a che page page tous les chiers "*.java" et "*.html" de l'arborescence du r per-          mode-acc s indique quelles sont les autorisations que l'on donne on peut donner ce
       toire courant.                                                                         autorisations sous forme absolue ou symbolique.
                                                                                                 L'option -R (r cursif) indique que, si un des chiers est un r pertoire, chmod do
 locate mod le-de-nom...                                                                      changer les autorisations de toute l'arborescence du r pertoire.
recherche les chiers dont le nom correspond mod le-de-nom.                                       Mode d'acc s absolu
    Si mod le-de-nom contient des jokers (*,? ou ]), locate donne tous les chiers dont           Les autorisations sont donn es par mode-acc s sous forme d'un nombre octal compos
le nom contient mod le-de-nom. Sinon elle donne les chiers dont le nom correspond au          de 3 chi res.
mod le.
    Cette commande GNU n'est pas toujours install e sur les syst mes Unix. Si l'admi-            Le premier chi re correspond aux autorisations que l'on donne au propri taire de
nistrateur l'a install e, elle permet de g rer une base de donn es des chiers disponibles.     chiers, le deuxi me correspond au groupe des chiers et le troisi me correspond tous le
Dans ce cas, cette commande est norm ment plus rapide que la commande nd et charge            autres utilisateurs.
beaucoup moins le syst me.                                                                       Pour calculer chacun des chi res, on ajoute les valeurs des autorisations en comptan
                                                                                              4 pour read, 2 pour write et 1 pour execute.
                                                                                                 d'o , par exemple,
                                                                                                 chmod 755 fichier
                                                                                              donne toutes les autorisations au propri taire et les autorisations de lecture et d'ex cutio
                                                                                              aux autres.
                                                                                                 Mode d'acc s symbolique
                                                                                                  Les autorisations sont donn es par mode-acc s sous la forme suivante :
                                                                                                   qui]... op permissions... op permissions ...]
                                                                                                   qui d signe celui ou ceux qui recevront ces autorisations : u (propri taire), g (groupe
                                                                                              o (les autres) ou a (tous les 3, par d faut)
                                                                                                   op indique si l'on veut ajouter ou enlever des autorisations : + (ajouter), - (enlever
                                                                                              = (donner les autorisations comme dans le mode absolu)
36                                        CHAPITRE 5. PROTECTION DES FICHIERS                                                                                                                3
   Les permissions sont donn es par r, w ou x.
Exemples 5.1
 (a) chmod ug+wx fichier
 (b) chmod ug+w-x fich
 (c) chmod o=w fich                                                                                Chapitre 6
5.2 Masque pour les autorisations (umask)                                                          Commandes d'observation du syst me
 umask       nnn]
donne la valeur octale nnn (cf. mode absolu de chmod en 5.1) au masque qui sera uti-
lis pour limiter les autorisations que recevront les nouveaux chiers au moment de leur
cr ation.                                                                                          6.1 Date et Heure (date)
Exemple 5.2                                                                                         date
      umask 026                                                                                    a che la date et l'heure. Des formats d'a chage sont disponibles en option.
      les chiers et r pertoires qui seront cr s dans la suite de la session n'auront ni
      l'autorisation d' criture pour le groupe (2) ni les autorisations d' criture et de lecture
      pour les autres (6).                                                                         6.2 Nom de l'ordinateur (hostname)
     umask
                                                                                                    hostname
(seul) a che le masque en cours. Celui-ci est en g n ral 022 si l'utilisateur n'a pas lanc de      a che le nom de l'ordinateur sur lequel la commande s'ex cute ( taloa.unice.fr , par exemp
commande umask. Les nouveaux chiers sont alors cr s avec les autorisations rw-r--r--
(car ils ne sont pas suppos s tre ex cutables) et les nouveaux r pertoires avec les autori-
sations rwxr-xr-x .                                                                                6.3 Nom du syst me d'exploitation (uname)
                                                                                                    uname -a
                                                                                                   a che des informations sur le syst me d'exploitation.

                                                                                                   6.4 Information sur les utilisateurs (who, nger)
                                                                                                    who
                                                                                                   a che le nom de login, le nom du terminal et l'heure du login pour chaque utilisateu
                                                                                                   actuellement en ligne.
                                                                                                      Si un utilisateur s'est connect par l'interm diaire du r seau (et pas directement sur l
                                                                                                   machine qui ex cute la commande who), le nom de la machine d'o il vient est indiqu
                                                                                                   entre parenth ses la n de la ligne.
                                                                                                      who am I
                                                                                                   a che les informations sur l'utilisateur qui s'est connect pour d marrer la session en cour
                                                                                                    whoami
                                                                                                   a che le nom de login de l'utilisateur qui a lanc la commande.
38                     CHAPITRE 6. COMMANDES D'OBSERVATION DU SYST ME                          6.7. ESPACE DISQUE OCCUP                                                                  3
 finger     @machines...]                                                                         ypcat -k network
a che les informations de la commande who et des informations informelles sur les utili-       a che l'ensemble des netgroups (voir cours sur les r seaux). L'option    -k   permet d'avo
sateurs (leur nom et pr noms, leur t l phone,. . . ) actuellement connect s sur les machines   les noms des groupes et pas seulement les noms des membres.
(la machine locale par d faut).                                                                   ypwhich -x
 finger utilisateur @machine]...                                                               a che les noms possibles pour les di rents types de chiers que le syst me NIS peut g re
a che les informations sur les utilisateurs sp ci s, m me s'il ne sont pas connect s. nger
donne plus d'informations sur les utilisateurs que lorsque l'on n'indique pas d'utilisateurs
en particulier. De plus les contenus des chiers .plan et .project des r pertoires HOME         6.7 Espace disque occup
des utilisateurs sont a ch s. Pour utilisateur on peut donner le nom de login ou le nom
 r el a ch par la commande.                                                                    6.7.1 Place occup e par la branche d'un r pertoire (du)
 rusers                                                                                         du    options...]    fichiers...]
devrait donner une liste des utilisateurs connect s sur le r seau (mais a ne marche pas        a che le nombre de blocs occup s par les chiers indiqu s (r pertoire en cours par d faut
toujours...).                                                                                  Si un des chiers est un r pertoire, c'est le nombre de blocs occup s par toute l'arborescenc
                                                                                               plac e sous le r pertoire qui est a ch e.
6.5 Derni res connexions au syst me (last)                                                         Sous Unix Syst me V ou OSF les blocs ont une taille de 512 octets, sous Unix BSD i
                                                                                               ont une taille de 1 Ko. Consultez le manuel en ligne de du pour en savoir plus.
     Il est prudent de v ri er r guli rement que personne n'est entr sous son propre nom.       -s      a che seulement le nombre total de blocs
 last     -n]   utilisateur]     terminal]
                                                                                                -a      a che la taille de tous les chiers et r pertoires
a che des informations sur les derni res connexions. On peut se limiter aux connexions         Exemple 6.2
d'un utilisateur ou aux connexions tablies partir d'un certain terminal. On peut aussi                du -s $HOME
se limiter aux n derni res connexions.
Exemple 6.1                                                                                    6.7.2 Place libre d'un syst me de chiers (df)
       last -3 toto
                                                                                                df    syst me-fichiers]     fichier]
       a che les trois derni res connexions (y compris l'actuelle) de toto.                    a che le nombre de blocs de 512 octets disponibles pour le syst me de chiers sp ci
Remarque 6.1                                                                                   Le syst me de chiers peut tre sp ci par le nom du p riph rique (/dev/. . . ) ou par u
    last ne donne pas toujours les connexions partir des terminaux X ou des stations            chier quelconque du syst me mont .
    de travail. Cela d pend du syst me de gestion des connexions de X Window et des                df (sans argument) a che les renseignements sur tous les syst mes mont s (voir 1.6.1
      chiers de con guration install s par l'administrateur syst me.                           Exemples 6.3
                                                                                                (a) df /dev/rz3a
6.6 Syst me Network Information Service (NIS)                                                        a che les renseignements sur le syst me de chier du syst me de chier li au nom
                                                                                                     de chier sp cial /dev/rz3a (une partition d'un disque).
    Le syst me NIS (anciennement appel Yellow Pages ) permet de concentrer sur une              (b) df .
seule machine la gestion de certains chiers utilis s pour l'administration du syst me Unix.          a che les renseignements sur le syst me de chiers sur lequel se trouve le r pertoir
    Il permet en particulier de g rer les chiers qui contiennent les informations sur les            courant.
utilisateurs (noms, mot de passe, r pertoire HOME, programme de d marrage) et sur les
noms et num ros IP des machines du r seau local.
     ypcat passwd
a che l'ensemble du chier des mots de passe (si l'administrateur syst me l'a autoris ).
                                                                                               6.8 Nom du terminal utilis (tty)
     ypcat hosts                                                                                tty
a che l'ensemble des noms et des num ros IP des machines du r seau local.                      a che le nom du terminal associ      l'entr e standard du processus courant. Le code retou
40                    CHAPITRE 6. COMMANDES D'OBSERVATION DU SYST ME                                                                                            4
(voir 14.1.6) est 0 si l'entr e standard est un terminal et 1 sinon.



                                                                       Chapitre 7
                                                                       Commandes pour la gestion des
                                                                       processus
                                                                          Pour la gestion des processus on se reportera aussi aux facilit s o ertes par les shel
                                                                       ksh et zsh d crites en 14.5.1 et la section 14.5 sur les processus lanc s en arri re-plan.

                                                                       7.1 Processus en cours d'ex cution (ps)
                                                                        ps   options...]
                                                                       a che des renseignements sur les processus en cours d'ex cution et associ s au termina
                                                                       num ro de processus, terminal qui a lanc le processus, temps d'ex cution du processu
                                                                       nom de la commande qui a lanc le processus.
                                                                           Si aucune option n'est sp ci e, ps donne les informations sur les processus associ s
                                                                       l'utilisateur qui a lanc la commande.
                                                                           Cette commande o re de nombreuses options qui varient suivant les syst mes Unix.
                                                                       existe au moins trois versions di rentes : BSD, OSF et Syst me V (ou Solaris). Voici le
                                                                       principales options o ertes par la version Unix BSD :
                                                                        -a        tous les processus lanc s depuis un terminal par tous les utilisateurs,
                                                                        -x        tous les processus de l'utilisateur, m me ceux qui n'ont pas t lanc s depuis u
                                                                                  terminal
                                                                        -l        donne des renseignements suppl mentaires, en particulier le pid du processus p r
                                                                                  (PPID) de chacun des processus,
                                                                        -e        a che les valeurs des variables d'environnement,
                                                                        -w        a che en 132 colonnes (80 colonnes par d faut),
                                                                        -ww a che autant de caract res qu'il faut pour avoir tous les renseignements su
                                                                                  chaque processus (utile avec l'option -e).
                                                                       Exemple 7.1
                                                                              Pour a cher des informations d taill es sur tous les processus sans exception on do
                                                                              lancer dans les di rentes versions :
                                                                              en BSD : ps -axlww
42               CHAPITRE 7. COMMANDES POUR LA GESTION DES PROCESSUS                            7.3. LANCEMENT AUTOMATIQUE DE PROCESSUS DES MOMENTS DONN S (
       en OSF : ps -Al ww                                                                       7.3 Lancement automatique de processus des moment
       en Syst me V : ps -Afl                                                                       donn s (at, crontab)
                                                                                                    Si l'administrateur du syst me l'a autoris (voir le manuel en ligne des commandes a
7.2 Supprimer un processus en cours d'ex cution (kill)                                          et crontab ), les utilisateurs peuvent programmer le lancement automatique de processu
    On peut supprimer un processus lanc en avant-plan en tapant la touche d'annulation          m me lorsqu'il ne sont pas connect s.
(le plus souvent Ctrl-C) dans la fen tre dans laquelle ce processus a t lanc . Pour les             at sert lancer une commande un moment donn . crontab est plus sp cialemen
processus lanc s en arri re-plan (voir 14.5), cette touche d'annulation n'a aucun e et. Pour    utilis pour lancer des commandes intervalles r guliers (chaque jour par exemple).
les supprimer il faut utiliser la commande kill.                                                    Sans entrer dans les d tails, voici des exemples standards :
                                                                                                    at   -f ~/fichier 3:00     am   January   24
 kill    -signal] pid
                                                                                                   lance les commandes contenues dans ~/fichier (indiquez toujours un nom absolu)
envoie le signal indiqu au processus dont pid est le num ro de processus. signal est un         3 heures du matin le 24 janvier.
num ro de signal compris entre 0 et 15 (15 par d faut) ou le symbole d'un signal : HUP              at   -l
(1), INT (2), QUIT (3), KILL (9), TERM (15), etc... (taper kill -l pour avoir la liste              a che les commandes programm es.
compl te des noms des signaux.)                                                                     crontab fichier-cron

Exemples 7.2                                                                                       programme ce qui est indiqu dans le chier fichier-cron. Voici un exemple de conten
 (a) kill 128                                                                                   d'un tel chier (voir le manuel en ligne pour plus d'explications) :
                                                                                                #   Lance 'dumptout -f' tous les jours (sauf le lundi)            2h du matin
 (b)   kill -9 128
                                                                                                #   (0 minutes), tous les jours du mois, tous les mois,
                                                                                                #   le dimanche (0) et du mardi au vendredi (2-6)
 (c)   kill %2                                                                                  0   2 * * 0,2-6 /usr/adm/dumptout -f
       tue le processus lanc en arri re-plan qui a le num ro 2 pour le shell dans lequel la          crontab -l
       commande kill a t tap e.                                                                     a che les commandes programm es.
                                                                                                    crontab -e
 (d)   kill -9 -1                                                                                   permet de modi er les commandes programm es.
      tue tous les processus lanc s par l'utilisateur qui a tap le kill. ex cuter en cas
      d'anomalie et d'urgence. Par exemple quand des nouveaux processus sont engendr s
        grande vitesse par une erreur de programmation.                                         7.4 Gestion du plan d'un processus par le shell
   Les super-utilisateurs peuvent tuer tous les processus. L'utilisateur normal ne peut tuer        La plupart des shells (mais pas sh ) permettent de g rer le plan o se d roule les pro
que ses propres processus.                                                                      cessus (en arri re-plan ou non). Cette gestion est tudi e en 14.5.1.
Remarque 7.1
    Le signal 15 (envoy par d faut) peut tre intercept par le processus qui il est
    destin . Ce processus peut avoir l'amabilit de laisser la place nette avant de mourir
    (par exemple, il peut e acer les chiers temporaires qu'il a cr s). Il peut aussi refuser
    de mourir et continuer de s'ex cuter normalement.
    Si on veut tre certain de tuer un processus, il faut lui envoyer le signal 9 qui ne peut
     tre intercept .
    Pour laisser une chance au processus de mourir proprement , il est conseill d'essayer
    d'abord de tuer avec le signal 15 et de n'utiliser le signal 9 que si le processus vis ne
    veut pas se laisser tuer.
44CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER                                 8.2. AFFICHER LES OCTETS D'UN FICHIER (OD)                                            4
                                                                                                  ligne2
                                                                                                       <-- on tape la touche       Ctrl] D
                                                                                                  cr e nouveaufichier    avec deux lignes de texte.


Chapitre 8                                                                                        8.2 A cher les octets d'un chier (od)
                                                                                                      Cette commande ne sera pas tudi e ici mais il faut conna tre son existence pour le
                                                                                                  cas o l'on doit examiner le contenu des chiers qui ne contiennent pas du texte a chabl
A cher, imprimer, envoyer le contenu                                                                  emacs poss de aussi le mode de travail Hexl qui permet de voir, et m me de modi e
                                                                                                  les octets d'un chier. On tape M-x hexl- nd- le pour charger le chier binaire. On peu
d'un chier                                                                                        aussi simplement passer en mode Hexl une fois que l'on a charg un chier dans un bu e
                                                                                                  ( M-x hexl-mode ).

                                                                                                  8.3 A cher page page (more) - Notion de pipe
8.1 A cher le contenu d'un chier, concat ner plusieurs
     chiers (cat) - Notion de redirection                                                          more   fichiers...]
                                                                                                  a che le contenu des chiers page par page. Le chier par d faut est l'entr e standard.
                                                                                                      En bas de chaque page on dispose de plusieurs commandes :
 cat    -nsv]    fichiers...]
a che le contenu des chiers.                                                                       h             a che la liste des commandes disponibles
  Si aucun chier n'est sp ci , l'entr e standard est prise par d faut.                              Retour] a che une ligne de plus
     Options                                                                                        espace] a che l' cran suivant
-n      num rote les lignes                                                                        i espace] a che i lignes de plus
-s      r unit plusieurs lignes vides en une seule ligne                                           Ctrl B        revient la page pr c dente (ne marche pas si le ot de donn e ne vient pa
-v      a che les caract res non visibles                                                                        d'un chier ordinaire)
                                                                                                   q ou Q        sort de more
Exemples 8.1                                                                                       =             a che le num ro de la ligne en cours
 (a) cat /etc/passwd                                                                               /texte        recherche un texte : a che un nouvel cran qui commence 2 lignes avant l
                                                                                                                 1 re ligne qui contient texte
 (b)   cat                                                                                         n             refait la derni re recherche
       a che (plus exactement, envoie sur la sortie standard) les lignes qui sont tap es au       :n             va au chier suivant
       clavier. On termine en tapant Ctrl D qui est transform en annonce de n de chier            :f             a che le nom du chier et le num ro de la ligne
       par le driver de terminal. C'est surtout utile avec une redirection (voir ci-dessous).         Gr ce un pipe (notion tudi e en 14.3) la commande more peut recevoir sur so
     Le nom de la commande vient de concat ner car                                                entr e standard ce qu'une autre commande a envoy vers la sortie standard. On peu
                                                                                                  ainsi e ectuer un a chage page page de ce qu'aurait a ch cette autre commande. Pa
     cat fich1 fich2 >fich3
                                                                                                  exemple :
concat ne ch1 et ch2 dans ch3. > est un symbole de redirection (la sortie standard                   ls -l /bin | more
est redirig e vers ch3 par d faut, la sortie standard est l' cran). Cette notion sera d taill e
en 14.2.
    La commande cat permet de cr er des petits chiers sans passer par un diteur de
textes ( $ est le prompt dans l'exemple suivant) :
                                                                                                  8.4 Sorties sur les imprimantes
$ cat >nouveaufichier                                                                                Lorsque l'utilisateur lance l'impression d'un chier, le contenu de ce chier est envoy
ligne1                                                                                            dans une le d'attente. Il sera imprim lorsque le programme gestionnaire du spoule (tra
46CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER                               8.4. SORTIES SUR LES IMPRIMANTES                                                           4
duction du terme anglais spool qui est d'ailleurs le plus souvent utilis ) le s lectionnera.       Options
Ce syst me de spool permet de redonner la main tout de suite l'utilisateur sans attendre        -Pimprimante dirige l'impression vers l'imprimante sp ci e
la n de l'impression du contenu du chier.                                                       -h        supprime la banni re d'impression (premi re page o sont imprim s le nom
    Il existe deux syst mes d'impression : lp (Unix Syst me V) et lpr (Unix BSD). Le                           de l'utilisateur qui a lanc l'impression et diverses autres informations)
syst me d crit ici est le syst me lpr. Avec le syst me lp, la commande lp remplace la
commande lpr et la commande lpstat donne des informations sur le syst me d'impression,          Exemples 8.3
en particulier sur les noms des imprimantes. Les syst mes Unix actuels disposent des deux        (a) lpr -h -Plp3 fichier
syst mes d'impression et des passerelles sont souvent install es par l'administrateur pour       (b) ls -l | lpr -h
laisser le choix l'utilisateur : un seul des deux syst mes fonctionne mais les commandes
de l'autre syst me sont disponibles (elles font appel au seul syst me install sans que
l'utilisateur s'en aper oive).                                                                  8.4.3 Informations sur les requ tes d'impression (lpq)
                                                                                                 lpq    -Pimprimante]     utilisateur]
8.4.1 Informations sur le syst me d'impression (lpstat, printcap)                               a che des renseignements (utilisateur, position dans la le d'attente, nom du chier
                                                                                                imprimer, identi cateur de la requ te, taille de ce qui sera imprim ) sur les requ tes d'im
    En Unix BSD, le chier /etc/printcap contient les noms et descriptifs des impri-             pressions actuellement en attente d' tre imprim es.
mantes du syst me. Sous Unix Syst me V et OSF, la commande lpstat permet d'avoir des               Options
informations sur le syst me d'impression.                                                       -Pimprimante
 lpstat    options ]                                                                                           limitent les informations aux requ tes envoy es sur l'imprimante
     Options                                                                                    utilisateur limitent les informations aux requ tes lanc es par utilisateur.
-d             donne l'imprimante par d faut
-p             statut des imprimantes et de la gestion des les d'attente associ es              Exemple 8.4
-r              tat du d mon d'impression                                                           lpq -Plp3 jean
-s             un r sum des pr cedentes options                                                     donne les informations sur les requ tes envoy es par jean sur l'imprimante lp3.
-t             tout ce que vous avez toujours voulu savoir sur le syst me d'impression
-v             noms des imprimantes et des noms de chiers sp ciaux ou de machines               8.4.4 Suppressions de requ tes d'impression (lprm, cancel)
               distantes associ es
                                                                                                 lprm   -Pimprimante]      -]   identificateur-requ te]
Exemple 8.2                                                                                     permet un utilisateur de supprimer une requ te d'impression qu'il avait pr c demmen
    Certaines de ces options peuvent tre suivies de listes d'imprimantes, d'utilisateurs        lanc e (si l'impression est d j commenc e, elle est interrompue). On ne peut supprime
    ou d'identi cateurs de requ tes d'impression.                                               les requ tes d'un autre utilisateur (sauf si l'on est le super-utilisateur). Si aucune optio
       lpstat -p lp17,lp30                                                                      n'est sp ci e, la requ te en cours d'impression est supprim e sur l'imprimante par d fau
                                                                                                si elle appartient l'utilisateur qui a lanc la commande lprm.
                                                                                                   Options
8.4.2 Lancement d'une requ te d'impression (lpr)                                                -Pimprimante
 lpr    options]   fichiers...]                                                                                supprime toutes les requ tes que l'utilisateur a lanc es sur imprimante
place une liste de chiers dans la le d'attente d'une imprimante. Un saut de page est            -           supprime toutes les requ tes que l'utilisateur a lanc es
envoy apr s chaque chier.                                                                       identi cateur-requ te
   Si la liste de chiers est vide, c'est l'entr e standard qui est plac e en le d'attente (ce                  supprime la requ te d nie par son identi cateur (on peut faire a che
qui permet d'utiliser lpr la n d'un pipe).                                                                     l'identi cateur par la commande lpq tudi e en 8.4.3).
   Dans tout syst me, l'administrateur donne une imprimante par d faut vers laquelle les        Exemples 8.5
requ tes sont dirig es (imprimante de nom lp ). La variable PRINTER peut contenir le             (a) lprm -Plp1    26
nom d'une autre imprimante. On peut aussi utiliser l'option -P.
   Les options sont nombreuses et peuvent varier suivant la version du syst me.                  (b) lprm -
48CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER                              8.7. PASSER EN POSTSCRIPT (A2PS)                                                           4
    Si la commande lprm semble ne pas fonctionner, on peut essayer la commande cancel.             De plus, les noms des options peuvent changer avec les versions de a2ps. Heureusemen
Par exemple, pour supprimer les requ tes que l'utilisateur toto a envoy es sur l'imprimante    l'une des options que l'on retrouve dans toutes les versions est l'option -h qui donne un
lp0, on tapera :                                                                               liste des options disponibles.
   cancel -u toto lp0                                                                              Les options globales permettent d'indiquer si le Postscript g n r est envoy sur l
                                                                                               sortie standard ou sur une certaine imprimante, s'il faut imprimer les chiers binaires,
                                                                                               les pages auront une en-t te, etc.
8.5 Envoyer le contenu d'un chier (mail)                                                           Les options particuli res chaque chier (ou groupe de noms de chiers qui suivent le
                                                                                               options) permettent d'indiquer si on veut une ou deux pages par feuille physique de papie
  Le plus simple pour envoyer par courrier lectronique un chier est d'utiliser la com-         si on veut le mode de positionnement portrait ou paysage (sur la largeur de la pag
mande mail avec une redirection de l'entr e standard (voir 14.2.4) :                           landscape en anglais), etc. Il existe de tr s nombreuses options, souvent tr s utiles que l'o
 mail adresse      <fichier                                                                    aura int r t lire dans le manuel en ligne.
envoie le contenu de chier l'utilisateur d sign par adresse.
   Le chier doit tre un chier texte. Si on veut envoyer un chier binaire, il faut le traiter   Exemple 8.7
auparavant par uuencode (voir cours sur les r seaux).                                                 Sur la version de a2ps install e aujourd'hui sur les stations Sun de l'universit d
                                                                                                      Nice, la commande suivante imprime le chier truc.java sur l'imprimante par d fau
Exemple 8.6                                                                                           deux pages par feuille en mode paysage :
      mail -s "Fichier fich" toto@machine.unice.fr < rep/fich                                       a2ps truc.java | lpr
     L'option -s permet de donner un sujet au message elle n'est pas disponible sur                 Pour imprimer une page par feuille en mode portrait :
     toutes les versions de la commande.                                                            a2ps -P -1 truc.java | lpr
   Nous ne d crirons pas davantage la commande mail puisque nous utiliserons d'autres
commandes (netscape, xmh ou emacs ) pour envoyer et recevoir du courrier lectronique.

8.6 Mise en page (pr)
 pr     options]   fichiers...]
met en forme les chiers (longueur de ligne, longueur de page, en-t te, ...) et envoie le
r sultat vers la sortie standard. pr prend l'entr e standard par d faut si aucun chier n'est
indiqu .
   pr poss de de nombreuses options que nous ne d crirons pas ici.

8.7 Passer en Postscript (a2ps)
 a2ps     options-globales]       options-partic.] fichiers]...
passe le contenu d'un ou plusieurs chiers (entr e standard par d faut) en Postscript.
    C'est une commande tr s utile pour imprimer le contenu de chiers sur des imprimantes
Postscript. En particulier, les programmes informatiques sont souvent trait s d'une fa on
particuli re par a2ps qui imprimera par exemple tous les mots-cl s du langage en caract res
gras.
    Attention, le fonctionnement standard d pend des versions intall es, en particulier pour
l'endroit o est envoy le Postscript g n r .
50                                              CHAPITRE 9. GESTION DES FICHIERS                   9.2. LIENS AVEC M ME NUM RO DE I-NODE (LN)                                                  5
                                                                                                   9.2 Liens avec m me num ro de i-node (ln)
                                                                                                       Un r pertoire contient des liens qui r f rencent les chiers plac s sous le r pertoir
                                                                                                   Un chier peut avoir plusieurs liens qui le r f rence. On peut ajouter un lien vers un chie
                                                                                                   dans un autre r pertoire que le r pertoire de cr ation du chier en utilisant la command
Chapitre 9                                                                                         ln.
                                                                                                       Un lien permet de donner plusieurs noms un m me chier physique. La cr atio
                                                                                                   d'un lien permet, par exemple, de partager une commande entre plusieurs utilisateurs san
Gestion des chiers                                                                                 dupliquer son contenu.
                                                                                                    ln    -f] fichier1     fichier2]
                                                                                                   cr e un lien chier2 : chier2 sera un chier qui aura le m me i-node que chier1.
                                                                                                        chier1 doit d j exister et ne pas tre un r pertoire. Les deux chiers doivent apparten
   Ce chapitre traite des commandes qui travaillent sur des chiers ordinaires en les consi-          un m me syst me de chiers.
d rant comme un tout, sans faire d'op rations sur le contenu des chiers.                               L'utilisateur doit avoir l'autorisation d' criture sur le r pertoire de chier2. L'autorisa
                                                                                                   tion d' criture sur le chier chier2 n'est pas n cessaire (comme pour rm voir 9.4).
                                                                                                        chier2 est optionnel. S'il n'est pas indiqu , le lien se fait sur le chier situ dans
9.1 Copier des chiers (cp)                                                                         r pertoire courant de m me nom terminal que chier1.
                                                                                                       L'option -f permet d' craser chier2 s'il existe d j .
 cp    -ip] fichier1 fichier2                                                                       ln    -f] fichiers... r pertoire
copie le chier ordinaire chier1 sur le chier ordinaire chier2.                                     cr e des liens entre les chiers et les chiers situ s sous le r pertoire et de m me nom
    L'utilisateur doit avoir l'autorisation de lecture sur le chier chier1.                        terminal que les chiers. Les chiers doivent appartenir un m me syst me de chiers qu
    Si chier2 existe, l'utilisateur doit avoir l'autorisation d' criture dans ce chier. Dans       le r pertoire. Les chiers ne peuvent tre des r pertoires.
ce cas, le contenu de chier2 est cras par celui de chier1. chier2 garde son propri taire,
son groupe et ses autorisations.                                                                   Remarques 9.2
    Si chier2 n'existe pas, l'utilisateur doit avoir l'autorisation d' criture sur le r pertoire    (a) Quand un lien a t cr entre deux chiers, les deux chiers jouent ensuite un r
de chier2. Dans ce cas, chier2 est cr et son propri taire et son groupe sont ceux de                    sym trique et il n'y a pas lieu de distinguer un chier originel parmi tous ces chier
l'utilisateur et les autorisations sont celles de chier1 (mais tient compte de la valeur du
masque de umask voir 5.2).                                                                          (b) Tous les chiers li s ont le m me i-node. Ceci implique que lorsque l'on modi e
     Options                                                                                            contenu ou les autorisations d'un chier, tous les chiers qui lui sont li s sont modi
-i        fait a cher un message de demande de con rmation si chier2 existe d j                         de m me. Le propri taire, le groupe et les dates de derni re modi cation et de cr atio
-p        conserve les dates de modi cation et d'acc s, le propri taire et le groupe, le mode           sont les m mes pour tous les chiers li s correspondant un m me chier physique
          d'acc s de chier1 pour chier2 (ne tient pas compte du masque pour le mode
          d'acc s voir 5.2)                                                                         (c) La commande       ls -l   renverra un nombre de liens sup rieur 1 pour les chier
 cp    -ip] fichiers... r pertoire
                                                                                                        ainsi li s.
copie les chiers dans le r pertoire.
Exemples 9.1                                                                                        (d) Si on supprime un des deux chiers par la commande rm, l'autre continuera existe
  (a) cp fich* jean/courrier                                                                            avec un nombre de lien a ch par ls -l diminu de 1.
 (b) cp fichier1 fichier2 jean                                                                     Exemples 9.2
Remarque 9.1                                                                                        (a) ln rep1/fichier      rep2
      Si un des chiers est un r pertoire, cp envoie un message d'erreur mais les autres
       chiers sont copi s (voir 10.4 pour la copie de r pertoires).                                 (b)   ln rep1/fichier rep2/fichier2
52                                             CHAPITRE 9. GESTION DES FICHIERS                  9.5. D PLACER, RENOMMER DES FICHIERS (MV)                                                  5
9.3 Liens symboliques (ln -s)                                                                        Cette commande n cessite l'autorisation d' criture sur le r pertoire du chier mais pa
                                                                                                 la lecture ou l' criture sur le chier lui-m me (mais si l'utilisateur n'a pas l'autorisatio
    Les liens tudi s dans la section pr c dente ont quelques limitations. En particulier,        d' criture sur le chier, une con rmation est demand e).
les deux chiers li s doivent tre plac s dans un m me syst me de chiers et les chiers                  Options
auxquels on ajoute un lien (ceux que l'on r f rence) ne peuvent tre des r pertoires. Les         -f        pas de demande de con rmation quand on n'a pas l'autorisation d' criture sur
liens symboliques o rent plus de souplesse.                                                                 chier, renvoie un code retour 0 (tout s'est bien pass ) m me si un des chier
    Un lien symbolique est un chier de type sp cial qui contient le nom d'un autre chier                   n'existe pas
auquel il est li . Toutes les commandes usuelles qui contiendront le nom du lien symbolique,     -r        d truit tout le contenu d'un r pertoire et le r pertoire lui-m me
travailleront en fait avec le chier dont le nom est contenu dans le lien symbolique.             -i        demande de con rmation pour chaque chier (ou r pertoire avec l'option -r)
 ln -s fichier1      fichier2]
cr e un lien symbolique chier2 qui se r f rera chier1. chier1 et chier2 peuvent tre              Exemple 9.4
des r pertoires et ils peuvent appartenir deux syst mes de chiers di rents. chier1                      rm -fr l*
peut m me tre supprim ensuite (et dans ce cas, toute r f rence chier2 provoquera une                    Attention ne pas glisser par m garde un espace entre le l et le * . On se m er
erreur) !                                                                                               aussi des claviers dont la touche l ne fonctionne pas bien ! Il est prudent de lire su
     chier1 peut tre un r pertoire.                                                                     l' cran la commande tap e avant de la lancer.
     chier2 est optionnel. S'il n'est pas indiqu , le lien se fait avec le chier situ dans le
r pertoire courant de m me nom terminal que chier1.
    On peut aussi indiquer un r pertoire comme but (comme pour les commandes cp ou
                                                                                                 9.5 D placer, renommer des chiers (mv)
mv ) :                                                                                            mv fich1 fich2
 ln -s fichiers... r pertoire                                                                    renomme ch1 en ch2. Le chier peut changer de r pertoire cette occasion.
                                                                                                  mv fichiers... r pertoire
Exemple 9.3                                                                                      les chiers passent sous r pertoire. Ils gardent le m me nom terminal.
      ln -s /usr/new/emacs/emacs bin
      cr e un lien symbolique bin/emacs qui pointe sur /usr/new/emacs/emacs.                     Exemples 9.5
                                                                                                   (a) mv fichier1 rep/fichier2
Remarques 9.3
 (a) ls -l fichier d'un chier (ou r pertoire) qui est un lien symbolique, a che le                (b)   mv jean/fich1 jean/fich2 pierre
     nom du chier sur lequel le chier est li . Si on veut les renseignements sur le chier
     point (ou les sous- chiers du r pertoire point ), il faut utiliser l'option -L de ls. Par
     exemple, ls -lL fichier                                                                     9.6 Sauvegarder sur les lecteurs de disquettes des sta
 (b) les autorisations sur un lien symbolique n'ont aucune signi cation : les droits r els
                                                                                                     tions Sun
     sont ceux du chier point .                                                                      Certaines stations Sun de l'universit de Nice ont des lecteurs de disquettes compatible
                                                                                                 avec les lecteurs install s sur les ordinateurs compatibles PC. Les utilisateurs peuvent ain
 (c) on fera attention de donner un nom absolu pour chier1, ou un nom relatif par                recopier sur des disquettes des programmes r cup r s sur le r seau Internet ou leurs chier
     rapport au r pertoire de chier2 pour que le chier point soit retrouv lorsque le             de travail pour les emmener sur leur PC personnel.
     syst me utilisera le lien symbolique.                                                           Les sauvegardes sont e ectu es r guli rement par l'administrateur du syst me su
                                                                                                 bandes ou autres supports. Pour les chiers importants, deux pr cautions valent mieu
                                                                                                 qu'une et on peut faire ses propres sauvegardes si on a acc s des stations Sun.
9.4 Supprimer des chiers (rm)                                                                        Les commandes qui permettent de travailler avec les disquettes sont les commande
                                                                                                 mcopy, mdir, etc. (chercher toutes les commandes dont le nom commence par m dans
 rm   options...] fichiers...                                                                    r pertoire contenant la commande mcopy). De plus, la commande eject permet d' jecte
enl ve le chier de son r pertoire.                                                               la disquette du lecteur. On pourra consulter le manuel en ligne pour plus de d tails.
54                                          CHAPITRE 9. GESTION DES FICHIERS                                                                                                      5
9.7 Compression et d compression (zip, gzip, compress)
   Ces trois commandes permettent de compresser les chiers. On peut ainsi archiver des
 chiers non utiliser actuellement en sauvegardant de la place. La commande zip se trouve
sur PC MS-DOS et sur Unix.
   Pour compresser des arborescences (tout le contenu d'un r pertoire et de ses sous-
r pertoires) on pourra utiliser la commande tar (voir 10.6).                               Chapitre 10
   Consultez les manuels en ligne de ces commandes pour plus de pr cisions.
                                                                                           Travail sur les r pertoires
                                                                                              Les commandes principales de gestion des chiers que l'on a vu au chapitre pr c den
                                                                                           permettent de travailler sur les r pertoires. Ce chapitre indique seulement les options o
                                                                                           fonctionnalit s li es aux r pertoires. La plupart des options d j vues (par exemple le
                                                                                           options -i de cp ou -f de rm ) sont toujours valables pour les r pertoires.

                                                                                           10.1 Cr er un r pertoire (mkdir)
                                                                                            mkdir   -p] r pertoires...
                                                                                           cr e les r pertoires indiqu s.
                                                                                               On doit avoir l'autorisation d' criture dans le r pertoire p re.
                                                                                               En l'absence de masque donn par la commande umask (voir 5.2), les autorisations su
                                                                                           le nouveau r pertoire sont 777.
                                                                                               L'option `-p cr e les r pertoires interm diaires si besoin est.

                                                                                           10.2 Supprimer un r pertoire (rmdir, rm -r))
                                                                                            rmdir r pertoires...
                                                                                           supprime les r pertoires indiqu s. Les r pertoires doivent tre vides.
                                                                                              Un autre moyen de supprimer un r pertoire :
                                                                                            rm -r r pertoires...
                                                                                           supprime les r pertoires et toute l'arborescence dont ils sont la racine .
                                                                                              ATTENTION ! rm -r * supprime tout le r pertoire de travail.

                                                                                           10.3 Changer le nom d'un r pertoire (mv)
                                                                                            mv r pertoire1 r pertoire2
56                                 CHAPITRE 10. TRAVAIL SUR LES R PERTOIRES                    10.6. PLIAGE DE R PERTOIRES EN UNE SEUL FICHIER (TAR, CPIO)                                5
  Autoris seulement si les 2 r pertoires ont le m me parent en Unix Syst me V. Unix                 ln -s /usr/local2/rep1 /usr/local/rep1
BSD l'autorise si les deux r pertoires sont dans le m me syst me de chiers.                         Si le r pertoire /usr/local/rep1 existe d j , on cr era des liens symboliques sou
Exemple 10.1                                                                                        le r pertoire /usr/local/rep1 pour tous les chiers de /usr/local2/rep1 qui son
       mv /users/students/jean /users/students/jp
                                                                                                    concern s par exemple, pour fichier1 :
                                                                                                    ln -s /usr/local2/rep1/fichier1 /usr/local/rep1

10.4 Copier l'arborescence d'un r pertoire (cp -r)                                             10.6 Pliage de r pertoires en une seul chier (tar, cpio
 cp -r r pertoire1 r pertoire2
copie toute l'arborescence de r pertoire1 sous r pertoire2.                                       La commande tar peut plier un r pertoire en un seul chier. Tous les chiers d
    L'endroit o seront copi s les chiers d pend de l'existence du r pertoire r pertoire2.      r pertoire sont alors r unis en ce chier. Le transfert des chiers sur le r seau et leu
Si celui-ci n'existe pas, il sera cr et il correspondra r pertoire1. Sinon, les nouveaux       archivage en est facilit , surtout si on compacte le chier r sultat.
 chiers se retrouveront sous le r pertoire situ dans le r pertoire r pertoire2 et de m me         Cette commande poss de de nombreuses options. On ne donne ici que les options prin
nom terminal que le nom terminal de r pertoire1.                                               cipales sur des exemples simples.
                                                                                                  tar cvf fichier.tar rep
Exemples 10.2
 (a) cp -r ~toto/rep .                                                                             cr e le chier fichier.tar qui contiendra tous les chiers des chiers indiqu s. Si u
     cr e (s'il n'existe pas d j ) un r pertoire rep sous le r pertoire courant et copie les    chier indiqu est un r pertoire (comme ici rep), toute l'arborescence du r pertoire es
      chiers de l'utilisateur toto sous ce r pertoire                                          pli e dans le chier dont le nom compl te l'option f (l'option v est l'option verbeuse
                                                                                                   Il est fortement conseill d'utiliser un nom relatif pour les chiers pli s car on peut ain
 (b)   cp -r ~toto/rep/. .                                                                     r cup rer les chiers (par tar x ) un autre endroit.
       copie les chiers de rep directement sous le r pertoire courant                             tar tvf fichier.tar

Remarque 10.1                                                                                  liste les noms des chiers pli s dans le chier fichier.tar.
                                                                                                  tar xvf fichier.tar
    La commande suivante copie les chiers plac s directement sous un r pertoire rep1           r cup re tous les chiers pli s dans fichier.tar.
    dans un r pertoire rep2.                                                                      tar xvf fichier.tar f1 f2
       cp rep1/* rep1/.* rep2                                                                  r cup re tous les chiers pli s dans chier.tar qui ont pour nom f1 ou f2.
       Les sous-r pertoires ne seront pas copi s et engendreront des messages d'erreurs.          La commande cpio permet aussi l'archivage de chiers. Elle ne sera pas tudi e ici.

10.5 Lien symbolique (ln -s)
   Un lien symbolique peut pointer un r pertoire. Ceci permet d'obtenir une con guration
attendue par un logiciel. Par exemple, beaucoup de logiciels du domaine public travaillent
par d faut avec des sous-r pertoire de /usr/local. Un lien sur ces r pertoires peut viter de
modi er les chiers de con guration des logiciels lorsque c'est impossible ou trop complexe.
Exemple 10.3
    Supposons que le syst me de chier qui contient le r pertoire /usr/local n'a pas
    assez de place pour accueillir dans /usr/local/rep1 tous les chiers n cessaires au
    fonctionnement d'un logiciel. Si le param trage du logiciel pour lui indiquer de cher-
    cher les chiers un autre endroit que /usr/local/rep1 est impossible ou complexe,
    on peut installer les chiers dans le repertoire /usr/local2/rep1 et taper :
58                                            CHAPITRE 11. EXPRESSIONS R GULI RES                11.2. EXPRESSIONS R GULI RES REPR SENTANT UN ENSEMBLE DE CARACT
                                                                                                   cha ne]
                                                                                                                d signe n'importe quel caract re de la cha ne. On peut d signer plusieurs ca
                                                                                                              ract res contigus l'aide de - . Si le premier caract re de la cha ne est ^
                                                                                                              l'expression d signe n'importe quel caract re qui n'est pas dans la cha ne.

Chapitre 11                                                                                      Exemples 11.1
                                                                                                  (a) ^ab
                                                                                                      d signe la cha ne ab plac e en d but de ligne.

Expressions r guli res                                                                            (b)    0-9]
                                                                                                        d signe un chi re quelconque.
                                                                                                  (c)    adh-lA-Z]
    Ces expressions sont utilis es par plusieurs commandes en particulier par more, emacs,              d signe a ou d ou une lettre minuscule comprise entre h et l, ou une lettre majuscule
grep, ed, sed, awk, perl 1 . Ce sont des cha nes de caract res qui repr sentent des mod les       (d)    ^0-9]
pour des cha nes de caract res. Certains caract res ont des signi cations particuli res.                d signe n'importe quel caract re qui n'est pas un chi re.
    Toutes les commandes qui utilisent les expressions r guli res ne reconnaissent pas toutes
les expressions. Les commandes grep, more et emacs travaillent avec le noyau minimum              (e)   ^\.
d'expressions r guli res qui sont pr sent es dans ce chapitre. Il existe d'autres types d'ex-           d signe une ligne qui commence par un point.
pressions r guli res. Pour conna tre exactement les expressions reconnues par une com-
mande, il faut se r f rer au manuel de r f rence, ou faire des tests... De plus, les di rentes    (f)    -d]
versions d'une commande (par exemple la commande grep) ne reconnaissent pas le m me                     d signe un    -   ou un d .
ensemble d'expressions r guli res.
    Attention ne pas confondre les expressions r guli res qui ne sont reconnues que par
certaines commandes avec les expressions qui contiennent des caract res sp ciaux interpr -       11.2 Expressions r guli res repr sentant un ensemble d
t s par le shell (voir 4.5) et qui sont donc reconnues dans toutes les lignes de commandes.
                                                                                                      caract res d'un seul type
                                                                                                       partir des expressions r guli res correspondant un seul caract re (et seulement
11.1 Expressions r guli res repr sentant un seul carac-                                          partir de ces expressions), on peut construire les expressions r guli res suivantes :
     t re                                                                                         *        une expression ci-dessus suivie du caract re * d signe 0 ou plus occurrences de
                                                                                                           caract res d sign s par l'expression. S'il y a plusieurs possibilit s, l'expressio
   Un caract re ordinaire se d signe par lui-m me. Les expressions r guli res peuvent                      d signe la plus longue cha ne partir de la gauche qui permette de trouver un
aussi contenir des caract res sp ciaux. Les expressions r guli res suivantes d signent un                  cha ne correspondant l'expression r guli re. La signi cation de * di re don
seul caract re elles sont reconnues par toutes les commandes :                                             de la signi cation habituelle lors de l'interpr tation des commandes par le shel
                                                                                                  + et ? certaines commandes, (mais pas toutes les versions de grep) donnent un sen
 n        suivi d'un autre caract re d signe ce caract re. Il permet d'enlever le sens sp cial
                                                                                                           particulier aux caract res + et ? :
          des caract res comme ., *, et \.
          plac en d but d'expression, d signe un d but de ligne.                                           ? d signe 0 ou 1 occurrence des caract res d sign s par l'expression qui pr c de
 $        plac en n d'expression, d signe une n de ligne.                                                  + d signe 1 ou plusieurs occurrences des caract res d sign s par l'expression qu
 .        (le point) d signe n'importe quel caract re except le passage la ligne ( quiva-                       pr c de.
          lent de ? du langage de commande).
                                                                                                           Pour les commandes qui ne reconnaissent pas le + , on peut le simuler pa
     1. cette commande n'est pas tudi e dans ce cours                                                      exemple, xx* peut remplacer x+ .
60                                       CHAPITRE 11. EXPRESSIONS R GULI RES                   11.3. AUTRES EXPRESSIONS R GULI RES                                                      6
n{ et n} certaines commandes (mais pas toutes les versions de grep) permettent de don-            Des possibilit s suppl mentaires sont utilis es par certaines commandes et en particulie
         ner encore plus de pr cision sur le nombre d'occurrences : on peut faire suivre une   par la commande awk (mais g n ralement pas par ed ou grep) :
         expression r guli re par (m et n sont des entiers compris entre 0 et 256) :           expression1jexpression2
         n{mn} pour indiquer exactement m occurrences                                                    d signe une cha ne correspondant la 1ere ou la 2eme expression.
                                                                                               (...)    les parenth ses permettent de modi er l'ordre de priorit des op rateurs. L'ordr
         n{m,n} pour indiquer au moins m occurences                                                     de priorit est et ], puis *, + et ?, puis la concat nation et en n |.
         n{m,nn} pour indiquer entre m et n occurrences (bornes comprises)
Exemples 11.2
 (a) ^ a-zA-Z]*
     d signe la plus longue cha ne de lettres partir du d but de la ligne si la ligne
     contient Bonjour Monsieur , c'est Bonjour qui est d sign .
 (b) 0-9]\{3\}
     d signe un nombre de 3 chi res.

11.3 Autres expressions r guli res
     On peut construire des expressions r guli res partir d'autres expressions r guli res :
concat nation
        la concat nation d'expressions r guli res d signe la concat nation des cha nes
        d sign es par chacune des expressions r guli res.
Exemple 11.3
        0-9]\{3\}A.*T$
       d signe une cha ne qui commence par 3 chi res suivis de la lettre A et qui se termine
       par la lettre T la n de la ligne.
n(...n) et nn
          Les commandes grep (cela d pend des versions) et awk permettent de d signer
         des sous-cha nes de caract res l'aide des deux types d'expressions suivants :
         n(expressionn) d signe la m me chose que l'expression elle-m me (voir utilit
              ci-apr s)
         nn o n est un entier d signe la cha ne de caract res qui correspond la nieme
              expression entour e pr c demment par \( et \).
Exemples 11.4
 (a) ^\(.*\)\1$
     d signe une ligne form e d'une cha ne r p t e 2 fois.
 (b) who | grep '^\( a-z]\) ^ ]*\1 '
     a che des informations sur les utilisateurs connect s la machine locale et dont le
     nom de login commence et se termine par la m me lettre minuscule ( d signe un
     espace).
62                         CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                         12.2. CONCEPTS DE BASE                                                                  6
                                                                                                environnement X Window, emacs est lanc dans sa propre fen tre X.
                                                                                                    Le noyau d'emacs charge en m moire de nombreux modules crits en elisp pour tendr
                                                                                                ses fonctionnalit s. Il faut indiquer l' diteur o aller chercher ces modules. Si on ut
                                                                                                lise un seul diteur de la famille emacs, on peut utiliser la variable d'environnemen
                                                                                                EMACSLOADPATH. Pour cela, on ajoutera, par exemple, les lignes suivantes dans le chie

Chapitre 12                                                                                     .zshrc (voir 15.3.2) :
                                                                                                export EMACSDIR=/usr/local/emacs-19.31
                                                                                                export EMACSLOADPATH=$HOME/emacs:$EMACSDIR/site-lisp:$EMACSDIR/lisp

 diteur de texte (emacs, xemacs)                                                                    Attention, emacs et xemacs utilisent des variantes di rentes de certains modules. O
                                                                                                 vitera d'utiliser la variable EMACSLOADPATH si on utilise les deux diteurs. Dans ce cas,
                                                                                                langage elisp permet de donner des valeurs di rentes selon le type, et m me la versio
                                                                                                de l' diteur qui lit le chier .emacs. L' criture d'un chier .emacs ne fait pas partie d
                                                                                                ce cours r cup rez des exemples d j crits de chiers .emacs et/ou lisez le manuel d
    Pour crire des textes (programmes ou donn es) sous Unix, il faut disposer d'un pro-         langage si vous tes int ress s.
gramme qui permette d'entrer du texte et de le modi er sans tre oblig de tout retaper.              Le chier .emacs du r pertoire HOME de l'utilisateur est ex cut automatiquement a
Les programmes qui font ce genre de travail s'appellent des diteurs de textes. Ils poss dent    d marrage d'emacs. Si on ne veut pas qu'il s'ex cute (par exemple si ce chier contient de
de nombreuses commandes qui facilitent la t che de l'utilisateur : recherche de cha nes de      erreurs), on lance emacs avec l'option -q.
caract res dans un texte, remplacement automatique de cha nes par une autre, copie, sup-
pression de partie de texte, etc.
    L' diteur emacs est un diteur pleine page tr s puissant. L' diteur pleine page le plus
commun sous Unix est vi mais il est moins agr able utiliser que emacs, moins puissant
                                                                                                12.1.2 Sortir de emacs
et moins souple.                                                                                   Sous X Window, le menu File permet de sortir de emacs.
    Une caract ristique essentielle de emacs est qu'il est possible (et pas trop complexe) de   C-x C-c permet de sauvegarder (apr s demande de con rmation) les bu ers avant d
personnaliser son fonctionnement en a ectant des valeurs des variables d'environnement                  sortir.
ou m me en programmant des nouvelles fonctionnalit s.
    Nous ne donnerons ici que les commandes essentielles de emacs, su santes pour com-
mencer crire des programmes et des textes simples sous Unix. La version d crite est la
version 19 avec quelques ajouts pour la version 20. Cette derni re version o re de nom-
                                                                                                12.2 Concepts de base
breuses facilit s pour travailler avec des langues non europ ennes et pour con gurer plus       12.2.1 Description d'une fen tre emacs
simplement emacs.
    xemacs est une version d'emacs plus graphique mais moins standard. Il poss de beau-            Une fen tre a ch e par emacs est compos e de :
coup de points en commun avec emacs mais certains points sont incompatibles. Nous ne
l' tudierons pas dans ce cours mais xemacs est disponible sur la plupart des machines de             une barre de menus (seulement pour les versions sous graphiques en haut de la fen tr
l'universit de Nice.
                                                                                                     la fen tre de travail proprement dite o s'a che le bu er courant, sous la barre d
12.1 Entr e et sortie                                                                                menus,
                                                                                                     la ligne d'information, situ e sous la fen tre de travail,
12.1.1 Lancer emacs
 emacs    -q]   fichier] &                                                                           le mini-bu er se trouve en bas de la fen tre il contient en g n ral une seule lign
lance la version X Window de emacs. Comme tous les clients X, il faut lancer emacs en
arri re-plan pour garder la possibilit de travailler dans la fen tre X d'origine. Dans un          Dans la version X Window, un ascenseur borde la droite de la fen tre de travail.
64                          CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                        12.2. CONCEPTS DE BASE                                                                     6
Menus de la version graphique (X Window)                                                        indiqu es par C-M- dans le manuel s'obtiennent alors en tapant d'abord Esc] puis Ctr
                                                                                                et le caract re suivant (et non pas l'inverse).
    Si on travaille dans l'environnement graphique (X Window, Windows 95 ou autre), le
haut de l' cran est occup par une ligne de noms de menus :
Bu ers permet de choisir son bu er de travail                                                   Commandes emacs
File      permet de charger, sauvegarder un chier, ouvrir une nouvelle fen tre, imprimer            Toutes les actions sous emacs sont ex cut es par des commandes dont le nom rappel
          ou supprimer un bu er, sortir de emacs                                                le type de l'action ex cut e :
Edit      permet de copier, couper, coller, d faire l'e et d'une commande, remplir avec le      next-line
          plus de mots possible les lignes d'une r gion ( Fill )                                load-file
Help      permet d'obtenir de l'aide sur emacs ou une commande Unix                             kill-word
    De nombreux modes de travail (voir 12.2.5) modi ent ces menus ou ajoutent de nou-           goto-line
velles entr es.                                                                                 save-buffers-kill-emacs
                                                                                                   L'utilisateur peut lancer ces commandes par leur nom en les pr xant avec M-x. Pa
Ligne d'information sur le mode de travail                                                      exemple,
                                                                                                M-x kill-word
     La derni re ligne en bas de l' cran contient quelques indications utiles l'utilisateur :
--**-Emacs : nom-buffer              (mode majeur mineur)--L106--position--------
    Les ** indiquent que le bu er a t modi (on peut aussi avoir %% qui indique que
le bu er est readonly ).                                                                        Associations de cl s
    mode majeur et mode mineur sont les modes de travail (voir 12.2.5).
     L106 d signe le num ro de la ligne courante.
                                                                                                   Les actions les plus couramment employ es sont associ es des cl s (combinaisons d
     position peut tre All, Bot, Top ou nn% suivant que tout le texte est a ch ou               touches du clavier). Il su t de taper la cl pour lancer la commande associ e. Voici deu
seulement la n ou le d but, ou si nn% du texte est au dessus de la premi re ligne a ch e.       exemples :
                                                                                                    Commande                        Cl
Mini-bu er                                                                                          next-line                       C-n
                                                                                                    save-buffers-kill-emacs         C-x C-c
   Les commandes tap es par l'utilisateur et les messages envoy s par emacs sont a ch s
sous la ligne d'information dans une zone appel e minibu er.                                      Les autres commandes comme goto-line doivent tre lanc es avec M-x.
   On peut annuler une commande en cours et a ch e dans ce minibu er en tapant C-g.               Les associations ( bindings ) peuvent tre modi es (voir 12.4) et peuvent d pendre d
                                                                                                mode de travail (voir 12.2.5).
12.2.2 Commandes et associations de cl s                                                        Compl ter automatiquement des noms de commandes
Touches sp ciales                                                                                   Certaines commandes ont des noms assez longs (par exemple goto-line ). Il exist
    emacs fait un grand usage de deux touches sp ciales not es C- et M- dans le manuel          des facilit s pour ne pas tre oblig de taper les noms en entier : on tape Tab] (touch
d'utilisation.                                                                                  de tabulation) d s que le nom de la commande peut se distinguer des autres noms d
     C- d signe la touche Ctrl]. Taper C-x revient appuyer sur la touche Ctrl], et              commandes si on tape ESP] (barre d'espace), emacs compl te un mot d s que ce mot s
  appuyer sur la touche x tout en gardant la touche Ctrl] enfonc e. Le maintien sur la          distingue des autres mots cl s. Pour l'exemple de goto-line , il su t de taper g suivi d
touche Ctrl] est indiqu par le - qui suit le C . M- d signe la touche Meta On l'utilise          ESP] pour avoir goto- et l suivi de TAB]. Pour entrer une tabulation ou un espace,
de la m me mani re que la touche Ctrl].                                                         su t de les faire pr c der de C-q.
    Pour les claviers qui n'ont pas de touche Meta], la touche Alt] (ou la touche marqu e           Si emacs ne peut compl ter parce qu'il y a plusieurs possibilit s de compl tions, il a ch
d'un } sur les claviers des machines Sun) joue souvent le m me r le. Sinon, on peut             une fen tre d'aide o sont a ch es toutes les suites possibles. On peut alors parcourir cett
simuler M-x en tapant sur la touche Esc] avant de taper sur la touche x. Les commandes          fen tre par C-M-v. On peut choisir une des commandes en cliquant sur son nom avec
66                         CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                            12.2. CONCEPTS DE BASE                                                                   6
bouton du milieu de la souris. Cette fen tre se referme automatiquement quand on lance             12.2.4 Point d'insertion, marque, r gions
la commande compl te.
    De m me, les noms de chiers tap s dans le mini-bu er (par exemple pour donner                  Point d'insertion
le nom d'un chier charger dans un bu er) peuvent tre compl t s par emacs quand                         Le point d'insertion indique l'endroit o les modi cations apport es au texte par l'ut
l'utilisateur tape la touche Tab] ou la barre d'espace.                                            lisateur seront e ectu es (insertion de nouveaux caract res, suppression,...). Le point es
                                                                                                   situ entre deux caract res. Il est indiqu sur l' cran par un curseur a ch sur la positio
                                                                                                   qui suit le point.
12.2.3 Bu ers et fen tres                                                                              Chaque tampon a un point d'insertion.
Tampon (ou bu er)
                                                                                                   R gion
   Chaque texte dit est conserv en m moire centrale dans un bu er. Plus g n rale-
ment, toute activit de emacs (aide en ligne, courrier lectronique, etc.) est e ectu e dans             La r gion est la zone de texte comprise entre le point d'insertion et la marque.
un bu er.                                                                                              La marque peut tre positionn e dans le texte en tapant C-<barre d'espace>ou impl
   On peut travailler avec plusieurs bu ers en m me temps. Chaque bu er a un nom. Le               citement par des manipulations de la souris.
nom d'un bu er associ un chier est le nom terminal du chier. Si on travaille avec                  C-x h met tout le texte du document comme r gion
plusieurs chiers qui ont le m me nom terminal, un num ro est accol la n du nom du                  M-h       met tout le paragraphe comme r gion
bu er.
   Sous X Window, le menu Bu ers permet de choisir un bu er.                                       Utilisation de la r gion et de l'anneau de suppression
                                                                                                        Plusieurs commandes permettent de manipuler une r gion (une zone de texte) et d
Fen tre emacs                                                                                      l'enregistrer dans un anneau de suppression .
                                                                                                        emacs conserve dans un anneau de suppression (commun toutes les fen tres) le
   emacs ouvre une premi re fen tre au d marrage.                                                  textes supprim s par les commandes qui suppriment plus d'un seul caract re (C-k, C-
   Par la suite l'utilisateur peut diviser cette fen tre en plusieurs sous-fen tres. Une fen tre   mais pas C-d, DEL] ou Backspace]). La commande M-w permet aussi d'ajouter des texte
emacs visualise une portion de bu er et permet de travailler avec les donn es a ch es.                cet anneau sans les supprimer :
Deux fen tres peuvent visualiser des portions di rentes d'un m me bu er ou visualiser              C-w         supprime la r gion (attention au w trompeur !) et la place dans l'anneau de sup
des bu ers di rents.                                                                                           pression
   Le menu File permet de g rer les fen tres : Split Window pour d couper la fen tre               M-w         enregistre la r gion dans l'anneau de suppression
en cours en deux, ou One Window pour fermer toutes les fen tres sauf une (pour cela,                    L'utilisateur peut ensuite r utiliser les textes ainsi conserv s :
on peut aussi, dans les versions graphiques cliquer avec le bouton du milieu de la souris          C-y         colle le dernier texte plac dans l'anneau de suppression l'endroit du poin
sur la ligne d'information de la fen tre choisie).                                                             d'insertion
   On peut acc der une fen tre en cliquant avec le bouton gauche dans la fen tre.                  M-y         remplace le texte pr c demment coll par le texte plac juste avant dans l'annea
                                                                                                               de suppression. On peut ainsi passer en revue tous les textes conserv s jusqu'
                                                                                                               trouver le texte que l'on veut.
Fen tre X ( frame dans le manuel en anglais)                                                            Dans un environnement X Window, on peut utiliser le menu Edit pour supprime
                                                                                                   copier ou coller une r gion. On peut aussi utiliser la souris :
   Sous X Window, l'utilisateur peut ouvrir une nouvelle fen tre X pour y a cher le bu er               Double-clic sur le bouton gauche
courant. Il peut ensuite y charger un autre bu er ou y visualiser une autre partie du bu er        enregistre le mot point par la souris dans l'anneau de suppression
courant comme il le ferait pour une fen tre emacs.                                                      Triple-clic sur le bouton gauche
   Chaque fen tre X poss de son propre menu.                                                       enregistre la ligne point e dans l'anneau de suppression
   Pour ouvrir une nouvelle fen tre X, le plus simple est d'utiliser le menu File , choix               Bouton du milieu
 Make New Frame . La fen tre peut tre ferm e par le m me menu, choix Delete Frame .                colle l'endroit du clic un texte pr c demment copi ou coup (idem C-y)
68                         CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                         12.3. COMMANDES                                                                             6
    Bouton droit                                                                                C-k      e ace la n de la ligne (situ e apr s le point) et la place dans l'anneau de sup
copie le texte plac entre le point et l'endroit du clic pour tre coll ensuite (idem M-w).                pression
Si on clique 2 fois, le texte est coup au lieu d' tre copi (idem C-w).
     Glisser (drag en anglais)
(c'est- -dire, cliquer et se d placer en maintenant un bouton de la souris enfonc ) avec le     D placer le point d'insertion
bouton gauche, du d but la n d'un texte, permet de d nir une r gion et de l'enregistrer
dans l'anneau de suppression.                                                                       Les terminaux sont souvent con gur s pour que l'utilisateur puisse utiliser les che
                                                                                                pour se d placer d'un caract re ou d'une ligne et les touches Next] et Prev] pour s
12.2.5 Mode de travail                                                                          d placer d'un cran.
    Emacs permet de travailler en plusieurs modes de travail adapt s au type de texte que           On peut aussi utiliser les commandes ci-dessous :
l'on tape et au type de travail auquel ce bu er est associ . Il existe par exemple un mode      C-a       va au d but de la ligne
de travail pour crire un programme en langage C et des modes pour envoyer et recevoir           C-e       va la n de la ligne
du courrier lectronique depuis emacs.                                                           M-< va au d but du chier
    Chaque fen tre emacs a un mode de travail majeur en cours.                                  M-> va la n du chier
    On peut aussi lancer des modes mineurs qui modi ent l g rement le fonctionnement                Dans un environnement X Window,
des modes majeurs.                                                                                  Bouton gauche
    Nous n' tudierons pas ces modes dans ce cours. Voici seulement une description rapide       d place le point l'endroit du clic
du mode dired qui peut tre tr s utile.                                                              On peut aussi utiliser la barre de d lement pour se d placer.
    On entre dans ce mode directory edition soit en ouvrant un chier r pertoire au
lieu d'un chier ordinaire, soit en appelant explicitement le mode par la commande M-x              Barre de d lement ou ascenseur (Scroll Bar)
dired-mode .                                                                                        Toutes les fen tres X Window associ es emacs poss dent une barre de d lemen
    Ce mode est tr s pratique pour se d placer dans l'arborescence : on clique avec le bouton   verticale droite de la fen tre. Cette barre repr sente tout le texte. Un rectangle intern
du milieu sur le nom du r pertoire o l'on veut aller ou sur le chier que l'on veut charger      plus ou moins long, repr sente la portion du texte actuellement a ch e.
dans un bu er. Dans ce cas, l'a chage se fait dans une deuxi me fen tre. Si on tape f               On utilise la souris pour se d placer dans le texte l'aide de cette barre. Les utilisateur
sur la ligne qui contient le curseur, l'a chage se fait dans la m me fen tre.                   de Windows sur PC ou du Macintosh remarqueront que la manipulation de la barre d
    On peut aussi copier et supprimer des chiers. On se reportera l'aide en ligne d'emacs       d lement est di rente sous emacs. Cette manipulation est identique la manipulatio
et aux menus o erts par ce mode pour en savoir plus.                                            des ascenseurs sous le client X Window xterm (voir cours sur X Window).
                                                                                                    Bouton gauche
12.3 Commandes                                                                                  d place en haut de la fen tre la ligne en face de laquelle on a cliqu . Le texte est don
                                                                                                d plac vers la n du chier d'au plus un cran. Plus on clique bas, plus on avance dans
12.3.1 Commandes de base                                                                        texte.
                                                                                                    Bouton du milieu
Insertion                                                                                       d place l'endroit du clic le rectangle interne la barre de d lement. Le texte a ch es
    Par d faut emacs est en mode insertion : tout caract re non sp cial (a chable) tap est      le texte correspondant la position nouvelle du rectangle interne. Si on veut se d place
ins r l'endroit du point.                                                                       vers la n du chier, on clique donc sous le rectangle interne.
C-q       permet d'ins rer un caract re non a chable tap la suite                               On peut aussi cliquer sur le rectangle interne de l'ascenseur avec ce bouton et glisser pou
                                                                                                se d placer contin ment dans le texte.
Suppression                                                                                         Bouton droit
                                                                                                d place l'endroit du clic la ligne plac e en haut de la fen tre. Le texte est donc d plac
Backspace supprime le caract re avant le point                                                  vers le d but du chier d'au plus un cran. Plus on clique bas, plus on remonte dans
C-d     supprime le caract re situ apr s le point (donc plac sous le curseur)                   texte.
70                        CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                       12.4. PERSONNALISATION DE EMACS                                                           7
Sauvegarder un chier                                                                         12.3.2 Autres commandes
   Les chiers charg s dans un bu er ne sont modi s que lorsque l'utilisateur indique         Rechercher du texte
explicitement qu'il veut sauvegarder les modi cations qu'il a e ectu es sur le bu er.        C-s        e ectue une recherche incr mentale (les caract res sont recherch s au fur et
C-x C-s sauvegarde le bu er courant                                                                     mesure qu'ils sont tap s) du texte tap vers la n du bu er. Pour passer l'occu
   Sous X Window le menu File permet aussi de sauvegarder les chiers sous son nom                       rence suivante, on retape C-s. Pour arr ter la recherche, on tape la touche Retur
actuel (Save Bu er ) ou sous un autre nom (Save Bu er As...).                                           ou une commande de d placement. On peut ensuite relancer la m me recherch
                                                                                                        en tapant C-s C-s.
                                                                                             C-r        e ectue une recherche incr mentale vers le d but du chier. Pour passer l'oc
Remarque 12.1                                                                                           curence suivante, on retape C-r.
    L'ancienne version du chier (s'il ne s'agit pas d'un nouveau texte) est conserv e sous   C-M-s      e ectue la recherche d'une expression r guli re (voir chapitre 11).
    l'ancien nom suivi du caract re ~ .
    emacs e ectue des sauvegardes automatiques intervalles r guliers. Ces sauvegardes        Remplacer une cha ne de caract res par une autre
sont e ectu es dans des chiers dont le nom est le nom du chier modi entour du                M-%        La question Query replace s'a che. On doit alors entrer la cha ne de caract re
caract re # . Ces sauvegardes sont supprim es en cas de n d' dition normale. S'il y a eu                  remplacer suivie de Return]. Il s'a che alors with et l'on entre la cha ne d
une sortie anormale d'emacs et si vous n'avez pu sauvegarder vos chiers, ces sauvegardes                remplacement suivie de Return].
automatiques vous permettent de r cup rer les bonnes versions de vos chiers. De plus,                   A chaque fois que la cha ne remplacer est rencontr e, l'utilisateur peut ta
si vous voulez charger un des chiers qui n'a pu tre sauvegard normalement et si emacs                   per :
s'aper oit qu'il y a un chier # plus r cent que le chier que vous voulez charger, emacs                 y ou n pour remplacer ou non,
vous envoie le message Auto save le is newer consider M-x recover- le . Vous pouvez                     q        pour arr ter de remplacer,
alors taper M-x recover- le et r cup rer automatiquement la version enregistr e dans la                 !        pour tout remplacer jusqu' la n,
sauvegarde automatique.                                                                                 C-h      pour avoir de l'aide sur la r ponse

Aide                                                                                         12.4 Personnalisation de emacs
    Sous X Window, le menu Help permet d'acc der ais ment toutes les aides n ces-               Le chier ~/.emacs est ex cut au d marrage de emacs. Il doit contenir du code Lisp
saires.                                                                                      Les amateurs clair s pourront consulter le manuel de programmation de emacs pour plu
                                                                                             de pr cisions (environ 700 pages). On dispose aussi d'une description des variables et de
                                                                                             fonctions Lisp disponibles gr ce au menu Help , Describe Function et Describe Variable
D faire ( undo )                                                                                Certaines personnalisations ne sont pas di ciles e ectuer, m me si l'on ne conna
                                                                                             pas le langage Lisp. Par exemple, les a ectations de valeurs des variables (on peut s'aide
    Si l'utilisateur s'est tromp il peut annuler la plupart des commandes qu'il a tap .      du menu Help Describe Variable ) ou les associations de touches sont tr s simples :
    Sous X Window, il peut utiliser pour cela le choix Undo du menu Edit .                         (setq inhibit-startup-message t)
    Il utile de noter que                                                                    a ecte la valeur t (true) la variable inhibit-startup-message pour viter d'avoir
C-g        sort du minibu er d'entr e des commandes en annulant la commande que l'utili-     message initial de emacs
                                                                                                   (global-set-key      find] 'isearch-forward)
           sateur est en train de taper.                                                     associe la commande de emacs isearch-forward la touche du clavier Find qui pourr
    On peut ainsi se sortir d'un mauvais pas lorsqu'emacs vous a che continuellement         ainsi tre utilis e pour lancer une recherche. Les noms des touches reconnus par emacs son
le m me message dans le mini-bu er parce que vous avez lanc une commande par une             a ch s par la commande C-h k ou par le menu Help Describe Key .
mauvaise man uvre. Il est alors souvent n cessaire de taper C-g, si n cessaire plusieurs
fois, et en se pla ant avec la souris dans le minibu er si emacs s'ent te.                     1. Plus exactement, elisp, une variante du langage Lisp
72                             CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)                                                                                                                               7
    Si une erreur survient lors de l'ex cution du chier .emacs ou des di rents modules
appel s, on peut visualiser les messages d'erreurs en allant dans le bu er *Messages* . On
peut aussi valuer du code elisp d'un bu er en mode Emacs-Lisp en tapant C-x C-e
avec le curseur plac juste derri re la parenth se fermante du code elisp .
    Un grand nombre de packages crits en elisp par la communaut internationale des
utilisateurs d'emacs permettent d'ajouter de nombreuses fonctionnalit s aux possibilit s
de base o erte par la distribution o cielle d'emacs. On peut trouver la plupart sur le site ftp               Chapitre 13
archive.cis.ohio-state.edu dans le r pertoire /pub/gnu/emacs/elisp-archive/packages.
    Si on travaille sous X Window, on peut aussi personnaliser quelques caract ristiques
de son environnement (couleurs, pr sence d'un ascenceur sur les fen tres X, etc.) avec les
  chiers d'initialisation des ressources. Tapez man emacs pour plus de pr cisions 2.
                                                                                                              Manipulation des donn es des chiers
    Depuis la version 20 un environnement minimum peut tre install pour tous les uti-
lisateurs d'emacs. Cet environnement est d ni dans les chiers site-load.el et site-start.el
(cherchez-les dans l'arborescence o est install e la version 20 les commandes locate ou
  nd sont faites pour cela). Cet environnement, s'il vous convient vous permet de r duire                     13.1 Tri (sort)
de fa on signi cative la taille de votre chier .emacs. Si des options ne vous conviennent                      sort   options]     fichiers...]
pas, allez consulter ces chiers pour voir comment changer les choix qui y ont t faits.
                                                                                                              trie les lignes des chiers (regroup es ensemble). La sortie se fait sur la sortie standard
                                                                                                              Par d faut, les lignes viennent de l'entr e standard.
12.5 Compl ments pour les versions graphiques                                                                     Les lignes sont tri es selon la valeur d'une cl de tri form e d'une ou plusieurs zone
                                                                                                              extraites de chaque ligne. Par d faut le tri se fait sur les lignes enti res selon l'ordre lex
Copier ou coller entre fen tres X Window                                                                      cographique (et selon le code ASCII) et selon l'ordre croissant par d faut.
   Quand un texte est copi ou coup (dans l'anneau de suppression) il peut tre coll                                Options pour indiquer la cl de tri :
dans une autre fen tre X Window, m me s'il ne s'agit pas d'une fen tre associ e emacs.                         +pos1 pos2 permet d'indiquer le d but et la n d'une zone de la cl de tri. Le coup
Inversement, on peut coller dans emacs un texte pr c demment copi ou coup dans une                                             +pos1 pos2 indique que la zone de tri commence au champ num ro pos
autre fen tre X Window.                                                                                                       + 1 et se termine au champ num ro pos2 + 1 (attention, non compris !
                                                                                                                              S'il n'y a pas de pos2, la zone de tri va jusqu' la n de la ligne. La notio
Choix de la police de caract res sous X Window                                                                                de champ est d nie ci-dessous dans la d nition de l'option -t.
                                                                                                               -ts parateur indique le caract re qui s pare les di rents champs.
    S-BD (Shift + bouton droit de la souris) a che un menu qui permet de choisir la police                                    Si un s parateur n'est pas d ni, les champs sont s par s par toute suit
utilis e. On choisira plut t une police espacement xe du type Courier 14 ou 7x14 .                                            d'espaces ou de tabulations contigus. Le premier caract re blanc est cons
                                                                                                                              d r comme un s parateur les espaces et tabulations suivants font part
                                                                                                                              du champ suivant (voir option -b).
                                                                                                                              Il peut y avoir plusieurs cl s de tri (voir exemple (b) ci-dessous).
                                                                                                               -b             ignore les espaces de t te dans chaque champ (-b est plac avant tous le
                                                                                                                              +pos1 ou b est accol derri re les +pos1 des champs pour lesquels cett
                                                                                                                              option est valable).
                                                                                                               -n             e ectue un tri num rique (et non lexicographique) sur les cl s. On peu
                                                                                                                              aussi accoler la lettre n derri re +pos1 si on ne veut trier num riquemen
                                                                                                                              que certains champs.
                                                                                                               -f             ignore la di rence entre majuscules et minuscules
   2. La plupart des versions d'emacs ne sont pas crites au-dessus de la bo te outils Xt et tous les chiers       Autres options :
de ressources ne sont pas utilis s                                                                             -c             a che un message si les lignes ne sont pas dans le bon ordre (et dans ce ca
74                 CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                           13.4. CONVERSION, SUPPRESSION DE CARACT RES (TR)                                          7
               renvoie un code retour gal 1 au lieu de 0)                                       a che le nombre de lignes, de mots, de caract res et le nom de chaque chier. Si des chier
-o chier       sort le r sultat du tri dans chier. Attention l'erreur suivante :                ne sont pas sp ci s, l'entr e standard est prise par d faut.
               sort chier > chier                                                                  Options
               qui d truit chier avant de le trier (voir redirections en 14.2). La bonne        -l      nombre de lignes seulement
               commande est                                                                     -w      nombre de mots seulement
               sort -o chier chier                                                              -c      nombre de caract res seulement
-r             inverse l'ordre de tri. On peut aussi accoler la lettre r derri re +pos1 si on
                                                                                                Exemples 13.3
               ne veut trier par ordre d croissant que certains champs.
-u             si plusieurs lignes ont la m me valeur pour la cl de tri, une seule de ces        (a) Nombre de chiers de /bin :
               lignes est envoy e sur la sortie standard.                                              ls -A /bin | wc -l

Exemples 13.1                                                                                    (b) Compter les lignes, mots et caract res de tous les chiers du r pertoire courant don
 (a) Tri de /etc/passwd sur le num ro de l'utilisateur :                                             le nom commence par b :
       sort -t: +2n -3 /etc/passwd                                                                     wc b*
     Le tri ne se fait pas correctement si on oublie le n la suite de +2.
 (b) Tri les chiers du r pertoire courant par taille et par nom pour les chiers qui ont la
     m me taille :
                                                                                                13.4 Conversion, suppression de caract res (tr)
       ls -lgA | sort +4n -5 +8                                                                     La commande tr permet de convertir ou de supprimer des caract res provenant d
                                                                                                l'entr e standard.
                                                                                                   Conversion de caract res
13.2 Recherche d'une cha ne de caract res (grep)                                                 tr    -cs] cha ne1 cha ne2
                                                                                                transforme les caract res provenant de l'entr e standard ainsi : les caract res contenus dan
 grep     options] expr-reg     fichiers...]                                                    cha ne1 sont transform s en les caract res correspondants de cha ne2 et les autres caract re
a che sur l' cran les lignes des chiers, qui contiennent une cha ne de caract res corres-       sont conserv s tels quels. Le tout est envoy vers la sortie standard.
pondant l'expression r guli re expr-reg (voir chapitre 11. L'entr e standard est prise par          Si cha ne2 contient moins de caract res que cha ne1, le dernier caract re de cha ne
d faut si des chiers ne sont pas sp ci s. Le code retour renvoy est 0 si l'expression           remplace les caract res manquants.
r guli re a t trouv e ou 1 sinon.                                                                   On peut d signer un caract re par son code ASCII en octal pr c d par n. On peu
   Si expr-reg comporte des caract res sp ciaux pour le shell (* ou par exemple), il ne         d signer un intervalle de caract res : e-l d signe les lettres minuscules comprises entre
faut pas oublier de les prot ger en les entourant d'apostrophes ou de guillemets (voir 14.8).   et l (bornes comprises). En Unix syst me V, la syntaxe est plut t e-l].
     Options
-c      a che seulement le nombre de lignes contenant la cha ne                                        Exemples 13.4
-i      ignore la di rence entre minuscules et majuscules                                              ( > est le prompt dans les exemples suivants)
-n      a che les num ros des lignes
-v      a che les lignes qui ne contiennent pas la cha ne                                              ~> tr aeiou AEIOU
                                                                                                       bonjour
Exemple 13.2                                                                                           Ctrl] D
       grep -c '^bin' fichier
       a che le nombre de lignes de chier qui commencent par bin .                                     bOnjOUr
                                                                                                 (a)
                                                                                                 (b)   ~> tr "a-z" "A-Z"

13.3 Compter les caract res, les mots, les lignes (wc)                                                 abcd
                                                                                                        Ctrl] D
 wc     options...]   fichiers...]                                                                     ABCD
76                  CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                         13.5. FRACTIONNEMENT VERTICAL (CUT)                                                      7
 (c)   cat toto | tr ae AE > totobis                                                            (c)   -5,8
       ou                                                                                             d signe les caract res situ s en position 1 5 et 8
       tr ae AE > totobis < toto
                                                                                                (d)   3-
     Options                                                                                          d signe les caract res situ s en position 3 la n de la ligne
-c      prend pour cha ne1 le compl ment de la cha ne1 indiqu e dans la commande. Le
        compl ment est pris par rapport l'ensemble des caract res de code 0 255.                (e)   12-20,4-15
 -s     (squeeze) ne garde en sortie qu'un seul exemplaire d'une suite d'un m me carac-             d signe les caract res situ s en position 4 20
        t re de cha ne2.                                                                          Les caract res seront toujours a ch s dans l'ordre qu'ils ont sur la ligne du chier, qu
Exemple 13.5                                                                                   que soit l'ordre donn dans la liste (voir exemple b ci-dessous).
       tr -cs a-zA-Z '\012'
       a che l'entr e au clavier, un mot (cha ne compos e uniquement de lettres) par ligne     Exemples 13.8
       (\012 est le caract re passage la ligne de code 10 en d cimal, 012 en octal).            (a) cut -c-5,10-15 fichier1 fichier2
                                                                                                    extrait les 5 premiers caract res et les caract res 10 15 de chaque ligne de fichier
     Suppression de caract res                                                                      et de fichier2 et les a che sur l' cran
 tr -d cha ne
envoie vers la sortie standard les caract res re us dans l'entr e standard s'ils ne sont pas    (b)   cut -c10-12,4-11 fichier
inclus dans cha ne. tr supprime au passage tous les caract res inclus dans cha ne.                     extrait les caract res 4 12 de chaque ligne. On remarquera que les caract res 10 e
                                                                                                      11 ne sont a ch s qu'une seule fois.
Exemple 13.6                                                                                    cut -fliste      -dd limiteur]     -s]   fichiers...]
       ~> tr -d ac
       abcad                                                                                   dans ce cas le d coupage se fait sur des champs (comme l'indique l'option -f ) d limit e
        Ctrl] D                                                                                par d limiteur (option -d tabulation par d faut).
       bd                                                                                          Attention, si plusieurs d limiteurs sont accol s, ils d nissent plusieurs champs. C'es
       ~>
                                                                                               une source fr quente d'erreurs quand le d limiteur est la tabulation ou l'espace. Quand o
                                                                                               veut extraire des champs s par s par un ou plusieurs espaces il est pr f rable d'utiliser l
                                                                                               commande awk (voir 13.10).
13.5 Fractionnement vertical (cut)                                                                 Les lignes sans d limiteur sont conserv es en entier. L'option -s indique qu'il ne fau
                                                                                               pas conserver les lignes sans d limiteur.
 cut -cliste      fichiers...]                                                                     liste est une liste de nombres entiers s par s par des virgules avec ventuellement de
d coupe un ou plusieurs chiers (entr e standard par d faut) verticalement en s lection-        tirets pour indiquer un intervalle. Le d coupage se fait sur les num ros de champs (
nant des intervalles de caract res (comme l'indique l'option -c ) conserver dans chaque        premier champ a le num ro 1). Cette liste indique quels seront les champs qui seron
ligne. Le r sultat est envoy sur la sortie standard.                                           conserv s sur chaque ligne.
    liste est une liste de nombres entiers s par s par des virgules avec ventuellement des         Les caract res seront toujours a ch s dans l'ordre qu'ils ont sur la ligne du chier, qu
tirets pour indiquer un intervalle. Le d coupage se fait sur les num ros de caract res (le     que soit l'ordre donn dans la liste.
premier caract re a le num ro 1). Cette liste indique quels seront les caract res qui seront   Exemples 13.9
conserv s sur chaque ligne.                                                                      (a) cut -f1,5 -d: /etc/passwd
Exemples 13.7                                                                                         a che les utilisateurs et le commentaire associ du chier /etc/passwd
 (a) 1,3,8                                                                                      (b) Compter combien il y a de clients distincts dans un chier de factures dont chaqu
     d signe les caract res situ s en position 1, 3 et 8                                            ligne correspond un client plac en t te de ligne (tabulation entre chaque zone d'un
 (b)   2-5,10
                                                                                                    ligne) :
       d signe les caract res situ s en position 2 5 et 10                                            cut -f1 factures | sort -u | wc -l
78                 CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                          13.7. TRAITER LES LIGNES CONS CUTIVES IDENTIQUES (UNIQ)                                   7
13.6 Comparaison du contenu de 2 chiers                                                        Exemple 13.11
                                                                                                     $ cmp fich1 fich2
13.6.1 Di rences entre deux chiers texte (di )                                                       fich1 fich2 differ : char 160, line 5

 diff    -e] fichier1 fichier2
indique quelles lignes doivent tre chang es dans chier1 pour qu'il soit identique chier2.      13.7 Traiter les lignes cons cutives identiques d'un
Les deux chiers doivent tre de type texte, structur s en lignes (voir 1.6.2).
    On peut ainsi comparer deux versions d'un m me chier.
                                                                                                    chier (uniq)
    Le r sultat n'est pas toujours facile comprendre. La lettre a indique que des lignes ont    uniq    -cdu]     fichier]
  t ajout es chier2 par rapport chier1, d indique que des lignes ont t supprim es,             n'a che qu'un seul exemplaire des lignes de chier] (entr e standard par d faut). Si plu
 c que des lignes ont t chang es. Les nombres avant la lettre sont des num ros de lignes       sieurs lignes cons cutives sont identiques, une seule est envoy e vers la sortie standard
de chier1 et les num ros qui suivent la lettre sont des num ros de lignes de chier2. Les       Cette commande ne consid re pas deux lignes identiques si elles ne sont pas cons cutive
lignes de chier1 sont pr c d es de < , celles de chier2 sont pr c d es de > .                  (il faut faire un tri pr alable si on veut les prendre en compte).
                                                                                                    Option
Exemple 13.10                                                                                  -c        a che chaque ligne en un seul exemplaire, en la faisant pr c der du nombre d
       ~> cat f1                                                                                         lignes voisines identiques
       ab                                                                                      -d        n'a che que les lignes identiques (en un seul exemplaire)
       c                                                                                       -u        n'a che que les lignes en un seul exemplaire
       e

                                                                                               13.8 Extraire le d but ou la n d'un chier
       fg
       h
       ~> cat f2
       ab                                                                                      13.8.1 D but d'un chier (head)
       e
                                                                                                head    -n]     fichiers...]
       f
       u
                                                                                               sort sur la sortie standard les n premi res lignes de chacun des chiers (de l'entr e standar
       ~> diff f1 f2
                                                                                               par d faut). Par d faut, n est gal 10.
       2d1                                                                                     Exemple 13.12
       < c                                                                                           head -5 fich*
       4,5c3,4
       < fg
       < h
                                                                                               13.8.2 Fin d'un chier (tail)
       ---                                                                                      tail    d but]     fichier]
       > f                                                                                     copie la n du chier sur la sortie standard.
       > u                                                                                         La premi re ligne a ch e est indiqu e par d but qui peut tre +n (neme ligne du chier
                                                                                               ou n (neme ligne partir de la n du chier).
                                                                                                   n peut aussi tre suivi des lettres b ou c qui indiquent que l'on compte en blocs ou e
13.6.2        galit du contenu de 2 chiers (cmp)                                               caract res et non pas en lignes.
 cmp    -s] fichier1 fichier2                                                                      Si le chier n'est pas indiqu , tail prend l'entr e standard par d faut.
a che le premier octet di rent dans les 2 chiers.                                              Exemples 13.13
     Option                                                                                      (a) tail +120 fich
-s        cmp n'a che rien mais retourne seulement un code de retour (voir 14.1.6) : 0 si
          les 2 chiers sont identiques, 1 s'ils sont di rents et 2 s'il y a eu une erreur.      (b) tail -2b fich
80                 CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                           13.10. UN LANGAGE D' DITION DE FICHIERS (AWK)                                           8
13.9 Un diteur non interactif (sed)                                                                aucune adresse
                                                                                                qui d signe toutes les lignes.
13.9.1 Description g n rale de l' diteur
    sed est un diteur non interactif de chier : il lit les donn es provenant d'un chier (ou     13.9.4 Ex cution du programme
de l'entr e standard par d faut), les traite suivant un programme et sort le r sultat du           sed applique chaque commande du programme la premi re ligne du chier trait .
traitement sur la sortie standard.                                                              passe ensuite la ligne suivante et ainsi de suite.
    sed est souvent utilis comme ltre dans un pipe.                                                Chaque commande s'applique la version de la ligne courante d j modi e par le
    Comme pour la commande awk vue la section suivante, nous ne verrons qu'une petite           commandes d j ex cut es sur cette ligne.
partie des possibilit s o ertes par cette commande.
 sed   -n] -e commande      fichiers...]
copie les chiers (l'entr e standard par d faut) sur la sortie standard apr s avoir e ectu le
                                                                                                13.9.5 Commandes
traitement indiqu dans commande. commande doit tre un mot pour le shell (donc entour               Les commandes les plus utilis es sont
de guillemets ou d'apostrophes s'il contient des espaces). Il peut y avoir plusieurs options
 -e . S'il n'y en a qu'une, -e est optionnel.                                                   s pour substituer une cha ne de caract res une autre,
 sed   -n] -f fichier-pgm       fichiers...]                                                    d pour supprimer des lignes,
indique que le programme est enregistr dans un chier.
    L'option -n indique que les lignes lues ne doivent pas tre automatiquement renvoy es        p pour envoyer des lignes vers la sortie standard.
sur la sortie standard apr s leur traitement. Seules les lignes explicitement envoy es par la
commande p ou une commande similaire le seront (il faut par exemple ajouter l'option p             On peut regrouper plusieurs commandes avec { et }.
de la commande s ).                                                                             Exemple 13.14
    Une grande partie des traitements e ectu s par sed peut tre ex cut e par awk. awk est             for dir in `echo $PATH | sed -e 's/:/ /g'`
plus puissant mais sed est plus simple d'emploi pour remplacer une cha ne de caract res                 do .........
par une autre (commande s ).
                                                                                                    Une grande partie des traitements e ectu s par sed peut tre ex cut par awk. awk es
                                                                                                plus puissant mais sed est plus simple d'emploi pour certaines t ches, en particulier pou
13.9.2 Structure d'une ligne de programme                                                       remplacer une cha ne de caract res par une autre (commande s ).
 lignes commande arguments
                                                                                                    On remarquera que le chier trait n'est pas modi par sed. Si on veut modi er u
 lignes indique les lignes sur lesquelles la commande sed sera appliqu e. L'argument permet      chier de fa on non interactive, le plus simple est d'utiliser l' diteur ed avec un chie
de pr ciser le traitement e ectuer sur les lignes.                                              inclus (voir 16.4.1 la commande s y est d taill e).

13.9.3 Format pour indiquer les lignes traiter                                                  13.10 Un langage d' dition de chiers (awk)
   Les lignes sont num rot es de 1 au nombre de lignes re ues.                                  13.10.1 Description g n rale de la commande
   L'adresse d'une ligne peut tre d sign e par un num ro de ligne, par $ (derni re ligne)
ou par une expression r guli re entour e de /.                                                      awk 1 lit un texte contenu dans un ou plusieurs chiers, le modi e et envoie le r sulta
   Les lignes trait es peuvent tre d sign es par :                                              vers la sortie standard.
   adresse1, adresse2                                                                               awk est une commande tr s puissante pour travailler sur le contenu d'un chier. Elle po
qui d signe un ou plusieurs blocs de lignes comprises entre les lignes d sign es par les deux   s de un langage de programmation comportant des structures conditionnelles, des boucle
adresses                                                                                        et des fonctions pr d nies ce langage peut travailler avec des variables et des tableaux
   adresse                                                                                      Nous n' tudierons ici que les fonctionnalit s les plus simples o ertes par awk.
qui d signe toutes les lignes correspondant l'adresse                                             1. du nom de ses d veloppeurs Aho, Weinberger et Kernighan
82                 CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                          13.10. UN LANGAGE D' DITION DE FICHIERS (AWK)                                               8
   Il est fortement conseill d' tudier plus en d tail cette commande si l'on veut e ectuer        Une ligne d'un programme a la structure suivante :
des traitements complexes sur le contenu des chiers. Un langage encore plus puissant est        s lecteur { action }
fourni par le langage Perl qui ne sera pas tudi ici.                                           s lecteur indique si action doit tre ex cut e sur l'enregistrement en cours de traitement
   Le traitement e ectuer est crit dans un programme tap directement dans la ligne                 Dans ce cours nous ne verrons que les programmes comportant une seule ligne qu
de commande (forme 1 de la syntaxe) ou enregistr dans un chier (forme 2 de la syntaxe).        a che (par la commande print) des portions de lignes du chier trait .
 awk    -Fc] programme         fichiers...]                                                        Les constantes de type cha ne de caract res sont entour es par des guillemets.
 ou                                                                                                On peut inclure des commentaires dans une ligne du programme en les faisant pr c de
 awk    -Fc] -f fichier-programme           fichiers...]                                       du caract re # .
    L'option -F permet d'indiquer le s parateur de champ (voir13.10.2).
    Pour la premi re forme de la syntaxe, le programme doit tre consid r comme un seul         13.10.4 Cas particuliers pour une ligne de programme
 mot par le shell en g n ral, il est donc n cessaire de l'entourer par des apostrophes ou
des guillemets.                                                                                     S'il n'y a pas de s lecteur, action est toujours ex cut e (pour tous les enregistrements
    Ex cution de la commande :
    awk travaille sur des enregistrements constitu s de champs. Le s parateur d'enregistre-         Exemple 13.16
ment tant par d faut le s parateur de ligne de Unix, awk travaille ordinairement sur des                 ls -lg | awk ' { print $9, $5 }'
lignes.                                                                                                  a che le nom et la taille (les neuvi me et cinqui me champs de la ligne) de
    awk lit enregistrement par enregistrement les donn es des chiers (l'entr e standard                   chiers du r pertoire courant.
par d faut). Chaque enregistrement est trait son tour selon les indications donn es par             S'il n'y a pas d'action, l'enregistrement trait est recopi vers la sortie s'il a t
toutes les instructions du programme, avant la lecture de l'enregistrement suivant.                 s lectionn par s lecteur.
13.10.2 Champs                                                                                      Exemple 13.17
                                                                                                          L'exemple de 13.18 pourrait donc s' crire plus simplement.
   Quand awk lit un enregistrement d'un chier, il l' clate en champs s par s par des                     ls -l | awk '/^d/'
espaces ou des tabulations (par d faut) ou par le caract re suivant l'option -F.
   Le programme peut faire r f rence un ou plusieurs champs de la ligne lue :
 $1, $2,...                                                                                    13.10.5 S lecteurs
repr sentent les 1er   2eme ,...   champs                                                         Ils peuvent tre du type :
 $0
repr sente la ligne enti re.                                                                         /expression r guli re/
Exemples 13.15                                                                                       Dans ce cas, action sera ex cut e sur un enregistrement s'il contient une cha ne d
  (a) A cher le nom, les autorisations et le propri taire des sous-r pertoires du r pertoire         caract res qui correspond expression-r guli re (voir 11).
      courant :                                                                                      Exemple 13.18
       ls -lg | awk '/^d/ { print $9, $1, $3 }'                                                          ls -l | awk '/^d/ { print }'
                                                                                                         a che toutes les lignes de
                                                                                                                                ls -l         concernant les sous-r pertoires du r pertoir
 (b) A cher les noms des utilisateurs :                                                                  courant.
       awk -F: '{print $1}' /etc/passwd
                                                                                                    expression de comparaison (semblables celles du Langage C) :
13.10.3 Structure d'un programme                                                                    ==, !=, <, >, <=, >=
    Un programme peut tre complexe et comporter de nombreuses lignes incluant toutes                De plus, ~ (tilde) permet de comparer une cha ne de caract res           une expressio
les structures de programmation que l'on trouve habituellement dans les langages de pro-            r guli re (plac e entre deux / ). Par exemple,
grammation comme le langage Pascal ou le langage C.                                                 $5 ~ /^ 0-9]/
84                  CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                        13.10. UN LANGAGE D' DITION DE FICHIERS (AWK)                                                 8
       expression compos e des deux types pr c dents reli s par des op rateurs logiques           Pour une description plus d taill e, on se reportera au manuel de r f rence ou, encor
       || (ou), && (et), ! (n gation de l'op rateur qui suit)
                                                                                              mieux, un guide d'utilisation de awk.
                                                                                                  Des exemples d'utilisation des instructions de contr le sont donn s dans la sectio
       mots cl BEGIN ou END. Si le s lecteur de la premi re (resp. derni re) ligne du         suivante.
       programme est BEGIN (resp. END), l'action de cette ligne sera ex cut e une fois            Voyons un peu plus en d tails print et printf :
       avant (resp. apr s) de traiter le premier (resp. dernier) enregistrement des chiers.    print    expressions...]       >fichier]
       Des exemples d'utilisation de ces mots cl s sont donn s en 13.11.                       ou
                                                                                               print    expressions...]       >>fichier]
Exemples 13.19                                                                                a che les expressions sur la sortie standard ou vers le chier ventuellement sp ci e
 (a) $2 == ""                                                                                 redirection. print e ectue ensuite un passage la ligne.
                                                                                                 Si les expressions qui suivent print sont s par es par un ou plusieurs espaces, elle
 (b)   $2 == "1" || $2 =="5"                                                                  sont sorties accol es les unes derri re les autres. Si elles sont s par es par une virgule, elle
                                                                                              sont sorties s par es par un espace.
 (c)   $2 !~ /^ab/              # deuxieme champ ne commence pas par ab                          On peut ajouter un pipe en sortie de print. La commande Unix qui re oit ce qui es
                                                                                              envoy par print doit tre entour e de guillemets.
 (d)   $2 > 3                                                                                     print (seul) a che l'enregistrement complet.
 (e)   /^$/                     # ligne vide
                                                                                              Variables utilisateur
     Le format g n ral d'un programme est donc :                                                  Des variables peuvent tre utilis es dans les programmes. La syntaxe de leur utilisatio
 BEGIN { instruction de d but }
 s lecteur { action }
                                                                                              est semblable au Langage C. Les variables sont initialis es la cha ne vide. Les variable
 ....
                                                                                              qui sont utilis es dans des calculs sont automatiquement initialis es 0.
 ....                                                                                         Exemple 13.20
 s lecteur { action }                                                                             A cher la taille totale des chiers a ch s par la commande ls :
 END { instruction de fin }

                                                                                                    ls -lg |
13.10.6 Actions                                                                                     awk ' { print $9, $5
                                                                                                             somme = somme + $5 }
    Une action est une suite d'instructions. Comme en Langage C plusieurs actions peuvent             END { print "Total des tailles des fichiers :", somme }'
 tre regroup es entre accolades. Une instruction se termine par un , un passage la ligne
ou par une accolade fermante.                                                                 Remarque 13.1
    Une instruction peut tre une instruction de contr le, une a ectation, print ou printf.        Les constantes cha nes de caract res doivent tre entour es par des guillemets sino
    Les instructions de contr le disponibles sont :                                               elles sont consid r es comme des noms de variables par awk. C'est une source d'erreu
    if, while, for, break, continue, next, exit.                                                  fr quente lorsque l'on commence programmer avec awk.
    L'instruction next fait passer directement au traitement de la ligne suivante.
    Pour les autres instructions, la syntaxe est semblable celle du langage C. Les instruc-   Variables syst me
tions compos es de plusieurs instructions sont entour es d'accolades :
{ if (n > 1000) {                                                                                Voici quelques variables syst me utilis es par awk :
    i++                                                                                       NF            nombre de champs de la ligne
    somme += $4                                                                               NR            nombre de lignes qui ont t lues
  }                                                                                           FS            s parateur de champs en entr e (par d faut l'espace ou la tabulation)
}                                                                                             OFS           s parateur de champs en sortie (par d faut l'espace)
86                  CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                        13.11. EXEMPLES DE PROGRAMMES                                                       8
RS          s parateur d'enregistrements (line feed de code 10 par d faut).                      A cher le nom et la taille des chiers du r pertoire courant avec un format de sort
             RS="" indique que le s parateur d'enregistrement est la ligne vide. C'est           plus agr able (le nom cadr gauche dans un champ de 20 caract res et la tail
            utile pour travailler avec des enregistrements multi-lignes.                         cadr e droite dans un champ de 6 caract res) :
FILENAME nom du chier en cours de traitement                                                     ls -alg | awk '{ printf "%-20s %6d\n", $9, $4 }'
  FS, OFS et RS sont modi ables par le programme.
                                                                                                 A cher les lignes qui contiennent ab ou cde :
13.10.7 Fonctions, op rateurs                                                                    awk '/ab/ || /cde/'

   On peut utiliser des fonctions (de syntaxes semblables aux fonctions du Langage C)            A cher tous les intervalles de lignes qui sont incluses entre deux lignes gales
dans les s lecteurs et les actions.                                                              debut et n :
   Pour faire des calculs :                                                                      awk '/^debut$/,/^fin$/'
   int, sqrt, log, exp, int,...
   Pour travailler avec des cha nes de caract res :                                              A cher les lignes dont le premier champ est di rent de celui de la ligne pr c dente
   substr, length, index,...                                                                     awk '$1 != prev { print        prev = $1 }'
   La fonction getline permet de lire une ligne ou la valeur d'une variable :
    getline lit une ligne du chier en cours.                                                     Voici un chier programme adjacents que l'on peut appeler par
    getline variable lit une ligne du chier en cours et met la valeur dans variable.             awk -f adjacents fichier
   On peut sp ci er en entr e un autre chier pour getline par une redirection de l'entr e :      pour rep rer les mots adjacents identiques dans un chier :
    getline variable ] < chier
   La valeur lue par getline peut aussi provenir d'une commande Unix :                           NF>0 {
    commande j getline variable ]                                                                if ($1 == derniermot)
   Pour lancer une commande Unix, on dispose de la fonction system . Par exemple,                  print "double %s, ligne %s\n", $1, NR
     system("rm fichier")                                                                        for (i=2    i<=NF   i++)
     On peut utiliser aussi des calculs avec les op rateurs du langage C :                         if ($i == $(i-1))
     +, -, *, /, %, ++, , +=, *=, /= et %=                                                              printf "double %s, ligne %s\n", $i, NR
                                                                                                 if (NF>0)
Exemple 13.21                                                                                      derniermot = $NF
       length($0) > 72 { print "Ligne", NR, "longue:", substr($0, 1, 72)}
                                                                                                 }
   Les versions nawk et gawk ont les fonctions gsub et sub qui permettent de remplacer
une cha ne de caract res par une autre dans les lignes du chier.                                 A cher les groupes auxquels l'utilisateur appartient :
                                                                                                 awk -F: / :,]`logname`'($|,)/{ printf "%s\n", $1 }' /etc/group

13.11 Exemples de programmes                                                                     Remarquez l'expression ($|,) qui indique que le nom d'utilisateur est suivi pa
                                                                                                 une virgule ou par la n de la ligne.
       A cher le nombre de lignes du chier :
                                                                                                  Plier les lignes qui ont plus de 50 caract res dans un chier (on ajoute un \ droit
       awk 'END { print NR }' fichier                                                            des lignes pli es :
       A cher le premier et le dernier champ de chaque ligne :                                   length($0) > 72 {
       awk '{ print $1, $NF }' fichier                                                             print substr($0,1,50) "\\"
                                                                                                   ligne = substr($0,51)
       A cher le nom et la taille des chiers du r pertoire courant :                               while (length(ligne) > 50) {
       ls -alg | awk '{ print $9, $3 }'                                                              print substr(ligne,1,50) "\\"
88                 CHAPITRE 13. MANIPULATION DES DONN ES DES FICHIERS                                                                8
           ligne = substr(ligne,51)
         }
         print ligne
      }
      length($0) < 72


13.12 Tableaux
   awk peut manier des tableaux dont les indices ne sont pas n cessairement des entiers.
   Voici un exemple de programme utilisant un tableau pour additionner toutes les valeurs
correspondant des noms d'un chier de la forme :
     toto 100
     bibi 200
     toto 150
     jean 200                                                                                         Troisi me partie
     toto 300
     bibi 150
   Le programme a chera :
     toto 550
                                                                                              M canismes d'interpr tation du shell
     bibi 350
     jean 200
   Voici le programme :
{ somme $1] += $2 }
END { for (nom in somme) print nom, somme nom] }
    Remarquez lefor (nom in somme)         qui parcourt le tableau.
    On peut utiliser l' l ment d'un tableau comme condition d'un if. Dans ce cas, la condi-
tion est vraie si l'indice correspond un l ment qui a re u une valeur dans le programme :
     { if (valeur $1]) print $1, "a deja une valeur" }
   La fonction split permet de d couper une cha ne de caract res en a ectant chaque
champ de la cha ne aux l ments d'un tableau.

13.13 D'autres commandes de manipulation de chiers
split          Fractionnement horizontal d'un chier en chiers de tailles x es (on peut
               recoller les morceaux par cat)
csplit         Fractionnement horizontal d'un chier selon le contenu des lignes du chier
               (on peut recoller les morceaux par cat)
fold           d coupe les lignes trop longues en plusieurs lignes
paste          Recollement vertical (en colonnes) de plusieurs chiers (le contraire de cut)
comm           S lection/rejet de lignes communes 2 chiers
join           Jointure sur une zone commune (au sens des bases de donn es relationnelles)
               de 2 chiers tri s suivant cette zone
                                                                                               9




Chapitre 14
Interpr tation du shell. M canismes de
base
14.1 G n ralit s sur le shell
14.1.1 D nition
    Quand l'utilisateur tape son nom et son mot de passe, le programme de d marrag
associ l'utilisateur (voir 2.1.1) est automatiquement lanc . Ce programme est le plu
souvent un shell et toute la session de l'utilisateur se d roule en fait dans ce shell.
    Quand une commande est tap e au clavier, le programme shell la lit, l'interpr te e
lance son ex cution. La ligne tap e au clavier peut ne comporter qu'un nom de command
mais elle peut aussi tre beaucoup plus complexe car le shell comprend un v ritable langag
de programmation qui apporte beaucoup de souplesse et de puissance l'utilisateur.
    L'utilisateur peut d'ailleurs crire des programmes dans le langage du shell et les enre
gistrer dans des chiers appel s shellscripts (voir 14.11).

14.1.2 Compatibilit des di rents shells
    Nous travaillerons avec le shell zsh. Sous ce shell les shellscripts sont ex cut s par le she
sh sauf mention contraire explicite du programmeur. Le shell standard est actuellemen
ksh.
    Nous tudierons donc essentiellement les commandes communes sh, ksh et zsh, e
indiquant les cas o les shells ne fonctionnent pas exactement de la m me fa on.
    Autant que possible on essaiera de n'utiliser que les commandes et possibilit s o erte
par tous les shells quand on crira un shellscript, pour favoriser sa portabilit . En interacti
le probl me ne se pose pas et on pourra utiliser toutes les facilit s du shell avec lequel o
travaille.
    Les shells peuvent tre con gur s de di rentes fa ons selon les valeurs d'options qu
l'on peut donner, soit l'appel du shell, soit par la commande set (le plus souvent lanc
dans un chier d'initialisation du shell voir 15.3). Par exemple,
92        CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                            14.2. REDIRECTIONS                                                                              9
     zsh -o NOCLOBBER                                                                            Cet environnement peut guider les commandes pendant leur ex cution. Par exemple, l
ou                                                                                            commande lpr envoie les requ tes d'impression vers l'imprimante dont le nom est conten
     set -o NOCLOBBER                                                                         dans le variable PRINTER si cette variable fait partie de l'environnement.
positionne l'option NOCLOBBER (voir 14.2.1) au d marrage ou durant une session de zsh.
   Pour avoir une bonne compatibilit de zsh avec ksh et sh, il faut positionner l'option      14.1.6 Code retour d'une commande
NO_NOMATCH (voir 4.5) et ne pas positionner les options GLOBDOTS et NOCLOB-
BER. Dans ce cas, l'incompatibilit principale de zsh avec les autres shells provient de la       Toute commande Unix renvoie un code retour.
fa on d'indiquer la n gation de caract res pour la g n ration des noms de chiers : ! ]           En g n ral, le code retour est gal 0 si tout s'est bien pass et un entier strictemen
pour sh et ksh et ^ ] pour zsh.                                                               positif sinon. Il permet d'automatiser des t ches l'aide de shellscripts en tenant compt
                                                                                              des r sultats des commandes comme nous le verrons dans le chapitre 17.
14.1.3 Commandes et processus, commandes internes au shell                                    Remarque 14.1
   Suivant les cas, une ligne tap e au clavier peut lancer aucun, un ou plusieurs nouveaux          Ce code retour ne s'a che pas 1 il est enregistr dans la variable ? du she
processus (voir 2.2) :                                                                              (voir 15.2.6). Il peut tre a ch par la commande echo $? .
     La plupart des lignes de commandes tap es par l'utilisateur entrainent l'ex cution           La touche d'annulation (souvent Ctrl] C voir 3.3) permet d'interrompre l'ex cutio
     d'un chier binaire enregistr dans l'arborescence des chiers. Le shell lance l'ex -       d'une commande si elle n'a pas t lanc e en arri re-plan. Le code retour est alors en g n ra
     cution de ce chier apr s avoir interpr t la ligne de commande. Cette ex cution           di rent de 0 (cela d pend de la mani re dont a t crite la commande voir command
     engendre un nouveau processus.                                                           interne trap en 17.5).
      Certaines lignes de commandes peuvent engendrer plusieurs processus (par exemple
      les lignes de commandes comportant un pipe).                                            14.2 Redirections
      D'autres commandes sont internes au shell le shell sait les ex cuter sans faire appel      Avant de lancer un processus, le shell 2 lui associe 3 chiers :
        un chier externe et aucun nouveau processus n'est engendr . Ces commandes sont
      peu nombreuses : essentiellement cd et pwd dans les commandes les plus courantes.       Entr e standard (par d faut le clavier) le descripteur de chier est 0.
                                                                                              Sortie standard (par d faut l' cran) le descripteur de chier est 1.
14.1.4 Prompts
    Le shell indique qu'il est pr t prendre une nouvelle commande en a chant le prompt
                                                                                              Erreur standard (par d faut l' cran) le descripteur de chier est 2.
(par d faut le prompt est $ ).                                                                    Ces 3 descripteurs peuvent tre li s d'autres chiers que ceux indiqu s ci-dessus gr c
    Une commande se termine par un passage la ligne. Dans certains cas le passage la          aux commandes de redirection. Le shell va associer d'autres chiers que le clavier ou l' cra
ligne n'est pas consid r comme un terminateur de commande par le shell dans ces cas, il         ces 3 descripteurs et il lancera ensuite la commande.
s'a che un deuxi me prompt ( > par d faut) pour indiquer que le shell attend la suite
de la commande :
$ echo "LIGNE 1
                                                                                              14.2.1 Redirections de la sortie standard
> LIGNE 2"                                                                                    Redirection avec crasement du chier de redirection (>)
LIGNE 1
LIGNE 2                                                                                          On redirige la sortie standard d'une commande dans un autre chier que le chie
                                                                                              sp cial associ l' cran, par la redirection
                                                                                              > chier
14.1.5 Environnement d'une commande ou d'un shellscript
                                                                                                1. Sous zsh, l'option print_exit_value fait a cher le code retour s'il est di rent de 0
  Toutes les commandes lanc es dans Unix s'ex cutent dans un environnement de travail           2. C'est une convention adopt e par tous les shells et par l'immense majorit des programmes cri
d ni par un ensemble de variables (voir chapitre 15).                                         pour Unix
94         CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                            14.3. PIPE (j)                                                                                          9
    Cette redirection associe le chier chier au descripteur 1. Tout ce qui est envoy vers      14.2.5 Pseudo- chier /dev/null
la sortie standard (connue par la commande comme le chier de descripteur 1) est donc               Le chier sp cial de type caract res (voir 1.6.2) /dev/null est un pseudo- chier qu
envoy       chier. La redirection doit tre crite la suite de la commande sur laquelle elle
                                                                                               valent un puits sans fond.
agit.
    Si chier existait d j , son contenu est cras s'il n'existait pas, il est cr .                  Il est souvent utilis avec les redirections, en particulier pour ignorer les message
                                                                                               d'erreur :
Remarque 14.2                                                                                     find /students -name core -print 2>/dev/null
      Avec zsh (et ksh ), le comportement en cas d'existence de chier d pend de la valeur
      de l'option NOCLOBBER (voir 14.1.2). Si cette option est mise, le chier ne sera
      pas cras et zsh a chera un message d'erreur. Dans ce cas, pour indiquer que l'on         14.3 Pipe ( )         j
      souhaite craser un chier s'il existe d j , il faut utiliser le signe de redirection >!
                                                                                                   Les donn es de sortie d'une commande peuvent tre directement utilis es comme don
Exemples 14.1                                                                                  n es d'entr e d'une autre commande gr ce au symbole | . En e et, la sortie standard d
 (a) ls - l >     fich
                                                                                               la commande de la commande plac e avant le | est redirig e vers l'entr e standard de l
                                                                                               commande plac e apr s le | .
 (b)   cat fich1 fich2 > fich3                                                                     Les commandes du pipe sont ex cut es en parall le par des processus distincts 3. Il fau
                                                                                               se le rappeler quand une des commandes du pipe contient un exit : la commande exit n
Redirection avec ajout la n du chier de redirection (>>)                                       fait sortir que du sous-shell qui ex cute la commande du pipe et pas du shell dans lequ
                                                                                               s'ex cute le pipe (voir 17.4.7).
   Il faut utiliser   >>   au lieu de   >   .                                                      Le code retour du pipe est le code retour de la derni re commande ex cut e dans
Exemple 14.2                                                                                   pipe.
       ls -l >> fich                                                                           Exemples 14.5
                                                                                                (a) ls -l /bin      | grep '^d'
14.2.2 Redirection du chier d'erreur (2>)                                                       (b) On peut composer plusieurs pipes :
   Le chier d'erreur peut tre redirig en ajoutant 2> chier ( 2>> chier , si on ne veut              ls -l /bin | grep '^d' | lpr
pas craser chier) la suite d'une commande (attention, pas d'espace entre le 2 et > ).
Exemple 14.3
       find /students -name core -print 2>erreurs                                              14.4 Regroupement des commandes
                                                                                                  Le regroupement de commandes est souvent utilis pour appliquer une redirection o
14.2.3 Envoi d'un message d'erreur (>&2)                                                       un pipe plusieurs commandes.
   Les message d'erreur doivent tre envoy s vers la voie num ro 2. Voici un exemple
(voir 16.4.4) :                                                                                14.4.1 Regroupement entre parenth ses
     echo "ERREUR" >&2
                                                                                                  Les commandes regroup es entre des parenth ses sont ex cut es dans un sous-shell ave
                                                                                               un environnement di rent de celui pr c dant et suivant les parenth ses.
14.2.4 Redirection de l'entr e standard (<)
                                                                                               Exemple 14.6
   L'entr e standard peut tre redirig e par < chier .                                               $ pwd
Exemple 14.4                                                                                        /users/students/toto
       mail toto@unice.fr < fichier                                                              3. Dans les derni res versions de zsh, la derni re commande s'ex cute dans le shell dans lequel le pipe
                                                                                               t lanc
96        CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                              14.6. ALIAS                                                                              9
     $ (cd /bin   pwd)                                                                          14.5.1 Gestion des jobs par ksh ou zsh
     /bin
     $ pwd
                                                                                                   En ksh ou zsh (mais pas sous sh) l'utilisateur dispose de plusieurs commandes pou
     /users/students/toto
                                                                                                choisir le plan o les processus lanc s s'ex cutent :
                                                                                                      l'utilisateur peut faire a cher la liste de ses processus avec leur num ro de job pou
14.4.2 Regroupement entre accolades                                                                   le shell en cours et leur pid (voir 2.2), en tapant
   Les commandes regroup es entre des accolades ne sont pas ex cut es dans un sous-shell               jobs     -l]
comme avec les parenth ses.                                                                           (l'option -l a che l'identi cateur de processus)
   Les accolades doivent tre s par es des commandes par au moins un espace.                          l'utilisateur peut suspendre le processus en cours en tapant
   Attention, } et { ne sont reconnus qu'en d but de commande. Ils doivent donc tre
pr c d s par un (s parateur de commandes) si on veut les placer sur la m me ligne que                 Ctrl] Z
ce qui pr c de. L'oubli du est fr quent et il est di cile rep rer car le shell n'indique             il peut ensuite relancer l'ex cution de ce processus en arri re-plan en tapant
pas clairement le probl me dans ses messages d'erreur.
                                                                                                       bg     %n]
Exemple 14.7                                                                                          n est le num ro de job pour le shell (voir 14.5) par d faut c'est le processus qu
     { echo "Fichiers fich1 et fich2 :"             pr fich1 fich2       } | lpr -h                  vient d' tre suspendu qui est pass en arri re-plan.
                                                                                                     les processus en arri re-plan ou suspendus peuvent tre pass s en avant-plan en tapan
14.5 Processus en arri re-plan (&)                                                                     fg     %n]
    Lorsqu'on lance une commande, le shell attend la n de l'ex cution de la commande                    (si aucun num ro de job n n'est donn , la commande lance en avant-plan le dernie
avant d'ex cuter une autre commande.                                                                   processus lanc en arri re-plan).
    Si on ajoute le signe & derri re le nom de la commande (pr c d ou non d'un espace),            Ceci permet de suspendre momentan ment un processus pour e ectuer un travail e
le shell n'attend plus la n de son ex cution. On dit qu'il lance la commande en arri re-plan.   de revenir ensuite ce processus exactement l'endroit o on l'avait laiss . On peut pa
Exemple 14.8                                                                                    exemple crire un programme sous emacs, enregistrer ce programme, suspendre emacs pa
     ls -l | grep '^d' > fich &                                                                  Ctrl] Z, compiler et ex cuter le programme et revenir sous emacs par fg. Cette possibilit
    Quand on lance une commande en arri re-plan dans un shell interactif (pas dans un           perd de son utilit si l'on travaille en environnement X Window car on peut alors facilemen
shellscript), le shell renvoie l' cran le num ro de job entre crochets (le premier processus    passer d'une application l'autre sans devoir en suspendre une.
lanc en arri re-plan par le shell en cours a le num ro 1), et le pid de processus (voir 2.2)
attribu cette commande.
    On ne peut interrompre une commande lanc e en arri re-plan qu'avec la commande kill
                                                                                                14.6 Alias
( tudi e en 7.2).                                                                                   Un alias est un synonyme pour une cha ne de caract res dans une commande. Les alia
Remarque 14.3                                                                                   sont particuliers ksh et zsh il n'y a pas d'alias dans le shell sh.
      Lorsque l'utilisateur sort du syst me (en fait, du shell lanc au d marrage), tous les         Par exemple, alias x='chmod u+x' d nit l'alias x : si le premier mot d'une com
      processus lanc s en arri re-plan sont tu s.                                               mande est x , le shell remplacera ce mot par chmod u+x .
      Pour tre pr cis, il existe une commande nohup (pas tudi e ici) qui permet de                  On peut d faire un alias par la commande unalias, par exemple, unalias x .
      lancer des commandes en arri re-plan, qui continueront leur ex cution apr s la sortie         La liste des alias peut s'a cher en tapant alias sans argument. alias x a che l
      de l'utilisateur.                                                                         valeur de l'alias x.
                                                                                                    Un alias peut tre utilis comme raccourci d'une commande avec ses options comm
    Les commandes at et batch permettent de lancer en arri re-plan des commandes des            pour l'alias x ci-dessus. On peut aussi l'utiliser pour d signer une commande qui n'es
moments choisis ou lorsque le syst me n'est pas trop charg , m me si l'utilisateur n'est pas    pas plac e dans un des r pertoires de la variable PATH. Par exemple (sous Unix OSF),
connect .                                                                                           alias quota=/usr/sbin/quota
98         CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                           14.8. M CANISMES D'INTERPR TATION                                                                    9
14.7 Substitution de commande                                                                 14.8 M canismes d'interpr tation
   Le shell interpr te `commande` en le rempla ant par tout ce que la commande envoie             Cette section d crit comment les lignes de commandes sont interpr t es par le she
sur la sortie standard.                                                                       avant que la commande ne soit lanc e.
                                                                                                  Voici les t ches e ectu es par le shell dans l'ordre de leur ex cution :
Exemples 14.9
 (a) date=`date`                                                                                 1. interpr tation des espaces (pour distinguer les di rents mots),
                                                                                                 2. substitution de tilde (~) (seulement pour ksh ou zsh),
 (b)   nom_maj=`echo $nom | tr 'a-z' 'A-Z'`
                                                                                                 3. substitution des alias (seulement pour ksh ou zsh),
 (c)   echo je suis sous `pwd`
                                                                                                 4. interpr tation des redirections, des pipes 4 et des regroupements de commandes,
Remarques 14.4                                                                                   5. interpr tation des a ectations 5,
 (a) le code retour d'une a ectation     a=`commande`     est le code retour renvoy par
      commande. On peut ainsi crire                                                              6. substitution des param tres de position et de variables ($),
                                                                                                 7. substitution des commandes,
       if ligne=`grep mot fichier`    then
          # cas ou grep a trouve une ligne                                                       8. g n ration des noms de chiers (caract res * ? ] voir 4.5.1).
       else

       fi
          # cas ou grep n'a pas trouve une ligne
                                                                                              14.9 Inhiber l'interpr tation du shell
                                                                                                  On peut inhiber l'interpr tation du shell (on dit aussi d personnaliser) avec les carac
 (b) la commande est ex cut e dans un sous-shell.                                             t res suivants :
                                                                                               n        inhibe l'interpr tation sp ciale du caract re suivant.
 (c) Attention, si la commande renvoie plusieurs lignes vers la sortie standard, le compor-    '        toute interpr tation est inhib e pour les portions de lignes entour es de '
     tement est di rent selon que l'on travaille sous sh et ksh ou zsh. Par exemple,           "        dans les portions de lignes entour es de " (guillemets), l'interpr tation des e
       a=`ls -l`                                                                                        paces, la g n ration des noms, la substitution des alias et de ~ sont inhib e
       rangera dans a une seule longue ligne sous sh et ksh, ce qui peut tre g nant, mais               mais pas la substitution des param tres ($). Une apostrophe n'est pas interpr t
       donnera bien plusieurs lignes sous zsh.                                                          entre deux guillemets (ce qui permet d'introduire le caract re ' dans une cha n
                                                                                                        de caract res.
 (d) l'interpr tation l'int rieur des ` est complexe et peut donner des r sultats surpre-     Exemple 14.10
     nants :                                                                                        Essayez cette suite de commandes :
       echo \\$HOME
       a che \/users/profs/toto   , et pourtant                                                     a=bonjour
                                                                                                    echo $a bc *
       echo `echo \\$HOME`                                                                          echo \$a bc
       a che $HOME                                                                                  echo "\$a bc         *"
       A cause de ce type d'exemple, ksh et zsh ont ajout le nouveau type de substitution           echo '$a *'
       de commande $(commande) qui n'a pas de telles anomalies :                                 4. il n'y a pas de g n ration des noms de chiers dans l'interpr tation des parties correspondant au
       echo $(echo \\$HOME)
                                                                                               chiers dans les redirections
                                                                                                 5. comme pour les redirections, les tapes suivantes sont aussi trait es part pour les a ectations pa
       a che \/users/profs/toto                                                               exemple, aucune g n ration des noms n'est e ectu e dans a=*
100       CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                             14.11. LANCEMENT DE L'EX CUTION D'UN SHELLSCRIPT                                               10
14.10 Recherche d'une commande par le shell                                                         Le syst me s'aper oit que le chier qui contient le shellscript n'est pas crit dans d
                                                                                               code directement ex cutable par le processeur de la machine et il lance donc un interpr teu
   Lorsque l'utilisateur tape une commande au clavier, voici les di rentes tapes qui           pour lire et ex cuter les lignes contenues dans le chier.
conduisent l'ex cution de la commande :                                                             Toutes les commandes du shellscript sont ex cut es comme si elles taient tap es a
                                                                                               clavier. Une di rence importante est que les commandes sont ex cut es dans un processu
  1. Interpr tation de la ligne de commande par le shell,                                        ls (dont la zone de code contient le code de l'interpr teur) qui lit les lignes du shellscript e
  2. Recherche de la commande,                                                                 lance leur ex cution. Si le shellscript modi e l'environnement de d part, celui-ci est r tab
                                                                                               lorsque l'ex cution du shellscript est termin e (voir 15.2.9).
  3. Ex cution de la commande avec redirection pr alable des entr es-sorties par le shell           Il est important de noter que, sauf cas particulier tudi ci-dessous (#!),
     si n cessaire.                                                                                    si on travaille sous sh ou ksh, l'interpr teur lanc implicitement pour lire et ex cute
                                                                                                       le shellscript est le shell courant (sh ou ksh selon le cas),
   Voici comment s'e ectue la recherche de la commande :
                                                                                                       si on travaille sous zsh, l'interpr teur lanc implicitement est sh et pas zsh ! Si
      Si la commande correspond une commande interne du shell, cette commande est                        chier contient des instructions comprises par zsh et pas par sh, il y aura une erreu
      ex cut e l'int rieur du shell,                                                                      l'ex cution.
      sinon, si la commande correspond une fonction (voir 16.3), cette fonction est ex -               Pour que le shellscript soit interpr t par zsh, il doit commencer par la ligne :
      cut e l'int rieur du shell,                                                                    #! /usr/local/bin/zsh -f

      sinon il ne peut s'agir que d'une commande correspondant un chier de l'arbores-          Ex cution d'un chier dont la premi re ligne commence par #!
      cence. Si le nom de la commande ne comporte pas de / , la variable PATH est
      examin e pour rechercher le r pertoire o se trouve la commande.                              Si le chier comporte une premi re ligne qui commence par #! , Unix lance comm
                                                                                               interpr teur non pas le shell habituel, mais le programme dont le nom absolu suit #!
           Si le chier est un shellscript un nouveau shell est cr il lit les lignes du         (avec ventuellement un argument comme -f dans l'exemple ci-dessus), auquel il ap
           shellscript et les ex cute,                                                         plique comme arguments la ligne de commande tap e par l'utilisateur. Voici des exemple
           si le chier contient du code binaire ex cutable, un nouveau processus est cr ,      concrets :
           qui ex cute ce code.                                                                    Si l'utilisateur tape la commande c1 f1 f2 ,
                                                                                                     si c1 commence par #! /bin/sh ,
                                                                                                     la commande ex cut e sera /bin/sh c1 f1 f2 .
14.11 Lancement de l'ex cution d'un shellscript                                                      Le shellscript c1 est lu par le shell sh et ex cut avec les arguments f1 f2 .
    Un shellscript est un chier qui contient des noms de commandes et des instructions               si c1 commence par #! /usr/local/bin/zsh -f ,
internes au shell. On peut utiliser un shellscript comme toutes les autres commandes. En             la commande ex cut e sera /usr/local/bin/zsh -f c1 f1 f2 .
particulier un autre shellscript peut l'utiliser. On peut ainsi se construire facilement de          Le shellscript c1 est lu par le shell zsh et ex cut avec les arguments f1 f2 . L'optio
nouvelles commandes adapt es sa propre fa on de travailler.                                            -f indique que le chier d'initialisation .zshenv ne doit pas tre lu voir 14.11.3
    Les instructions internes du shell forment un langage de haut niveau poss dant des                si c1 commence par #! /bin/awk -f ,
instructions de tests et de boucles, des variables et des fonctions.                                  la commande ex cut e sera /bin/awk -f c1 f1 f2 .
    On peut lancer l'ex cution d'un shellscript de trois mani res di rentes.                         Le programme c1 (n cessairement crit avec du code awk ) est interpr t par aw
                                                                                                      sur les chiers f1 et f2 (voir 13.10).
14.11.1 Lancement par le nom du shellscript                                                    Remarque 14.5
   Si on a l'autorisation de lecture et d'ex cution sur le shellscript, on peut le lancer en          Ce m canisme ne peut fonctionner qu'avec les interpr teurs (tels les shells ou awk
tapant simplement son nom.                                                                            pour lesquels # introduit des commentaires.
102        CHAPITRE 14. INTERPR TATION DU SHELL. M CANISMES DE BASE                              14.12. LANCEMENT EXPLICITE D'UN SHELL                                                  10
14.11.2 Lancement par l'appel de la commande interne .                                              Il faut noter que c'est le mode de lancement de zsh lorsqu'on lance une command
                                                                                                 rsh   machine commande sur une machine distante et un compte utilisateur qui a zs
    Il reste une autre possibilit pour faire ex cuter un shellscript. Le nom du shellscript      comme shell de d marrage (voir cours sur les r seaux).
est pr c d d'un point (laisser un espace entre le point et le nom du shellscript) :
 . fichier
    Dans ce cas, le shellscript chier est ex cut comme si ses commandes taient tap es            14.12 Lancement explicite d'un shell
directement au clavier. Un nouveau processus n'est pas cr . Les modi cations de l'envi-
ronnement seront donc conserv es.                                                                 zsh   -f]
    En fait, . est une commande interne du shell qui lit toutes les commandes contenues              Les chiers .zshenv, .zshrc et /etc/zshrc sont ex cut s sauf si le shell est lanc ave
dans le chier et les ex cute comme si elles avaient t tap es au clavier.                         l'option -f . Le chier /etc/zshenv est toujours ex cut .
                                                                                                     Il faut noter que c'est le mode de lancement de zsh lorsque l'on ouvre une fen tre ave
Remarque 14.6                                                                                    xterm .
    Quel que soit le shell, le shellscript est toujours lu et ex cut par le shell en cours,
    la di rence de l'appel par le nom du shellscript o il y a une di rence entre zsh et
    les autres shells (voir remarques de 14.11.1).
Exemple 14.11
    Soit le shellscript cdbin contenant la seule commande
       cd bin
       Si on tape
       cdbin
       (le nom du shellscript), le r pertoire sera le m me apr s l'ex cution qu'avant. En
       e et, le shellscript s'ex cute dans son propre environnement et il n'a pas d'action sur
       l'environnement du shell de d part.
       Si on tape
       . cdbin
       le r pertoire courant sera bin apr s l'ex cution car cd est une commande interne du
       shell et non pas une commande externe correspondant un chier Unix. Elle est
       donc ex cut e directement par le shell sans faire appel un autre shell qui aurait son
       propre environnement. Puisque l'on a ex cut cdbin avec un . initial, les commandes
       de cdbin sont donc ex cut es par le shell initial dont le r pertoire courant devient
       donc le r pertoire bin.

14.11.3 Lancement par l'appel explicite d'un shell
   Si on a l'autorisation de lecture sur le shellscript, on peut lancer son ex cution par :
 zsh    -f] fichier
(si on travaille avec zsh ) dans ce cas, un nouveau shell est lanc explicitement. Celui-ci lit
les commandes du shellscript chier et les fait ex cuter comme si les commandes avait t
tap es au clavier.
    Le chier .zshenv est ex cut sauf si le shell est lanc avec l'option -f . Le chier
/etc/zshenv est toujours ex cut .
104                                  CHAPITRE 15. VARIABLES, ENVIRONNEMENT                       15.2. VARIABLES                                                                           10
                                                                                                     Cette possibilit est souvent utilis e dans les shellscripts pour r cup rer un ou plusieur
                                                                                                 mots d'une ligne. Par exemple, les deux commandes suivantes a chent le mois et l'ann
                                                                                                 de la date syst me :
                                                                                                 set `date`


Chapitre 15
                                                                                                 echo $2 $6

                                                                                                 Remarque 15.1
                                                                                                      set -x abc


Variables, environnement
                                                                                                      ne convient pas pour donner $1 la valeur -x et $2 la valeur abc . En e et, set v
                                                                                                      penser que -x est l'option du shell tudi e en 17.11. L'option -- indique que le
                                                                                                      param tres suivants ne sont pas des options du shell mais les valeurs des param tre
                                                                                                      de position. Il faut donc crire :
                                                                                                      set -- -x abc

15.1 Param tres, variables de position
15.1.1 Param tres des shellscripts                                                               15.2 Variables
    Lorsqu'on lance une commande, on peut la faire suivre par des arguments ou para-             15.2.1 Identi cateur
m tres.                                                                                              Durant une session de travail d'un shell (d limit e par le d marrage et l'arr t du shell
      l'int rieur d'un shellscript, ces param tres sont d sign s par les variables de position   on peut utiliser des variables d sign es par un identi cateur. Cet identi cateur peut com
$1, $2,..., $9 ($0 d signe le nom de la commande).                                               porter des lettres, des chi res ou le caract re soulign il doit commencer par une lettre o
Exemples 15.1
                                                                                                 le caract re soulign .
 (a) Si le shellscript lt contient
      ls -lt $1 | more
                                                                                                 15.2.2 A ectation
      on peut lancer                                                                                On peut a ecter une cha ne de caract res aux variables :
      lt /users/students/jean                                                                     variable=valeur
                                                                                                   (pas d'espaces de part et d'autre du signe = !).
 (b) Si le shellscript cherche contient                                                             variable= a ecte la cha ne vide variable.
      find $1 -name "$2" -print                                                                  Remarque 15.2
      on peut taper                                                                                  Le code retour d'une a ectation du type
      cherche /usr "compt*"                                                                           a=`commande`
      qui cherchera sous l'arborescence du r pertoire /usr les chiers dont le nom commence            est le code retour renvoy e par la commande.
      par compt.
                                                                                                      On peut par exemple crire
15.1.2 Donner des valeurs aux param tres de position (set)                                            if lignes=`grep mot fichier`            then ...
                                                                                                      et ce qui suit le then ne sera ex cut que si le chier contient le mot.
    La commande set permet d'a ecter des valeurs aux param tres de position l'int rieur
d'un shellscript. La commande suivante donne les valeurs val1, val2, ... aux param tres $1,      15.2.3 D signation de la valeur de la variable ($)
$2, ... :
    set val1 val2 ...                                                                               On peut r utiliser la valeur a ect e une variable dans toute commande.
106                                  CHAPITRE 15. VARIABLES, ENVIRONNEMENT                  15.2. VARIABLES                                                                  10
 $variable                                                                                  PATH   r pertoire de recherche des commandes
d signe la valeur de variable. C'est le shell qui fera le remplacement.                            Exemple : PATH=/bin:/usr/bin:/users/students/util:.
                                                                                                   Le r pertoire courant peut tre indiqu par : au d but ou la n de la va
Remarque 15.3                                                                                      leur de PATH. Il est recommand de ne pas mettre trop de r pertoires dan
      Le shell ne fera pas le remplacement dans les portions de commande plac es entre             cette variable pour ne pas surcharger le syst me en cas de recherche d'un
      apostrophes ou si le $ est pr c d d'un \ . Au contraire de la g n ration de noms             commande qui n'existe pas (et qui sera recherch e dans tous ces r pertoires
      de chiers, le remplacement est e ectu dans les portions de commande plac es entre     CDPATH est une variable quelquefois utile si on travaille souvent dans des r pertoire
      guillemets (voir 14.8).                                                                      dont le chemin est long taper. Si l'utilisateur tape un nom qui ne commenc
Exemple 15.2                                                                                       pas par un / en argument de cd, cd recherchera ce nom dans les r pertoire
      r1=/us2/acct/jean/dvp                                                                        indiqu s dans CDPATH. Le format de CDPATH est le m me que celui d
      r2=/us2/bin                                                                                  PATH.
      cd $r1                                                                                       Attention, sous sh et ksh, si la variable CDPATH a une valeur, cette va
      cp fich $r2                                                                                  riable est utilis e exclusivement pour rechercher les r pertoires dont le nom
                                                                                                   ne commence par / dans une commande cd (comme pour la variab
   Si la valeur de la variable doit tre suivie d'un caract re autoris dans un nom de               PATH et la recherche de commandes). Si on est par exemple plac dans so
variable, on entoure d'accolades le nom de la variable :                                           r pertoire HOME et que celui-ci contient un r pertoire bin, la command
                                                                                                    cd bin d placera dans le premier r pertoire bin plac sous un des r
Exemple 15.3
      serie=math
                                                                                                   pertoires de la variable CDPATH, et renverra une erreur s'il n'y en a pa
      cp classe/${serie}1 rep
                                                                                                   Veillez donc toujours avoir le r pertoire courant au d but de la valeur d
                                                                                                   CDPATH si vous ne voulez pas avoir ce comportement. Sous zsh, le r pe
                                                                                                   toire courant est toujours cherch en premier m me s'il n'est pas dans l
15.2.4 D composition en mots des valeurs des variables de zsh                                      variable CDPATH.
   Attention ! zsh ne d coupe pas la valeur d'une variable en mots. Le programme suivant    PS1    premier prompt Unix. zsh o re de nombreuses possibilit s particuli res pou
va copier les deux chiers f1 et f2 sous le r pertoire rep s'il est ex cut sous sh ou               personnaliser le prompt (voir 15.3).
ksh, mais il ne fonctionnera pas sous zsh car cp essaiera de copier le chier de nom f1 f2   PS2    deuxi me prompt Unix (> par d faut)
(un seul nom avec un espace au milieu) :                                                    TERM   nom du type de terminal utilis
fichiers="f1 f2"
                                                                                            IFS    s parateur(s) de mots dans les commandes (espace, tabulation ou passag
cp $fichiers repertoire
                                                                                                     la ligne par d faut). IFS est utilis e lors d'une substitution de command
   Il faut crire
               ${=fichiers}     si on veut que la valeur de la variable chier soit d -             (`...` ou $()), de param tre ou de variable ($), ou lors de la lecture d'un
coup e en mots. Sous zsh la commande de l'exemple pr c dent doit donc s' crire :                   ligne par la commande interne read, pour d couper une ligne en mots. O
   cp ${=fichiers} repertoire
                                                                                                   remarquera que IFS n'est pas utilis e entre guillemets car les guillemet
                                                                                                   inhibent la s paration en mots. Essayez la suite de commandes suivante :
15.2.5 Supprimer une variable (unset)
                                                                                                         $ IFS=/
                                                                                                         $ read x y
 unset variable                                                                                          v1/v2
                                                                                                         $ echo $x
Remarque 15.4                                                                                            $ var=a/b/c
    La commande unset n'existe pas dans le shell sh.                                                     $ echo $var # $=var avec zsh
                                                                                                         $ echo "$var" # different si entre guillemets

15.2.6 Variables sp ciales du shell                                                                      $ cat /etc/passwd
                                                                                                          IFS=  remet la valeur par d faut.
 Voici les principales variables utilis es par le shell.
HOME          r pertoire de login
108                                 CHAPITRE 15. VARIABLES, ENVIRONNEMENT                      15.2. VARIABLES                                                                          10
   Les variables suivantes ont leur valeur donn e automatiquement par le shell on ne peut         Le code retour est 0 sauf si on a atteint une n de chier.
modi er leur valeur.                                                                           Exemples 15.5
 #             nombre de param tres de position                                                 (a) echo Nom du repertoire a lister :
?              valeur retourn e par la derni re commande ex cut e                                     read rep
!              num ro de processus de la derni re commande lanc e en arri re plan                     ls -ld $rep | more
 $             num ro de processus du processus en cours
 *             $* est quivalent $1 $2 ...                                                             pour lire au clavier le nom d'un r pertoire lister.
 @             $@ est quivalent $1 $2 ... comme $* mais il existe une di rence subtile          (b)   read v1 v2 v3 <fichier
               entre les 2 variables * et @: "$*" (entour de guillements) repr sente un               lit dans la premi re ligne du chier les valeurs des variables v1, v2 et v3. On verra
               seul mot compos des arguments $1 $2 ... s par s par un espace alors que                la page 131 comment lire toutes les lignes d'un chier.
               "$@" repr sente di rents mots gaux aux contenus de $1, $2, ..., avec un
               espace s parateur qui sera interpr t par le shell comme un s parateur de
               mots ( voir exemple de l'instruction for en 17.4.3).                            15.2.9 Port e d'une variable (export), environnement de travail
                                                                                                  L'environnement de travail d'un shell est constitu des variables auxquelles le shell
15.2.7 A cher la valeur d'une variable (echo)                                                  donn une valeur et des variables que le shell a h rit es du processus qui l'a lanc .
                                                                                                  Une variable n'est ordinairement utilis e que dans le shell o elle re oit son a ectation
 echo    -n] $variable                                                                            Si on veut la r utiliser dans les programmes appel s ult rieurement par le shell, on do
   Plus g n ralement, echo envoie sur la sortie standard les valeurs de tous ses param tres,   exporter la valeur par export.
s par s par un espace. Dans la commande ci-dessus, c'est le shell qui va remplacer $variable   Remarque 15.5
par la valeur de la variable et echo a chera cette valeur.                                           On dira que les programmes appel s ult rieurement par un shellscript sont des de
   En Unix BSD, l'option -n permet d' viter le passage la ligne apr s l'a chage. En                  cendants du shellscript qui les a appel s, ou que le shellscript est un anc tre de ce
Unix Syst me V, on peut passer en param tres de echo des caract res sp ciaux et c'est le             programmes.
caract re \c qui indique que l'on ne doit pas passer la ligne (ne pas oublier de prot ger
 \ de l'interpr tation du shell). Par exemple :                                                 export variables...
   echo "Donnez le nom du fichier \c: "                                                        recopie la valeur des variables dans l'environnement qui sera pass aux programmes appel
                                                                                               ult rieurement.
Exemples 15.4
 (a) echo valeur    de HOME : $HOME
                                                                                               Remarques 15.6
                                                                                                 (a) Puisque c'est une recopie, les ventuelles modi cations des variables export es n
 (b)   echo "Voici 5 espaces entre parentheses : (               )"                                  modi eront pas l'environnement du shellscript appelant.
      Question : que se passe-t-il si on enl ve les guillemets?                                  (b) ksh et zsh permettent d'a ecter des valeurs des variables tout en exportant le
   La commande interne print de ksh et de zsh, permet des formats d'a chage plus so-                 variables :
phistiqu s, mais cette commande n'existe pas dans le shell sh.                                        export a=3 fichier=fich12
                                                                                                    On obtiendra une erreur si le shellscript est ex cut par sh et il faut donc l' viter.
15.2.8 Entr e de la valeur d'une variable au clavier (read)                                     (c) export qui ne se comporte pas de la m me fa on dans les tous les shells :
 read variable...                                                                                       avec sh, si un programme modi e une variable qui a t export e par un pro
    Une ligne est lue sur l'entr e standard. Le premier mot est a ect la premi re variable,             gramme anc tre et s'il n'exporte pas cette variable (avant ou apr s sa modi
le deuxi me mot est a ect la deuxi me variable,... La derni re variable re oit le restant               cation), les programmes descendants qu'il appellera, recevront la valeur initia
de la ligne.                                                                                            pour cette variable (et non la valeur modi e).
    S'il y a moins de mots que de variables, les derni res variables sont initialis es la               Si un programme modi e la valeur d'une variable et veut transmettre la nouvel
cha ne vide.                                                                                            valeur aux programmes qu'il appelle, il doit donc exporter cette variable.
110                                 CHAPITRE 15. VARIABLES, ENVIRONNEMENT                      15.3. PERSONNALISATION DE L'ENVIRONNEMENT                                                  11
           avec ksh et zsh, si une variable a t export e par un programme, elle le sera              est le seul chier qui est toujours ex cut . Si n cessaire, il donne un environnemen
           automatiquement par tous les programmes appel s par le programme.                         minimum pour travailler.
                                                                                                     Si zsh a t lanc avec l'option -f , c'est le seul chier de con guration a tr
15.2.10 Visualisation des variables disponibles (set, printenv)                                      ex cut .
 printenv                                                                                       2.   .zshenv
a che les valeurs des variables de l'environnement du processus en cours (celles qu'il a             est toujours ex cut si zsh n'a t pas lanc avec l'option -f . Il initialise les va
recues et celles qu'il a export es) export (sans nom de variable) donne un r sultat                  riables d'environnement indispensables au bon fonctionnement du shell dans tous le
semblable sous zsh et ksh, mais sous sh, export donne uniquement le nom des variables                cas (PATH par exemple).
export es par le shell en cours.
 set
a che les valeurs des variables disponibles (m me celles qui ne sont pas export es et qui       3.   /etc/zprofile     et .zprofile
n'appartiennent pas l'environnement qui sera transmis).
                                                                                                     (ex cut s par les shells de login seulement) initialisent les variables d'environnemen
                                                                                                     indispensables au bon fonctionnement du shell juste apr s un login. Ce chier n'es
15.3 Personnalisation de l'environnement                                                             en g n ral pas utilis car un shell de login est le plus souvent un shell interactif et o
                                                                                                     utilise alors plut t le chier .zlogin (voir ci-dessous).
15.3.1 Options des shells (set, setopt)                                                         4.   /etc/zshrc    et .zshrc
   De nombreuses options permettent de con gurer le fonctionnement des shells (voir en               (ex cut par les shells interactifs seulement) contiennent les d nitions d'alias, d
particulier 14.1.2). Ces options peuvent tre entr es en param tres lors du lancement du              prompts et des variables li es l'utilisation interactive d'un shell.
shell ou positionn es gr ce la commande set. On se reportera au manuel de r f rence du
shell pour la syntaxe utilis e pour positionner les options.                                         Remarque 15.7
   On a vu aussi en 3.3 l'option -o ignoreeof et on verra l'utilit des options -v et                      Quand on ouvre une nouvelle fen tre X Window, ces chiers sont ex cut s (apr
 -x pour la mise au point des shellscripts en 17.11.                                                      les chiers /etc/zshenv et .zshenv) par le nouveau shell qui s'ex cute dans l
   La fonction interne setopt de zsh permet aussi de positionner les options du shell. On                 fen tre.
peut avoir une liste de toutes les options positonn e en tapant setopt seul.
                                                                                                     Exemple 15.6
    Dans les sections suivantes nous allons tudier les di rents chiers de con guration                    umask 022
de l'environnement que le shell zsh ex cutent automatiquement au d marrage.                               # definition des alias
                                                                                                          alias ll='ls -l'

15.3.2 Fichiers de personnalisation                                                                       alias x='chmod u+x'
                                                                                                          # definition prompt : ordinateur et repertoire courant
      chaque fois qu'un shell zsh est lanc , des chiers de con guration sont lus et ex cut s              PS1=%m'(%~) '
automatiquement par le shell.                                                                             # definition de variables
    Certains chiers sont communs tous les utilisateurs et permettent l'administra-                        export PRINTER=17
teur du syst me de leur donner un environnement minimum commun. Ce sont les chiers                        export MAIL=/usr/spool/mail/$USER
zshenv, zshrc, zprofile et zlogin du r pertoire /etc.                                                     export MANPATH=/usr/man:/usr/local/man:/usr/local/X11R5
    Les autres chiers sont situ s dans le r pertoire HOME de chaque utilisateur. Celui-                   export SAVEHIST=300 HISTFILE=$HOME/.sh_history HISTSIZE=300
ci peut les cr er ou les modi er sa convenance. Ce sont les chiers .zshenv, .zshrc,                       # Pour compatibilite avec ksh :
.zprofile et .zlogin                                                                                      setopt NO_NOMATCH
    Ces chiers ne sont pas toujours tous ex cut s. Voyons les di rents cas.                               export NULLCMD=:

   1. /etc/zshenv                                                                               5.   /etc/zlogin   et .zlogin
112                                   CHAPITRE 15. VARIABLES, ENVIRONNEMENT                                                                                                               11
      (ex cut s par les shells de login interactifs seulement) contiennent les initialisations
      qui doivent tre faites au d but d'une session de travail interactive, en particulier
      l'a ectation des variables TERM et DISPLAY.
      Exemple 15.7
           if tty -s

           fi
                        then
              stty dec crt                                                                        Chapitre 16
                                                                                                  Compl ments sur le shell
           if    -z "$DISPLAY" ]   then     # cas ou DISPLAY est vide
              echo '-----------------------------------------------'
              echo ' 1. vt100
              2. X Window'
              echo -n "Type de votre terminal (2 par defaut): "
              read terminal                                                                          Ce chapitre donne quelques compl ments sur des notions d j tudi es dans les deu
              case $terminal:-2 in                                                                chapitre pr c dents. Il pr sente aussi quelques nouveaux aspects moins essentiels du langag
                1) TERM=vt100                                                                     du shell.
                2) TERM=xterm
                   echo "Nom du DISPLAY ? "

              esac
                   read DISPLAY                                                                   16.1 Listes de commandes
           fi                                                                                         Un pipe est une suite de commandes s par es par j. Le code retour d'un pipe est
Remarque 15.8                                                                                     code retour de la derni re commande ex cut e.
    Les chiers utilis s lors de l' criture de chiers de con guration (au moins ceux qui               Une liste de commandes est une suite de pipes 9ou de simples commandes dans l
    ne sont pas li s un shell de login) doivent tre d sign s par leur nom absolu car les          suite, par commodit , pipe pourra d signer une simple commande) s par es par un de
    shells peuvent tre lanc s d'un autre r pertoire que le r pertoire de login.                   signes suivant :
                                                                                                            correspond une ex cution s quentielle des pipes
                                                                                                   &        correspond une ex cution s quentielle des pipes sans attente de la n de l'ex
15.4 Strat gie pour la personnalisation de l'environne-                                                     cution du pipe pr c dent
                                                                                                   && le pipe suivant n'est ex cut que si le pipe pr c dent renvoie la valeur 0 (d rou
     ment                                                                                                   lement normal du pipe pr c dent)
    On travaille le plus souvent dans plusieurs domaines bien distincts, par exemple, un           jj       le pipe suivant n'est ex cut que si le pipe pr c dent ne renvoie pas la valeur
environnement pour le d veloppement en langage Java, un environnement pour le travail                       (d roulement anormal du pipe pr c dent)
avec une base de donn es et un autre pour la recherche d'information sur le Web.                  Exemples 16.1
    Dans ce cas, il est pr f rable d'avoir des environnements de travail di rents plut t           (a) rm fich    || echo Suppression impossible !!
que d'avoir un seul environnement alourdi par un grand nombre de variables et avec une
variable PATH contenant de nombreux r pertoires.                                                   (b)   cat $2 | { write $1 || mail $1        }
    Pour cela le plus simple est d'all ger les chiers d'initialisation vus ci-dessus en ne gar-        shellscript qui envoie un message sur l' cran ou dans la bo te aux lettres d'un util
dant que les l ments qui seront utiles tous les environnements, et de cr er un shellscript             sateur connect la machine locale.
d'initialisation pour chacun des environnements. Chacun de ces shellscripts initialisera les
variables (en particulier la variable PATH), placera l'utilisateur dans le bon r pertoire de         Quelques subtilit s (false est une commande qui ne fait que renvoyer un code retou
travail et lancera les programmes n cessaires (par exemple, il ouvrira une nouvelle fen tre       non nul true est une commande qui ne fait que renvoyer un code retour nul) :
X Window dans laquelle il lancera un programme pour travailler avec une base de donn es).            false && echo 1 && echo 2
                                                                                                  n'a che rien
114                                  CHAPITRE 16. COMPL MENTS SUR LE SHELL                       16.4. COMPL MENTS SUR LES REDIRECTIONS                                                    11
   true && echo 1 && echo 2                                                                      Ex cution de la fonction
a che 1 et 2                                                                                        Les commandes de la fonction s'ex cutent dans le shell dans lequel la fonction a t
   false || echo 1 && echo 2
a che 1 et 2                                                                                     appel e. Les $1, $2,... sont remplac s par les param tres d'appel de la fonction (param
                                                                                                 param2,...).
   true || echo 1 && echo 2
a che 2                                                                                          Exemple 16.2
                                                                                                      Si la fonction lt est d nie par :
16.2 Ordre de priorit                                                                                   lt () { ls -lt $1 | more }

   L'ordre de priorit des di rents signes qui ont une signi cation particuli re pour le               on pourra lancer la fonction par :
shell est (par ordre d croissant) :                                                                   lt /bin

  1. les redirections                                                                               Plac e l'int rieur d'une fonction la commande
                                                                                                  return n
  2. j                                                                                           joue le r le de la commande exit pour un shellscript : elle arr te l'ex cution de la fonctio
                                                                                                 en renvoyant le code retour n.
  3. && et jj
  4. & et                                                                                        16.4 Compl ments sur les redirections
                                                                                                 16.4.1 Redirection de l'entr e standard sur chier inclus (<<)
16.3 Fonctions                                                                                        << permet d'indiquer dans un programme des lignes qui seront lues sur l'entr e stan
                                                                                                 dard pendant l'ex cution du programme. Le d limiteur de ces lignes est indiqu juste apr
    Les shellsripts peuvent contenir des d nitions de fonctions qui pourront ensuite tre         le signe << . Le d limiteur de n doit absolument tre le premier caract re dans sa lign
utilis es dans le shell dans lequel elles ont t d nies.                                          (avec ventuellement des tabulations si on fait suivre << de - voir ci-dessous) sino
    Les fonctions sont plus rapidement ex cut es que les shellscripts puisque le shell n'a pas   on obtient des messages du type n de chier inattendue car le d limiteur n'a pas t
  aller chercher de chier pour l'ex cuter. De plus une fonction peut modi er les variables       reconnu.
du shell appelant puisqu'elle s'ex cute dans le m me environnement que ce shell.                     L'ensemble des lignes ainsi d limit es est appel un chier inclus. En e et, tout se pass
                                                                                                 comme si elles appartenaient un chier vers lequel on redirigeait l'entr e standard.
                                                                                                     Si le premier caract re du d limiteur est pr c d de \ , cela signi e que le shell ne do
D nition d'une fonction                                                                          pas interpr ter les caract res sp ciaux (*, ?, `, ...) situ s entre les deux d limiteurs. Tou
 nom-fonction ()                                                                                 se passe comme si le texte entre les deux d limiteurs tait entour du caract re '.
 {                                                                                                   Si - est ajout la suite de << , toutes les tabulations de d but de ligne sont enlev e
 ...                                                                                             du chier inclus. Ceci permet d'indenter ces lignes si elles appartiennent, par exemple,
 ...                                                                                             une boucle for ou une structure if .
 }                                                                                                   Utilis avec l' diteur de texte ed , la notion de chier inclus permet de modi er un chie
   L'accolade de n de fonction doit tre en d but de ligne (ou pr c d e de ).                     avec des commandes construites dans un shellscript. Nous n' tudierons pas ici l' diteur d
                                                                                                 texte ed. Les commandes de ed utilis es dans l'exemple ci-dessous sont :
Appel de la fonction                                                                             s substitue une cha ne de caract res une autre. Dans chaque ligne, seule la premi r
                                                                                                        occurrence de la cha ne cherch e sera remplac e sauf si on ajoute l'option g la
 nom-fonction param1 param2 ...                                                                         de la commande (voir exemple ci-dessous). Comme la commande suivante, s peu
116                                  CHAPITRE 16. COMPL MENTS SUR LE SHELL                      16.4. COMPL MENTS SUR LES REDIRECTIONS                                                   11
       tre pr c d d'un intervalle de lignes qui indique les lignes sur lesquelles portera la        Si le signe de redirection < ou > est pr c d d'un nombre entier, cela signi e qu
      commande ( $ d signe la derni re ligne).                                                  la redirection concerne le chier dont le descripteur est le nombre entier donn , et no
      En fait, les cha nes de caract res peuvent tre des expressions r guli res et on peut      l'entr e, la sortie ou l'erreur standard. Il ne doit pas y avoir d'espace entre le num ro et
      se r f rer dans la deuxi me cha ne une sous-cha ne de la premi re. Par exemple,           signe qui le suit.
      s/^\( ^:]*\),\(.*\)$/\2 est le prenom de \1/                                              Exemples 16.4
      transformera Dupond,Pierre en Pierre est le prenom de Dupond .                             (a) 3< fichier et 3> fichier
                                                                                                     ces deux commandes ouvrent chier avec le descripteur 3 (et non pas le descripteu
      Consultez le manuel en ligne de ed pour plus de pr cisions.                                    0 ou 1 s'il n'y avait pas eu le 3). La di rence est que la deuxi me redirection cras
                                                                                                     fichier.
g ex cute une commande sur toutes les lignes qui contiennent une expression r guli re
      (par exemple, 1,5g/^toto/d supprime les lignes qui commencent par toto dans                (b) Pour fermer le chier ouvert avec le descripteur 3, on utilise les commandes <&- e
      les 5 premi res lignes.                                                                        >&- (pas d'espace apr s le signe de redirection) qui ferment les chiers d'entr e et d

w sauvegarde le chier en cours d' dition.                                                            sortie standard la commande suivante ferme le chier de descripteur 3 :
                                                                                                       3<&-
q quitte ed.
   La syntaxe d'appel de ed est :                                                               16.4.4 Redirection vers un chier d sign par son descripteur
 ed   -s] fichier
o l'option -s indique que l'on ne veut pas que ed a che certaines informations comme,            >&n   (resp.   <&n)
par exemple, le nombre d'octet enregistr s lors de la commande w .                              signi e que la sortie (resp. entr e) standard est redirig e vers le chier ouvert avec
                                                                                                descripteur n et que les deux chiers partagent le m me pointeur de chier (voir fonctio
Exemple 16.3                                                                                    dup() en langage C). Il ne faut pas d'espace entre > et &.
      ed -s $3 <<FIN                                                                                 > fichier crase fichier et positonne le pointeur de poistions courante du chie
      1,\$s/$1/$2/g                                                                             au d but du chier alors que >&n (ou <&n ) d signe un chier sans modi er la valeur d
      w                                                                                         position courante.
      q
      FIN                                                                                       Exemples 16.5
                                                                                                 (a) Pour a cher un message d'erreur :
      Le shellscript remplace ci-dessus remplace une cha ne par une autre dans un chier
      (par exemple : remplace ch1 ch2 fichier )                                                        echo "$0: Erreur ...." >&2

                                                                                                 (b) Si on veut faire imprimer les erreurs de syntaxe d'un programme en langage C :
16.4.2 Redirection pour tout un shell (exec)                                                           cc pgm.c 2>&1 | lpr
    La commande interne exec, outre le lancement d'une comande en remplacement du                      car les erreurs sont redirig es vers la sortie standard qui est envoy e par le pipe l
shell, permet des redirections qui seront valables jusqu' la sortie du shell. La commande              commande lpr.
suivante, plac e dans un shellscript, enregistrera tous les messages d'erreurs du shellscript
dans le chier suivi.err , jusqu' la n du shellscript :                                          16.4.5 Ordre d' valuation des redirections
   exec 2>suivi.err
                                                                                                    Les redirections sont valu es de gauche droite. Par exemple, les deux redirection
16.4.3 Descripteurs de chier sup rieurs 2                                                       suivantes
                                                                                                   1>fich1 2>&1
   On sait que les trois chiers standards sont ouverts avec les descripteurs 0, 1 et 2. Un      vont rediriger la sortie standard et le chier standard des erreurs vers ch1. Dans l'ordr
shellscript peut ouvrir d'autres chiers en utilisant les descripteurs sup rieurs 2.             inverse, seule la sortie standard aurait t redirig e vers ch1.
118                                  CHAPITRE 16. COMPL MENTS SUR LE SHELL                      16.5. COMPL MENTS SUR LES VARIABLES                                                     11
16.4.6 Redirection sans commande avec zsh                                                          ${var:=val}
                                                                                                donnera la valeur val    la variable var si celle-ci est gale la cha ne vide.
    Avec les shells sh ou ksh, une redirection sans commande ne va rien faire ( < fichier )
ou va cr er un chier vide ( > fichier ). Avec zsh, une commande par d faut est ajout e
avant la redirection. Le nom de cette commande est contenue dans la variable NULLCMD            16.5.2 Modi er l'environnement d'une commande
c'est la commande cat par d faut. Si on veut que zsh se comporte comme sh et ksh, on               On peut modi er l'environnement d'une commande en la pr xant d'une ou de plusieur
ajoute les lignes suivantes dans le chier .zshrc :                                              a ectations de variables (s par es par des espaces).
NULLCMD=:
export NULLCMD
                                                                                                Exemple 16.7
                                                                                                     rep=/usr/bin commande arguments...
16.5 Compl ments sur les variables                                                                 Attention, la port e de cette a ectation se limite la commande pr x e l'a ectatio
                                                                                                ne modi era pas l'environnement du shell dans lequel la commande aura t tap e.
16.5.1 Valeurs par d faut pour les variables
                                                                                                Exemple 16.8
     Il est possible de substituer des valeurs aux valeurs des variables ou des param tres de        a=5
position comme suit (les valeurs r elles des variables ou param tres ne sont pas modi es             a=6 echo $a
par ces substitutions sauf pour = ).
     On dit qu'une variable est activ e si elle a re u une valeur. Un param tre de position          a chera 5 et pas 6 car la commande echo est une commande interne au shell.
est activ si la commande a t lanc e avec au moins autant d'arguments que le num ro                 Erreur ne pas faire : si l'on veut concat ner deux valeurs dans une variable (pa
du param tre.                                                                                   exemple abc et def ), en les s parant par un espace, ne pas crire
     ${variable-mot}                                                                               a=abc def
 si la variable n'est pas activ e, elle est remplac e par la valeur mot.                        qui serait interpr t comme le lancement de la commande def en lui exportant la valeu
     ${variable?mot}                                                                             abc de la variable a . Ecrire plut t :
 si la variable n'est pas activ e, mot est a ch et l'ex cution est arr t e. Si mot est omis,       a="abc def"
un message standard est a ch .
     ${variable+mot}
 si la variable est activ e, elle est remplac e par mot, sinon la cha ne vide est substitu e.   16.5.3 Facilit s de ksh et zsh pour le traitement des valeurs d
     ${variable=mot}                                                                                   variables
 si la variable n'est pas activ e, sa valeur devient mot. Ne marche pas pour les param tres
de position.                                                                                        ksh et zsh o rent un plus par rapport sh ( ne pas utiliser si on veut crire u
                                                                                                shellscript portable sur sh utiliser plut t la commande expr ) :
Remarque 16.1                                                                                       ${#variable}
     mot est interpr t par le shell, sauf quand il suit un ? . Il peut ainsi tre une             donne la taille du contenu de la variable.
    substitution de commande ou d signer la valeur d'une variable.                                  ${variable#mod le}
                                                                                                 (o mod le est une cha ne de caract res pouvant contenir les caract res sp ciaux utilis
Exemples 16.6                                                                                   par la g n ration des noms de chiers par le shell) si mod le correspond au d but de l
 (a) cd ${rep=$HOME}                                                                            valeur de variable, la valeur renvoy e est la valeur de variable sans la plus petite portio
                                                                                                de texte du d but qui correspond mod le. Sinon, la valeur renvoy e est celle de variabl
 (b)   var=${2?il manque des parametres}
                                                                                                    ${variable##mod le}
  (c) cd ${DIR-$HOME}                                                                            la m me chose que ci-dessus mais on supprime la plus grande portion de texte du d bu
                                                                                                qui correspond mod le.
    Si les signes -,?, +, = sont pr c d s du signe : , le comportement pour une variable            ${variable%mod le}
 gale la cha ne vide est le m me que pour une variable non activ e. Par exemple,                 ou
120                                 CHAPITRE 16. COMPL MENTS SUR LE SHELL                                       12
    ${variable%%mod le}
 la m me chose que # et ## mais on supprime la portion de texte de la n de la valeur de
variable qui correspond au mod le.
Exemples 16.9
  (a) Si var contient la valeur /usr/local/bin,
      ${var##*/}
      est gal bin et
      ${var#*/}
     est gal   usr/local/bin     (sans le / du d but)
 (b) Si on travaille avec ksh, on peut placer
      PS1='${PWD#$HOME/}$ '
      dans le chier
                  .profile     pour avoir un prompt qui indique le r pertoire courant sans
      tre trop long pour les noms de r pertoire qui sont sous le r pertoire courant.         Quatri me partie
16.5.4 Modi cation interactive de la valeur d'une variable sous
       zsh (vared)                                                                           Programmation
  zsh o re une facilit pour modi er en interactif la valeur d'une variable avec la com-
mande vared ( variable editor ). Par exemple,
   vared PATH
permet de modi er la valeur de la variable PATH la mani re de emacs.

16.5.5 Tableaux sous ksh et zsh
   Les shells ksh et zsh permettent d'utiliser des tableaux.
   La syntaxe n'est pas la m me pour ces deux shells. Nous ne donnerons que des exemples
avec la syntaxe de zsh :
samoa(~)   tableau=(abc def)
samoa(~)   echo $tableau
abc def
samoa(~)   echo $tableau 1]
abc
samoa(~)   echo $tableau 2]
def
                                                                                         12




Chapitre 17
Programmation des shellscripts
    Ce chapitre tudie les commandes les plus souvent utilis es dans l' criture des shell
cripts. Toutes ces commandes sont internes au shell, sauf la commandes expr.


17.1 Tests divers (test, ... ], ... ]])
    Cette commande permet de tester une condition. Elle est souvent utilis e par les struc
tures de contr le du shell. Cette commande est interne ou externe selon les shells et le
versions d'Unix et les options peuvent varier suivant les versions (consultez le manuel e
ligne).
 test condition
 ou
    condition ]
renvoie 0 si condition est vraie et une valeur di rente de 0 si condition est fausse.
    Dans la deuxi me forme,        est le nom d'une commande synonyme de la command
 test . Le ] est l pour faire joli . Il ne faut pas oublier les espaces de part et d'autre d
condition.
    Quelques conditions (attention bien s parer les di rents mots par des espaces) :
 -d chier vrai si chier est un r pertoire
 -f chier vrai si chier est un chier ordinaire
 -r chier vrai si on a l'autorisation de lire chier
 -w chier vrai si on a l'autorisation d' crire dans chier
 -x chier vrai si on a l'autorisation d'ex cution dans chier
 -s chier vrai si chier n'est pas vide
cha ne
-n cha ne vrai si la cha ne n'est pas vide
-z cha ne vrai si la cha ne est vide
n1 -eq n2 vrai si les 2 nombres entiers n1 et n2 sont gaux. A la place de eq on peu
                                         6
          avoir ne, gt, ge, lt, le (pour =, >, , <, ).
124                         CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                          17.2. D CALER LES PARAM TRES DE POSITION (SHIFT)                                         12
cha ne1 = cha ne2                                                                                17.2 D caler les param tres de position (shift)
                vrai si les 2 cha nes sont gales
cha ne1 != cha ne2                                                                                shift    n]
                vrai si les 2 cha nes ne sont pas gales                                          d cale les param tres de position de n positions. Par d faut n est gal 1 : $2 devient $
-t num ro]                                                                                       $3 devient $2, etc.
                vrai si le num ro est le num ro d'une voie ouverte sur un terminal (par             shift est souvent utilis par les structures de contr le de r p tition pour utiliser tou
                d faut, num ro est gal 1, c'est- -dire correspond la sortie standard)            de r le les di rents param tres de position (voir exemples en 17.4.4).
-L chier        vrai si chier est un lien symbolique. Cette option existe pour la commande
                interne de ksh et de zsh mais pas pour toutes les commandes externes. Elle       Exemple 17.3
                peut aussi s'appeler -h pour certaines commandes externes.                           Si le shellscript decale contient
Remarque 17.1                                                                                         shift
    Si un lien symbolique pointe sur un r pertoire, l'option -d est vraie sur ce lien. Il faut        echo $1
    donc commencer par tester si c'est un lien symbolique si on veut faire la di rence.
                                                                                                      l'ex cution de decale 1 2 a chera 2.
    On peut combiner ces conditions avec les op rateurs logiques
 -a            et logique
 -o            ou logique                                                                        17.3 Sortie d'un shellscript (exit)
!              n gation logique
    On peut regrouper avec des parenth ses (entour es d'un espace de part et d'autre et           exit    n]
pr c d es par n pour qu'elles ne soient pas interpr t es par le shell).                          fait sortir du shell (donc en g n ral du shellscript qui est ex cut par le shell voir 14.11
                                                                                                 en renvoyant le code n (voir 14.1.6).
Exemples 17.1
 (a) test -d    $1 && echo OUI || echo NON
                                                                                                 Exemple 17.4
                                                                                                      exit 1

 (b)   test \( -d fich -o -f fich2 \) -a $var = oui                                                  Si le shellscript ne se termine pas par un exit ou si exit n'est pas suivi d'un nombre n
                                                                                                 il renvoie le code de la derni re commande qu'il a ex cut e.
    De plus ksh et zsh o rent un m canisme interne pour tester les expressions condition-
nelles :                                                                                         Remarque 17.2
       expression conditionnelle ]]                                                                  Il faut se m er des constructions des shells qui cr ent implicitement un sous-she
    (des espaces sont n cessaires entre expression conditionnelle et les doubles crochets).          (voir 14.3 ou 17.4.7). Si une commande exit s'ex cute dans un de ces sous-shells, el
Les expressions sont les m mes que pour test mais le et logique se traduit par && et le              ne fera sortir que du sous-shell et pas du shellscript.
ou logique par || .
    On dispose aussi de quelques ajouts. Par exemple, < et > permettent de comparer
deux cha nes de caract res dans l'ordre lexicographique (ordre du dictionnaire), cha ne =        17.4 Les structures de contr le
mod le est vrai si cha ne correspond mod le qui peut contenir les caract res sp ciaux
utilis s dans la g n ration des noms de chiers (voir 4.5).                                       17.4.1 if .. then .. else ..
    Aucune g n ration des noms de chiers n'est e ectu e par le shell dans expression                Les commandes Unix renvoient toute un code retour qui est un nombre entier (voir 14.1
conditionnelle .                                                                                    En g n ral, si la commande s'est bien d roul e, elle renvoie 0 s'il y a eu une erreu
                                                                                                 ou un d roulement anormal de la commande, le code renvoy est n gatif ou strictemen
Exemple 17.2                                                                                     positif.
          $fichier = *.c ]]                                                                         La commande if prend en compte ce code renvoy par les commandes.
126                        CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                          17.4. LES STRUCTURES DE CONTR LE                                                        12
 if liste-commandes       then                                                                     Variantes de if
    liste-commandes                                                                              if liste-commandes      then
 else                                                                                               liste-commandes
    liste-commandes                                                                              fi
 fi
teste la valeur renvoy e par la liste de commande qui suit le if (code de la derni re com-       if liste-commandes then
mande de la liste ex cut e). Si la valeur est nulle, la liste de commandes qui suit le then         liste-commandes
est ex cut e, sinon c'est la liste qui suit le else qui est ex cut e.                            elif liste-commandes then
                                                                                                    liste-commandes
Remarque 17.3                                                                                    elif ...
      Les mots cl s if, then, else, doivent appara tre en d but de ligne (pr c d s seulement     ...
      d'espaces ou de tabulations) pour tre reconnus par le shell. Si on veut les mettre         ...
        la suite d'autres instructions sur la m me ligne il faut les faire pr c der d'un .       else
      La pr sentation choisie dans ce cours suit le format couramment utilis en langage             liste-commandes
      C (else align avec le if ). Le then est plac sur la m me ligne que le if et il est donc    fi
      pr c d d'un .
                                                                                                   Cette structure est un raccourci plus simple et plus lisible pour la structure suivante
Exemples 17.5
  (a) if cp rep1/* rep2 then                                                                    if liste-commandes       then
         :                                                                                         liste-commandes
      else                                                                                      else
         echo "Impossible de copier les fichiers" >&2                                              if liste-commandes      then
      fi                                                                                              liste-commandes
 (b) crivons un shellscript oui qui pourra tre utilis par d'autres shellscripts. Il ren-           else
    verra 0 si l'utilisateur r pond oui et il renverra 1 sinon :                                      if ...
                                                                                                         ...
      read reponse                                                                                       ...
      if test "$reponse" = oui         then                                                              ...
         exit 0                                                                                       else
      else                                                                                               liste-commandes
         exit 1                                                                                       fi
      fi                                                                                           fi
                                                                                                fi
      On peut utiliser ce shellscript dans un autre shellscript comme suit :
      echo -n "Confirmez-vous la suppression ? "
      if oui   then
         rm *                                                                                   Exemple 17.6
      fi                                                                                             if test "$reponse" = oui   then
                                                                                                        exit 0
      Remarque 17.4                                                                                  elif test "$reponse" = non   then
         Puisqu'en l'absence de commande exit, un shellscript sort avec le code retour de               exit 1
         la derni re commande ex cut e, le shellscript oui pourrait aussi s' crire :                 else
           read reponse                                                                                 exit 2
           test "$reponse" = oui                                                                     fi
128                       CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                        17.4. LES STRUCTURES DE CONTR LE                                                       12
17.4.2 case ... esac                                                                         Exemples 17.8
                                                                                              (a) for i in    1 2 3
 case mot in
                                                                                                  do
   mod le1) liste-commandes
                                                                                                    echo $i
 .
                                                                                                  done
 .
   mod len) liste-commandes                                                                   (b) Pour voir la di rence entre $* et $@, ex cutez le shellscript suivant avec quelque
 esac                                                                                             param tres, remplacez ensuite $* par $@ et ex cutez le nouveau avec les m me
    case est une instruction de choix multiple : le premier mod le rencontr qui correspond        param tres. Notez la di rence. Dans la premi re version on n'a qu'un seul tour
  la valeur de mot indique la liste de commandes ex cuter. Si mot ne correspond aucun             car $* est consid r comme un mot unique.
des mod les, l'ex cution se poursuit l'instruction qui suit esac .
    Les mod les sont de la forme :                                                                for i in "$*"
   val1 | val2... | valp                                                                          do
    Dans les mod les, on peut utiliser les caract res sp ciaux ? * ] comme dans les                  echo $i
noms de chiers (voir 4.5). On peut ainsi tester si une valeur commence par un chi re par          done
le mod le 0-9]* .                                                                             (c) Le shellscript cherche suivant a che les chemins d'acc s des chiers donn s e
Exemple 17.7                                                                                      argument :
     Le shellscript oui donn en b peut s' crire :                                                 for fichier
                                                                                                  do
      read reponse
                                                                                                     find / -name "$fichier" -print
      case "$reponse" in
                                                                                                  done
        o|O|oui|OUI) exit 0
        n|N|non|NON) exit 1                                                                       Il su ra de taper
        *) exit 2
                                                                                                  cherche fich1 fich2 fich3
      esac
                                                                                                  pour faire a cher les chemins d'acc s des chiers sp ci s.
17.4.3 for ... do ... done                                                                        Si on veut ajouter quelques tests et entrer la racine de la recherche en premier para
                                                                                                  m tre, le shellscript cherche devient :
   Il est fr quent d'avoir un traitement qui se r p te pour chaque param tre d'une com-
mande (par exemple, lpr ch1 ch2 ). La commande for permet de traiter successivement               if test $# -lt 2    then
tous les param tres d'une commande. Elle permet aussi de r p ter un traitement pour                  echo "$0 : Il faut au moins 2 arguments" >&2
plusieurs valeurs di rentes.                                                                         exit 2
 for variable in mots...]                                                                         fi
 do                                                                                               if test ! -d $1    then
    liste-commandes                                                                                  echo "$0 : $1 n'est pas un repertoire" >&2
 done                                                                                                exit 3
variable prend tour de r le pour valeur chaque mot de la liste mots qui suit in . Pour            fi
chaque valeur de variable, liste-commandes est ex cut e.                                          racine=$1
    Si in mots... n'est pas pr sent, variable prend pour valeur chacun des param tres de          shift
la commande (ce qui est quivalent : for variable in $@ voir 15.2.6).                              for fichier
                                                                                                  do
Remarque 17.5                                                                                        find $racine -name "$fichier" -print
    Une boucle for sans in ne modi e pas les valeurs de $1, $2,...                                done
130                       CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                           17.4. LES STRUCTURES DE CONTR LE                                                          13
 (d) Pour ex cuter un traitement (ici a cher le nom) sur tous les chiers d'un r pertoire             do
     on utilise la substitution de commande :                                                          cherche "$1" "$2"
                                                                                                       shift 2
      for i in `ls -A`                                                                               done
      do
         echo $i                                                                                 (d) Lecture ligne ligne d'un chier structur en lignes :
      done
                                                                                                     while read ligne
17.4.4 while ... do ... done                                                                         do
                                                                                                        echo $ligne
 while liste-commandes1
                                                                                                     done < fichier
 do
    liste-commandes2
 done                                                                                           17.4.5 until ... do ... done
ex cute liste-commandes2 tant que liste-commandes1 renvoie un code 0.                               Est semblable while mais la sortie de la boucle s'e ectue si la liste de commandes qu
Exemples 17.9                                                                                   suit until renvoie une valeur nulle.
  (a) while test "$1"
      do
        echo $1
                                                                                                17.4.6 Instructions li es aux boucles (continue, break)
        shift                                                                                    continue      n]
      done                                                                                      permet de sauter la n de la boucle et de recommencer une nouvelle boucle.
                                                                                                 break    n]
     a che tous les param tres, un par ligne. Retenez le test sur $1 pour rep rer le dernier
     param tre.                                                                                 provoque la sortie de la boucle en cours d'ex cution et passe l'instruction qui suit l
                                                                                                boucle.
 (b) Si le shellscript coucou contient :                                                            On peut ajouter un nombre entier n la suite de ces 2 instructions pour indiquer qu
                                                                                                l'action porte sur des boucles externes. Par exemple, break 2 sortira de la boucle qu
      while :                                                                                   englobe la boucle dans laquelle cette instruction est crite.
      do
         echo coucou
         sleep 30
                                                                                                17.4.7 Probl mes avec les boucles redirig es et les pipes
      done                                                                                         Lorsqu'une boucle est redirig e vers un chier, le shell l'ex cute dans un sous-shell.
                                                                                                en est de m me avec les commandes d'un pipe (sauf peut- tre la derni re commande).
      Si on tape                                                                                   Ceci implique les deux probl mes suivants :
      coucou &
                                                                                                      une commande exit ne sortira pas du shellscript mais seulement de la boucle ou d
     il s'a chera coucou sur l' cran toutes les 30 secondes (ne pas rediriger sur le terminal         pipe,
     du coll gue !). La commande interne : est une commande qui ne fait rien et renvoie
     le code retour 0 (voir 17.6).                                                                    les a ectations de variables l'int rieur de la boucle ne seront pas connues en dehor
                                                                                                      de la boucle ou du pipe.
 (c) Pour rechercher dans l'arborescence une liste de chiers ($2) situ s sous des r per-
     toires di rents ($1), on peut utiliser le shellscript suivant (le shellscript cherche a    Remarque 17.6
       t crit en c) :                                                                                 Malgr tout on n'est pas oblig d'exporter une variable pour qu'elle soit connue de
                                                                                                      sous-shells engendr s par le shell pour ex cuter la boucle redirig e (v ri ez-le tout d
      while    "$1" ]     # teste la fin de la liste                                                  m me pour la version du shell que vous utilisez).
132                         CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                           17.5. INTERCEPTION DES SIGNAUX                                                        13
   Voici des m thodes (de type bidouillage ) pour contourner ces deux probl mes dans le               Ces signaux sont pour la plupart des signaux d'interruption pour cause de d roulemen
cas d'une boucle redirig e :                                                                      anormal (erreur au niveau du bus, m moire insu sante, etc.) ou d'interruption par l'util
      Pour le probl me du exit, il n'y a pas de solution miracle. On doit s'adapter chaque        sateur (l'appui sur la touche d'annulation correspond au signal num ro 2). La command
      cas particulier. On peut envoyer un code retour sp cial avec la commande exit               kill ( tudi e en 7.2) permet d'envoyer un signal un processus rep r par son num ro.
      l'int rieur de la boucle (par exemple 5) et on teste le code retour juste la sortie de      Exemples 17.10
      la boucle. On peut ainsi sortir du shellscript si le code retour lu est le code sp cial       (a) trap '' 2 # les deux apostrophes designent la chaine vide
      choisi.                                                                                            ignore l'interruption par la touche d'annulation
      Pour l'a ectation de variable, il n'y a pas non plus de solution simple. On peut              (b) trap 2
        crire l'a ectation dans un chier temporaire que l'on ex cute avec la commande .                  r tablit la prise en compte de cette touche
      (voir 14.11.2) la sortie de la boucle. Par exemple (la valeur de $$ est la m me dans
      les sous-processus du pipe mais il vaut mieux v ri er),                                      (c)   temp=temp$$
                                                                                                         trap 'rm -f $temp       exit 2' 1 2 15
      echo "var=valeur" > ftemp$$
      On peut aussi dans certains cas utiliser la substitution de commande comme il est                 supprime le chier temporaire dont le nom est compos de la cha ne temp suiv
      d crit ci-dessous pour le pipe. C'est alors la solution la plus propre'.                          du num ro de processus, la n du programme, si l'utilisateur appuie sur la touch
                                                                                                        d'annulation ou si le programme a t interrompu par un kill ou par la d connexio
      Pour le pipe, une solution est d'utiliser un chier temporaire qui contient les infor-             de l'utilisateur.
      mations que l'on veut faire passer au shell qui a appel le pipe. Dans certains cas, une
      autre solution est de mettre le pipe dans un shellscript part (ou une fonction), de             Port e d'un trap : Le trap est en activit dans un shellscript partir du moment o
      faire a cher par ce shellscript les informations que l'on veut r cup rer, et d'utiliser     est lu et jusqu' ce qu'un autre trap sur le m me signal soit lu. Les sous-shell n'h riten
      une substitution de commande pour r cup rer ces valeurs. Cette derni re solution            pas d'un traitement du signal initi par un trap. Cependant, si un shellscript ignore u
      est aussi utilisable dans le cas d'une boucle redirig e.                                    signal, le signal ne sera pas transmis ses ls.
                                                                                                  Exemples 17.11
17.5 Interception des signaux                                                                       (a) Lancez le programme suivant, tapez sur la touche d'annulation et voyez le messag
                                                                                                        s'a cher l' cran.
 trap   liste-commandes] n...
     Le plus souvent, un processus s'interrompt quand il re oit un signal (voir 2.2.1). La com-          trap "echo $0 : fin de programme         exit 2" 2
mande trap permet un comportement di rent la r ception du signal : liste-commandes                       coucou
sera ex cut e si le programme re oit un des signaux dont le num ro est indiqu dans la liste
des n ensuite, le programme continue l'endroit o il tait au moment de la r ception du                    o coucou est le shellscript suivant :
signal (sauf si une instruction comme exit a t ex cut e entre temps).
     Si n est 0, la liste de commandes sera ex cut e la sortie du shell en cours (en g n ral,            while :
   la n de l'ex cution du chier de commande qui contient l'instruction trap) ou la sortie                do
de la fonction (voir 16.3) dans laquelle a t d ni le trap.                                                  echo coucou
     Si liste-commandes est la cha ne nulle (indiqu e explicitement par '' : 2 apostrophes                  sleep 5
accol es), le signal est ignor .                                                                         done
     Si liste-commandes est absente, le signal sera nouveau trait normalement. trap
(sans aucun param tre) a che la liste des commandes associ es chacun des signaux.                  (b) Le sch ma ci-dessous permet d'interrompre commande en tapant la touche d'annu
     La liste de commandes du trap est lue et interpr t e une premi re fois quand le shell             lation, sans interrompre le programme principal l'ex cution reprend la suite d
lit la ligne qui comprend la commande trap et le r sultat de la premi re interpr tation est            programme.
interpr t e une deuxi me fois si la liste de commande est ex cut e apr s la r ception d'un
signal.                                                                                                  trap "trap '' 2" 2      # les guillemets pour entourer la chaine
134                         CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                             17.7. R CURSIVIT DANS L'EX CUTION DES SHELLSCRIPTS                                       13
                          # avec les deux apostrophes                                                  Cette commande permet de lancer des processus en arri re-plan et d'en attendre certain
      commande                                                                                      avant de continuer une action. Il peut tre utile de conserver le pid d'un processus lanc
      trap '' 2                                                                                     en arri re-plan dans une variable l'aide de la variable sp ciale $! (voir 15.2.6).
      Suite du programme...

      Si le premier trap tait trap '' 2, on ne pourrait pas interrompre la commande.                17.7 R cursivit dans l'ex cution des shellscripts
      On pourrait aussi mettre trap : 2 comme premier trap mais il pourrait peut- tre
      y avoir un probl me si la touche d'annulation tait tap e pendant l'ex cution du                   Un shellscript (ou une fonction) peut s'appeler lui-m me. Par exemple le shellscrip
      deuxi me trap (plac apr s la commande) : le signal 2 ne serait plus ignor dans la              dirr suivant a che tous les sous-r pertoires de l'arborescence d'un r pertoire donn e
      suite du programme.                                                                           param tre en d calant les di rents niveaux de sous-r pertoires :
                                                                                                    dir=${1-.}

17.6 Commandes internes diverses
                                                                                                    indent=$2
                                                                                                    for fich in `ls -A $dir`
                                                                                                    do
 :                                                                                                     if    -d $dir/$fich ] then
commande nulle (elle peut tre suivie de commentaires sur la m me ligne). Elle renvoie                     echo "$indent"$fich
le code 0 ce qui permet de construire des boucles in nies (voir exemple de while de la                    $0 $dir/$fich "$indent "
page 130).                                                                                             fi
 eval cha nes...                                                                                    done
les cha nes sont interpr t es par le shell et elles sont ensuite ex cut es comme si elles avaient
 t tap es au clavier (donc avec une nouvelle interpr tation du shell). Cette commande               Remarques 17.7
permet de construire des commandes complexes morceau par morceau et des les ex cuter                 (a) L'utilisation de $0 au lieu du nom du shellscript assure que le shellscript fonctionner
ensuite. Elle permet aussi des astuces qui sont li es une double interpr tation du shell                 m me si on change son nom.
comme dans l'exemple suivant.
                                                                                                     (b) L'ex cution de ce shellscript risque de provoquer une erreur si l'arborescence d
Exemple 17.12                                                                                            r pertoire est profonde et si la m moire allou e la pile est trop faible.
      eval dernier='$'$#
      a ecte la variable dernier la valeur du dernier param tre de position du shellscript.
      En e et, quand le shell lit la commande et l'interpr te, la commande devient                  17.8 Calculs, traitement des cha nes de caract res
      eval dernier=$3                                                                                  ksh et zsh fournissent la commande interne let pour e ectuer des calculs arithm tique
      (s'il y avait par exemple 3 param tres de position) car le shell e ectue la substitution      Cette commande n'existe pas dans sh mais on peut utiliser la commande expr.
      de variable ($#).                                                                                expr permet aussi d'extraire des sous-cha nes d'une cha ne de caract res.
      La commande interne eval est ensuite lanc e : elle commence par interpr ter la
      cha ne dernier=$3 comme le ferait le shell. Cette cha ne devient dernier=toto
      (si toto est la valeur du troisi me param tre).
                                                                                                    17.8.1 Commande expr
                                                                                                     expr arguments...
      L'a ectation est ensuite ex cut e et on obtient bien ce que l'on voulait.                      value les arguments comme une expression. Le r sultat est envoy sur la sortie standard
 exec commande                                                                                      Ce n'est pas une commande interne au shell mais elle est tr s utile dans l' criture d
la commande est ex cut e la place du shell sans cr ation de nouveau shell.                          shellscripts
    On a vu en 16.4.2 que exec permet aussi de faire des redirections d nitives dans le                 Attention, sauf pour les options ci-dessous o le code retour est indiqu , le code retou
shell.                                                                                              renvoy est 0 lorsque la valeur envoy e sur la sortie standard est di rente de 0 et 1 si l
 wait    n]                                                                                         valeur est 0.
attend le processus ls de pid n. Si n n'est pas sp ci , attend tous les processus ls.                   Les calculs se font sur des entiers cod s sur 32 bits en compl ment 2.
136                        CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                             17.8. CALCULS, TRAITEMENT DES CHA NES DE CARACT RES                                  13
    arguments est une expression comprenant des op rateurs. On peut utiliser les op rateurs         (b) Le programme suivant a che les nombres entiers de 1 9 :
suivants. Il ne faut pas oublier de les prot ger contre une interpr tation du shell s'ils sont
des caract res sp ciaux pour le shell (par exemple, les caract res < > * & |).                            a=1
    Voici ces op rateurs par ordre de priorit croissante, regroup s par groupes d' gales                  while    $a -lt 10 ]
priorit s :                                                                                               do
exp1 n j exp2                                                                                                echo $a
               si exp1 est non nulle et non vide, elle est envoy e sur la sortie standard, sinon             a=`expr $a + 1`
               si exp2 est non nulle et non vide, elle est envoy e sur la sortie standard, sinon          done
               0 est envoy e sur la sortie standard.
exp1 n& exp2                                                                                        (c)   expr "$a" : ".*"
               si exp1 et exp2 sont non nulles et non vides, exp1 est envoy e sur la sortie               a che le nombre de caract res de la cha ne contenue dans la variable a.
               standard, sinon 0 est envoy e sur la sortie standard.
exp1 op_comp exp2                                                                                   (d)   expr 123abc : ' 0-9]*'
               o op_comp est un op rateur de comparaison :                                                a che 3.
               < <= = != >= >
               La comparaison est num rique si les deux expressions sont num riques elle            (e) Le shellscript option suivant a che le nombre n associ une option -n . Il renvoi
               est lexicographique sinon. Envoie 1 sur la sortie standard si l'expression est           le code retour 1 si le param tre ne commence pas par le caract re - :
               vrai et 0 sinon.                                                                           expr $1 : '-\(.*\)'
exp1 + exp2
exp1 - exp2 addition et soustraction                                                               17.8.2 Commande let
exp1 n* exp2
exp1 / exp2                                                                                           Cette commande n'existe pas en sh. Elle est disponible dans ksh et zsh.
exp1 n% exp2 multiplication, division et modulo                                                     let expression arithm tique
   Autres arguments :                                                                              permet d'a ecter des valeurs num riques une variable.
cha ne        (une seule cha ne de caract re) envoie cha ne sur la sortie standard et le               L'expression arithm tique doit tre un seul mot pour le shell (on peut l'entourer d
              code retour 0 si cha ne est non vide envoie une ligne vide et le code retour         guillemets pour cela). Il ne faut pas faire pr c der les noms des variables du shell par
              1 si cha ne est vide.                                                                signe $ pour d signer leur contenu.
cha ne : exp-reg                                                                                   Exemples 17.14
             renvoie le nombre de caract res de cha ne qui peuvent tre d sign s par                 (a) let a=10+b
             l'expression r guli re exp-reg (voir chapitre 11). exp-reg doit repr senter le
             d but de cha ne et il ne faut donc pas commencer exp-reg par le caract re              (b)   let "a = 10 * a"
              ^.
             Si une partie de l'expression r guli re est parenth s e par \( et \), expr             ((expression arithm tique))
             renvoie la sous-cha ne de cha ne qui correspond cette partie. Le code                 est quivalent
             retour 1 est renvoy si l'expression r guli re exp-reg ne correspond aucune               let "expression arithm tique"
             sous-cha ne de cha ne et 0 sinon.                                                     (voir 14.8)
   On peut regrouper les expressions en les parenth sant par ( et ).                               Exemples 17.15
                                                                                                    (a) ((a=10+b))
Exemples 17.13                                                                                      (b) ((a = 10 * a))
 (a) a=`expr $a + 1`
     incr mente a de 1.                                                                               Pour des calculs plus complexes on utilisera la commande bc .
138                        CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS                         17.11. MISE AU POINT DES SHELLSCRIPTS (SET -XV)                                          13
17.9 Traitement des cha nes de caract res                                                      met dans la variable du shell nom-variable la prochaine option et le num ro de prochai
                                                                                               argument traiter dans la variable OPTIND.
    Le langage Perl permet d'e ectuer de nombreuses manipulations sur les cha nes de               La premi re fois que getopts est appel e, OPTIND vaut 1 et ensuite OPTIND est incr ment
caract res. Le langage est complexe et n'est pas tudi dans ce cours. Son usage doit               chaque fois que l'on appelle getopts, au fur et mesure du traitement des di rent
 tre envisag pour les programmes qui comportent beaucoup de traitements de cha nes de          param tres. Si une des options n cessite un argument (comme l'option -P voqu e c
caract res. Il est en particulier tr s utilis dans les programmes CGI (Common Gateway          dessus), cet argument est rang dans la variable OPTARG.
Interface ) install s sur les serveurs Web (voir cours polycopi s sur les r seaux).                Si une option ill gale est rencontr e, nom-variable re oit la valeur ? .
    La commande habituelle utilis e pour la manipulation de cha nes de caract res est la           Quand toutes les options ont t pass es en revue, getopts renvoie un code retour no
commande expr (voir 17.8.1).                                                                   nul. L'option sp ciale -- peut indiquer la n des options (on peut ainsi indiquer u
    Voici des m thodes (plus ou moins) simples pour extraire une sous-cha ne de caract res.    argument qui n'est pas une option et qui commence par - ).
Pour ces exemples, on extrait l'heure les minutes et les secondes en utilisant la commande         Les options accept es sont indiqu es dans la cha ne options. Le caract re : est acco
date et la substitution de commande (voir 14.7) :                                              derri re les options qui doivent tre suivies d'un compl ment.
heure=`date | cut -c12-19`                                                                         Voici un exemple d'utilisation de getopt en d but de shellscript. Ce shellscript est sup
heure=`date | awk '{print $4}'`                                                                pos accepter les options simples -a et -b et les options -s et -f avec des compl ments. O
heure=`date | read a b c d e echo $d`                                                          notera que l'on analyse d'abord tous les param tres avant de commencer les traitement
heure=`date | sed 's/ ^ ]* ^ ]* ^ ]* \( ^ ]*\).*/\1/'`                                         On n'est ainsi pas tributaire de l'ordre dans lequel l'utilisateur a donn les param tres su
heure=`set \`date\`   echo $4`                                                                 la ligne de commande.
heure=`expr "\`date\`" : ' ^ ]* ^ ]* ^ ]* \( ^ ]*\)'`                                          opta=0 optb=0 optf=0 opts=0
   On peut aussi utiliser la variable . Voici des lignes de programme pour a cher le
                                IFS                                                            fichier= # complement pour option -f
nom de la machine d'une adresse internet :                                                     sujet=     # complement pour option -s
nom=samoa.unice.fr                                                                             while getopts abs:f: argument
IFS=.                                                                                          do
set $nom                                                                                          case $argument in
echo $1                                                                                             a) opta=1
                                                                                                    b) ooptb=1

17.10 Aide pour traiter les options (getopts)                                                       f) optf=1
                                                                                                       fichier="$OPTARG"
                                                                                                    s) opts=1
    La commande getopts est une commande interne qui aide r cup rer les valeurs des                    sujet="$OPTARG"
param tres de position des shellscripts dont la syntaxe suit la syntaxe habituelle des com-         \?) echo "`basename $0`: Usage: \
mandes Unix.                                                                                              `basename $0` -ab] -s sujet] -f fichier-adresses                  message]" >&
    On sait que les commandes Unix acceptent plusieurs formats di rents. On peut crire                  exit 2
par exemple ls -la ou ls -l -a . Quand une option n cessite un compl ment, ce                     esac
compl ment peut tre accol l'option ou s par de l'option par un espace ( -P1rv ou               done
 -P 1rv par exemple). La r cup ration des options d'un shellscript n cessite donc un           shift `expr $OPTIND - 1`
traitement assez complexe. La commande getopts facilite grandement la t che du pro-
grammeur.                                                                                      if         $optf -eq 0 ]   then
    L'ancienne commande getopt e ectuait le m me type de traitement mais ne fonctionnait            ...
pas correctement d s qu'un des arguments tait compos de plusieurs mots (comme le
compl ment de l'option -s dans mail -s "Sujet du message" toto ).
 getopts options nom-variable          param tres...]                                          17.11 Mise au point des shellscripts (set -xv)
getopts analyse les param tres de position (ou la cha ne constitu e de param tres... si elle
est donn e). getopts traite une une toutes les options, chaque fois qu'on le lance. Il          set -v
140                         CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
fait a cher les lignes du shellscript au moment o elles sont lues par le shell. set   +v   annule
cette option.
 set -x
fait a cher les commandes (et leurs arguments) au moment de leur ex cution, apr s l'in-
terpr tation du shell. set +x annule cette option.
    Ces commandes peuvent tre ins r es de part et d'autre des lignes que l'on veut suivre
                                                                                                    Index
  la trace dans les shellscripts que l'on veut mettre au point.
    Si on veut suivre la trace l'ex cution enti re d'un shellscript, le plus simple (car on         #, 32                            .zshenv, 111
 vite de modi er le shellscript) est de lancer le shellscript par (on remplacera sh par zsh si      #!, 101                          .zshrc, 111
le shellscript doit tre ex cut par zsh ).                                                           $, 58                            :, 118, 134
 sh -x nom-shellscript
                                                                                                    $!, 108                            , 113
 ou
                                                                                                    $#, 108                          <, 94
 sh -v nom-shellscript
                                                                                                    $$, 108                          <&n, 117
                                                                                                    $(...), 98                       <<, 115
                                                                                                    $*, 108                          =, 105
                                                                                                    $?, 108                          >, 93
                                                                                                    $@, 108                          >!, 94
                                                                                                    $n, 104                          >&n, 117
                                                                                                    $variable, 105                   >>, 94
                                                                                                    ${#variable}, 119                ?, 31, 59
                                                                                                    ${=variable}, 106                 , 31, 59
                                                                                                    ${variable##mod le}, 119           (test), 123
                                                                                                    ${variable#mod le}, 119             ... ]], 124
                                                                                                    ${variable+mot}, 118             n, 31, 58, 99
                                                                                                    ${variable-mot}, 118             , 99
                                                                                                    ${variable=mot}, 118             n(...n), 60
                                                                                                    ${variable?mot} , 118            %n, 97
                                                                                                    ${variable%%mod le}, 120         nn, 60
                                                                                                    ${variable%mod le}, 119          n{m, n}, 60
                                                                                                    ${variable}, 106                 n{m,nn}, 60
                                                                                                    &, 96, 113                       n{mn}, 60
                                                                                                                                     ^, 31
                                                                                                    &&, 113                          ^, 58
                                                                                                    ', 99                            `, 98
                                                                                                    ((...)), 137                     {...}, 96
                                                                                                    (...), 95                        j, 61, 95
                                                                                                    *, 30, 59                        jj, 113
                                                                                                    +, 59                               , 31
                                                                                                    ., 58, 102
                                                                                                    .plan, 38                        a2ps, 48
                                                                                                    .project, 38                     administrateur, 11
                                                                                                    .zlogin, 111                     a ectation, 105
                                                                                                    .zpro le, 111                    a cher, 108
                                                                                                                               141
142                                                                            INDEX     INDEX                                                                           14
a cher le contenu d'un chier, 44             continue, 131                               exit, 19, 125, 131                      interpr tation du shell, 99
a cher les octets d'un chier, 45             convertir des caract res, 75                export, 109                             interpr teur de commandes, 5
a cher page page, 45                         copier des chiers, 50                       expr, 135
alias, 97                                    copier l'arborescence d'un r pertoire, 56   expression conditionnelle, 124          jobs, 97
appels syst me, 5                            core, 13, 34                                expression r guli re, 58                join, 88
arri re-plan, 13, 96                         cp, 50, 56                                  extraire une sous-cha ne, 135           kill, 22, 42
at, 43, 96                                   cpio, 57                                                                            Korn-shell, 6
autorisations, 35, 36                        cr er un r pertoire, 55                     false, 113
autorisations d'un chier, 15                 csh, 6                                      fg, 97                                  ksh, 6
awk, 81                                      csplit, 88                                   chier                                  lancer une commande, 22
                                             cut, 76                                          type de, 7, 29                     last, 38
batch, 96                                                                                 chier inclus, 115                      lecteur de disquettes, 53
bc, 137                                      daemon, 13                                   chier ordinaire, 7                     lecture ligne ligne d'un chier, 131
bg, 97                                       date, 37                                     chier sp cial, 8, 29                   let, 137
boucles redirig es, 131                      d but d'un chier, 79                          le, 32                                lien, 30, 52
Bourne shell, 6                              d caler les param tres, 125                  n d'un chier, 79                       lien hard , 51
break, 131                                   demand paging, 12                             nd, 32                                lien symbolique, 52
                                             d mon, 13                                     nger, 38                              lien symbolique pour un r pertoire, 56
C-shell, 6                                   d personnaliser, 99                         fold, 88                                lignes cons cutives distinctes, 79
calculs, 135                                 d placer des chiers, 53                     fonction, 114                           lignes cons cutives identiques, 79
calculs math matiques, 137                   descripteur de chier, 116                   for, 128                                liste de commandes, 113
cancel, 47                                   df, 39                                                                              ln, 52, 56
caract res sp ciaux pour le shell, 30        di , 78                                     g n ration des noms de chiers, 30
case, 128                                                                                gestion des jobs, 97                    locate, 34
                                             di rences entre deux chiers, 78             getopt, 138                             lpq, 47
cat, 44                                      DISPLAY, 112                                                                        lpr, 46
cd, 30                                       disquette, 53                               getopts, 138
CDPATH, 107                                                                              grep, 74                                lprm, 47
                                             driver, 5, 29                               groupe d'un chier, 15                   lpstat, 46
CGI, 138                                     droits sur un chier, 16                                                             ls, 27
cha ne de caract res, 135, 138               du, 39                                      groupe d'un processus, 13
chmod, 35                                                                                groupe d'utilisateurs, 9                mail, 48
cmp, 78                                      echo, 108                                   gzip, 54                                majeur, 29
code retour, 78, 93, 125                     ed, 115                                     head, 79                                man, 21
comm, 88                                      diteur de texte, 62                        historique de Unix, 3                   mcopy, 53
commande externe, 6                          eject, 53                                   HOME, 30, 106                           mdir, 53
commande interne, 6, 92, 134                 emacs, 62                                   hostname, 37                            message d'erreur, 94
commentaire, 32                              EMACSLOADPATH, 63                                                                   mineur, 29
comparer deux chiers, 78                     entr e standard, 93                         i-node, 8, 14, 51                       mise au point, 139
compatibilit de zsh, 92                      environnement, 11, 92, 104, 109, 110, 119   identi cateur d'une variable, 105       mise en page, 48
compl tion des commandes, 24                 Envoyer un chier, 48                        if, 125                                 mkdir, 55
compress, 54                                 erreur standard, 93                         IFS, 107                                mode dired d'emacs, 68
compter les caract res, mots et lignes, 74   eval, 134                                   imprimantes disponibles, 46             mode d'acc s un chier, 15
concat ner plusieurs chiers, 44              ex cution d'un shellscript, 100             imprimer, 45                            modi er la valeur d'une variable, 120
con gurer zsh, 92                            exec, 116, 134                              inhiber l'interpr tation du shell, 99   monter un syst me de chiers, 6
144                                                                          INDEX   INDEX                                                                          14
more, 45                                 printenv, 110                               set group id, 16                          tri, 73
mot de passe, 18                         PRINTER, 46                                 set user id, 16                           true, 113
mv, 53, 55                               processus, 11                               setopt, 110                               tty, 39
                                             image, 11                               sgid, 16                                  type d'un chier, 32
NFS, 7                                   processus en cours d'ex cution, 41          sh, 6                                     type de chier, 29
NIS, 18, 38                              programme de d marrage, 10                  shell, 5, 91
NOCLOBBER, 94                            prompt, 92                                  shell d'ex cution d'un shellscript, 101   uid, 9
nohup, 96                                propri taire d'un chier, 15                 shellscript, 6, 91, 100                   umask, 36
nom absolu, 22                           propri taire e ectif, 13                    shift, 125                                unalias, 97
nom d'un chier, 22                       propri taire r el, 13                       signal, 12, 42, 132                       uname, 37
nom d'une commande, 22                   protection des chiers, 15                   sleep, 130                                uniq, 79
nom de l'ordinateur, 37                  ps, 41                                      socket, 8                                 Unix BSD, 4
nom relatif, 22                          PS1, 107, 120                               Solaris, 4                                Unix OSF, 4
noyau, 5                                 PS2, 107                                    sort, 73                                  Unix Syst me V, 4
NULLCMD, 118                             pseudo- chier, 95                           sortie standard, 93                       unset, 106
num ro de job, 96                        pwd, 30                                     split, 88                                 until, 131
num ro de processus, 11                                                              spool, 46                                 uuencode, 48
od, 45                                   racine, 22                                  substitution de commande, 98              valeur par d faut d'une variable, 118
options                                  read, 108                                   suid, 16                                  vared, 120
    traitement, 138                      recherche d'une cha ne, 74                  super-utilisateur, 11                     variable, 118
options des shells, 92, 110              recherche d'une commande, 100               supprimer des caract res, 75                   d composition en mots sous zsh, 106
ordre de priorit , 114                   recherche de chiers, 32                     supprimer des chiers, 52                       valeur par d faut, 118
OSF, 4                                   rechercher le manuel en ligne, 23           supprimer des r pertoires, 55             variable de position, 104
                                         rechercher une commande, 23                 supprimer des requ tes d'impression, 47   variable du shell, 105
param tre, 104                           r cursivit , 135                            supprimer un processus, 22, 42            variable sp ciale du shell, 106
partition d'un disque, 6                 redirection, 44, 93, 115, 116               supprimer une variable, 106
passwd, 18                               redirection des erreurs, 94                 suspendre un processus, 97                wait, 134
paste, 88                                redirection sur chier inclus, 115           swap, 12                                  wc, 74
PATH, 22, 100, 107                       regrouper des commandes, 95                 syst me d'exploitation, 3                 whence, 23
PC (compatible), 53                      renommer des chiers, 53                         nom du, 37                            whereis, 23
Perl, 82                                 renommmer un r pertoire, 55                 syst me d'impression, 46                  while, 130
pid, 11, 96                              r pertoire                                  syst me de chiers, 6                      who, 37
pilote, 29                                   structure interne, 14                                                             whoami, 37
pipe, 95                                 r pertoire courant, 12                      tail, 79                                  write, 113
pipe nomm , 8                            r pertoire HOME, 10                         tar, 57
place libre d'un syst me de chiers, 39   requ te d'impression, 46                    TERM, 107, 112                            xemacs, 62
place occup e par un r pertoire, 39      return, 115                                 terminal de contr le, 13                  xterm, 103
pliage de r pertoires, 57                rm, 52, 55                                  test, 123                                 Yellow Pages, 38
Postscript, 48                           rmdir, 55                                   thread, 11                                ypcat, 38
pr, 48                                                                               touche sp ciale, 19                       yppasswd, 18
primitive, 5                             sauvegarder sur disquette, 53               tr, 75
print, 108                               sed, 80                                     traiter les options, 138                  Z shell, 6
      \subitem printcap, 46              set, 91, 104, 110, 139                      trap, 132                                 zip, 54
146                INDEX
zone de swap, 12
zsh, 6, 92

				
DOCUMENT INFO
Shared By:
Stats:
views:26
posted:10/24/2012
language:Latin
pages:78