
                      HOWTO Comment migrer de VMS  Linux

Auteur : Guido Gonzato et Mike Miller
Traducteur : Dimitri Ara

   v1.1.3, 17 Septembre 1999
     _________________________________________________________________

   _Ce HOWTO est destin  toutes les personnes qui utilisent VMS et qui
   ont maintenant besoin ou envie de passer  Linux, le clone libre
   d'Unix. Nous effectuerons la transition --- je l'espre, sans douleur
   --- en comparant les commandes et les outils disponibles sur ces deux
   systmes. _
     _________________________________________________________________

1. Introduction

1.1 Pourquoi Linux ?

   Vous avez entendu dire qu'Unix est difficile et vous tes hsitant 
   la perspective d'abandonner VMS ? Pas de panique. Linux, l'un des
   meilleurs clones d'Unix, n'est pas plus difficile  utiliser que VMS.
   En fait, je le trouve mme plus facile. D'ailleurs, la plupart des
   gens trouve Linux beaucoup plus puissant et versatile que VMS
   (videmment les aficionados de VMS ne sont pas de cet avis).

   Linux et VMS sont tous les deux de bons systmes d'exploitation et
   accomplissent essentiellement les mmes taches. Cependant, les outils
   de Linux sont  mon humble avis suprieurs. Leur syntaxe est souvent
   plus concise et ils ont souvent les quelques fonctionnalits de plus
   qui font la diffrence et permettent de gagner du temps (vous
   entendrez souvent que VMS et Unix ont des philosophies diffrentes).
   De plus, Linux est disponible sur les PC alors que ce n'est pas le cas
   de VMS (les derniers PC tant d'ailleurs plus puissants que les VAX).
   Et, cerise sur le gteau, les excellentes performances des nouvelles
   cartes graphiques transforment votre tite bote Linux, grce  X, en
   une puissante station de travail graphique bien souvent plus rapide
   qu'une machine spcialement prvue pour cette tche.

   J'ai plusieurs raisons de croire que la combinaison Pentium/Linux est
   prfrable  celle de VAX/VMS, mais ces prfrences sont strictement
   personnelles et vous ne serez peut-tre pas d'accord. Vous en
   dciderez de vous-mme dans quelques mois.

   Je prends en hypothse que vous tes une tudiant ou un chercheur 
   l'universit et que vous utilisez rgulirement VMS pour les tches
   suivantes :

     * crire des papiers avec TeX/LaTeX ;
     * programmer en Fortran ;
     * faire des graphiques ;
     * utiliser Internet ;
     * etc.

   Dans la section suivante je vais vous expliquer comment faire ces
   tches sous Linux en utilisant votre exprience de VMS. Mais avant
   tout vrifiez que :

     * Linux et le _Systme X Window_ sont correctement installs ;
     * vous avez un administrateur systme pour s'occuper des dtails
       techniques (s'il-vous-plat, demandez de l'aide  eux, pas  moi
       :-) ;
     * votre _shell_ --- l'quivalent de DCL --- est bash (demandez 
       votre administrateur).

   Notez que ce HOWTO n'est pas suffisant pour faire de vous un linuxien
   pur et dur : il contient seulement le strict ncessaire pour vous
   permettre de commencer. Vous devriez en apprendre plus sur Linux pour
   pouvoir en tirer le maximum (fonctionnalits avances de bash,
   programmation, expressions rgulires, etc.).

   Les documents du _Linux Documentation Project_ (projet de
   documentation de Linux), disponibles sur
   metalab.unc.edu:/pub/Linux/docs/LDP, sont une importante source
   d'informations.

   NDT : je vous suggre galement de lire le _Guide du rootard_ d'ric
   Dumas et plus gnralement tout ce que l'on peut trouver sur
   http://www.freenix.fr/linux et http://www.traduc.org.

   Et maintenant, c'est parti !

1.2 Commandes et fichiers comparables

   Ce tableau compare les commandes les plus utilises sous VMS et Linux.
   Gardez  l'esprit que leur syntaxe est souvent trs diffrente ; pour
   plus de dtails allez faire un tour dans les sections suivantes.

VMS                           Linux                   Notes
-------------------------------------------------------------------------------
@COMMAND                      command                    (doit tre excutable)
COPY fichier1 fichier2        cp fichier1 fichier2
CREATE/DIR [.rpertoire]      mkdir rpertoire           (seulement un par un)
CREATE/DIR [.rp1.rp2]       mkdirhier rp/rp
DELETE fichier                rm fichier
DIFF fichier1 fichier2        diff -c fichier1 fichier2
DIRECTORY                     ls
DIRECTORY [...]fichier        find . -name fichier
DIRECTORY/FULL                ls -al
EDIT fichier                  vi fichier,            (vous n'allez pas l'aimer)
                              emacs fichier,                   (compatible EDT)
                              jed fichier                (idem --- mon prfr)
FORTRAN prog.for              g77 prog.f,        (pas besoin de lier avec LINK)
                              f77 prog.f,
                              fort77 prog.f
HELP commande                 man commande     (la commande doit tre prcise)
                              info commande
LATEX fichier.tex             latex fichier.tex
LOGIN.COM                     .bash_profile,                    (fichier cach)
                              .bashrc                                    (idem)
LOGOUT.COM                    .bash_logout                               (idem)
MAIL                          mail,                                (un peu cru)
                              elm,                             (beaucoup mieux)
                              pine                            (encore meilleur)
PRINT fichier.ps              lpr fichier.ps
PRINT/QUEUE=laser fichier.ps  lpr -Plaser fichier.ps
PHONE utilisateur             talk utilisateur
RENAME fichier1 fichier2      mv fichier1 fichier2      (ne marche pas avec des
                                                            fichiers multiples)
RUN progname                  programme
SEARCH fichier "motif"        grep motif fichier
SET DEFAULT [-]               cd ..
SET DEFAULT [.rp.rp]        cd rp/rp
SET HOST machine              telnet machine,            (pas exactement pareil
)
                              rlogin machine
SET FILE/OWNER_UIC=paul       chown paul fichier        (compltement diffrent
)
SET NOBROADCAST               mesg
SET PASSWORD                  passwd
SET PROT=(perm) fichier       chmod perm fichier       (compltement diffrent)
SET TERMINAL                  export TERM=          (la syntaxe est diffrente)
SHOW DEFAULT                  pwd
SHOW DEVICE                   du, df
SHOW ENTRY                    lpq
SHOW PROCESS                  ps -ax
SHOW QUEUE                    lpq
SHOW SYSTEM                   top
SHOW TIME                     date
SHOW USERS                    w
STOP                          kill
STOP/QUEUE                    kill,                        (pour les processus)
                              lprm                   (pour supprimer un travail
                                                       de la file d'impression)
SUBMIT commande               commande &
SUBMIT/AFTER=dure commande   at dure commande
TEX fichier.tex               tex fichier.tex
TYPE/PAGE fichier             more fichier
                              less fichier                     (beaucoup mieux)

   Bien sr, les diffrences des deux systmes ne se limitent pas aux
   noms des commandes. Continuez donc  lire.

2. Petite introduction

   Voila ce que vous devez absolument savoir avant de vous loguer pour la
   premire fois. Dtendez-vous, il y a relativement peu de chose.

2.1 Fichiers

     * Les noms des fichiers sous VMS on la forme
       fichier.extension.version. Sous Linux, le numro de version
       n'existe pas (c'est une grosse limitation mais on peut la
       compenser par d'astucieux moyens : jetez un oeil  la section
       Numros de version sous Linux) ; les noms des fichiers sont
       normalement limits  255 caractres et peuvent contenir autant de
       points que vous le dsirez. Par exemple, C_est.un.FICHIER.txt est
       un nom de fichier valide.
     * Linux fait la distinction entre les majuscules et les minuscules.
       Ainsi, FICHIER.txt et fichier.txt sont deux fichiers diffrents et
       ls est une commande alors que LS n'en est pas une.
     * Un fichier dont le nom commence par un point est un fichier cach
       (ce qui veut dire qu'il ne sera normalement pas affich quand on
       listera les fichiers du rpertoire) alors qu'un fichier dont le
       nom finit par un tilde ( ~ ) reprsente une sauvegarde de
       fichier (ou _backup_).

   Maintenant, voici un tableau prsentant les correspondances entre les
   commandes de VMS et celle de Linux en ce qui concerne la gestion des
   fichiers.


VMS                                     Linux
---------------------------------------------------------------------

$ COPY fichier1.txt; fichier2.txt;      $ cp fichier1.txt fichier2.txt
$ COPY [.rp]fichier.txt;1 []           $ cp rp/fichier.txt .
$ COPY [.rp]fichier.txt;1 [-]          $ cp rp/fichier.txt ..
$ DELETE *.dat.*                        $ rm *dat
$ DIFF fichier1 fichier2                $ diff -c fichier1 fichier2
$ PRINT fichier                         $ lpr fichier
$ PRINT/queue=imprimante fichier        $ lpr -Pimprimante fichier
$ SEARCH *.tex.* "gologie"             $ grep gologie *tex

   Regardez en plus loin dans le document pour avoir d'autres exemples.
   Si vous voulez vous attaquer aux notions de droits, de propritaires
   et aux sujets avancs, reportez vous  la section Sujets avancs.

2.2 Rpertoires

     * Les noms des rpertoires sous VMS sont de la forme
       [pre.rp.sousrp]. L'quivalent sous Linux est :
       /pre/rp/sousrp/. Le pre de tous les rpertoires est le
       rpertoire racine appel / ; il contient d'autres rpertoires
       comme /bin, /usr, /tmp, /etc, et bien d'autres.
     * Le rpertoire /home contient les rpertoires _home_ (NDT :  home
        signifie  maison ) des utilisateurs : par exemple,
       /home/pierre, /home/paul et ainsi de suite. Quand un utilisateur
       se logue, il commence dans son rpertoire _home_ ; c'est
       l'quivalent de SYS$LOGIN. Il y a un raccourci pour le rpertoire
       _home_ : le tilde ( ~ ). Ainsi, cd ~/tmp est quivalent ,
       disons, cd /home/paul/tmp.
     * Les noms des rpertoires sont soumis aux mmes rgles que ceux des
       fichiers. En plus de cela, chaque rpertoire a deux entres
       spciales : l'une est . : elle reprsente le rpertoire lui-mme
       (comme []) ; l'autre, .., reprsente le rpertoire parent (comme
       [-]).

   Et maintenant quelques autres exemples :


VMS                                     Linux
---------------------------------------------------------------------

$ CREATE/DIR [.rpertoire]              $ mkdir rpertoire
$ CREATE/DIR [.dir1.dir2.dir3]          $ mkdirhier rp1/rp2/rp3
   non/disponible                       $ rmdir rpertoire
                                        (si le rpertoire est vide)
                                        $ rm -R rpertoire
$ DIRECTORY                             $ ls
$ DIRECTORY [...]fichier.*.*            $ find . -name "fichier*"
$ SET DEF SYS$LOGIN                     $ cd
$ SET DEF [-]                           $ cd ..
$ SET DEF [pre.rp.sousrp]            $ cd /pre/rp/sousrp
$ SET DEF [.rp.sousrp]                $ cd rp/sousrp
$ SHOW DEF                              $ pwd

   Si vous voulez en savoir plus sur les droits, les propritaires, ou
   tout simplement en savoir plus tout court, sautez  la section Sujets
   avancs.

2.3 Programmes

     * Les commandes, les programmes compils et les scripts _shell_
       (quivalent des fichiers de commandes de VMS) n'ont pas forcment
       une extension comme .EXE or .COM et peuvent s'appeler comme bon
       vous semble. Les fichiers excutables sont marqus d'un astrisque
       ( * ) lorsque vous excutez ls -F.
     * Pour lancer un fichier excutable, il suffit de taper son nom (pas
       de RUN, ni de PROGRAM.EXE, ni encore de @COMMAND). Il est donc
       ncessaire que le fichier soit situ dans un rpertoire du _path_,
       qui est une liste de rpertoires. En gnral, le _path_ contient
       des rpertoires comme /bin, /usr/bin, /usr/X11R6/bin, etc. Si vous
       crivez vos propres programmes, placez-les dans un rpertoire de
       votre _path_ (pour savoir comment, reportez-vous  la section
       Configurer). Vous pouvez aussi lancer un programme en indiquant
       son chemin complet, par exemple /home/paul/donnes/monprog ou
       ./monprog si le rpertoire courant n'est pas dans le _path_.
     * Les options des commandes sont passes sur la ligne de commande
       grce  OPTION= sous VMS et grce  -_une_option_ ou --_une_option_
       sous Linux, _une_option_ tant une lettre, diffrentes lettres
       combines ou un mot. En particulier, l'option -R (rcursif) de
       plusieurs commandes de Linux permet de faire la mme chose que le
       [...] de VMS.
     * Vous pouvez lancer plusieurs commandes sur la ligne de commande :

$ commande1 ; commande2 ; ... ; commande

     * Toute la flexibilit de Linux repose sur deux fonctionnalits
       (l'une n'existe pas sous VMS, l'autre est mal implmente) : la
       redirection des entrs/sorties et les _pipes_. (Pour tre sincre,
       j'ai entendu que les versions rcentes de IDL supportent la
       redirection et les _pipes_ mais je n'ai pas ces versions.) La
       redirection sous VMS n'est qu'un effet de bord (souvenez vous de
       l'option /OUTPUT=) ou une tche fastidieuse comme

$ DEFINE /USER SYS$OUTPUT OUT
$ DEFINE /USER SYS$INPUT IN
$ RUN PROG

       dont l'quivalent sous Linux (Unix) est simplement :

$ prog < in > out

       Utiliser des _pipes_ est tout simplement impossible sous VMS mais
       ils jouent un rle cl sous Unix. En voici un exemple typique :

$ monprog < donnes | filtre1 | filtre2 >> rsultat.dat 2> erreurs.log &

       Traduisons. Le programme monprog utilise le fichier donnes comme
       entre, sa sortie est canalise (grce  |) vers le programme
       filtre1 qui l'utilise en tant qu'entre et la traite. La sortie
       rsultante est canalise (_pipe_) vers filtre2 pour tre encore
       une fois traite. La sortie finale est ajoute (grce  >>) au
       fichier rsultat.dat, et les messages d'erreurs sont redirigs
       (grce  2>) vers le fichier errors.log. Tout ceci est excut en
       arrire-plan (grce au &  la fin de la ligne de commande). Pour
       en savoir plus  ce sujet, reportez-vous  la section Exemples.

   Pour le multitche, les files, et tout ce qui s'y rapporte,
   reportez-vous  la section Sujets avancs.

2.4 Visite guide

   Maintenant vous tes prt pour essayer Linux. Entrez votre identifiant
   et votre mot de passe. Attention, Unix distingue les minuscules des
   majuscules. Ainsi, si votre login et votre mot de passe sont pierre et
   Mon_Code, ne tapez _pas_ Pierre ou mon_code.

   Une fois que vous tes logu, le prompt s'affiche. Il y a des chances
   pour que se soit quelque chose du genre nom_de_la_machine:$. Si vous
   voulez le changer ou lancer des programmes automatiquement, vous
   devrez diter le fichier cach .profile ou .bash_profile (jetez un
   oeil aux exemples dans la section Configurer). C'est l'quivalent de
   LOGIN.COM.

   Appuyer sur alt + F1, alt + F2, ..., alt + F6 permet de changer de
   console virtuelle. Quand une console virtuelle est occupe avec une
   application plein cran, vous pouvez changer de console et continuer 
   travailler. Essayez et loguez-vous sur une autre console virtuelle.

   Maintenant, vous voulez peut-tre lancer le _Systme X Window_ (que
   nous appellerons maintenant X). X est un environnement graphique
   similaire au DECWindows --- en fait, ce dernier drive de X. Tapez la
   commande startx et attendez quelques secondes ; vous verrez
   probablement s'ouvrir un xterm ou un autre mulateur de terminal, et
   peut-tre une barre de boutons (cela dpend de la manire dont votre
   administrateur systme a configur votre machine Linux). Cliquez sur
   le menu (essayez les deux boutons de la souris) pour voir les menus.

   Quand vous utilisez X, vous devez appuyez sur ctrl + alt + F1, ...,
   ctrl + alt + F6 pour accder au mode texte (console). Essayez. Quand
   vous tes dans une console, vous pouvez revenir  X en appuyant sur
   alt + F7. Pour quitter X, suivez les instructions de votre menu ou
   appuyez sur ctrl + alt + backspace.

   Tapez la commande suivante pour obtenir une liste du contenu du
   rpertoire courant (incluant les fichiers cachs) :

$ ls -al

   Appuyez sur shift + page up pour faire dfiler l'cran vers le haut.
   Maintenant, pour obtenir de l'aide sur la commande ls tapez

$ man ls

   Appuyez sur q pour quitter. Pour finir notre tour d'horizon, tapez
   exit pour quitter votre session. Si maintenant vous voulez teindre
   votre PC, appuyez sur ctrl + alt + suppr et attendez quelques secondes
   (n'teignez _jamais_ votre PC tant que Linux tourne ; cela peut causer
   des dommages dans le systme de fichier).

   Si vous pensez que vous tes prt pour travailler, allez-y. Mais si
   j'tais vous, je passerais d'abord par la section Sujets avancs.

3. diter des fichiers

   EDT ne tourne pas sous Linux, mais il y a beaucoup d'autres diteurs
   disponibles. Le seul qui soit sr d'tre prsent sur tout systme Unix
   est vi --- oubliez-le, votre administrateur en a srement install un
   meilleur. L'diteur le plus populaire est probablement emacs, qui peut
   muler EDT jusqu' un certain degr ; jed est un autre diteur qui
   permet l'mulation de EDT.

   Ces deux diteurs sont particulirement utiles pour diter des sources
   de programmes puisque qu'ils ont deux fonctionnalits inconnue de
   EDT : la coloration syntaxique et l'indentation automatique. De plus,
   vous pouvez compilez vos programmes  partir de l'diteur (grce  M-x
   compile sous emacs --- pour comprendre la notation  M-x compile 
   lisez la suite ; en cas d'erreur de syntaxe, le curseur se
   positionnera tout seul sur la ligne en question. Je parie que vous ne
   voudrez plus jamais utiliser EDT aprs.

   Si vous avez emacs, lancez-le. Tout d'abord vous devez comprendre le
   systme de notation de combinaison de touche d'emacs. C dsigne
   contrle et M la touche mta (en gnral alt ou chap). Maintenant,
   tapez M-x edt-emultation-on. M-x permet de lancer des commandes avec
   emacs comme ctrl + z avec EDT.  partir de maintenant, emacs fait
   comme s'il tait EDT  part pour quelques commandes :

     * n'appuyez _pas_ sur ctrl + z pour lancer une commande. Si vous
       l'avez fait, vous avez stopp emacs. Tapez fg pour reprendre votre
       session emacs ;
     * appuyez sur C-h ? pour obtenir de l'aide ou sur C-h t pour lancer
       un tutoriel ;
     * pour sauver un fichier, appuyez sur C-x C-s ;
     * pour quittez, appuyez sur C-x C-c ;
     * pour insrez un nouveau fichier dans un buffer (pour ouvrir un
       fichier, en gros), appuyez sur C-x C-f, et ensuite C-x b pour
       changer de buffer.

   Si vous avez jed, demandez  votre administrateur de le configurer
   comme il faut. L'mulation est active ds que vous le lancez. Utilisez
   les mme touches que sur EDT et appuyez sur chap ? h pour obtenir
   l'aide. Les commandes sont lances de la mme manire que dans emacs.
   De plus, il y a quelques raccourcis pratiques faisant dfaut  EDT ;
   vous pouvez en plus configurer ces raccourcis clavier. Demandez 
   votre administrateur.

   Vous pouvez aussi utilisez un autre diteur avec une interface
   compltement diffrente. emacs en mode natif est un choix courant. Un
   autre diteur populaire est joe qui peut muler d'autres diteurs
   comme emacs lui-mme (en tant mme plus facile  utiliser) ou
   l'diteur DOS. Lancez l'diteur sous le nom jmacs ou jstar et appuyez
   respectivement sur ctrl + x h ou ctrl + j pour obtenir l'aide en
   ligne. emacs et jed sont _beaucoup_ plus puissants que ce bon vieux
   EDT.

4. TeXer

   TeX et LaTeX sont identiques  leurs homologues de VMS --- seulement
   plus rapides :-), mais les outils pour manipuler les fichiers .dvi
   et .ps sont bien suprieurs :

     * Pour compiler un fichier TeX faites comme d'habitude tex file.tex.
     * Pour convertir un fichier .dvi en .ps, tapez dvips -o fichier.ps
       fichier.dvi.
     * Pour visualiser un fichier .dvi, tapez lors d'une session X xdvi
       fichier.dvi &. Cliquez sur la page pour zoomer. Ce programme est
       intelligent : si vous ditez et lancez TeX pour produire une
       nouvelle version de votre fichier .dvi, xdvi actualisera
       l'affichage.
     * Pour visualiser un fichier .ps, taper lors d'une session X
       ghostview fichier.ps &. Cliquez sur la page pour zoomer. Le
       document entier ou des pages slectionns peuvent tre imprims.
       Un programme plus rcent et meilleur permet galement de faire
       a : gv ;
     * Pour imprimer un fichier .ps on utilise gnralement la commande
       lpr fichier.ps. Cependant si l'imprimante postscript s'appelle,
       par exemple,  ps  (demandez  votre administrateur systme), il
       faudra faire lrp -Pps fichier.ps. Pour plus d'informations au
       sujet des files d'impressions, allez  la section Files
       d'impressions.

5. Programmer

   Programmer sous Linux est _beaucoup_ plus agrable : il existe un
   grand nombre d'outils qui rendent la programmation plus facile et plus
   rapide. Par exemple, la torture qu'est le cycle dition, sauvegarde,
   sortie de l'diteur, compilation, rdition, etc. peut tre raccourci
   en utilisant des diteurs comme emacs ou jed, comme nous l'avons vu au
   dessus.

5.1 Fortran

   Il n'y a pas de relle diffrence pour le fortran, mais sachez qu'au
   moment o j'cris ces lignes, les compilateurs (libres) ne sont pas
   totalement compatibles avec ceux de VMS ; attendez-vous  quelques
   problmes mineurs (en fait, le compilateur de VMS utilise des
   extensions qui ne sont pas standard). Jetez un oeil  /usr/doc/g77/DOC
   ou /usr/doc/f2c/d2c.ps pour plus de dtails.

   Votre administrateur a sans doute install soit le compilateur natif
   g77 (bien, mais, au jour de la version 0.5.21, toujours pas
   parfaitement compatible avec le Fortran de DEC), soit le traducteur de
   Fortran en C, f2c, et un des ses front-ends qui font de lui une
   imitation de compilateur natif. D'aprs mon exprience, le paquetage
   yaf77 est celui qui donne les meilleurs rsultats.

   Pour compiler un source en Fortran avec g77, ditez le et sauvez le
   avec l'extension .f, et faites

$ g77 monprog.f

   Cela va crer par dfaut un excutable appel a.out (vous n'avez pas 
   effectuer les liens). Pour donner  l'excutable un nom diffrent et
   faire quelques optimisations :

$ g77 -O2 -o monprog monprog.f

   Mfiez-vous des optimisations ! Demandez  votre administrateur
   systme de lire la documentation fournie avec le compilateur et de
   vous dire s'il y a des problmes.

   Pour compiler une sous-routine :

$ g77 -c masub.f

   Un fichier masub.o sera cr. Pour lier cette sous-routine  un
   programme, vous devrez faire

$ g77 -o monprog monprog.f masub.o

   Si vous avez plusieurs sous-routines externes et que vous voulez crer
   une bibliothque, faites

$ cd sousroutines/
$ cat *f > mabib.f ; g77 -c mabib.f

   Le fichier mabib.o cr pourra alors tre li  vos programmes.

   Pour finir, pour lier une bibliothque externe appele, disons,
   liblambda.so , utilisez

$ g77 -o monprog monprog.f -llambda

   Si vous avez f2c, vous n'aurez qu' utiliser f77 ou fort77  la place
   de g77.

   Un autre outil de programmation utile est make. Il est dcrit
   ci-dessous.

5.2 Utiliser make

   make est un outil pour grer la compilation de programmes diviss en
   plusieurs fichiers sources.

   Supposons que vous ayez des fichiers sources contenant vos routines
   appels fichier_1.f, fichier_2.f et fichier_3.f, et un fichier source
   principal qui utilise ces routines appel monprog.f. Si vous compilez
   votre programme  la main, quand vous modifierez un fichier source
   vous allez devoir chercher quel fichier dpend de quel fichier, et les
   recompiler en tenant compte des dpendances.

   Plutt que de devenir fou, je vous propose d'crire un _makefile_.
   C'est un fichier texte qui contient les dpendances entre les
   sources : quand un source est modifi, seuls les sources qui dpendent
   du fichier modifi seront recompiles.

   Dans notre cas, le _makefile_ ressemblerait  ceci :
     _________________________________________________________________


# Voici le Makefile
# Attention : appuyez sur la touche tabulation quand  <TAB> 
# est crit ! C'est trs important : n'utilisez pas d'espace  la place.

monprog: monprog.o fichier_1.o fichier_2.o fichier_3.o
<TAB>g77 -o monprog monprog.o fichier_1.o fichier_2.o fichier_3.o
# monprog dpend de quatre fichiers objets

monprog.o: monprog.f
<TAB>g77 -c monprog.f
# monprog.o dpend de son fichier source

fichier_1.o: fichier_1.f
<TAB>g77 -c fichier_1.f
# fichier_1.o dpend de son fichier source

fichier_2.o: fichier_2.f fichier_1.o
<TAB>g77 -c fichier_2.f fichier_1.o
# fichier_2.o dpend de son fichier source et d'un fichier objet

fichier_3.o: fichier_3.f fichier_2.o
<TAB>g77 -c fichier_3.f fichier_2.o
# fichier_3.o dpend de son fichier source et d'un fichier objet

# fin du Makefile
     _________________________________________________________________

   Enregistrez ce fichier sous le nom Makefile et tapez make pour
   compiler votre programme. Vous pouvez aussi l'appeler monprog.mak et
   taper make -f monprog.mak. Et bien sr, si vous voulez en savoir
   plus : info make.

5.3 Scripts _shell_

   Les scripts _shell_ sont les quivalents des fichiers de commandes de
   VMS et, pour changer, sont beaucoup plus puissants.

   Pour crire un script, tout ce que vous avez  faire est d'crire un
   fichier au format ASCII contenant les commandes, l'enregistrer et le
   rendre excutable (chmod +x fichier). Pour le lancer, tapez son nom
   (prcd de ./ s'il n'est pas dans le _path_).

   crire des scripts avec bash est un sujet tellement vaste qu'il
   ncessiterait un livre entier, et je ne ne vais pas m'attarder sur le
   sujet. Je vais juste vous donner un exemple plus ou moins
   comprhensible et, je l'espre, utile,  partir duquel vous pourrez
   comprendre quelques rgles de base.
     _________________________________________________________________

#!/bin/sh
# exemple.sh
# Je suis un commentaire.
# Ne modifiez pas la premire ligne, elle doit tre prsente.
echo "Ce systme est : `uname -a`" # utilise la sortie de la commande
echo "Mon nom est $0" # variable interne
echo "Vous m'avez donn les $# paramtres suivants : "$*
echo "Le premier paramtre est : "$1
echo -n "Quel est votre nom ? " ; read votre_name
echo remarquez la diffrence : "Salut $votre_name" # cit avec "
echo remarquez la diffrence : 'Salut $votre_name' # cit avec '
REPS=0 ; FICHIERS=0
for fichier in `ls .` ; do
  if [ -d ${fichier} ] ; then # si le fichier est un rpertoire
    REPS=`expr $REPS + 1`  # REPS = REPS + 1
  elif [ -f ${fichier} ] ; then
    FICHIER=`expr $FICHIER + 1`
  fi
  case ${fichier} in
    *.gif|*jpg) echo "${fichier}: fichier graphique" ;;
    *.txt|*.tex) echo "${fichier}: fichier texte" ;;
    *.c|*.f|*.for) echo "${fichier}: fichier source" ;;
    *) echo "${fichier}: fichier quelconque" ;;
  esac
done
echo "Il y a ${REPS} rpertoires et ${FICHIERS} fichiers"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # valeur de sortie de la dernire commande
  echo "ZxY--!!!WKW n'a pas t trouv"
fi
echo "a suffit... tapez 'man bash' si vous voulez plus d'informations."
echo "Note du traducteur : 'info bash' est plus complet."
     _________________________________________________________________

5.4 C

   Linux est un excellent environnement pour la programmation en C. Si
   vous connaissez le C, voici quelques conseils pour vous dbrouiller
   sous Linux. Pour compiler le clbre hello.c vous utiliserez le
   compilateur gcc, qui est standard dans le monde de Linux et qui a la
   mme syntaxe que g77 :

$ gcc -O2 -o hello hello.c

   Pour lier une bibliothque  un programme, ajoutez l'option
   -lbibliothque. Par exemple pour lier la bibliothque math et
   optimiser faites

$ gcc -O2 -o mathprog mathprog.c -lm

   (L'option -lbibliothque force gcc  lier la bibliothque
   /usr/lib/libbibliothque.a ; ainsi -lm lie /usr/lib/libm.a.)

   Quand votre programme est divis en plusieurs fichiers sources, vous
   aurez besoin du programme make dcrit juste au dessus.

   Vous pouvez obtenir de l'aide sur quelques fonctions de la libc dans
   la section 3 des pages man. Par exemple :

$ man 3 printf

   Il existe beaucoup de bibliothques disponible. Parmi les premires
   que vous voudrez probablement utiliser, il y a ncurses, qui permet de
   grer quelques effets du mode texte et svgalib pour faire du
   graphisme.

6. Graphiques

   Parmi la masse de paquetages de graphiques disponibles, gnuplot sort
   du lot pour sa puissance et sa facilit d'utilisation. Crez tout
   d'abord deux fichiers de donnes : 2D-data.dat (deux donnes par
   ligne) et 3D-data.dat (trois par ligne). Puis, sous X, lancez gnuplot.

   Exemple d'un graphe en 2D :

gnuplot> set title "mon premier graphe"
gnuplot> plot '2D-data.dat'
gnuplot> plot '2D-data.dat' with linespoints
gnuplot> plot '2D-data.dat', sin(x)
gnuplot> plot [-5:10] '2D-data.dat'

   Exemple d'un graphe en 3D (chaque  ligne  de _x_ valeurs est suivie
   d'une ligne vide) :

gnuplot> set parametric ; set hidden3d ; set contour
gnuplot> splot '3D-data.dat' using 1:2:3 with linespoints

   Un fichier de donnes d'une seule colonne (une srie de temps par
   exemple) peut aussi tre dessin comme un graphe en 2D :

gnuplot> plot [-5:15] '2D-data-1col.dat' with linespoints

   ou en 3D (avec des lignes vides dans le fichier comme au dessus) :

gnuplot> set noparametric ; set hidden3d
gnuplot> splot '3D-data-1col.dat' using 1 with linespoints

   Pour imprimez un graphe, si la commande pour imprimer sur votre
   imprimante postscript est lpr -Pps fichier.ps, faites

gnuplot> set term post
gnuplot> set out '| lpr -Pps'
gnuplot> replot

   Tapez ensuite set term x11 pour rafficher sur votre serveur X. Ne
   soyez pas dconcert : la dernire impression se lancera seulement
   quand vous quitterez gnuplot.

   Pour plus d'informations, tapez help ou regardez le rpertoire des
   exemples (/usr/lib/gnuplot/demos/) s'il existe.

7. Mail et outils pour Internet

   Du fait qu'Internet est n sur des machines Unix, on trouve plein
   d'applications de qualit et facile d'utilisation sous Linux. En voici
   quelques-unes :

     * Mail : utilisez elm ou pine (NDT : mutt est trs bien aussi) pour
       grer votre courrier. Ces deux programmes ont une aide en ligne.
       Pour des messages courts, vous pouvez utilisez mail (mail -s
       "Salut" utilisateur@quelquepart < msg.txt). Vous prfrez
       peut-tre d'autres programmes comme xmail ou quivalent.
     * Newsgroups : utilisez tin ou slrn. Ils sont tous les deux trs
       intuitifs.
     * FTP : en plus de l'invitable ftp, demandez  votre administrateur
       d'installer l'excellent ncftp ou un mme un client graphique comme
       xftp.
     * WWW : netscape, xmosaic, chimera et arena sont des browsers
       graphiques ; lynx quant  lui utilise la console et est rapide et
       pratique.

8. Sujets avancs

   L, le jeu devient coriace. Apprenez a, et ensuite vous pourrez dire
   que vous  connaissez quelque chose  Linux  ;-)

8.1 Droits et proprit

   Les fichiers et les rpertoires ont des droits et des propritaires,
   comme sous VMS. Si nous ne pouvez pas lancer un programme, ne pouvez
   pas modifier un fichier ou ne pouvez pas accder  un rpertoire,
   c'est parce vous n'avez pas les droits adquats pour le faire et/ou
   parce que le fichier ne vous appartient pas. Regardez l'exemple
   suivant :

$ ls -l /bin/ls
-rwxr-xr-x   1 root     bin         27281 Aug 15  1995 /bin/ls*

   Le premier champ indique les droits du fichier ls. Il y a trois types
   de proprit : le propritaire, le groupe et les autres (comme le
   propritaire, le groupe et le reste du monde sous VMS) et trois
   droits : lecture, criture et excution.

   De gauche  droite, - est le type du fichier (- dsigne un fichier
   ordinaire, d un rpertoire, l un lien, etc.) ; rwx sont les droits du
   propritaire (lecture, criture, excution) ; r-x sont les droits du
   groupe du propritaire (lecture, excution) ; r-x sont les droits pour
   tous les autres utilisateurs (lecture, criture).

   Pour changer les droits d'un fichier :

$ chmod <quiXdroit> <fichier>

   Avec _qui_ reprsentant u (ce sont alors les droits du propritaire
   qui sont affects), g (ceux du groupe) ou o (ceux des  autres ). X
   est soit + (dans ce cas il donne les droits), soit - (il les enlve).
   Et _droit_ est r, w ou x. Voici un exemple :

$ chmod u+x fichier

   Cela permet de rendre le fichier excutable pour le propritaire. Il
   existe un petit raccourci chmod +x fichier.

$ chmod go-wx fichier

   L, on enlve les droits d'criture et d'excution au groupe et aux
   autres (donc  tout le monde sauf au propritaire).

$ chmod ugo+rwx fichier

   Tous les droits sont donns  tout le monde.

   Une manire plus courte de prciser les droits se base sur les
   nombres : rwxr-xr-x peut tre exprim par 755 (chaque lettre
   correspond  un bit : --- vaut 0, --x 1, -w- 2, etc).

   Pour un rpertoire, rx signifie que vous pouvez vous placer dans ce
   rpertoire et w que vous pouvez effacer un fichier dans ce rpertoire
   (en tenant compte des droits du fichier videmment) ou le rpertoire
   lui-mme. Tout a n'est qu'une petit partie du sujet : man est votre
   ami.

   Pour changer le propritaire d'un fichier :

$ chown <utilisateur> <fichier>

   Pour rsumer, voici un tableau :

VMS                             Linux
------------------------------------------------------------------------------

SET PROT=(O:RW) fichier.txt     $ chmod u+rw fichier.txt
                                $ chmod 600 fichier.txt
SET PROT=(O:RWED,W) fichier     $ chmod u+rwx fichier
                                $ chmod 700 fichier
SET PROT=(O:RWED,W:RE) fichier  $ chmod 755 fichier
SET PROT=(O:RW,G:RW,W) fichier  $ chmod 660 fichier
SET FILE/OWNER_UIC=JOE fichier  $ chown joe fichier
SET DIR/OWNER_UIC=JOE [.dir]    $ chown joe rep/

8.2 Multitche : processus et tches (_jobs_)

   En voici plus  propos de la manire de lancer les programmes. Il n'y
   a pas de file d'attente sous Linux ; le multitche est gr trs
   diffremment. Voici  quoi ressemble une ligne de commande typique :

$ commande -s1 -s2 ... -sn par1 par2 ... parn < entre > sortie &

   Maintenant, voyons comment marche le multitche. Les programmes qui
   tournent en avant-plan (_foreground_) ou arrire-plan (_background_)
   sont appels des processus.

     * Pour lancer un processus en arrire plan :

$ programme [option] [< entre] [> sortie] &
[1] 234

       Le shell vous donne le numro de _job_ (le premier nombre ;
       regardez ci-dessus) et le PID (le numro du processus). Chaque
       processus est identifi par son PID. Pour voir combien de
       processus sont lancs :

$ ps -ax

       La liste des processus actifs va tre affiche.
     * Pour tuer un processus :

$ kill <PID>

       Vous aurez peut-tre besoin de tuer un processus quand vous ne
       savez pas le quitter de la bonne manire... ;-) Parfois, une
       processus sera seulement tu par une des commandes suivantes :

$ kill -15 <PID>
$ kill -9 <PID>

   En plus de a, le shell vous permet de stopper ou de suspendre
   temporairement un processus, envoyer un processus en arrire-plan ou
   en ramener un en avant-plan. Dans ce contexte, les processus sont
   appeles jobs.

     * Pour voir combien de _jobs_ sont actifs :

$ jobs

       Les _jobs_ sont identifs par le nombre que le shell leur donne et
       non pas par leur PID.
     * Pour stopper un processus qui tourne en avant-plan appuyez sur
       ctrl + c. (a ne marche pas toujours.)
     * Pour suspendre un processus tournant en avant-plan appuyez sur
       ctrl + z (Idem.)
     * Pour envoyer un processus suspendu en arrire-plan (qui devient
       alors un _job_) :

$ bg <job>

     * Pour envoyer un _job_ en avant-plan :

$ fg <job>

     * Pour tuer un _job_ :

$ kill %<job>

8.3 Fichiers, deuxime

   Voici plus d'information sur les fichiers.

     * _stdin_, _stdout_ et _stderr_ : sous Unix, tous les composants du
       systme sont assimils  des fichiers. Les commandes et les
       programmes puisent leur entre dans un  fichier  appel _stdin_
       (l'entre standard : gnralement le clavier), redirigent leur
       sortie vers un  fichier  appel _stdout_ (gnralement l'cran)
       et leurs erreurs vers un  fichier  appel _stderr_ (gnralement
       l'cran). En utilisant < et > vous redirigez l'entre et la sortie
       vers un fichier diffrent. De plus, >> ajoute la sortie  un
       fichier  la place de l'craser ; 2> redirige les messages
       d'erreur (_stderr_) ; 2>&1 redirige _stderr_ vers _stdout_, alors
       que 1>&2 redirige _stdout_ vers _stderr_. Il y a un  trou noir 
       appel /dev/null : tout ce qui est redirigez vers lui disparat.
     * Jokers/ : sur la ligne de commande * correspond  (et dsigne)
       tous les fichiers sauf ceux qui sont cachs ; .* correspond  tous
       les fichiers cachs ; *.* correspond seulement ceux qui ont un  .
        au milieu de leur nom suivi par d'autres caractres ; l*c
       correspondra   loc  et  luc  ; *c* correspondra   piocher
        et  picorer . % devient ?. Il existe galement un autre
       joker : []. Par exemple : [abc]* dsigne les fichiers commenant
       par a, b ou c ; *[I-N123] dsigne les fichier finissant par I, J,
       K, L, M, N, 1, 2 ou 3.
     * mv (RENAME) ne permet pas de renommer plusieurs fichiers d'un
       coup. Ainsi, mv *.xxx *.yyy ne marchera pas.
     * Utilisez cp -i et mv -i pour tre prvenu quand un fichier va tre
       cras.

8.4 Files d'impression

   Vos fichiers  imprimer sont placs dans une file comme sous VMS.
   Quand vous lancez une commande d'impression, vous aurez peut-tre 
   prciser le nom de l'imprimante. Par exemple

$ lpr fichier.txt # ce fichier est plac dans la file de l'imprimante standard
$ lpr -Plaser fichier.ps # celui dans celle de l'imprimante  laser 

   Pour grer la file d'impression utilisez les commandes suivantes :

VMS                                     Linux
------------------------------------------------------------------------------

$ PRINT fichier.ps                      $ lpr fichier.ps
$ PRINT/QUEUE=laser fichier.ps          $ lpr -Plaser fichier.ps
$ SHOW QUEUE                            $ lpq
$ SHOW QUEUE/QUEUE=laser                $ lpq -Plaser
$ STOP/QUEUE                            $ lprm <numro de job>

9. Configurer

   Votre administrateur systme a d vous fournir certains fichier de
   configuration comme .xinitrc, .bash_profile et .inputrc. Ceux que vous
   voudrez peut-tre modifier sont :

     * .bash_profile ou .profile : ce fichier est lu par le shell au
       moment du login. C'est l'quivalent de LOGIN.COM.
     * .bash_logout : celui-ci est lu en fin de session. C'est
       l'quivalent de LOGOUT.COM.
     * .bashrc : il est lu par les shells non interactifs
     * .inputrc : ce fichier configure les rles des touches du clavier
       et le comportement du shell.

   Pour vous donner un exemple, j'ai inclus une partie mon
   .bash_profile :
     _________________________________________________________________

# $HOME/.bash_profile

# on ne redfinit pas le path si ce n'est pas ncessaire
echo $PATH | grep $LOGNAME > /dev/null
if [ $? != 0 ]
then
  export PATH="$PATH:/home/$LOGNAME/bin"  # ajoute mon rpertoire au path
fi

export PS1='LOGNAME:\w\$ '
export PS2='Continued...>'

# alias

alias bin="cd ~/bin" ; alias cp="cp -i" ; alias d="dir"
alias del="delete" ; alias dir="/bin/ls $LS_OPTIONS --format=vertical"
alias ed="jed" ; alias mv='mv -i'
alias u="cd .." ; alias undel="undelete"

# Quelques fonctions utiles

inst() # installe un tarball gzip dans le rpertoire courant
{
  tar xvfz $1
}
cz() # liste le contenu d'une archive .zip
{
  unzip -l $*
}
ctgz() # liste le contenu d'un tarball gzip
{
  for fichier in $* ; do
    tar tfz ${fichier}
  done
}
tgz() # cre une archive .tgz  la zip.
{
  nom=$1 ; tar cvf $1 ; shift
  tar -rf ${nom} $* ; gzip -S .tgz ${nom}
}
     _________________________________________________________________

   Et voici mon .inputrc :
     _________________________________________________________________

# $HOME/.inputrc
#
# Ce fichier est lu par bash et dfinit les fonctions attachs aux touches
# par le shell ; ce qui suit permet d'avoir un comportement courant pour
# les touches <it/fin/, <it/home/ (la touche au dessus de fin), <it/suppr/
# et les caractres accentus.
# Pour plus d'information, man readline.

"\e[1~": beginning-of-line
"\e[3~": delete-char
"\e[4~": end-of-line

set bell-style visible
set meta-flag On
set convert-meta Off
set output-meta On
set horizontal-scroll-mode On
set show-all-if-ambiguous On

# (F1 .. F5) sont "\e[[A" ... "\e[[E"

"\e[[A": "info "
     _________________________________________________________________

10. Programmes utiles

10.1 Visionneur de fichiers : less

   Vous utiliserez un tel programme tous les jours, c'est pourquoi je
   vais vous donner quelques astuces pour l'utiliser au mieux. Avant
   tout, demandez  votre administrateur de configurer less pour qu'il
   puisse afficher non seulement des fichiers textes mais aussi les
   fichiers compresss, les archives, etc.

   Comme les dernires versions de TYPE, less vous permet de vous
   dplacer dans le fichier dans les deux directions. Il accepte aussi
   plusieurs commandes qui sont lances en appuyant sur une touche. Les
   plus utiliss sont :

     * tout d'abord, appuyez sur q pour quitter ;
     * h pour obtenir l'aide ;
     * g pour aller au dbut du fichier, G  la fin, un nombre suivi de g
       pour aller  cette ligne (par exemple 125g), un nombre suivi de %
       pour aller  ce pourcentage du fichier ;
     * /motif recherche vers l'avant le motif ; n recherche vers l'avant
       la l'occurrence suivante ; ?pattern et N font la mme chose vers
       l'arrire ;
     * m suivi d'une lettre marque la position courante (par exemple
       ma) ; ' suivi de la mme lettre rappelle cette position ;
     * :e ouvre un autre fichier ;
     * !commande excute un shell.

10.2 Numros de version sous Linux

   Hlas, Linux ne supporte toujours pas les numros de version
   nativement. Cependant, on peut rgler ce problme de deux manires. La
   premire est d'utiliser RCS (Revision Control System) qui vous permet
   de garder la trace des prcdentes versions d'un fichier. RCS est
   trait dans _Le mini-Howto RCS_.

   La seconde est d'utiliser un diteur qui sait traiter les numros de
   version. emacs ou joe feront l'affaire. Pour emacs, ajoutez ces lignes
   dans votre .emacs.
     _________________________________________________________________

(setq version-control t)
(setq kept-new-versions 15) ;;; ou toute autre valeur
(setq kept-old-versions 15)
(setq backup-by-copying-when-linked t)
(setq backup-by-copying-when-mismatch t)
     _________________________________________________________________

   Pour jed, vrifiez que vous avez une version suprieure  la 0.98.7.
   Le patch pour les numros de version est disponible sur
   http://ibogeo.df.unibo.it/guido/slang/backups.sl

10.3 Archiver : tar et gzip

   Sous Unix il existe quelques applications trs rpandues qui sont
   utiliss pour archiver et compresser des fichiers. tar est utilis
   pour faire des archives (c'est  dire un regroupement de fichiers).
   Pour faire une archive :

$ tar -cvf <archive.tar> <fichier> [fichier...]

   Pour extraire des fichiers d'une archive :

$ tar -xpvf <archive.tar> [fichier...]

   Pour lister le contenu d'une archive :

$ tar -tf <archive.tar> | less

   Les fichiers peuvent tre compresss en utilisant compress ou gzip.
   compress est aujourd'hui obsolte et on n'utilise plus que gzip.

$ compress <fichier>
$ gzip <fichier>

   Ceci crera un fichier compress avec l'extension .Z (pour compress)
   ou .gz (pour gzip). Ces programmes ne font pas d'archives mais
   compressent des fichiers individuellement. Pour dcompresser utilisez

$ compress -d <fichier.Z>
$ gzip -d <fichier.gz>

   Faites un tour du ct de leurs pages man.

   Les utilitaires unarj, zip et unzip sont aussi disponibles.

   Les fichier avec l'extension .tar.gz ou .tgz (archivs par tar, puis
   compresss par gzip) sont trs communs dans le monde Unix. Voici
   comment lister le contenu d'une telle archive :

$ tar -ztf <fichier.tar.gz> | less

   Pour extraire les fichiers  partir d'un .tar.gz :

$ tar -zxf <fichier.tar.gz>

11. Exemples du monde rel

   Le principe central d'Unix est qu'il existe plusieurs commandes
   simples qui peuvent tre lies ensemble grce aux _pipes_ et aux
   redirections pour accomplir des tches plus compliques. Regardez les
   exemples suivants (je n'expliquerai que les plus compliqus ; pour les
   autres, reportez vous aux sections prcdentes ou aux pages man).

     * ls est trop rapide et je ne peux pas lire le nom de tous les
       fichiers.

$ ls | less

     * J'ai un fichier qui contient une liste de mots. Je veux les trier
       dans l'ordre inverse et les imprimer.

$ cat fichier.txt | sort -r | lpr

     * Mon fichier de donnes contient des doublons. Comment les
       effacer ?

$ sort fichier.dat | uniq > nouveaufichier.dat

     * J'ai un fichier appel papier.txt ou papier.tex ou quelques choses
       dans le genre mais je ne m'en rappelle plus. Comment le
       retrouver ?

$ find ~ -name "papier*"

       Expliquons. find est une commande trs utile qui liste tous les
       fichier dans une arborescence (qui commence  partir du rpertoire
       _home_ dans ce cas). Sa sortie peut-tre filtre selon plusieurs
       critres comme par exemple -name.
     * J'ai un fichier texte qui contient le mot  entropie  dans ce
       rpertoire. Existe-t-il quelque chose de comparable  SEARCH ?
       Bien sr, essayez cela :

$ grep -l 'entropie' *

     * Quelque part, j'ai un fichier texte qui contient le mot
        entropy  et j'aimerai le retrouver. Sous VMS j'aurais utilis
       search entropy [...]*.*.*, mais grep n'est pas rcursif.

$ find . -exec grep -l "entropy" {} \; 2> /dev/null

       find . sort tous les noms des fichiers  partir du rpertoire
       courant, -exec grep -l "entropy" lance une commande sur chacun des
       fichiers (reprsents par {}), \ termine la commande). Si vous
       pensez que la syntaxe est horrible... vous avez raison :-) Vous
       auriez aussi pu crire le script suivant :
         _____________________________________________________________

#!/bin/sh
# rgrep: grep rcursif
if [ $# != 3 ]
then
  echo "Utilisation : rgrep <paramtres> <motif> <rpertoire>"
  exit 1
fi
find $3 -name "*" -exec grep $1 $2 {} \; 2> /dev/null
         _____________________________________________________________

       Voici l'explication. grep marche comme SEARCH et combin avec find
       nous obtenons le meilleur des deux mondes.
     * J'ai un fichier qui a deux lignes d'en-tte et qui a ensuite _n_
       donnes par ligne, pas ncessairement espaces de la mme manire.
       Je veux extraire la deuxime et le cinquime champs de chaque
       ligne. Dois-je crire un programme en Fortran ? Nan. Ceci est plus
       rapide :

$ awk 'NL > 2 {print $2, "\t", $5}' fichier.dat > nouveaufichier.dat

       awk est en fait un langage de programmation. Pour chaque ligne 
       partir de la troisime, on affiche le second et le cinquime champ
       en les sparant par une tabulation. Apprenez  vous servir de awk
       --- il vous fera gagner beaucoup de temps.
     * J'ai tlcharg le ls-lR.gz d'un FTP. Pour chaque sous rpertoire,
       il y a une ligne  total _x_ , avec _x_ la taille en Kilo-octets
       du rpertoire. J'aimerais avoir le total de toutes ces valeurs.

zcat ls-lR.gz | awk ' $1 == "total" { i += $2 } END {print i}'

       zcat sort le contenu du fichier .gz. La sortie est envoye vers
       awk dont je vous recommande chaudement de lire la page man.
     * J'ai crit un programme en Fortran, monprog, pour calculer un
       paramtre  partir d'un fichier de donnes. Je voudrais le lancer
       sur des centaines de fichiers et avoir la liste des rsultats,
       mais c'est une calamit de demander chaque fois le nom du fichier.
       Sous VMS, j'aurais crit un long fichier de commande. Et sous
       Linux ? Un script trs court. Faites votre programme pour qu'il
       cherche le programme mesdonnes.dat et pour qu'il afficher le
       rsultat sur l'cran (stdout) et crivez ensuite ce petit script :
         _____________________________________________________________

#!/bin/sh
# monprog.sh: lance la mme commande sur plusieurs fichiers
# usage: monprog.sh *.dat
for fichier in $*  # pour tous les paramtres (e.g. *.dat)
do
  # ajouter le nom du fichier dans rsultat.dat
  echo -n "${fichier}:    " >> rsultats.dat
  # copie le paramtre courant dans mesdonnes.dat et lance monprog
  # et ajoute le sortie  rsultats.dat
  cp ${fichier} mesdonnes.dat ; monprog >> rsultats.dat
done
         _____________________________________________________________

     * Je veux remplacer  gologie  par  gophysique  dans tous mes
       fichiers textes. Dois-je les diter manuellement ? Nan. crivez ce
       script :
         _____________________________________________________________

#!/bin/sh
# remplace $1 par $2 dans $*
# utilisation : remplace "vieux-motif" "nouveau-motif" fichier [fichier...]
VIEUX=$1           # premier paramtre
NOUVEAU=$2         # second
shift ; shift      # enlever les deux premier paramtres ; les suivants sont
                   # les noms des fichiers
for fichier in $*  # pour tous les fichier donns en paramtres
do
# remplace toutes les occurrences de VIEUX par NOUVEAU et sauve cela
# dans un fichier temporaire
  sed "s/$VIEUX/$NOUVEAU/g" ${fichier} > ${fichier}.nouveau
# renommer le fichier temporaire
  /bin/mv ${fichier}.new ${fichier}
done
         _____________________________________________________________

     * J'ai des fichier contenant des donnes. Je ne connais pas leur
       taille et je dois enlever leur avant-dernire et leur
       avant-avant-dernire lignes. Heu...  la mimine ? Bien sr que
       non :
         _____________________________________________________________

#!/bin/sh
# prune.sh: efface les n-1me et n-2me ligne de fichiers
# utilisation : prune.sh fichier [fichier...]
for fichier in $*   # pour chaque paramtre
do
  LIGNES=`wc -l $fichier | awk '{print $1}'`  # nombre de ligne dans fichier
  LIGNES=`expr $LIGNES - 3`                   # LIGNES = LIGNES - 3
  head -n $LIGNES $fichier > $fichier.new     # sort les premires lignes
                                              # de LIGNES
  tail -n 1 $fichier >> $fichier.new          # ajoute la dernire ligne
done
         _____________________________________________________________

       NDT : il est tout de mme beaucoup plus lgant d'utiliser ed :
         _____________________________________________________________

#!/bin/sh
# prune.sh: efface les n-1me et n-2me ligne de fichiers
# utilisation : prune.sh fichier [fichier...]
for fichier in $*   # pour chaque paramtre
do
  printf '$-2,$-1d\nw\nq\n' | ed -s $fichier
done
         _____________________________________________________________

   J'espre que ces exemples vous auront ouvert l'apptit.

12. Astuces dont on ne peut se passer

     * La compltion de commande : l'appui sur la touche tabulation quand
       vous tapez une commande va complter la ligne de commande. Par
       exemple, disons que vous devez taper less
       un_nom_de_fichier_trs_long. Il vous suffira de taper less un puis
       d'appuyer sur tabulation (si vous avez plusieurs fichier qui
       commencent par les mmes caractres tapez-en assez pour rsoudre
       l'ambigut).
     * Faire dfiler l'cran vers le haut : en appuyant sur Shift-Page_up
       vous pouvez faire dfiler l'cran vers le haut de quelques pages
       (le nombre de page dpend de la mmoire vido de votre PC).
     * Rtablir l'cran : s'il vous arrive de faire un more ou un cat sur
       un fichier binaire votre cran pourra se retrouver plein de
       symboles bizarres. Pour arranger les choses,  l'aveuglette tapez
       reset ou cette squence de caractres : echo ctrl-v Echap c
       Entre.
     * Copier du texte sur la console : demandez  votre administrateur
       d'installer gpm, un driver pour la souris en mode texte. Cliquez
       et glissez pour slectionner du texte et ensuite appuyez sur le
       bouton droit pour coller le texte slectionn. a marche entre
       plusieurs consoles virtuelles.
     * Copier du texte sous X : cliquez et glissez pour slectionnez le
       texte dans un xterm et cliquez ensuite sur le bouton du milieu (ou
       les deux boutons) pour coller.

13. Lire des bandes VMS depuis Linux

   (Cette section a t crite par Mike Miller)

13.1 Introduction

   De temps en temps vous pourrez tre amen  lire des bandes
   enregistres  partir d'une machine sous VMS (ou des bandes
   enregistres pour tre lisibles sous VMS et les systmes Unix). En
   gnral, c'est assez facile pour les bandes DECFILES11A.

   Bien que l'on puisse lire ceci comme une partie d'un mini-HOWTO Linux,
   je crois que les informations ici prsentes sont appliquables  tout
   systme Unix -- j'ai fait cela avec Linux et les systmes Unix d'HP,
   de SUN et de DEC. La principale dpendance  la plate-forme est le nom
   des fichiers priphriques qui peuvent varier d'un systme  l'autre,
   et les options de mt pour spcifier le nom du priphrique (par
   exemple, mt -f avec Linux et mt -t sur HPUX 9).

   Avertissement : j'ai seulement essay cela avec des lecteurs de bande
   Exabyte 8 mm SCSI. Si vous avez lu d'autres formats (vous avez encore
   des lecteurs 9 pistes qui tranent quelque part ?), faites-le moi
   savoir et je les ajouterai.

13.2 Les bases

   Pour lire une bande qui a t crite avec la commande copy de VMS (ou
   une commande compatible) tout ce que vous devez savoir est que, pour
   chaque fichier effectif, il y aura trois fichiers de donnes sur la
   bande : une entte, les donnes et une terminaison. L'entte et la
   terminaison sont intressantes car elles contiennent des informations
   sur le fichier tel qu'il tait sous VMS. Le fichier de donnes est...
   le fichier de donnes. Chacun de ces fichiers peut tre extrait de la
   bande avec la commande dd. La bande peut tre positionne en utilisant
   la commande mt.

   Prenons un exemple. J'ai une bande VMS. Les deux premiers de ses
   fichiers taient appels ce66-2.evt et ce66-3.evt sur le systme VMS.
   Le label de la bande est c66a2.

   Si j'excute les commandes suivantes
     _________________________________________________________________

$ dd if=$TAPE bs=16k of=entte1
$ dd if=$TAPE bs=16k of=donne1
$ dd if=$TAPE bs=16k of=terminaison1
$ dd if=$TAPE bs=16k of=entte2
$ dd if=$TAPE bs=16k of=donne2
$ dd if=$TAPE bs=16k of=terminaison2
     _________________________________________________________________

   je me retrouve avec six fichiers : entte1, donne1, terminaison1,
   entte2, donne2 et terminaison2. La syntaxe ici est if="fichier
   d'entre", bs="taille des blocs" et of="fichier de sortie". TAPE doit
   tre une variable d'environnement contenant le nom du priphrique de
   votre lecteur de bande --- par exemple /dev/nts0 si vous utilisez le
   premier disque SCSI sous Linux.

   Si vous aviez voulu rcuprer le second fichier, mais pas le premier,
   sous son non d'origine, vous n'auriez pas eu  vous proccuper de
   l'entte :
     _________________________________________________________________

$ mt -f $TAPE fsf 4
$ dd if=$TAPE bs=16k of=ce66-2.evt
$ mt -f $TAPE fsf 1
     _________________________________________________________________

   Notez le 4. Il permet de sauter trois fichiers pour le premier fichier
   et un pour l'entte du deuxime. Le second mt saute la seconde
   terminaison et positionne la bande au dbut du prochain fichier : la
   troisime entte. Vous pouvez aussi utilisez mt pour sauter des
   fichiers en arrire (bsf), rembobiner (rewind) ou dcharger la bande
   (offline, rewoffl).

13.3 Quelques dtails

   Les fichiers d'enttes et de terminaisons contiennent des donnes
   ASCII en majuscules utilises par VMS pour stocker des informations
   sur le fichier comme par exemple la taille des blocs. Ils contiennent
   aussi le nom du fichier, ce qui peut tre utile si vous voulez faire
   des scripts qui lisent automatiquement des fichiers ou recherchent un
   fichier particulier. La premire entte de la bande est un peu
   diffrente des suivantes.

   L'en-tte du premier fichier de la bande (comme par exemple dans
   l'exemple ci-dessus) dbute par la chane  VOL1 . Suit le nom de
   volume. Dans notre exemple, le fichier entte1 commence par
    VOL1C66A2 . Vient ensuite une srie d'espace termine par un
   chiffre. Aprs, on trouve la chane  HDR1  qui indique que l'on a 
   faire  un fichier d'entte. Les caractres qui suivent immdiatement
   la chane  HDR1  forment le nom du fichier VMS. Dans l'exemple,
   cette chane est  HDR1CE66-2.EVT . Le prochain champ est le nom du
   volume.

   Le champs initial des autres fichiers (c'est--dire tous sauf le
   premier de la bande) est quelque peu diffrent.  VOL1  n'est pas
   prsent. Le reste est identique. Un autre champ utile est le septime.
   Il se termine par  DECFILES11A . C'est un signe de conformit au
   standard DEC Files11A.

Champ                Entte initiale                  Enttes suivantes
1                    VOL1 + nom du volume             HDR1 + nom du fichier
2                    HDR1 + nom du fichier            Nom du volume
3                    Nom du volume                    ...
4                    ...                              ...
5                    ...                              ...
6                    ...                              DECFILES11A
7                    DECFILES11A

   Pour une documentation complte sur le format de l'entte et de la
   terminaison, voyez la documentation DEC FILES11 (sur le mur
   gris/orange --- demandez  votre communaut VMS locale :-).

13.4 Commentaires sur la taille des blocks

   Dans l'exemple, j'ai utilis une taille de bloc de 16 ko. Sur un
   systme Unix, il n'y a pas de taille de bloc associe  un fichier sur
   un disque alors que, sous VMS, chaque fichier  une taille de bloc
   spcifique. Cela veut dire que la taille du bloc importe peu sous
   linux... sauf que cela rend la lecture des bandes plus complique. Si
   vous avez des difficults pour trouver la taille du bloc et pour lire
   une bande, vous pouvez essayer de rgler la taille de bloc matrielle
   de votre lecteur de bande en utilisant mt -f $TAPE setblk 0. La
   syntaxe exacte de l'option setblk (et sa disponibilit) dpend de la
   version de mt, de l'interface matrielle de votre lecteur de bande et
   de votre environnement Unix.

   (Merci  Wojtek Skulski pour avoir signal l'option setblk.)

14. La fin

14.1 Copyright

   Sauf indication contraire, les droits d'auteur des HOWTO Linux sont
   dtenus par leurs auteurs respectifs. Les HOWTO Linux peuvent tre
   reproduits et distribus, en totalit ou en partie, sur tout mdia
   physique ou lectronique dans la mesure o ce copyright est prserv
   dans chaque copie. La distribution commerciale en est autorise et
   encourage. L'auteur apprcierait toutefois qu'on lui notifie
   individuellement ce genre de distribution.

   Le prsent copyright doit couvrir toute traduction, compilation et
   autre travail driv des HOWTO Linux. C'est--dire qu'il est interdit
   d'imposer des restrictions de diffusion allant au del du prsent
   copyright  des ouvrages inspirs, ou incorporant des passages, de
   HOWTO Linux. Sous certaines conditions, des exceptions  ces rgles
   seront tolres : contactez le coordinateur des HOWTO  l'adresse
   donne ci-dessous.

   Pour rsumer, nous souhaitons une diffusion aussi large que possible
   de ces informations. Nanmoins, nous entendons garder la proprit
   intellectuelle (copyright) des HOWTO, et apprcierions d'tre informs
   de leur redistribution.

   Pour toute question plus gnrale, merci de contacter le coordinateur
   des HOWTO, Guylhem Aznar,  l'adresse lectronique
   linux-howto@sunsite.unc.edu par email.

14.2 Avertissement

   Ce travail a t crit d'aprs l'exprience que nous avons eue au
   _Settore di Geofisica of Bologna University_ (Italie), ou un VAX 4000 a
   t remplac par un Pentium tournant sous Linux. La plupart de mes
   collgues sont des utilisateurs de VMS, et certains d'entre eux l'ont
   abandonn pour Linux.

   Le _HOWTO Comment migrer de VMS  Linux_ a t crit par Guido Gonzato
   et Mike Miller qui a crit la partie sur la lecture des bandes VMS.
   Merci beaucoup  mes collgues et amis qui m'ont aid  dfinir les
   besoins et les habitudes de l'utilisateur lambda de VMS, et
   particulirement au Dr. Warner Marsocchi.

   S'il vous plat, aidez moi  amliorer ce HOWTO. Je ne suis pas un
   expert de VMS et je n'en serai jamais un. C'est pourquoi vos
   suggestions et reports de bogues seront plus que bienvenus.

   Amusez-vous bien,

   Guido =8-)
