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'espère, sans douleur --- en comparant les commandes et les outils disponibles sur ces deux systèmes.

1. Introduction

1.1 Pourquoi Linux ?

Vous avez entendu dire qu'Unix est difficile et vous êtes hésitant à 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 même 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 systèmes d'exploitation et accomplissent essentiellement les mêmes taches. Cependant, les outils de Linux sont à mon humble avis supérieurs. Leur syntaxe est souvent plus concise et ils ont souvent les quelques fonctionnalités de plus qui font la différence et permettent de gagner du temps (vous entendrez souvent que VMS et Unix ont des philosophies différentes). 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 gâteau, les excellentes performances des nouvelles cartes graphiques transforment votre tite boîte Linux, grâce à X, en une puissante station de travail graphique bien souvent plus rapide qu'une machine spécialement prévue pour cette tâche.

J'ai plusieurs raisons de croire que la combinaison Pentium/Linux est préférable à celle de VAX/VMS, mais ces préférences sont strictement personnelles et vous ne serez peut-être pas d'accord. Vous en déciderez de vous-même dans quelques mois.

Je prends en hypothèse que vous êtes une étudiant ou un chercheur à l'université et que vous utilisez régulièrement VMS pour les tâches suivantes :

Dans la section suivante je vais vous expliquer comment faire ces tâches sous Linux en utilisant votre expérience de VMS. Mais avant tout vérifiez que :

Notez que ce HOWTO n'est pas suffisant pour faire de vous un linuxien pur et dur : il contient seulement le strict nécessaire pour vous permettre de commencer. Vous devriez en apprendre plus sur Linux pour pouvoir en tirer le maximum (fonctionnalités avancées de bash, programmation, expressions régulières, 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 suggère également de lire le Guide du rootard d'Éric Dumas et plus généralement 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 utilisées sous VMS et Linux. Gardez à l'esprit que leur syntaxe est souvent très différente ; pour plus de détails allez faire un tour dans les sections suivantes.

VMS                           Linux                   Notes
-------------------------------------------------------------------------------
@COMMAND                      command                    (doit être exécutable)
COPY fichier1 fichier2        cp fichier1 fichier2
CREATE/DIR [.répertoire]      mkdir répertoire           (seulement un par un)
CREATE/DIR [.rép1.rép2]       mkdirhier rép/rép
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 préféré)
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 précisée)
                              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 [.rép.rép]        cd rép/rép
SET HOST machine              telnet machine,            (pas exactement pareil)
                              rlogin machine 
SET FILE/OWNER_UIC=paul       chown paul fichier        (complètement différent)
SET NOBROADCAST               mesg
SET PASSWORD                  passwd
SET PROT=(perm) fichier       chmod perm fichier       (complètement différent)
SET TERMINAL                  export TERM=          (la syntaxe est différente)
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=durée commande   at durée commande
TEX fichier.tex               tex fichier.tex
TYPE/PAGE fichier             more fichier
                              less fichier                     (beaucoup mieux)

Bien sûr, les différences des deux systèmes 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 première fois. Détendez-vous, il y a relativement peu de chose.

2.1 Fichiers

Maintenant, voici un tableau présentant 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 [.rép]fichier.txt;1 []           $ cp rép/fichier.txt .
$ COPY [.rép]fichier.txt;1 [-]          $ cp rép/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.* "géologie"             $ grep géologie *tex

Regardez en plus loin dans le document pour avoir d'autres exemples. Si vous voulez vous attaquer aux notions de droits, de propriétaires et aux sujets avancés, reportez vous à la section Sujets avancés.

2.2 Répertoires

Et maintenant quelques autres exemples :


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

$ CREATE/DIR [.répertoire]              $ mkdir répertoire
$ CREATE/DIR [.dir1.dir2.dir3]          $ mkdirhier rép1/rép2/rép3
   non/disponible                       $ rmdir répertoire
                                        (si le répertoire est vide)
                                        $ rm -R répertoire
$ DIRECTORY                             $ ls
$ DIRECTORY [...]fichier.*.*            $ find . -name "fichier*"
$ SET DEF SYS$LOGIN                     $ cd
$ SET DEF [-]                           $ cd ..
$ SET DEF [père.rép.sousrép]            $ cd /père/rép/sousrép
$ SET DEF [.rép.sousrép]                $ cd rép/sousrép
$ SHOW DEF                              $ pwd

Si vous voulez en savoir plus sur les droits, les propriétaires, ou tout simplement en savoir plus tout court, sautez à la section Sujets avancés.

2.3 Programmes

Pour le multitâche, les files, et tout ce qui s'y rapporte, reportez-vous à la section Sujets avancés.

2.4 Visite guidée

Maintenant vous êtes prêt 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 occupée 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 Système X Window (que nous appellerons maintenant X). X est un environnement graphique similaire au DECWindows --- en fait, ce dernier dérive 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 dépend de la manière dont votre administrateur système 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 accéder 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 répertoire courant (incluant les fichiers cachés) :

$ ls -al

Appuyez sur shift + page up pour faire défiler 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 système de fichier).

Si vous pensez que vous êtes prêt pour travailler, allez-y. Mais si j'étais vous, je passerais d'abord par la section Sujets avancés.

3. Éditer des fichiers

EDT ne tourne pas sous Linux, mais il y a beaucoup d'autres éditeurs disponibles. Le seul qui soit sûr d'être présent sur tout système Unix est vi --- oubliez-le, votre administrateur en a sûrement 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 particulièrement utiles pour éditer des sources de programmes puisque qu'ils ont deux fonctionnalités inconnue de EDT : la coloration syntaxique et l'indentation automatique. De plus, vous pouvez compilez vos programmes à partir de l'éditeur (grâce à 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 après.

Si vous avez emacs, lancez-le. Tout d'abord vous devez comprendre le système de notation de combinaison de touche d'emacs. C désigne contrôle et M la touche méta (en général 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 :

Si vous avez jed, demandez à votre administrateur de le configurer comme il faut. L'émulation est active dès que vous le lancez. Utilisez les même touches que sur EDT et appuyez sur échap ? h pour obtenir l'aide. Les commandes sont lancées de la même manière que dans emacs. De plus, il y a quelques raccourcis pratiques faisant défaut à EDT ; vous pouvez en plus configurer ces raccourcis clavier. Demandez à votre administrateur.

Vous pouvez aussi utilisez un autre éditeur avec une interface complètement différente. emacs en mode natif est un choix courant. Un autre éditeur populaire est joe qui peut émuler d'autres éditeurs comme emacs lui-même (en étant même 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 supérieurs :

5. Programmer

Programmer sous Linux est beaucoup plus agréable : 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, réédition, 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 réelle différence 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 problèmes 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 détails.

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'après mon expérience, le paquetage yaf77 est celui qui donne les meilleurs résultats.

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

$ g77 monprog.f

Cela va créer par défaut un exécutable appelé a.out (vous n'avez pas à effectuer les liens). Pour donner à l'exécutable un nom différent et faire quelques optimisations :

$ g77 -O2 -o monprog monprog.f

Méfiez-vous des optimisations ! Demandez à votre administrateur système de lire la documentation fournie avec le compilateur et de vous dire s'il y a des problèmes.

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 créer une bibliothèque, 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 bibliothèque externe appelée, 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 décrit ci-dessous.

5.2 Utiliser make

make est un outil pour gérer la compilation de programmes divisés en plusieurs fichiers sources.

Supposons que vous ayez des fichiers sources contenant vos routines appelés 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 dépend de quel fichier, et les recompiler en tenant compte des dépendances.

Plutôt que de devenir fou, je vous propose d'écrire un makefile. C'est un fichier texte qui contient les dépendances entre les sources : quand un source est modifié, seuls les sources qui dépendent du fichier modifié seront recompilées.

Dans notre cas, le makefile ressemblerait à ceci :



# Voici le Makefile
# Attention : appuyez sur la touche tabulation quand « <TAB> »
# est écrit ! C'est très 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 dépend de quatre fichiers objets

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

fichier_1.o: fichier_1.f
<TAB>g77 -c fichier_1.f
# fichier_1.o dépend 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 dépend 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 dépend 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 sûr, 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 exécutable (chmod +x fichier). Pour le lancer, tapez son nom (précédé de ./ s'il n'est pas dans le path).

Écrire des scripts avec bash est un sujet tellement vaste qu'il nécessiterait un livre entier, et je ne ne vais pas m'attarder sur le sujet. Je vais juste vous donner un exemple plus ou moins compréhensible et, je l'espère, utile, à partir duquel vous pourrez comprendre quelques règles de base.


#!/bin/sh
# exemple.sh
# Je suis un commentaire.
# Ne modifiez pas la première ligne, elle doit être présente.
echo "Ce système est : `uname -a`" # utilise la sortie de la commande
echo "Mon nom est $0" # variable interne
echo "Vous m'avez donné les $# paramètres suivants : "$*
echo "Le premier paramètre est : "$1
echo -n "Quel est votre nom ? " ; read votre_name
echo remarquez la différence : "Salut $votre_name" # cité avec "
echo remarquez la différence : 'Salut $votre_name' # cité avec '
REPS=0 ; FICHIERS=0
for fichier in `ls .` ; do
  if [ -d ${fichier} ] ; then # si le fichier est un répertoire
    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} répertoires et ${FICHIERS} fichiers"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # valeur de sortie de la dernière 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 débrouiller sous Linux. Pour compiler le célèbre hello.c vous utiliserez le compilateur gcc, qui est standard dans le monde de Linux et qui a la même syntaxe que g77 :

$ gcc -O2 -o hello hello.c

Pour lier une bibliothèque à un programme, ajoutez l'option -lbibliothèque. Par exemple pour lier la bibliothèque math et optimiser faites

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

(L'option -lbibliothèque force gcc à lier la bibliothèque /usr/lib/libbibliothèque.a ; ainsi -lm lie /usr/lib/libm.a.)

Quand votre programme est divisé en plusieurs fichiers sources, vous aurez besoin du programme make décrit 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 bibliothèques disponible. Parmi les premières que vous voudrez probablement utiliser, il y a ncurses, qui permet de gérer 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. Créez tout d'abord deux fichiers de données : 2D-data.dat (deux données 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 données d'une seule colonne (une série 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 réafficher sur votre serveur X. Ne soyez pas déconcerté : la dernière impression se lancera seulement quand vous quitterez gnuplot.

Pour plus d'informations, tapez help ou regardez le répertoire 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 :

8. Sujets avancés

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

8.1 Droits et propriété

Les fichiers et les répertoires ont des droits et des propriétaires, comme sous VMS. Si nous ne pouvez pas lancer un programme, ne pouvez pas modifier un fichier ou ne pouvez pas accéder à un répertoire, c'est parce vous n'avez pas les droits adéquats 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 propriété : le propriétaire, le groupe et les autres (comme le propriétaire, le groupe et le reste du monde sous VMS) et trois droits : lecture, écriture et exécution.

De gauche à droite, - est le type du fichier (- désigne un fichier ordinaire, d un répertoire, l un lien, etc.) ; rwx sont les droits du propriétaire (lecture, écriture, exécution) ; r-x sont les droits du groupe du propriétaire (lecture, exécution) ; r-x sont les droits pour tous les autres utilisateurs (lecture, écriture).

Pour changer les droits d'un fichier :

$ chmod <quiXdroit> <fichier>

Avec qui représentant u (ce sont alors les droits du propriétaire qui sont affectés), g (ceux du groupe) ou o (ceux des « autres »). X est soit + (dans ce cas il donne les droits), soit - (il les enlève). Et droit est rw ou x. Voici un exemple :

$ chmod u+x fichier

Cela permet de rendre le fichier exécutable pour le propriétaire. Il existe un petit raccourci chmod +x fichier.

$ chmod go-wx fichier

Là, on enlève les droits d'écriture et d'exécution au groupe et aux autres (donc à tout le monde sauf au propriétaire).

$ chmod ugo+rwx fichier

Tous les droits sont donnés à tout le monde.

Une manière plus courte de préciser 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 répertoire, rx signifie que vous pouvez vous placer dans ce répertoire et w que vous pouvez effacer un fichier dans ce répertoire (en tenant compte des droits du fichier évidemment) ou le répertoire lui-même. Tout ça n'est qu'une petit partie du sujet : man est votre ami.

Pour changer le propriétaire d'un fichier :

$ chown <utilisateur> <fichier>

Pour résumer, 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 Multitâche : processus et tâches (jobs)

En voici plus à propos de la manière de lancer les programmes. Il n'y a pas de file d'attente sous Linux ; le multitâche est géré très différemment. Voici à quoi ressemble une ligne de commande typique :

$ commande -s1 -s2 ... -sn par1 par2 ... parn < entrée > sortie &

Maintenant, voyons comment marche le multitâche. Les programmes qui tournent en avant-plan (foreground) ou arrière-plan (background) sont appelés des processus.

En plus de ça, le shell vous permet de stopper ou de suspendre temporairement un processus, envoyer un processus en arrière-plan ou en ramener un en avant-plan. Dans ce contexte, les processus sont appelées jobs.

8.3 Fichiers, deuxième

Voici plus d'information sur les fichiers.

8.4 Files d'impression

Vos fichiers à imprimer sont placés dans une file comme sous VMS. Quand vous lancez une commande d'impression, vous aurez peut-être à préciser 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 gérer 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 <numéro de job>

9. Configurer

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

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


# $HOME/.bash_profile

# on ne redéfinit pas le path si ce n'est pas nécessaire
echo $PATH | grep $LOGNAME > /dev/null
if [ $? != 0 ]
then
  export PATH="$PATH:/home/$LOGNAME/bin"  # ajoute mon répertoire 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 répertoire 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() # crée 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 définit les fonctions attachés 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 caractères accentués. 
# 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 compressés, les archives, etc.

Comme les dernières versions de TYPE, less vous permet de vous déplacer dans le fichier dans les deux directions. Il accepte aussi plusieurs commandes qui sont lancées en appuyant sur une touche. Les plus utilisés sont :

10.2 Numéros de version sous Linux

Hélas, Linux ne supporte toujours pas les numéros de version nativement. Cependant, on peut régler ce problème de deux manières. La première est d'utiliser RCS (Revision Control System) qui vous permet de garder la trace des précédentes versions d'un fichier. RCS est traité dans Le mini-Howto RCS.

La seconde est d'utiliser un éditeur qui sait traiter les numéros 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, vérifiez que vous avez une version supérieure à la 0.98.7. Le patch pour les numéros 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 très répandues qui sont utilisés 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 compressés en utilisant compress ou gzip. compress est aujourd'hui obsolète et on n'utilise plus que gzip.

$ compress <fichier>
$ gzip <fichier>

Ceci créera 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 décompresser utilisez

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

Faites un tour du côté de leurs pages man.

Les utilitaires unarj, zip et unzip sont aussi disponibles.

Les fichier avec l'extension .tar.gz ou .tgz (archivés par tar, puis compressés par gzip) sont très 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 réel

Le principe central d'Unix est qu'il existe plusieurs commandes simples qui peuvent être liées ensemble grâce aux pipes et aux redirections pour accomplir des tâches plus compliquées. Regardez les exemples suivants (je n'expliquerai que les plus compliqués ; pour les autres, reportez vous aux sections précédentes ou aux pages man).

J'espère que ces exemples vous auront ouvert l'appétit.

12. Astuces dont on ne peut se passer

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 enregistrées à partir d'une machine sous VMS (ou des bandes enregistrées pour être lisibles sous VMS et les systèmes Unix). En général, 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 présentées sont appliquables à tout système Unix -- j'ai fait cela avec Linux et les systèmes Unix d'HP, de SUN et de DEC. La principale dépendance à la plate-forme est le nom des fichiers périphériques qui peuvent varier d'un système à l'autre, et les options de mt pour spécifier le nom du périphérique (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 traînent 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 données sur la bande : une entête, les données et une terminaison. L'entête et la terminaison sont intéressantes car elles contiennent des informations sur le fichier tel qu'il était sous VMS. Le fichier de données est... le fichier de données. Chacun de ces fichiers peut être extrait de la bande avec la commande dd. La bande peut être positionnée en utilisant la commande mt.

Prenons un exemple. J'ai une bande VMS. Les deux premiers de ses fichiers étaient appelés ce66-2.evt et ce66-3.evt sur le système VMS. Le label de la bande est c66a2.

Si j'exécute les commandes suivantes


$ dd if=$TAPE bs=16k of=entête1
$ dd if=$TAPE bs=16k of=donnée1
$ dd if=$TAPE bs=16k of=terminaison1
$ dd if=$TAPE bs=16k of=entête2
$ dd if=$TAPE bs=16k of=donnée2
$ dd if=$TAPE bs=16k of=terminaison2

je me retrouve avec six fichiers : entête1, donnée1, terminaison1, entête2, donnée2 et terminaison2. La syntaxe ici est if="fichier d'entrée", bs="taille des blocs" et of="fichier de sortie". TAPE doit être une variable d'environnement contenant le nom du périphérique de votre lecteur de bande --- par exemple /dev/nts0 si vous utilisez le premier disque SCSI sous Linux.

Si vous aviez voulu récupérer le second fichier, mais pas le premier, sous son non d'origine, vous n'auriez pas eu à vous préoccuper de l'entête :


$ 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'entête du deuxième. Le second mt saute la seconde terminaison et positionne la bande au début du prochain fichier : la troisième entête. Vous pouvez aussi utilisez mt pour sauter des fichiers en arrière (bsf), rembobiner (rewind) ou décharger la bande (offline, rewoffl).

13.3 Quelques détails

Les fichiers d'entêtes et de terminaisons contiennent des données ASCII en majuscules utilisées 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 première entête de la bande est un peu différente des suivantes.

L'en-tête du premier fichier de la bande (comme par exemple dans l'exemple ci-dessus) débute par la chaîne « VOL1 ». Suit le nom de volume. Dans notre exemple, le fichier entête1 commence par « VOL1C66A2 ». Vient ensuite une série d'espace terminée par un chiffre. Après, on trouve la chaîne « HDR1 » qui indique que l'on a à faire à un fichier d'entête. Les caractères qui suivent immédiatement la chaîne « HDR1 » forment le nom du fichier VMS. Dans l'exemple, cette chaîne 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 différent. « VOL1 » n'est pas présent. Le reste est identique. Un autre champ utile est le septième. Il se termine par « DECFILES11A ». C'est un signe de conformité au standard DEC Files11A.

Champ                Entête initiale                  Entêtes 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 complète sur le format de l'entête 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 système Unix, il n'y a pas de taille de bloc associée à un fichier sur un disque alors que, sous VMS, chaque fichier à une taille de bloc spécifique. Cela veut dire que la taille du bloc importe peu sous linux... sauf que cela rend la lecture des bandes plus compliquée. Si vous avez des difficultés pour trouver la taille du bloc et pour lire une bande, vous pouvez essayer de régler la taille de bloc matérielle de votre lecteur de bande en utilisant mt -f $TAPE setblk 0. La syntaxe exacte de l'option setblk (et sa disponibilité) dépend de la version de mt, de l'interface matérielle 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 détenus par leurs auteurs respectifs. Les HOWTO Linux peuvent être reproduits et distribués, en totalité ou en partie, sur tout média physique ou électronique dans la mesure où ce copyright est préservé dans chaque copie. La distribution commerciale en est autorisée et encouragée. L'auteur apprécierait toutefois qu'on lui notifie individuellement ce genre de distribution.

Le présent copyright doit couvrir toute traduction, compilation et autre travail dérivé des HOWTO Linux. C'est-à-dire qu'il est interdit d'imposer des restrictions de diffusion allant au delà du présent copyright à des ouvrages inspirés, ou incorporant des passages, de HOWTO Linux. Sous certaines conditions, des exceptions à ces règles seront tolérées : contactez le coordinateur des HOWTO à l'adresse donnée ci-dessous.

Pour résumer, nous souhaitons une diffusion aussi large que possible de ces informations. Néanmoins, nous entendons garder la propriété intellectuelle (copyright) des HOWTO, et apprécierions d'être informés de leur redistribution.

Pour toute question plus générale, 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'après l'expérience 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 collègues 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 collègues et amis qui m'ont aidé à définir les besoins et les habitudes de l'utilisateur lambda de VMS, et particulièrement au Dr. Warner Marsocchi.

S'il vous plaît, aidez moi à améliorer 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-)