  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.
  ______________________________________________________________________

  Table des matires





















































  1. Introduction

     1.1 Pourquoi Linux ?
     1.2 Commandes et fichiers comparables

  2. Petite introduction

     2.1 Fichiers
     2.2 Rpertoires
     2.3 Programmes
     2.4 Visite guide

  3. diter des fichiers

  4. TeXer

  5. Programmer

     5.1 Fortran
     5.2 Utiliser
     5.3 Scripts
     5.4 C

  6. Graphiques

  7. Mail et outils pour Internet

  8. Sujets avancs

     8.1 Droits et proprit
     8.2 Multitche : processus et tches (
     8.3 Fichiers, deuxime
     8.4 Files d'impression

  9. Configurer

  10. Programmes utiles

     10.1 Visionneur de fichiers :
     10.2 Numros de version sous Linux
     10.3 Archiver : tar et gzip

  11. Exemples du monde rel

  12. Astuces dont on ne peut se passer

  13. Lire des bandes VMS depuis Linux

     13.1 Introduction
     13.2 Les bases
     13.3 Quelques dtails
     13.4 Commentaires sur la taille des blocks

  14. La fin

     14.1 Copyright
     14.2 Avertissement


  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn




  11..11..  PPoouurrqquuooii LLiinnuuxx ??


  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 _S_y_s_t__m_e _X _W_i_n_d_o_w 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 _s_h_e_l_l --- 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 _L_i_n_u_x _D_o_c_u_m_e_n_t_a_t_i_o_n _P_r_o_j_e_c_t (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 _G_u_i_d_e _d_u _r_o_o_t_a_r_d 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1..22..  CCoommmmaannddeess eett ffiicchhiieerrss ccoommppaarraabblleess


  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2..  PPeettiittee iinnttrroodduuccttiioonn


  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2..11..  FFiicchhiieerrss



    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
     _b_a_c_k_u_p).

  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..22..  RRppeerrttooiirreess



    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 _h_o_m_e (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 _h_o_m_e ;  c'est l'quivalent de
     SYS$LOGIN. Il y a un raccourci pour le rpertoire _h_o_m_e : 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2..33..  PPrrooggrraammmmeess



    Les commandes, les programmes compils et les scripts _s_h_e_l_l
     (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 _p_a_t_h,
     qui est une liste de rpertoires. En gnral, le _p_a_t_h contient des
     rpertoires comme /bin, /usr/bin, /usr/X11R6/bin, etc. Si vous
     crivez vos propres programmes, placez-les dans un rpertoire de
     votre _p_a_t_h (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 _p_a_t_h.

    Les options des commandes sont passes sur la ligne de commande
     grce  OPTION= sous VMS et grce  -_u_n_e___o_p_t_i_o_n ou --_u_n_e___o_p_t_i_o_n
     sous Linux, _u_n_e___o_p_t_i_o_n 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 _p_i_p_e_s. (Pour tre sincre,
     j'ai entendu que les versions rcentes de IDL supportent la
     redirection et les _p_i_p_e_s 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 _p_i_p_e_s 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 (_p_i_p__e) 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2..44..  VViissiittee gguuiiddee


  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 _p_a_s 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 _S_y_s_t__m_e _X _W_i_n_d_o_w (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 _j_a_m_a_i_s 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3..  ddiitteerr ddeess ffiicchhiieerrss


  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 _p_a_s 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 _b_e_a_u_c_o_u_p plus puissants que ce bon vieux EDT.





  44..  TTeeXXeerr


  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5..  PPrrooggrraammmmeerr


  Programmer sous Linux est _b_e_a_u_c_o_u_p 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5..11..  FFoorrttrraann


  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5..22..  UUttiilliisseerr mmaakkee


  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 _m_a_k_e_f_i_l_e. 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 _m_a_k_e_f_i_l_e 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5..33..  SSccrriippttss sshheellll



  Les scripts _s_h_e_l_l 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 _p_a_t_h).

  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5..44..  C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6..  GGrraapphhiiqquueess


  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7..  MMaaiill eett oouuttiillss ppoouurr IInntteerrnneett


  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8..  SSuujjeettss aavvaannccss


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


  88..11..  DDrrooiittss eett pprroopprriitt


  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 _q_u_i 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
  _d_r_o_i_t 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8..22..  MMuullttiittcchhee :: pprroocceessssuuss eett ttcchheess (( jjoobbss ))


  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 (_f_o_r_e_g_r_o_u_n_d) ou arrire-plan (_b_a_c_k_g_r_o_u_n_d) sont
  appels des processus.


    Pour lancer un processus en arrire plan :



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





  Le shell vous donne le numro de _j_o_b (le premier nombre ; regardez ci-
  dessus) et le PID (le numro du processus). Chaque processus est iden
  tifi 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 _j_o_b_s sont actifs :




  $ jobs





  Les _j_o_b_s 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 _j_o_b) :



       $ bg <job>





    Pour envoyer un _j_o_b en avant-plan :



       $ fg <job>





    Pour tuer un _j_o_b :



       $ kill %<job>






  88..33..  FFiicchhiieerrss,, ddeeuuxxiimmee


  Voici plus d'information sur les fichiers.


    _s_t_d_i_n, _s_t_d_o_u_t et _s_t_d_e_r_r : sous Unix, tous les composants du systme
     sont assimils  des fichiers. Les commandes et les programmes
     puisent leur entre dans un  fichier  appel _s_t_d_i_n (l'entre
     standard : gnralement le clavier), redirigent leur sortie vers un
      fichier  appel _s_t_d_o_u_t (gnralement l'cran) et leurs erreurs
     vers un  fichier  appel _s_t_d_e_r_r (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 (_s_t_d_e_r_r) ;
     2>&1 redirige _s_t_d_e_r_r vers _s_t_d_o_u_t, alors que 1>&2 redirige _s_t_d_o_u_t
     vers _s_t_d_e_r_r. 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8..44..  FFiilleess dd''iimmpprreessssiioonn


  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9..  CCoonnffiigguurreerr


  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 "
  ______________________________________________________________________




  1100..  PPrrooggrraammmmeess uuttiilleess



  1100..11..  VViissiioonnnneeuurr ddee ffiicchhiieerrss :: lleessss


  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) ;

    :e ouvre un autre fichier ;

    !commande excute un shell.


  1100..22..  NNuummrrooss ddee vveerrssiioonn ssoouuss LLiinnuuxx


  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 _L_e _m_i_n_i_-_H_o_w_t_o _R_C_S.

  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


  1100..33..  AArrcchhiivveerr :: ttaarr eett ggzziipp


  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>





  1111..  EExxeemmpplleess dduu mmoonnddee rreell


  Le principe central d'Unix est qu'il existe plusieurs commandes
  simples qui peuvent tre lies ensemble grce aux _p_i_p_e_s 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
  _h_o_m_e 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  par
  tir 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.


  1122..  AAssttuucceess ddoonntt oonn nnee ppeeuutt ssee ppaasssseerr



    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.


  1133..  LLiirree ddeess bbaannddeess VVMMSS ddeeppuuiiss LLiinnuuxx

  (Cette section a t crite par Mike Miller)


  1133..11..  IInnttrroodduuccttiioonn


  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.


  1133..22..  LLeess bbaasseess


  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).

  1133..33..  QQuueellqquueess ddttaaiillss


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


  1133..44..  CCoommmmeennttaaiirreess ssuurr llaa ttaaiillllee ddeess bblloocckkss


  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.)




  1144..  LLaa ffiinn



  1144..11..  CCooppyyrriigghhtt


  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.


  1144..22..  AAvveerrttiisssseemmeenntt


  Ce travail a t crit d'aprs l'exprience que nous avons eue au
  _S_e_t_t_o_r_e _d_i _G_e_o_f_i_s_i_c_a _o_f _B_o_l_o_g_n_a _U_n_i_v_e_r_s_i_t_y (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 _H_O_W_T_O _C_o_m_m_e_n_t _m_i_g_r_e_r _d_e _V_M_S _ _L_i_n_u_x 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-)











