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.
______________________________________________________________________
Table des mati�res
1. Introduction
1.1 Pourquoi Linux ?
1.2 Commandes et fichiers comparables
2. Petite introduction
2.1 Fichiers
2.2 R�pertoires
2.3 Programmes
2.4 Visite guid�e
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 avanc�s
8.1 Droits et propri�t�
8.2 Multit�che : processus et t�ches (
8.3 Fichiers, deuxi�me
8.4 Files d'impression
9. Configurer
10. Programmes utiles
10.1 Visionneur de fichiers :
10.2 Num�ros de version sous Linux
10.3 Archiver : tar et gzip
11. Exemples du monde r�el
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 d�tails
13.4 Commentaires sur la taille des blocks
14. La fin
14.1 Copyright
14.2 Avertissement
______________________________________________________________________
11.. IInnttrroodduuccttiioonn
11..11.. PPoouurrqquuooii LLiinnuuxx ??
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 :
� �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
t�ches sous Linux en utilisant votre exp�rience de VMS. Mais avant
tout v�rifiez que :
� Linux et le _S_y_s_t_�_m_e _X _W_i_n_d_o_w sont correctement install�s ;
� vous avez un administrateur syst�me pour s'occuper des d�tails
techniques (s'il-vous-pla�t, 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 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 _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 sugg�re �galement de lire le _G_u_i_d_e _d_u _r_o_o_t_a_r_d 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 !
11..22.. CCoommmmaannddeess eett ffiicchhiieerrss ccoommppaarraabblleess
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.
22.. PPeettiittee iinnttrroodduuccttiioonn
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.
22..11.. FFiicchhiieerrss
� Les noms des fichiers sous VMS on la forme
fichier.extension.version. Sous Linux, le num�ro de version
n'existe pas (c'est une grosse limitation mais on peut la compenser
par d'astucieux moyens : jetez un oeil � la section ``Num�ros de
version sous Linux'') ; les noms des fichiers sont normalement
limit�s � 255 caract�res et peuvent contenir autant de points que
vous le d�sirez. 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 diff�rents 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 r�pertoire) alors qu'un fichier dont le nom
finit par un tilde (� ~ �) repr�sente une sauvegarde de fichier (ou
_b_a_c_k_u_p).
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''.
22..22.. RR��ppeerrttooiirreess
� Les noms des r�pertoires sous VMS sont de la forme
[p�re.r�p.sousr�p]. L'�quivalent sous Linux est :
/p�re/r�p/sousr�p/. Le p�re de tous les r�pertoires est le
r�pertoire racine appel� / ; il contient d'autres r�pertoires comme
/bin, /usr, /tmp, /etc, et bien d'autres.
� Le r�pertoire /home contient les r�pertoires _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 r�pertoire _h_o_m_e ; c'est l'�quivalent de
SYS$LOGIN. Il y a un raccourci pour le r�pertoire _h_o_m_e : le tilde
(� ~ �). Ainsi, cd ~/tmp est �quivalent �, disons, cd
/home/paul/tmp.
� Les noms des r�pertoires sont soumis aux m�mes r�gles que ceux des
fichiers. En plus de cela, chaque r�pertoire a deux entr�es
sp�ciales : l'une est . : elle repr�sente le r�pertoire lui-m�me
(comme []) ; l'autre, .., repr�sente le r�pertoire parent (comme
[-]).
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''.
22..33.. PPrrooggrraammmmeess
� Les commandes, les programmes compil�s et les scripts _s_h_e_l_l
(�quivalent des fichiers de commandes de VMS) n'ont pas forc�ment
une extension comme .EXE or .COM et peuvent s'appeler comme bon
vous semble. Les fichiers ex�cutables sont marqu�s d'un ast�risque
(� * �) lorsque vous ex�cutez ls -F.
� Pour lancer un fichier ex�cutable, il suffit de taper son nom (pas
de RUN, ni de PROGRAM.EXE, ni encore de @COMMAND). Il est donc
n�cessaire que le fichier soit situ� dans un r�pertoire du _p_a_t_h,
qui est une liste de r�pertoires. En g�n�ral, le _p_a_t_h contient des
r�pertoires comme /bin, /usr/bin, /usr/X11R6/bin, etc. Si vous
�crivez vos propres programmes, placez-les dans un r�pertoire 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/donn�es/monprog ou
./monprog si le r�pertoire courant n'est pas dans le _p_a_t_h.
� Les options des commandes sont pass�es sur la ligne de commande
gr�ce � OPTION= sous VMS et gr�ce � -_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, diff�rentes lettres
combin�es ou un mot. En particulier, l'option -R (r�cursif) de
plusieurs commandes de Linux permet de faire la m�me 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 fonctionnalit�s
(l'une n'existe pas sous VMS, l'autre est mal impl�ment�e) : la
redirection des entr�s/sorties et les _p_i_p_e_s. (Pour �tre sinc�re,
j'ai entendu que les versions r�centes 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 t�che 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 r�le cl� sous Unix. En voici un exemple typique :
$ monprog < donn�es | filtre1 | filtre2 >> r�sultat.dat 2> erreurs.log &
Traduisons. Le programme monprog utilise le fichier donn�es comme
entr�e, sa sortie est canalis�e (gr�ce � |) vers le programme filtre1
qui l'utilise en tant qu'entr�e et la traite. La sortie r�sultante est
canalis�e (_p_i_p_�_e) vers filtre2 pour �tre encore une fois trait�e. La
sortie finale est ajout�e (gr�ce � >>) au fichier r�sultat.dat, et les
messages d'erreurs sont redirig�s (gr�ce � 2>) vers le fichier
errors.log. Tout ceci est ex�cut� en arri�re-plan (gr�ce au & � la
fin de la ligne de commande). Pour en savoir plus � ce sujet,
reportez-vous � la section ``Exemples''.
Pour le multit�che, les files, et tout ce qui s'y rapporte, reportez-
vous � la section ``Sujets avanc�s''.
22..44.. VViissiittee gguuiidd��ee
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 _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 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 _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 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 _j_a_m_a_i_s 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''.
33.. ��ddiitteerr ddeess ffiicchhiieerrss
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 :
� 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 ins�rez 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 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 _b_e_a_u_c_o_u_p plus puissants que ce bon vieux EDT.
44.. TTeeXXeerr
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 :
� 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 s�lectionn�s peuvent �tre imprim�s. Un
programme plus r�cent et meilleur permet �galement de faire �a :
gv ;
� Pour imprimer un fichier .ps on utilise g�n�ralement la commande
lpr fichier.ps. Cependant si l'imprimante postscript s'appelle, par
exemple, � ps � (demandez � votre administrateur syst�me), il
faudra faire lrp -Pps fichier.ps. Pour plus d'informations au sujet
des files d'impressions, allez � la section ``Files
d'impressions''.
55.. PPrrooggrraammmmeerr
Programmer sous Linux est _b_e_a_u_c_o_u_p 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.
55..11.. FFoorrttrraann
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.
55..22.. UUttiilliisseerr mmaakkee
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 _m_a_k_e_f_i_l_e. 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 _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 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.
55..33.. SSccrriippttss sshheellll
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 ex�cutable (chmod +x fichier). Pour le lancer, tapez son nom
(pr�c�d� de ./ s'il n'est pas dans le _p_a_t_h).
�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."
______________________________________________________________________
55..44.. CC
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.
66.. GGrraapphhiiqquueess
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.
77.. MMaaiill eett oouuttiillss ppoouurr IInntteerrnneett
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 tr�s bien aussi) pour
g�rer 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 pr�f�rez peut-�tre
d'autres programmes comme xmail ou �quivalent.
� Newsgroups : utilisez tin ou slrn. Ils sont tous les deux tr�s
intuitifs.
� FTP : en plus de l'in�vitable ftp, demandez � votre administrateur
d'installer l'excellent ncftp ou un m�me 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.
88.. SSuujjeettss aavvaanncc��ss
L�, le jeu devient coriace. Apprenez �a, et ensuite vous pourrez dire
que vous � connaissez quelque chose � Linux � ;-)
88..11.. DDrrooiittss eett pprroopprrii��tt��
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 _q_u_i 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
_d_r_o_i_t est r, w 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/
88..22.. MMuullttiitt��cchhee :: pprroocceessssuuss eett tt��cchheess (( jjoobbss ))
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 (_f_o_r_e_g_r_o_u_n_d) ou arri�re-plan (_b_a_c_k_g_r_o_u_n_d) sont
appel�s des processus.
� Pour lancer un processus en arri�re plan :
$ programme [option] [< entr�e] [> sortie] &
[1] 234
Le shell vous donne le num�ro de _j_o_b (le premier nombre ; regardez ci-
dessus) et le PID (le num�ro du processus). Chaque processus est iden�
tifi� par son PID.
Pour voir combien de processus sont lanc�s :
$ ps -ax
La liste des processus actifs va �tre affich�e.
� 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 mani�re... ;-) 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 arri�re-plan ou
en ramener un en avant-plan. Dans ce contexte, les processus sont
appel�es jobs.
� Pour voir combien de _j_o_b_s sont actifs :
$ jobs
Les _j_o_b_s sont identif�s 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 arri�re-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>
88..33.. FFiicchhiieerrss,, ddeeuuxxii��mmee
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 syst�me
sont assimil�s � des fichiers. Les commandes et les programmes
puisent leur entr�e dans un � fichier � appel� _s_t_d_i_n (l'entr�e
standard : g�n�ralement le clavier), redirigent leur sortie vers un
� fichier � appel� _s_t_d_o_u_t (g�n�ralement l'�cran) et leurs erreurs
vers un � fichier � appel� _s_t_d_e_r_r (g�n�ralement l'�cran).
En utilisant < et > vous redirigez l'entr�e et la sortie vers un
fichier diff�rent. 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 dispara�t.
� Jokers/ : sur la ligne de commande * correspond � (et d�signe) tous
les fichiers sauf ceux qui sont cach�s ; .* correspond � tous les
fichiers cach�s ; *.* correspond seulement ceux qui ont un � . � au
milieu de leur nom suivi par d'autres caract�res ; l*c correspondra
� � lo�c � et � luc � ; *c* correspondra � � piocher � et � picorer
�. % devient ?. Il existe �galement un autre joker : []. Par
exemple : [abc]* d�signe les fichiers commen�ant par a, b ou c ;
*[I-N123] d�signe 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 pr�venu quand un fichier va �tre
�cras�.
88..44.. FFiilleess dd''iimmpprreessssiioonn
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>
99.. CCoonnffiigguurreerr
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 :
� .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 r�les 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 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 "
______________________________________________________________________
1100.. PPrrooggrraammmmeess uuttiilleess
1100..11.. VViissiioonnnneeuurr ddee ffiicchhiieerrss :: lleessss
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 :
� tout d'abord, appuyez sur q pour quitter ;
� h pour obtenir l'aide ;
� g pour aller au d�but 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 m�me chose vers
l'arri�re ;
� m suivi d'une lettre marque la position courante (par exemple ma) ;
� :e ouvre un autre fichier ;
� !commande ex�cute un shell.
1100..22.. NNuumm��rrooss ddee vveerrssiioonn ssoouuss LLiinnuuxx
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 _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 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
1100..33.. AArrcchhiivveerr :: ttaarr eett ggzziipp
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>
1111.. EExxeemmpplleess dduu mmoonnddee rr��eell
Le principe central d'Unix est qu'il existe plusieurs commandes
simples qui peuvent �tre li�es ensemble gr�ce aux _p_i_p_e_s 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).
� 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 donn�es 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 tr�s utile qui liste tous les
fichier dans une arborescence (qui commence � partir du r�pertoire
_h_o_m_e dans ce cas). Sa sortie peut-�tre filtr�e selon plusieurs
crit�res comme par exemple -name.
� J'ai un fichier texte qui contient le mot � entropie � dans ce
r�pertoire. Existe-t-il quelque chose de comparable � SEARCH ?
Bien s�r, 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 r�cursif.
$ find . -exec grep -l "entropy" {} \; 2> /dev/null
find . sort tous les noms des fichiers � partir du r�pertoire courant,
-exec grep -l "entropy" lance une commande sur chacun des fichiers
(repr�sent�s 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 r�cursif
if [ $# != 3 ]
then
echo "Utilisation : rgrep <param�tres> <motif> <r�pertoire>"
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-t�te et qui a ensuite _n
donn�es par ligne, pas n�cessairement espac�es de la m�me mani�re.
Je veux extraire la deuxi�me et le cinqui�me 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 troisi�me, on affiche le second et le cinqui�me champ en les
s�parant par une tabulation. Apprenez � vous servir de awk --- il vous
fera gagner beaucoup de temps.
� J'ai t�l�charg� le ls-lR.gz d'un FTP. Pour chaque sous r�pertoire,
il y a une ligne � total _x �, avec _x la taille en Kilo-octets du
r�pertoire. 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 envoy�e vers awk
dont je vous recommande chaudement de lire la page man.
� J'ai �crit un programme en Fortran, monprog, pour calculer un
param�tre � partir d'un fichier de donn�es. Je voudrais le lancer
sur des centaines de fichiers et avoir la liste des r�sultats, 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 tr�s court. Faites votre programme pour qu'il cherche le
programme mesdonn�es.dat et pour qu'il afficher le r�sultat sur
l'�cran (stdout) et �crivez ensuite ce petit script :
___________________________________________________________________
#!/bin/sh
# monprog.sh: lance la m�me commande sur plusieurs fichiers
# usage: monprog.sh *.dat
for fichier in $* # pour tous les param�tres (e.g. *.dat)
do
# ajouter le nom du fichier dans r�sultat.dat
echo -n "${fichier}: " >> r�sultats.dat
# copie le param�tre courant dans mesdonn�es.dat et lance monprog
# et ajoute le sortie � r�sultats.dat
cp ${fichier} mesdonn�es.dat ; monprog >> r�sultats.dat
done
___________________________________________________________________
� Je veux remplacer � g�ologie � par � g�ophysique � 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 param�tre
NOUVEAU=$2 # second
shift ; shift # enlever les deux premier param�tres ; les suivants sont
# les noms des fichiers
for fichier in $* # pour tous les fichier donn�s en param�tres
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 donn�es. Je ne connais pas leur
taille et je dois enlever leur avant-derni�re et leur avant-avant-
derni�re lignes. Heu... � la mimine ?
Bien s�r que non :
___________________________________________________________________
#!/bin/sh
# prune.sh: efface les n-1�me et n-2�me ligne de fichiers
# utilisation : prune.sh fichier [fichier...]
for fichier in $* # pour chaque param�tre
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 premi�res lignes
# de LIGNES
tail -n 1 $fichier >> $fichier.new # ajoute la derni�re ligne
done
___________________________________________________________________
NDT : il est tout de m�me beaucoup plus �l�gant d'utiliser ed :
______________________________________________________________________
#!/bin/sh
# prune.sh: efface les n-1�me et n-2�me ligne de fichiers
# utilisation : prune.sh fichier [fichier...]
for fichier in $* # pour chaque param�tre
do
printf '$-2,$-1d\nw\nq\n' | ed -s $fichier
done
______________________________________________________________________
J'esp�re que ces exemples vous auront ouvert l'app�tit.
1122.. AAssttuucceess ddoonntt oonn nnee ppeeuutt ssee ppaasssseerr
� La compl�tion de commande : l'appui sur la touche tabulation quand
vous tapez une commande va compl�ter la ligne de commande. Par
exemple, disons que vous devez taper less
un_nom_de_fichier_tr�s_long. Il vous suffira de taper less un puis
d'appuyer sur tabulation (si vous avez plusieurs fichier qui
commencent par les m�mes caract�res tapez-en assez pour r�soudre
l'ambigu�t�).
� Faire d�filer l'�cran vers le haut : en appuyant sur Shift-Page_up
vous pouvez faire d�filer l'�cran vers le haut de quelques pages
(le nombre de page d�pend de la m�moire vid�o de votre PC).
� R�tablir 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 s�quence de caract�res : echo ctrl-v Echap c Entr�e.
� Copier du texte sur la console : demandez � votre administrateur
d'installer gpm, un driver pour la souris en mode texte. Cliquez et
glissez pour s�lectionner du texte et ensuite appuyez sur le bouton
droit pour coller le texte s�lectionn�. �a marche entre plusieurs
consoles virtuelles.
� Copier du texte sous X : cliquez et glissez pour s�lectionnez le
texte dans un xterm et cliquez ensuite sur le bouton du milieu (ou
les deux boutons) pour coller.
1133.. LLiirree ddeess bbaannddeess VVMMSS ddeeppuuiiss LLiinnuuxx
(Cette section a �t� �crite par Mike Miller)
1133..11.. IInnttrroodduuccttiioonn
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.
1133..22.. LLeess bbaasseess
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).
1133..33.. QQuueellqquueess dd��ttaaiillss
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 :-).
1133..44.. CCoommmmeennttaaiirreess ssuurr llaa ttaaiillllee ddeess bblloocckkss
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.)
1144.. LLaa ffiinn
1144..11.. CCooppyyrriigghhtt
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-
[email protected] par email.
1144..22.. AAvveerrttiisssseemmeenntt
Ce travail a �t� �crit d'apr�s l'exp�rience 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
coll�gues 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 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-)