/usr/share/doc/HOWTO/fr-html/VMS-to-Linux-HOWTO.html is in doc-linux-fr-html 2013.01-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.69">
<TITLE>HOWTO Comment migrer de VMS à Linux</TITLE>
</HEAD>
<BODY>
<H1>HOWTO Comment migrer de VMS à Linux</H1>
<H2>Auteur :
<A HREF="mailto:guido@ibogeo.df.unibo.it">Guido Gonzato</A>
et
<A HREF="mailto:miller5@uiuc.edu">Mike Miller</A><BR>
Traducteur :
<A HREF="mailto:dimitri.ara@wanadoo.fr">Dimitri Ara</A><BR> </H2>v1.1.3, 17 Septembre 1999
<HR>
<EM>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. </EM>
<HR>
<H2><A NAME="Introduction"></A> <A NAME="s1">1. Introduction</A></H2>
<H2><A NAME="ss1.1">1.1 Pourquoi Linux ?</A>
</H2>
<P>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).</P>
<P>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.</P>
<P>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.</P>
<P>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 :</P>
<P>
<UL>
<LI> écrire des papiers avec TeX/LaTeX ;</LI>
<LI> programmer en Fortran ;</LI>
<LI> faire des graphiques ;</LI>
<LI> utiliser Internet ;</LI>
<LI> etc.</LI>
</UL>
</P>
<P>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 :</P>
<P>
<UL>
<LI> Linux et le <I>Système X Window</I> sont correctement installés ;</LI>
<LI> 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 :-) ;</LI>
<LI> votre <I>shell</I> --- l'équivalent de <CODE>DCL</CODE> --- est <CODE>bash</CODE>
(demandez à votre administrateur). </LI>
</UL>
</P>
<P>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 <CODE>bash</CODE>, programmation, expressions régulières, etc.).</P>
<P>Les documents du <I>Linux Documentation Project</I> (projet de documentation de
Linux), disponibles sur
<A HREF="ftp://metalab.unc.edu:/pub/Linux/docs/LDP">metalab.unc.edu:/pub/Linux/docs/LDP</A>, sont une importante
source d'informations. </P>
<P>NDT : je vous suggère également de lire le <I>Guide du rootard</I> d'Éric Dumas
et plus généralement tout ce que l'on peut trouver sur
<CODE>
<A HREF="http://www.freenix.fr/linux">http://www.freenix.fr/linux</A></CODE> et
<CODE>
<A HREF="http://www.traduc.org">http://www.traduc.org</A></CODE>.</P>
<P>Et maintenant, c'est parti !</P>
<H2><A NAME="ss1.2">1.2 Commandes et fichiers comparables</A>
</H2>
<P>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.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Bien sûr, les différences des deux systèmes ne se limitent pas aux noms des
commandes. Continuez donc à lire.</P>
<H2><A NAME="Petite introduction"></A> <A NAME="s2">2. Petite introduction</A></H2>
<P>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.</P>
<H2><A NAME="ss2.1">2.1 Fichiers</A>
</H2>
<P>
<UL>
<LI> Les noms des fichiers sous VMS on la forme
<CODE>fichier.extension.version</CODE>.
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
<A HREF="#Numeros de version sous Linux">Numéros de version sous Linux</A>) ;
les noms des fichiers sont normalement limités à 255 caractères et peuvent
contenir autant de points que vous le désirez. Par exemple,
<CODE>C_est.un.FICHIER.txt</CODE> est un nom de fichier valide.
</LI>
<LI> Linux fait la distinction entre les majuscules et les minuscules. Ainsi,
<CODE>FICHIER.txt</CODE> et <CODE>fichier.txt</CODE> sont deux fichiers
différents et <CODE>ls</CODE> est une commande alors que <CODE>LS</CODE> n'en est pas une.
</LI>
<LI> 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
(« <CODE>~</CODE> ») représente une sauvegarde de fichier (ou
<I>backup</I>).
</LI>
</UL>
</P>
<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.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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
<A HREF="#Sujets avances">Sujets avancés</A>.</P>
<H2><A NAME="ss2.2">2.2 Répertoires</A>
</H2>
<P>
<UL>
<LI> Les noms des répertoires sous VMS sont de la forme
<CODE>[père.rép.sousrép]</CODE>. L'équivalent sous Linux est :
<CODE>/père/rép/sousrép/</CODE>.
Le père de tous les répertoires est le répertoire racine appelé <CODE>/</CODE> ; il
contient d'autres répertoires comme <CODE>/bin</CODE>, <CODE>/usr</CODE>, <CODE>/tmp</CODE>,
<CODE>/etc</CODE>, et bien d'autres.
</LI>
<LI> Le répertoire <CODE>/home</CODE> contient les répertoires <I>home</I> (NDT :
« home » signifie « maison ») des
utilisateurs : par exemple, <CODE>/home/pierre</CODE>, <CODE>/home/paul</CODE> et ainsi
de suite. Quand un utilisateur se logue, il commence dans son répertoire
<I>home</I> ; c'est l'équivalent de <CODE>SYS$LOGIN</CODE>. Il y a un raccourci
pour le
répertoire <I>home</I> : le tilde (« <CODE>~</CODE> »). Ainsi, <CODE>cd
~/tmp</CODE> est équivalent à, disons, <CODE>cd /home/paul/tmp</CODE>.
</LI>
<LI> 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 <CODE>.</CODE> :
elle représente le répertoire lui-même (comme <CODE>[]</CODE>) ; l'autre, <CODE>..</CODE>,
représente le répertoire parent (comme <CODE>[-]</CODE>).
</LI>
</UL>
</P>
<P>Et maintenant quelques autres exemples :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Si vous voulez en savoir plus sur les
droits, les propriétaires, ou tout simplement en savoir plus tout court,
sautez à la section
<A HREF="#Sujets avances">Sujets avancés</A>.</P>
<H2><A NAME="ss2.3">2.3 Programmes</A>
</H2>
<P>
<UL>
<LI> Les commandes, les programmes compilés et les scripts <I>shell</I>
(équivalent
des fichiers de commandes de VMS) n'ont pas forcément une extension comme
<CODE>.EXE</CODE> or <CODE>.COM</CODE> et peuvent s'appeler comme bon vous semble. Les
fichiers exécutables sont marqués d'un astérisque (« <CODE>*</CODE> »)
lorsque
vous exécutez <CODE>ls -F</CODE>.
</LI>
<LI> Pour lancer un fichier exécutable, il suffit de taper son nom (pas de
<CODE>RUN</CODE>, ni de <CODE>PROGRAM.EXE</CODE>, ni encore de <CODE>@COMMAND</CODE>). Il est donc
nécessaire que le fichier soit situé dans un répertoire du <I>path</I>, qui est
une liste de répertoires. En général, le <I>path</I> contient des répertoires
comme
<CODE>/bin</CODE>, <CODE>/usr/bin</CODE>, <CODE>/usr/X11R6/bin</CODE>, etc. Si vous
écrivez vos propres programmes, placez-les dans un répertoire de votre
<I>path</I> (pour savoir comment, reportez-vous à la section
<A HREF="#Configurer">Configurer</A>). Vous pouvez aussi lancer un programme en indiquant son
chemin complet, par exemple <CODE>/home/paul/données/monprog</CODE> ou
<CODE>./monprog</CODE> si le répertoire courant n'est pas dans le <I>path</I>.
</LI>
<LI> Les options des commandes sont passées sur la ligne de commande grâce à
<CODE>OPTION=</CODE> sous VMS et grâce à <CODE>-</CODE><I>une_option</I> ou
<CODE>--</CODE><I>une_option</I> sous Linux, <I>une_option</I> étant une lettre,
différentes lettres combinées ou un
mot. En particulier, l'option <CODE>-R</CODE> (récursif) de plusieurs commandes de
Linux permet de faire la même chose que le <CODE>[...]</CODE> de VMS.
</LI>
<LI> Vous pouvez lancer plusieurs commandes sur la ligne de commande :
<BLOCKQUOTE><CODE>
<PRE>
$ commande1 ; commande2 ; ... ; commande
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> 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
<I>pipes</I>. (Pour être sincère, j'ai entendu que les versions récentes de IDL
supportent la redirection et les <I>pipes</I> mais je n'ai pas ces versions.) La
redirection sous VMS n'est qu'un effet de bord (souvenez vous de l'option
<CODE>/OUTPUT=</CODE>) ou une tâche fastidieuse comme
<BLOCKQUOTE><CODE>
<PRE>
$ DEFINE /USER SYS$OUTPUT OUT
$ DEFINE /USER SYS$INPUT IN
$ RUN PROG
</PRE>
</CODE></BLOCKQUOTE>
dont l'équivalent sous Linux (Unix) est simplement :
<BLOCKQUOTE><CODE>
<PRE>
$ prog < in > out
</PRE>
</CODE></BLOCKQUOTE>
Utiliser des <I>pipes</I> est tout simplement impossible sous VMS mais ils jouent
un rôle clé sous Unix. En voici un exemple typique :
<BLOCKQUOTE><CODE>
<PRE>
$ monprog < données | filtre1 | filtre2 >> résultat.dat 2> erreurs.log &
</PRE>
</CODE></BLOCKQUOTE>
Traduisons. Le programme <CODE>monprog</CODE> utilise le fichier <CODE>données</CODE> comme
entrée, sa sortie est canalisée (grâce à <CODE>|</CODE>) vers le programme
<CODE>filtre1</CODE> qui l'utilise en tant qu'entrée et la traite. La sortie résultante
est canalisée (<I>pipée</I>) vers <CODE>filtre2</CODE> pour être encore une fois traitée.
La sortie finale
est ajoutée (grâce à <CODE>>></CODE>) au fichier <CODE>résultat.dat</CODE>, et les
messages d'erreurs sont redirigés (grâce à <CODE>2></CODE>) vers le fichier
<CODE>errors.log</CODE>.
Tout ceci est exécuté en arrière-plan (grâce au <CODE>&</CODE> à la fin de la ligne
de commande). Pour en savoir plus à ce sujet, reportez-vous à la section
<A HREF="#Exemples">Exemples</A>.
</LI>
</UL>
</P>
<P>Pour le multitâche, les files, et tout ce qui s'y rapporte, reportez-vous à la
section
<A HREF="#Sujets avances">Sujets avancés</A>.</P>
<H2><A NAME="Visite guidee"></A> <A NAME="ss2.4">2.4 Visite guidée</A>
</H2>
<P>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 <CODE>pierre</CODE> et <CODE>Mon_Code</CODE>, ne tapez <I>pas</I> <CODE>Pierre</CODE> ou
<CODE>mon_code</CODE>.</P>
<P>Une fois que vous êtes logué, le prompt s'affiche. Il y a des chances
pour que se soit quelque chose du genre
<CODE>nom_de_la_machine:$</CODE>. Si vous voulez le changer ou lancer
des programmes automatiquement, vous devrez éditer le fichier caché
<CODE>.profile</CODE> ou <CODE>.bash_profile</CODE> (jetez un oeil aux
exemples dans la section
<A HREF="#Configurer">Configurer</A>). C'est l'équivalent de
<CODE>LOGIN.COM</CODE>.</P>
<P>Appuyer sur <SF>alt + F1</SF>, <SF>alt + F2</SF>, ..., <SF>alt + F6</SF> 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.</P>
<P>Maintenant, vous voulez peut-être lancer le <I>Système X Window</I> (que nous
appellerons maintenant X). X est un environnement graphique similaire
au DECWindows --- en fait, ce dernier dérive de X. Tapez la commande
<CODE>startx</CODE> et attendez quelques secondes ; vous verrez probablement
s'ouvrir un <CODE>xterm</CODE> 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.</P>
<P>Quand vous utilisez X, vous devez appuyez sur <SF>ctrl + alt + F1</SF>, ...,
<SF>ctrl + alt + F6</SF> pour accéder au mode texte (console). Essayez. Quand
vous êtes dans une console, vous pouvez revenir à X en appuyant sur
<SF>alt + F7</SF>. Pour quitter X, suivez les instructions de votre menu ou
appuyez sur <SF>ctrl + alt + backspace</SF>.</P>
<P>Tapez la commande suivante pour obtenir une liste du contenu du
répertoire courant (incluant les fichiers cachés) :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ls -al
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Appuyez sur <SF>shift + page up</SF> pour faire défiler l'écran vers le haut.
Maintenant, pour obtenir de l'aide sur la commande <CODE>ls</CODE> tapez</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ man ls
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Appuyez sur <CODE>q</CODE> pour quitter. Pour finir notre tour
d'horizon, tapez <CODE>exit</CODE> pour quitter votre session. Si maintenant
vous voulez éteindre votre PC, appuyez sur <SF>ctrl + alt + suppr</SF> et attendez
quelques secondes (n'éteignez <I>jamais</I> votre PC tant que Linux
tourne ; cela peut causer des dommages dans le système de fichier).</P>
<P>Si vous pensez que vous êtes prêt pour travailler, allez-y. Mais si
j'étais vous, je passerais d'abord par la section
<A HREF="#Sujets avances">Sujets avancés</A>.</P>
<H2><A NAME="Editer des fichiers"></A> <A NAME="s3">3. Éditer des fichiers</A></H2>
<P><CODE>EDT</CODE> 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 <CODE>vi</CODE> --- oubliez-le, votre administrateur en a sûrement
installé un meilleur. L'éditeur le plus populaire est probablement
<CODE>emacs</CODE>, qui peut émuler <CODE>EDT</CODE> jusqu'à un certain degré ;
<CODE>jed</CODE> est un autre éditeur qui permet l'émulation de <CODE>EDT</CODE>.</P>
<P>Ces deux éditeurs sont particulièrement utiles pour éditer des
sources de programmes puisque qu'ils ont deux fonctionnalités
inconnue de <CODE>EDT</CODE> : la coloration syntaxique et l'indentation
automatique. De plus, vous pouvez compilez vos programmes à partir de
l'éditeur (grâce à <SF>M-x compile</SF> 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 <CODE>EDT</CODE> après.</P>
<P>Si vous avez <CODE>emacs</CODE>, lancez-le. Tout d'abord vous devez comprendre le
système de notation de combinaison de touche d'<CODE>emacs</CODE>. <SF>C</SF> désigne
contrôle et <SF>M</SF> la touche méta (en général <SF>alt</SF> ou <SF>échap</SF>).
Maintenant, tapez
<SF>M-x edt-emultation-on</SF>. <SF>M-x</SF> permet de lancer des commandes avec
<CODE>emacs</CODE> comme <SF>ctrl + z</SF> avec <CODE>EDT</CODE>. À partir de maintenant,
<CODE>emacs</CODE> fait
comme s'il était <CODE>EDT</CODE> à part pour quelques commandes :</P>
<P>
<UL>
<LI> n'appuyez <I>pas</I> sur <SF>ctrl + z</SF> pour lancer une commande. Si vous
l'avez fait, vous avez stoppé emacs. Tapez <CODE>fg</CODE> pour reprendre
votre session emacs ;
</LI>
<LI> appuyez sur <SF>C-h ?</SF> pour obtenir de l'aide ou sur <SF>C-h t</SF>
pour lancer un tutoriel ;
</LI>
<LI> pour sauver un fichier, appuyez sur <SF>C-x C-s</SF> ;
</LI>
<LI> pour quittez, appuyez sur <SF>C-x C-c</SF> ;
</LI>
<LI> pour insérez un nouveau fichier dans un buffer (pour ouvrir un
fichier, en gros), appuyez sur <SF>C-x C-f</SF>, et ensuite <SF>C-x b</SF> pour
changer de buffer.
</LI>
</UL>
</P>
<P>Si vous avez <CODE>jed</CODE>, 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 <CODE>EDT</CODE> et appuyez sur
<SF>échap ? h</SF> pour obtenir l'aide. Les commandes
sont lancées de la même manière que dans <CODE>emacs</CODE>. De plus, il y a quelques
raccourcis pratiques faisant défaut à <CODE>EDT</CODE> ; vous pouvez en plus
configurer ces raccourcis clavier. Demandez à votre administrateur.</P>
<P>Vous pouvez aussi utilisez un autre éditeur avec une interface
complètement différente. <CODE>emacs</CODE> en mode natif est un choix
courant. Un autre éditeur populaire est <CODE>joe</CODE> 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 <CODE>jmacs</CODE> ou
<CODE>jstar</CODE> et appuyez respectivement sur <SF>ctrl + x h</SF> ou <SF>ctrl + j</SF> pour
obtenir l'aide en ligne. <CODE>emacs</CODE> et <CODE>jed</CODE> sont <I>beaucoup</I>
plus puissants que ce bon vieux <CODE>EDT</CODE>.</P>
<H2><A NAME="TeXer"></A> <A NAME="s4">4. TeXer </A></H2>
<P>TeX et LaTeX sont identiques à leurs homologues de VMS --- seulement plus
rapides :-), mais les outils pour manipuler les fichiers <CODE>.dvi</CODE> et <CODE>.ps</CODE>
sont bien supérieurs : </P>
<P>
<UL>
<LI> Pour compiler un fichier TeX faites comme d'habitude <CODE>tex file.tex</CODE>.
</LI>
<LI> Pour convertir un fichier <CODE>.dvi</CODE> en <CODE>.ps</CODE>, tapez <CODE>dvips -o
fichier.ps fichier.dvi</CODE>.
</LI>
<LI> Pour visualiser un fichier <CODE>.dvi</CODE>, tapez lors d'une session X
<CODE>xdvi fichier.dvi &</CODE>. Cliquez sur la page pour zoomer. Ce programme est
intelligent : si vous éditez et lancez TeX pour produire une nouvelle version
de votre fichier <CODE>.dvi</CODE>, <CODE>xdvi</CODE> actualisera l'affichage.
</LI>
<LI> Pour visualiser un fichier <CODE>.ps</CODE>, taper lors d'une session X
<CODE>ghostview fichier.ps &</CODE>. 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 : <CODE>gv</CODE> ;
</LI>
<LI> Pour imprimer un fichier <CODE>.ps</CODE> on utilise généralement la commande
<CODE>lpr fichier.ps</CODE>. Cependant si l'imprimante postscript s'appelle, par
exemple, « ps » (demandez à votre administrateur système), il
faudra faire <CODE>lrp -Pps fichier.ps</CODE>. Pour plus d'informations au sujet des
files d'impressions, allez à la section
<A HREF="#Files d'impressions">Files d'impressions</A>.
</LI>
</UL>
</P>
<H2><A NAME="Programmer"></A> <A NAME="s5">5. Programmer</A></H2>
<P>Programmer sous Linux est <I>beaucoup</I> 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 <CODE>emacs</CODE> ou <CODE>jed</CODE>, comme nous l'avons vu au dessus.</P>
<H2><A NAME="ss5.1">5.1 Fortran</A>
</H2>
<P>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 à <CODE>/usr/doc/g77/DOC</CODE> ou
<CODE>/usr/doc/f2c/d2c.ps</CODE> pour plus de détails.</P>
<P>Votre administrateur a sans doute installé soit le compilateur natif <CODE>g77</CODE>
(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, <CODE>f2c</CODE>, et un
des ses front-ends qui font de lui une imitation de compilateur natif. D'après
mon expérience, le paquetage <CODE>yaf77</CODE> est celui qui donne les meilleurs
résultats.</P>
<P>Pour compiler un source en Fortran avec <CODE>g77</CODE>, éditez le et sauvez le avec
l'extension <CODE>.f</CODE>, et faites</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ g77 monprog.f
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Cela va créer par défaut un exécutable appelé <CODE>a.out</CODE> (vous n'avez pas à
effectuer les liens). Pour donner à l'exécutable un nom différent et faire
quelques optimisations :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ g77 -O2 -o monprog monprog.f
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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. </P>
<P>Pour compiler une sous-routine :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ g77 -c masub.f
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Un fichier <CODE>masub.o</CODE> sera créé. Pour lier cette sous-routine à un
programme, vous devrez faire</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ g77 -o monprog monprog.f masub.o
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Si vous avez plusieurs sous-routines externes et que vous voulez créer une
bibliothèque, faites</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ cd sousroutines/
$ cat *f > mabib.f ; g77 -c mabib.f
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Le fichier <CODE>mabib.o</CODE> créé pourra alors être lié à vos programmes.</P>
<P>Pour finir, pour lier une bibliothèque externe appelée, disons,
<CODE>liblambda.so</CODE> , utilisez</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ g77 -o monprog monprog.f -llambda
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Si vous avez <CODE>f2c</CODE>, vous n'aurez qu'à utiliser <CODE>f77</CODE> ou <CODE>fort77</CODE>
à la place de <CODE>g77</CODE>.</P>
<P>Un autre outil de programmation utile est <CODE>make</CODE>. Il est décrit ci-dessous.</P>
<H2><A NAME="ss5.2">5.2 Utiliser <CODE>make</CODE></A>
</H2>
<P><CODE>make</CODE> est un outil pour gérer la compilation de programmes divisés en
plusieurs fichiers sources.</P>
<P>Supposons que vous ayez des fichiers sources contenant vos routines appelés
<CODE>fichier_1.f, fichier_2.f et fichier_3.f</CODE>, et un fichier source
principal qui utilise ces routines appelé <CODE>monprog.f</CODE>. 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.</P>
<P>Plutôt que de devenir fou, je vous propose d'écrire un <I>makefile</I>. 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.</P>
<P>Dans notre cas, le <I>makefile</I> ressemblerait à ceci :</P>
<P>
<HR>
<PRE>
# 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
</PRE>
<HR>
</P>
<P>Enregistrez ce fichier sous le nom <CODE>Makefile</CODE> et tapez <CODE>make</CODE> pour
compiler votre
programme. Vous pouvez aussi l'appeler <CODE>monprog.mak</CODE> et taper <CODE>make -f
monprog.mak</CODE>. Et bien sûr, si vous voulez en savoir plus : <CODE>info make</CODE>.</P>
<H2><A NAME="ss5.3">5.3 Scripts <I>shell</I></A>
</H2>
<P>Les scripts <I>shell</I> sont les équivalents des fichiers de commandes de VMS
et, pour changer, sont beaucoup plus puissants.</P>
<P>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
(<CODE>chmod +x fichier</CODE>). Pour le lancer, tapez son nom (précédé de <CODE>./</CODE>
s'il n'est pas dans le <I>path</I>).</P>
<P>Écrire des scripts avec <CODE>bash</CODE> 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. </P>
<P>
<HR>
<PRE>
#!/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."
</PRE>
<HR>
</P>
<H2><A NAME="C"></A> <A NAME="ss5.4">5.4 C </A>
</H2>
<P>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 <CODE>hello.c</CODE> vous utiliserez le compilateur <CODE>gcc</CODE>, qui
est standard dans le monde de Linux et qui a la même syntaxe que <CODE>g77</CODE> :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -O2 -o hello hello.c
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour lier une bibliothèque à un programme, ajoutez l'option
<CODE>-lbibliothèque</CODE>.
Par exemple pour lier la bibliothèque math et optimiser faites</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -O2 -o mathprog mathprog.c -lm
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>(L'option <CODE>-lbibliothèque</CODE> force <CODE>gcc</CODE> à lier la bibliothèque
<CODE>/usr/lib/libbibliothèque.a</CODE> ; ainsi <CODE>-lm</CODE> lie <CODE>/usr/lib/libm.a</CODE>.)</P>
<P>Quand votre programme est divisé en plusieurs fichiers sources, vous aurez
besoin
du programme <CODE>make</CODE> décrit juste au dessus.</P>
<P>Vous pouvez obtenir de l'aide sur quelques fonctions de la libc dans la
section 3 des pages man. Par exemple :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ man 3 printf
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Il existe beaucoup de bibliothèques disponible. Parmi les premières que vous
voudrez
probablement utiliser, il y a <CODE>ncurses</CODE>, qui permet de gérer quelques effets
du mode texte et <CODE>svgalib</CODE> pour faire du graphisme.</P>
<H2><A NAME="Graphiques"></A> <A NAME="s6">6. Graphiques </A></H2>
<P>Parmi la masse de paquetages de graphiques disponibles, <CODE>gnuplot</CODE> sort du
lot
pour sa puissance et sa facilité d'utilisation. Créez tout d'abord deux
fichiers de données : <CODE>2D-data.dat</CODE> (deux données par ligne) et
<CODE>3D-data.dat</CODE> (trois par ligne). Puis, sous X, lancez <CODE>gnuplot</CODE>.</P>
<P>Exemple d'un graphe en 2D :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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'
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Exemple d'un graphe en 3D (chaque « ligne » de <I>x</I> valeurs est suivie
d'une ligne vide) :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
gnuplot> set parametric ; set hidden3d ; set contour
gnuplot> splot '3D-data.dat' using 1:2:3 with linespoints
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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 :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
gnuplot> plot [-5:15] '2D-data-1col.dat' with linespoints
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>ou en 3D (avec des lignes vides dans le fichier comme au dessus) :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
gnuplot> set noparametric ; set hidden3d
gnuplot> splot '3D-data-1col.dat' using 1 with linespoints
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour imprimez un graphe, si la commande pour imprimer sur votre imprimante
postscript est <CODE>lpr -Pps fichier.ps</CODE>, faites</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
gnuplot> set term post
gnuplot> set out '| lpr -Pps'
gnuplot> replot
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Tapez ensuite <CODE>set term x11</CODE> pour réafficher sur votre serveur X. Ne soyez
pas déconcerté : la dernière impression se lancera seulement quand vous
quitterez <CODE>gnuplot</CODE>.</P>
<P>Pour plus d'informations, tapez <CODE>help</CODE> ou regardez le répertoire des exemples
(<CODE>/usr/lib/gnuplot/demos/</CODE>) s'il existe.</P>
<H2><A NAME="Mail et Outils pour Internet"></A> <A NAME="s7">7. Mail et outils pour Internet</A></H2>
<P>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 :</P>
<P>
<UL>
<LI> Mail : utilisez <CODE>elm</CODE> ou <CODE>pine</CODE> (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 <CODE>mail</CODE> (<CODE>mail
-s "Salut" utilisateur@quelquepart < msg.txt</CODE>). Vous préférez peut-être d'autres
programmes comme <CODE>xmail</CODE> ou équivalent.
</LI>
<LI> Newsgroups : utilisez <CODE>tin</CODE> ou <CODE>slrn</CODE>. Ils sont tous les deux
très intuitifs.
</LI>
<LI> FTP : en plus de l'inévitable <CODE>ftp</CODE>, demandez à votre
administrateur d'installer l'excellent <CODE>ncftp</CODE> ou un même un client
graphique comme <CODE>xftp</CODE>.
</LI>
<LI> WWW : <CODE>netscape</CODE>, <CODE>xmosaic</CODE>, <CODE>chimera</CODE> et <CODE>arena</CODE> sont
des browsers graphiques ; <CODE>lynx</CODE> quant à lui utilise la console et est
rapide et pratique.
</LI>
</UL>
</P>
<H2><A NAME="Sujets avances"></A> <A NAME="s8">8. Sujets avancés </A></H2>
<P>Là, le jeu devient coriace. Apprenez ça, et ensuite vous pourrez dire que
vous « connaissez quelque chose à Linux » ;-)</P>
<H2><A NAME="Droits et propriete"></A> <A NAME="ss8.1">8.1 Droits et propriété </A>
</H2>
<P>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 :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Le premier champ indique les droits du fichier <CODE>ls</CODE>. 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.</P>
<P>De gauche à droite, <CODE>-</CODE> est le type du fichier (<CODE>-</CODE> désigne un fichier
ordinaire,
<CODE>d</CODE> un répertoire, <CODE>l</CODE> un lien, etc.) ; <CODE>rwx</CODE> sont les droits du
propriétaire (lecture, écriture, exécution) ; <CODE>r-x</CODE> sont les droits du
groupe du propriétaire (lecture, exécution) ; <CODE>r-x</CODE> sont les droits pour
tous les autres utilisateurs (lecture, écriture).</P>
<P>Pour changer les droits d'un fichier :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod <quiXdroit> <fichier>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Avec <I>qui</I> représentant <CODE>u</CODE> (ce sont alors les droits du propriétaire
qui sont affectés), <CODE>g</CODE> (ceux du groupe) ou <CODE>o</CODE> (ceux des « autres
»). X est soit <CODE>+</CODE> (dans ce cas il donne les droits), soit <CODE>-</CODE> (il
les enlève). Et <I>droit</I> est <CODE>r</CODE>, <CODE>w</CODE> ou <CODE>x</CODE>. Voici un exemple :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod u+x fichier
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Cela permet de rendre le fichier exécutable pour le propriétaire. Il existe un
petit raccourci <CODE>chmod +x fichier</CODE>.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod go-wx fichier
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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).</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chmod ugo+rwx fichier
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Tous les droits sont donnés à tout le monde.</P>
<P>Une manière plus courte de préciser les droits se base sur les nombres :
<CODE>rwxr-xr-x</CODE> peut être exprimé par 755 (chaque lettre correspond à un bit :
<CODE>---</CODE> vaut 0, <CODE>--x</CODE> 1, <CODE>-w-</CODE> 2, etc).</P>
<P>Pour un répertoire, <CODE>rx</CODE> signifie que vous pouvez vous placer dans ce
répertoire et <CODE>w</CODE> 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.</P>
<P>Pour changer le propriétaire d'un fichier :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ chown <utilisateur> <fichier>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour résumer, voici un tableau :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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/
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="Multitache"></A> <A NAME="ss8.2">8.2 Multitâche : processus et tâches (<I>jobs</I>) </A>
</H2>
<P>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 : </P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ commande -s1 -s2 ... -sn par1 par2 ... parn < entrée > sortie &
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Maintenant, voyons comment marche le multitâche. Les programmes qui tournent en
avant-plan (<I>foreground</I>) ou arrière-plan (<I>background</I>) sont appelés des
processus. </P>
<P>
<UL>
<LI> Pour lancer un processus en arrière plan :
<BLOCKQUOTE><CODE>
<PRE>
$ programme [option] [< entrée] [> sortie] &
[1] 234
</PRE>
</CODE></BLOCKQUOTE>
Le shell vous donne le numéro de <I>job</I> (le premier nombre ; regardez
ci-dessus) et le PID (le numéro du processus). Chaque processus est identifié
par son PID.
Pour voir combien de processus sont lancés :
<BLOCKQUOTE><CODE>
<PRE>
$ ps -ax
</PRE>
</CODE></BLOCKQUOTE>
La liste des processus actifs va être affichée.
</LI>
<LI> Pour tuer un processus :
<BLOCKQUOTE><CODE>
<PRE>
$ kill <PID>
</PRE>
</CODE></BLOCKQUOTE>
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 :
<BLOCKQUOTE><CODE>
<PRE>
$ kill -15 <PID>
$ kill -9 <PID>
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
</P>
<P>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 <CODE>jobs</CODE>.</P>
<P>
<UL>
<LI> Pour voir combien de <I>jobs</I> sont actifs :
<BLOCKQUOTE><CODE>
<PRE>
$ jobs
</PRE>
</CODE></BLOCKQUOTE>
Les <I>jobs</I> sont identifés par le nombre que le shell leur donne et non pas
par leur PID.
</LI>
<LI> Pour stopper un processus qui tourne en avant-plan appuyez sur
<SF>ctrl + c</SF>. (Ça ne marche pas toujours.)
</LI>
<LI> Pour suspendre un processus tournant en avant-plan appuyez sur
<SF>ctrl + z</SF> (Idem.)
</LI>
<LI> Pour envoyer un processus suspendu en arrière-plan (qui devient alors un
<I>job</I>) :
<BLOCKQUOTE><CODE>
<PRE>
$ bg <job>
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Pour envoyer un <I>job</I> en avant-plan :
<BLOCKQUOTE><CODE>
<PRE>
$ fg <job>
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Pour tuer un <I>job</I> :
<BLOCKQUOTE><CODE>
<PRE>
$ kill %<job>
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
</P>
<H2><A NAME="ss8.3">8.3 Fichiers, deuxième</A>
</H2>
<P>Voici plus d'information sur les fichiers.</P>
<P>
<UL>
<LI> <I>stdin</I>, <I>stdout</I> et <I>stderr</I> : 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é <I>stdin</I>
(l'entrée standard : généralement le clavier), redirigent leur sortie vers un
« fichier » appelé <I>stdout</I> (généralement l'écran) et leurs
erreurs vers un « fichier » appelé <I>stderr</I> (généralement
l'écran).
En utilisant <CODE><</CODE> et <CODE>></CODE> vous redirigez l'entrée et la sortie vers
un fichier différent. De plus, <CODE>>></CODE> ajoute la sortie à un fichier à la
place de l'écraser ; <CODE>2></CODE> redirige les messages d'erreur (<I>stderr</I>) ;
2>&1 redirige <I>stderr</I> vers <I>stdout</I>, alors que 1>&2
redirige <I>stdout</I> vers <I>stderr</I>. Il y a un « trou noir » appelé <CODE>/dev/null</CODE> : tout ce qui est redirigez vers lui disparaît.
</LI>
<LI> Jokers/ : sur la ligne de commande <CODE>*</CODE> correspond à (et désigne) tous
les fichiers sauf ceux qui sont cachés ; <CODE>.*</CODE> correspond à tous les fichiers
cachés ; <CODE>*.*</CODE> correspond seulement ceux qui ont un « . » au
milieu de leur nom suivi par d'autres caractères ; <CODE>l*c</CODE> correspondra à
« loïc » et « luc » ; <CODE>*c*</CODE> correspondra à
« piocher » et « picorer ». <CODE>%</CODE> devient <CODE>?</CODE>.
Il existe également un autre joker : <CODE>[]</CODE>. Par exemple :
<CODE>[abc]*</CODE> désigne les fichiers commençant par a, b ou c ;
<CODE>*[I-N123]</CODE> désigne les fichier finissant par I, J, K, L, M, N, 1, 2 ou 3.
</LI>
<LI><CODE>mv</CODE> (<CODE>RENAME</CODE>) ne permet pas de renommer plusieurs fichiers d'un
coup. Ainsi, <CODE>mv *.xxx *.yyy</CODE> ne marchera pas.
</LI>
<LI> Utilisez <CODE>cp -i</CODE> et <CODE>mv -i</CODE> pour être prévenu quand
un fichier va être écrasé.
</LI>
</UL>
</P>
<H2><A NAME="Files d'impressions"></A> <A NAME="ss8.4">8.4 Files d'impression </A>
</H2>
<P>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</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ 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 »
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour gérer la file d'impression utilisez les commandes suivantes :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="Configurer"></A> <A NAME="s9">9. Configurer </A></H2>
<P>Votre administrateur système a dû vous fournir certains fichier de
configuration comme <CODE>.xinitrc</CODE>, <CODE>.bash_profile</CODE> et <CODE>.inputrc</CODE>. Ceux
que vous voudrez peut-être modifier sont : </P>
<P>
<UL>
<LI> <CODE>.bash_profile</CODE> ou <CODE>.profile</CODE> : ce fichier est lu par le shell au
moment du login. C'est l'équivalent de <CODE>LOGIN.COM</CODE>.
</LI>
<LI> <CODE>.bash_logout</CODE> : celui-ci est lu en fin de session. C'est
l'équivalent
de <CODE>LOGOUT.COM</CODE>.
</LI>
<LI> <CODE>.bashrc</CODE> : il est lu par les shells non interactifs
</LI>
<LI> <CODE>.inputrc</CODE> : ce fichier configure les rôles des touches du
clavier et le comportement du shell.
</LI>
</UL>
</P>
<P>Pour vous donner un exemple, j'ai inclus une partie mon <CODE>.bash_profile</CODE> :</P>
<P>
<HR>
<PRE>
# $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}
}
</PRE>
<HR>
</P>
<P>Et voici mon <CODE>.inputrc</CODE> :</P>
<P>
<HR>
<PRE>
# $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 "
</PRE>
<HR>
</P>
<H2><A NAME="Programmes utiles"></A> <A NAME="s10">10. Programmes utiles</A></H2>
<H2><A NAME="ss10.1">10.1 Visionneur de fichiers : <CODE>less</CODE></A>
</H2>
<P>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 <CODE>less</CODE> pour qu'il puisse afficher non seulement
des fichiers textes mais aussi les fichiers compressés, les archives, etc.</P>
<P>Comme les dernières versions de <CODE>TYPE</CODE>, <CODE>less</CODE> 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 :</P>
<P>
<UL>
<LI> tout d'abord, appuyez sur <SF>q</SF> pour quitter ;
</LI>
<LI> <SF>h</SF> pour obtenir l'aide ;
</LI>
<LI> <SF>g</SF> pour aller au début du fichier, <SF>G</SF> à la fin, un nombre suivi
de <CODE>g</CODE> pour aller à cette ligne (par exemple <CODE>125g</CODE>), un nombre suivi
de <CODE>%</CODE> pour aller à ce pourcentage du fichier ;
</LI>
<LI> <CODE>/motif</CODE> recherche vers l'avant le motif ; <CODE>n</CODE> recherche vers
l'avant la l'occurrence suivante ; <CODE>?pattern</CODE> et <CODE>N</CODE> font la même chose
vers l'arrière ;
</LI>
<LI> <CODE>m</CODE> suivi d'une lettre marque la position courante (par exemple
<CODE>ma</CODE>) ;
<CODE>'</CODE> suivi de la même lettre rappelle cette position ;
</LI>
<LI> <CODE>:e</CODE> ouvre un autre fichier ;
</LI>
<LI> <CODE>!commande</CODE> exécute un shell.
</LI>
</UL>
</P>
<H2><A NAME="Numeros de version sous Linux"></A> <A NAME="ss10.2">10.2 Numéros de version sous Linux</A>
</H2>
<P>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 <I>Le mini-Howto
RCS</I>.</P>
<P>La seconde est d'utiliser un éditeur qui sait traiter les numéros de version.
<CODE>emacs</CODE> ou <CODE>joe</CODE> feront l'affaire. Pour emacs, ajoutez ces lignes dans
votre <CODE>.emacs</CODE>.</P>
<P>
<HR>
<PRE>
(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)
</PRE>
<HR>
</P>
<P>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 <CODE>
<A HREF="http://ibogeo.df.unibo.it/guido/slang/backups.sl">http://ibogeo.df.unibo.it/guido/slang/backups.sl</A></CODE> </P>
<H2><A NAME="ss10.3">10.3 Archiver : tar et gzip</A>
</H2>
<P>Sous Unix il existe quelques applications très répandues qui sont utilisés pour
archiver et compresser des fichiers. <CODE>tar</CODE> est utilisé pour faire des
archives (c'est à dire un regroupement de fichiers). Pour faire une
archive :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ tar -cvf <archive.tar> <fichier> [fichier...]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour extraire des fichiers d'une archive :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ tar -xpvf <archive.tar> [fichier...]
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour lister le contenu d'une archive :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ tar -tf <archive.tar> | less
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Les fichiers peuvent être compressés en utilisant <CODE>compress</CODE> ou <CODE>gzip</CODE>.
<CODE>compress</CODE> est aujourd'hui obsolète et on n'utilise plus que <CODE>gzip</CODE>.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ compress <fichier>
$ gzip <fichier>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Ceci créera un fichier compressé avec l'extension .Z (pour <CODE>compress</CODE>)
ou .gz (pour <CODE>gzip</CODE>). Ces programmes ne font pas d'archives mais compressent
des fichiers individuellement. Pour décompresser utilisez</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ compress -d <fichier.Z>
$ gzip -d <fichier.gz>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Faites un tour du côté de leurs pages man.</P>
<P>Les utilitaires <CODE>unarj</CODE>, <CODE>zip</CODE> et <CODE>unzip</CODE> sont aussi disponibles. </P>
<P>Les fichier avec l'extension <CODE>.tar.gz</CODE> ou <CODE>.tgz</CODE> (archivés par <CODE>tar</CODE>,
puis compressés par <CODE>gzip</CODE>) sont
très communs dans le monde Unix. Voici comment lister le contenu d'une telle
archive :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ tar -ztf <fichier.tar.gz> | less
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour extraire les fichiers à partir d'un <CODE>.tar.gz</CODE> :</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ tar -zxf <fichier.tar.gz>
</PRE>
</CODE></BLOCKQUOTE>
</P>
<H2><A NAME="Exemples"></A> <A NAME="s11">11. Exemples du monde réel </A></H2>
<P>Le principe central d'Unix est qu'il existe plusieurs commandes simples qui
peuvent être liées ensemble grâce aux <I>pipes</I> 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).</P>
<P>
<UL>
<LI><CODE>ls</CODE> est trop rapide et je ne peux pas lire le nom de tous
les fichiers.
<BLOCKQUOTE><CODE>
<PRE>
$ ls | less
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> J'ai un fichier qui contient une liste de mots. Je veux les
trier dans l'ordre inverse et les imprimer.
<BLOCKQUOTE><CODE>
<PRE>
$ cat fichier.txt | sort -r | lpr
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Mon fichier de données contient des doublons. Comment les
effacer ?
<BLOCKQUOTE><CODE>
<PRE>
$ sort fichier.dat | uniq > nouveaufichier.dat
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> 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 ?
<BLOCKQUOTE><CODE>
<PRE>
$ find ~ -name "papier*"
</PRE>
</CODE></BLOCKQUOTE>
Expliquons. <CODE>find</CODE> est une commande très utile qui liste tous les fichier
dans une arborescence (qui commence à partir du répertoire <I>home</I> dans ce
cas). Sa sortie peut-être filtrée selon plusieurs critères comme par exemple
<CODE>-name</CODE>.
</LI>
<LI> J'ai un fichier texte qui contient le mot « entropie » dans
ce répertoire. Existe-t-il quelque chose de comparable à
<CODE>SEARCH</CODE> ?
Bien sûr, essayez cela :
<BLOCKQUOTE><CODE>
<PRE>
$ grep -l 'entropie' *
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Quelque part, j'ai un fichier texte qui contient le mot
« entropy » et j'aimerai le retrouver. Sous VMS j'aurais utilisé
<CODE>search entropy [...]*.*.*</CODE>, mais <CODE>grep</CODE> n'est pas récursif.
<BLOCKQUOTE><CODE>
<PRE>
$ find . -exec grep -l "entropy" {} \; 2> /dev/null
</PRE>
</CODE></BLOCKQUOTE>
<CODE>find .</CODE> sort tous les noms des fichiers à partir du
répertoire courant, <CODE>-exec grep -l "entropy"</CODE> lance une commande sur chacun
des fichiers (représentés par <CODE>{}</CODE>), <CODE>\</CODE> termine la
commande). Si vous pensez que la syntaxe est horrible... vous avez raison :-)
Vous auriez aussi pu écrire le script suivant :
<HR>
<PRE>
#!/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
</PRE>
<HR>
Voici l'explication. <CODE>grep</CODE> marche comme <CODE>SEARCH</CODE> et combiné avec
<CODE>find</CODE> nous obtenons le meilleur des deux mondes.
</LI>
<LI> J'ai un fichier qui a deux lignes d'en-tête et qui a ensuite <I>n</I>
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 :
<BLOCKQUOTE><CODE>
<PRE>
$ awk 'NL > 2 {print $2, "\t", $5}' fichier.dat > nouveaufichier.dat
</PRE>
</CODE></BLOCKQUOTE>
<CODE>awk</CODE> est en fait un langage de programmation. Pour chaque ligne à partir 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.
</LI>
<LI> J'ai téléchargé le <CODE>ls-lR.gz</CODE> d'un FTP. Pour chaque sous
répertoire, il y a une ligne « total <I>x</I> », avec <I>x</I> la
taille en Kilo-octets du répertoire. J'aimerais avoir le total de toutes ces
valeurs.
<BLOCKQUOTE><CODE>
<PRE>
zcat ls-lR.gz | awk ' $1 == "total" { i += $2 } END {print i}'
</PRE>
</CODE></BLOCKQUOTE>
<CODE>zcat</CODE> sort le contenu du fichier <CODE>.gz</CODE>. La sortie est envoyée
vers awk dont je vous recommande chaudement de lire la page man.
</LI>
<LI> J'ai écrit un programme en Fortran, <CODE>monprog</CODE>, 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 :
<HR>
<PRE>
#!/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
</PRE>
<HR>
</LI>
<LI> Je veux remplacer « géologie » par
« géophysique » dans tous mes fichiers textes. Dois-je les éditer
manuellement ?
Nan. Écrivez ce script :
<HR>
<PRE>
#!/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
</PRE>
<HR>
</LI>
<LI> 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 :
<HR>
<PRE>
#!/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
</PRE>
<HR>
NDT : il est tout de même beaucoup plus élégant d'utiliser <CODE>ed</CODE> :
<HR>
<PRE>
#!/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
</PRE>
<HR>
</LI>
</UL>
</P>
<P>J'espère que ces exemples vous auront ouvert l'appétit.</P>
<H2><A NAME="s12">12. Astuces dont on ne peut se passer</A></H2>
<P>
<UL>
<LI> 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 <CODE>less un_nom_de_fichier_très_long</CODE>. Il vous suffira
de taper <CODE>less un</CODE> 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é).
</LI>
<LI> 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).
</LI>
<LI> Rétablir l'écran : s'il vous arrive de faire un <CODE>more</CODE> ou un
<CODE>cat</CODE> sur un fichier binaire votre écran pourra se retrouver plein de
symboles bizarres. Pour arranger les choses, à l'aveuglette tapez
<CODE>reset</CODE> ou cette séquence de caractères : <CODE>echo ctrl-v Echap c Entrée</CODE>.
</LI>
<LI> Copier du texte sur la console : demandez à votre administrateur
d'installer <CODE>gpm</CODE>, 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.
</LI>
<LI> Copier du texte sous X : cliquez et glissez pour sélectionnez le texte
dans un <CODE>xterm</CODE> et cliquez ensuite sur le bouton du milieu (ou les deux
boutons) pour coller.
</LI>
</UL>
</P>
<H2><A NAME="s13">13. Lire des bandes VMS depuis Linux</A></H2>
<P>(Cette section a été écrite par Mike Miller)</P>
<H2><A NAME="ss13.1">13.1 Introduction</A>
</H2>
<P>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.</P>
<P>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 <CODE>mt</CODE> pour spécifier le nom du périphérique (par exemple, <CODE>mt
-f</CODE> avec Linux et <CODE>mt -t</CODE> sur HPUX 9).</P>
<P>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. </P>
<H2><A NAME="ss13.2">13.2 Les bases</A>
</H2>
<P>Pour lire une bande qui a été écrite avec la commande <CODE>copy</CODE> 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 <CODE>mt</CODE>.</P>
<P>Prenons un exemple. J'ai une bande VMS. Les deux premiers de ses fichiers
étaient appelés <CODE>ce66-2.evt</CODE> et <CODE>ce66-3.evt</CODE> sur le système VMS. Le label
de la bande est c66a2.</P>
<P>Si j'exécute les commandes suivantes</P>
<P>
<HR>
<PRE>
$ 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
</PRE>
<HR>
</P>
<P>je me retrouve avec six fichiers : <CODE>entête1</CODE>, <CODE>donnée1</CODE>,
<CODE>terminaison1</CODE>, <CODE>entête2</CODE>, <CODE>donnée2</CODE> et <CODE>terminaison2</CODE>. La syntaxe
ici est <CODE>if="fichier d'entrée"</CODE>, <CODE>bs="taille des blocs"</CODE> et
<CODE>of="fichier de sortie"</CODE>. 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. </P>
<P>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 : </P>
<P>
<HR>
<PRE>
$ mt -f $TAPE fsf 4
$ dd if=$TAPE bs=16k of=ce66-2.evt
$ mt -f $TAPE fsf 1
</PRE>
<HR>
</P>
<P>Notez le 4. Il permet de sauter trois fichiers pour le premier fichier et un
pour l'entête du deuxième. Le second <CODE>mt</CODE> saute la seconde terminaison et
positionne la bande au début du prochain fichier : la troisième entête. Vous
pouvez aussi utilisez <CODE>mt</CODE> pour sauter des fichiers en arrière (<CODE>bsf</CODE>),
rembobiner (<CODE>rewind</CODE>) ou décharger la bande (<CODE>offline</CODE>, <CODE>rewoffl</CODE>).</P>
<H2><A NAME="ss13.3">13.3 Quelques détails</A>
</H2>
<P>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.</P>
<P>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 <CODE>entête1</CODE> 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. </P>
<P>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. </P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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 :-).</P>
<H2><A NAME="ss13.4">13.4 Commentaires sur la taille des blocks</A>
</H2>
<P>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 <CODE>mt -f $TAPE setblk 0</CODE>. La
syntaxe exacte de l'option setblk (et sa disponibilité) dépend de la version de
<CODE>mt</CODE>, de l'interface matérielle de votre lecteur de bande et de votre
environnement Unix.</P>
<P>(Merci à
<A HREF="skulski@nsrlc6.nsrl.rochester.edu">Wojtek Skulski</A> pour avoir signalé l'option setblk.)</P>
<H2><A NAME="s14">14. La fin</A></H2>
<H2><A NAME="ss14.1">14.1 Copyright</A>
</H2>
<P>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.</P>
<P>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. </P>
<P>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.</P>
<P>Pour toute question plus générale, merci de contacter le coordinateur
des HOWTO, Guylhem Aznar, à l'adresse électronique
<A HREF="mailto:linux-howto@sunsite.unc.edu">linux-howto@sunsite.unc.edu</A> par email. </P>
<H2><A NAME="ss14.2">14.2 Avertissement</A>
</H2>
<P>Ce travail a été écrit d'après l'expérience que nous avons eue au <I>Settore
di Geofisica of Bologna University</I> (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.</P>
<P>Le <I>HOWTO Comment migrer de VMS à Linux</I> a été écrit par
<A HREF="mailto:guido@ibogeo.df.unibo.it">Guido Gonzato</A> et
<A HREF="mailto:miller5@uiuc.edu">Mike Miller</A> 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.</P>
<P>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.</P>
<P>Amusez-vous bien,</P>
<P>Guido <CODE>=8-)</CODE></P>
</BODY>
</HTML>
|