But de ce tutorial
Nous allons nous initier aux réseaux, qui sont la principale raison d'être des systèmes Unix à l'heure actuelle. Nous verrons les principes fondamentaux, les informations sur des machines distantes, les moyens de s'y connecter et de parler avec des utilisateurs.
Enfin, nous apporterons un complément par rapport au tutorial précédent sur les liens de fichiers, l'archivage et la compression.
hostname, host, nslookup, dig, ping, traceroute, finger, ssh, write, talk, wall, mesg, ln, readlink, tar, compress, uncompress. Soit 12 commandes pour les réseaux et 5 pour les fichiers.
a) Notions élémentaires de réseau
>> vers le sommaire
Les réseaux sont actuellement la principale force des systèmes
de type Unix. Le principe de base dans les réseaux est la hiérarchisation
; prenons l'exemple d'une entreprise. Vous travaillez dans le département
de chimie, votre ordinateur dépend d'un central nommé le "routeur"
; il permet par exemple aux machines du département de communiquer
entre elles et d'accéder à internet. Cependant, il n'accède
pas directement à internet : le routeur du département de chimie
est connecté au routeur de l'entreprise qui, lui, possède l'accès.
Ainsi, retenez que dans les réseaux, une machine fait partie d'un ensemble et les connexions sont assurées à travers des routeurs. Si vous voulez vous connecter au site www.aqualonne.fr.st, votre ordinateur passera par le routeur de département de chimie, qui passera par le routeur de l'entreprise, qui passera par différents routeurs (on parle de relais) jusqu'à arriver à sa cible. Ces routeurs peuvent se trouver n'importe où, par exemple à Paris, Londres, New York, Aubervilliers...
Le premier problème qui se pose est l'identification d'une machine sur un réseau. Implicitement, lorsque vous souhaitez vous connecter à un site, vous demandez la connexion à une machine bien précise ; comment la repérer ? Toutes les machines qui circulent sur Internet ont des adresses respectant le protocole IP.
Celui-ci définit cinq types (classes) d'adresses
:
- Classe A. Pour les très gros réseaux.
- Classe B. Pour les réseaux de moyenne taille.
- Classe C. Pour les réseaux de petite taille.
- Classe D. Utilisée pour un processus de multidiffusion : les informations
sont envoyées à un groupe d'ordinateur puis dupliquées
à l'intérieur de ce groupe pour être transmises à
chacun.
- Classe E. Réservée et actuellement inutilisée.
L'adresse IP est codée sur 32 bits. Les 4 premiers
permettent de repérer le type de classe, et les suivants sont répartis
entre préfixe et suffixe (pour les classes de base A, B, C), adresse
de diffusion (classe D) ou zones réservés (classe E). Le fonctionnement
des 4 premiers est donné dans le tableau suivant :
Les 4 premiers bits
|
Correspondance en décimal
|
Classe de l'adresse
|
0000
|
0
|
A
|
0001
|
1
|
A
|
0010
|
2
|
A
|
0011
|
3
|
A
|
0100
|
4
|
A
|
0101
|
5
|
A
|
0110
|
6
|
A
|
0111
|
7
|
A
|
1000
|
8
|
B
|
1001
|
9
|
B
|
1010
|
10
|
B
|
1011
|
11
|
B
|
1100
|
12
|
C
|
1101
|
13
|
C
|
1110
|
14
|
D
|
1111
|
15
|
E
|
Ce que vous verrez de l'adresse en tant qu'utilisateur sera sa forme décimale, par exemple 18.7.22.83. Le premier de ces quatres ensembles de chiffre vous donnera la classe :
Nombre
|
Classe correspondante
|
De 0 à 127
|
A
|
De 128 à 191
|
B
|
De 192 à 223
|
C
|
De 223 à 239
|
D
|
De 240 à 255
|
E
|
Ainsi, l'ordinateur repéré sur le réseau par 18.7.22.83
fait partie d'un réseau de classe A (les plus gros). Le fait qu'une
classe corresponde à un réseau plus ou moins gros vient de la
répartition entre le préfixe et le suffixe. Dans les 32 bits
de notre adresse IP, après les 4 bits qui désignent la classe,
nous avons des bits de préfixe qui désignent le réseau
et des bits de suffixe qui désignent la machine de ce réseau.
Ainsi, avoir beaucoup de bits pour un préfixe signifiera qu'on en a
moins pour le suffixe : il y a beaucoup de réseaux sur la classe, mais
ils sont petits. Le nombre de réseaux et de machines (hôtes)
par réseau est donné par le tableau suivant :
Classe
|
Bits de suffixe
|
Nombre de réseaux
|
Bits de suffixe
|
Nombre d'hôtes
|
A
|
7
|
128
|
24
|
16 777 216
|
B
|
14
|
16 384
|
16
|
65 536
|
C
|
21
|
2 097 152
|
8
|
256
|
Cependant, toutes les adresses IP des classes de base (A, B et C) ne sont
pas utilisées. En effet, certaines ont des usages particuliers
:
- Les adresses commencant par 127. servent à identifier sa propre
machine. Par exemple, si vous programmez une application pour internet
et que vous souhaitez la tester, plutôt que d'employer deux machines
et de les connecter, vous pouvez simuler un réseau. Il vous suffira
de communiquer avec l'adresse 127.0.0.1 par exemple, qui n'est autre que votre
machine.
- Certaines adresses ne peuvent pas accéder à internet, elles
sont utilisées sur un réseau local. Imaginons que vous avez
une petite installation à domicile de deux ordinateurs et un routeur.
Vous allez donner des adresses ne pouvant accéder à Internet
du point de vue interne : vos deux ordinateurs et le routeur auront ce type
d'adresse pour communiquer enter eux. En se connectant, le routeur prendra
en plus l'adresse donnée par le fournisseur d'accès, et sera
donc joignable par l'extérieur sur cette adresse. Ce sont les adresses
commençant par 192.168., 10, ou allant de 172.16.0.1 à 172.31.255.254
; on utilise de préférence celle en 192.168.
En général, seul l'administrateur se servira des adresses ainsi
exprimées. Un utilisateur se connectant à un site ne donnera
par l'adresse IP de la machine qu'il veut joindre, mais le nom du site ; une
machine de serveur de nom fera la correspondance : on nomme DNS le système
(Domain Name System) sur lequel ce type de machine fonctionne. Deux remarques
:
- une adresse IP n'a pas toujours de correspondance en nom, c'est un choix
d'en établir une.
- plusieurs noms peuvent renvoyer vers une même adresse IP, on parle
alors d'alias.
En général, on associe le nom d'une machine avec son adresse IP, et on fait à part un alias qui correspond au type de tâche. Par exemple, la nasa peut avoir besoin de joindre une machine qui centralise les mails, en la nommant mail.nasa.gov. Or, si le type de tâche (les mails) est constant, la machine, elle, peut changer, et être allouée à d'autres tâches. Ainsi, mail.nasa.gov est un alias qui peut renvoyer pendant une période à une machine saturn.nasa.gov, puis à une autre...
b) Informations de réseau sur une machine >>
vers le sommaire
Avec la commande hostname, vous
pouvez obtenir le nom de la machine sur laquelle vous êtes, par exemple
saturn.nasa.gov
. Guère utile en soi, vous pourrez toujours
communiquer cet information à un utilisateur cherchant à vous
joindre.
La commande host s'utilise en spécifiant la machine que l'on interroge.
Si on lui donne une adresse IP, elle renvoie le nom associé, et réciproque.
Par exemple, host 198.175.96.33 répondra
glb.intel.com
; de même, host
glb.intel.com répondra 198.175.96.33
. Si la
machine à interroger fait partie d'un même réseau que
le vôtre, vous pouvez donner uniquement son nom : si vous faites partie
du réseau de la nasa, host saturn
répondra 213.200.94.69.
Le fonctionnement de nslookup a la même syntaxe, mais il donne plus de résultats (sur le DNS). Enfin, toujours sur la même syntaxe, la commande la plus complète est dig.
c) Vérifier l'accessibilité d'une machine et déterminer
un chemin >> vers le sommaire
Les deux commandes fondamentales en réseau servent à
déterminer si on peut joindre une machine ou non, et savoir par quels
relais on passe pour la joindre. Je veux par exemple savoir en combien de
temps je correspond avec 216.239.59.104, combien de routeurs assurent la transmission,
quels sont leurs noms et leurs adresses IP.
Avec ping 216.239.59.104 j'envoie différents
paquets de tests sur la machine correspondant à cette adresse, et je
compte le temps qu'il faut à ces paquets pour revenir :
PING saturn.nasa.gov (216.239.59.104) 56(84) bytes of data
64 bytes from saturn.nasa.gov (216.239.59.104) : icmp_seq=1 ttl=63 time=0.817
64 bytes from saturn.nasa.gov (216.239.59.104) : icmp_seq=1 ttl=63 time=0.361
64 bytes from saturn.nasa.gov (216.239.59.104) : icmp_seq=1 ttl=63 time=0.355
64 bytes from saturn.nasa.gov (216.239.59.104) : icmp_seq=1 ttl=63 time=0.481
--- saturn.nasa.gov ping statistics ---
4 packets transmitted, 4 receveid, 0% packet loss, time 3025ms
rtt min/avg/max/mdev = 0.355/0.503/0.817/0.239 ms
Dans les statistiques, on a le minimum (min), la moyenne (avg pour AVeraGe) et le maximum. On peut donc voir si on communique plus ou moins rapidement avec une machine. Ceci est utile dans le cas où, pour lancer une application (exemple : jeu en réseau), on a divers serveurs possibles : on prend alors celui avec lequel on communique le plus rapidement.
Notons que si une machine ne répond pas, c'est soit qu'elle n'est pas joignable, soit qu'elle ne veut pas qu'on sache qu'elle est là. Elle peut ignorer la requête et essayer de paraître "inexistante" sur Internet par ce procédé.
Pour déterminer un chemin, il faut faire un "trace route".
Cette commande n'est pas forcément utilisable par défaut, ainsi
si elle ne répond pas, suivez l'exemple de la partie II b) afin d'y
avoir accès. La commande traceroute
a la même syntaxe que ping ; ainsi
: traceroute 216.239.59.104 donnera le
résultat suivant :
traceroute to saturn.nasa.gov (216.239.59.104), 30 hops max, 38 byte
packets
1 routers.proxad.net (212.27.37.30) 0.671 ms 0.645 ms 0.654 ms
2 212.27.50.22 1.389 ms 1.315 ms 1.343 ms
3 213.248.71.13 1.685 ms 1.664 ms 1.642 ms
4 213.248.65.77 1.697 ms 1.654 ms 1.643 ms
5 213.248.80.69 1.755 ms 1.756 ms 1.741 ms
6 ge-10-0.ipcolo1.London1.Level3.net (212.187.131.7) 1.954ms 1.961ms 1.956ms
7 haustin-pos3-0.skvd.nasa.gov (212.187.170.86) 2.188 ms 2.190 ms 2.180 ms
8 saturn.nasa.gov 66.(212.187.170.127) 2.214ms 2.217ms 2.219ms
On voit donc que pour joindre saturn.nasa.gov, il faut passer par 7 intermédiaires dont l'un dit explicitement être situé à Londres (les gros routeurs pour l'étranger passent par Paris puis Londres) et l'autre à Haustin.
c) Informations sur un utilisateur et dialogues >>
vers le sommaire
En général, les utilisateurs respectent une certaine
convention donnée par l'entreprise pour ce qui est de leurs identifiants.
Par exemple, George STROSS peut s'identifier strosge si la convention est
de prendre les 5 premières lettres du nom, et les deux du prénom.
Ainsi, en connaissant le nom de nos collègues, on connait leurs identifiants.
De même, Sandrine LAFORA aura comme identifiant laforsa.
Vous pouvez commencer par demander des informations sur un utilisateur
avec la commande finger suivie du nom
de l'utilisateur. Par exemple, voici les 4 premières lignes que renvoit
finger laforsa :
Login : laforsa Name : Sandrine LAFORA
Directory : /u/compta/laforsa Shell : /bin/bsh
Office : compta
Never logged in
On y apprend donc que Sandrine LAFORA travaille à la comptabilité et qu'elle utilise comme shell Bsh. Quand vous ouvrez un terminal, le shell est l'environnement prennant en charge ce terminal ; il en existe plusieurs : bsh, zsh, ksh... L'information la plus intéressante est "Never logged in". La commande peut vous dire que l'utilisateur n'a jamais été connecté si vous n'êtes pas sur la même machine ; ainsi, nous devons nous connecter sur la machine de Sandrine si nous voulons communiquer.
On utilise pour cela la commande ssh avec le nom de la machine où se trouve sandrine. Si la machine se nomme "vente", alors on fera ssh vente. Le programme peut demander si on souhaite continuer car la connexion est d'une fiabilité douteuse ; répondez yes. On peut vous demander votre mot de passe. Si l'accès vous est autorisé, le mot de passe sera en général le même que celui que vous utilisez pour vous identifier sur votre propre machine.
Ceci fait, nous sommes sur la machine de Sandrine. A ce moment,
finger laforsa donne de nouveaux résultats
:
Login : laforsa Name : Sandrine LAFORA
Directory : /u/compta/laforsa Shell : /bin/bsh
Office : compta
On since Wed Feb 16 10:53 (CET) on : 0
On since Wed Feb 16 10:53 (CET) on pts/0 from : 0.0
6 seconds idle
On voit donc que sandrine est connectée depuis le mercredi
(Wednesday) 16 février (Febrary), et que pratiquement au moment où
elle s'est connecté, elle a ouvert un terminal (pts/0). Avec la commande
who, déjà vu précédemment,
on obtient alors les résultats ci-dessous :
laforsa : 0 Feb 16 10:53
laforsa pts/0 Feb 16 10:53 (0.0)
giancal pts/1 Feb 16 11:01 (info.aventis.fr)
On a donc les mêmes informations sur laforsa, mais on se voit aussi nous-même. Ici, nous sommes Al Giancardi, connecté depuis la machine 'info' du réseau aventis. A présent, nous pouvons parler à Sandrine en utilisant la commande write avec son nom d'utilisateur. Avec write laforsa, nous démarrons un dialogue ; son ordinateur peut émettre un bip pour lui indiquer. On tape notre message, on clôture avec Ctrl+D, et si de son côté elle veut répondre, elle fera write giancal. Un inconvénient : on peut se retrouver à parler tous les deux en même temps...
Il arrive que certains utilisateurs soient connectés plusieurs fois, c'est-à-dire qu'ils aient ouvert plusieurs terminaux dans notre cas. Ainsi, si en faisant who on s'aperçoit qu'il y a laforsa en pts/0 et pts/2, on peut choisir sur quel terminal on souhaite lui parler, en le précisant simplement : write laforsa pts/0 écrire sur son premier terminal.
La commande talk est plus pratique. Nous n'avons pas besoin d'être sur la même machine, et chacun a une zone de l'écran réservée. Ainsi, on ferait talk laforsa@compta pour entrer en communication avec l'utilisateur laforsa sur la machine compta.
Il existe une dernière commande liée aux discussions : wall (pour Write ALL). N'ayant pas besoin d'argument, elle permet d'envoyer un message à tous les utilisateurs connectés sur la même machine. Par exemple, wall Maintenance du serveur peut avertir les utilisateurs que le serveur va bientot être coupé pour maintenance. Pour plusieurs ligne, après la commande wall, on appuie sur entrée puis on tape notre texte et on clôture avec Ctrl+D.
On peut aussi choisir de refuser les messages ; on utilise mesg
des trois façons suivantes :
- mesg n pour refuser les messages
- mesg y pour accepter les messages
- mesg pour connaître l'état
actuel
II. Opérations utiles sur les fichiers
a) Les liens >>
vers le sommaire
Habituellement, votre fichier a un nom qui le repère ; donner
ce nom pour faire une opération revient à déterminer
où est le fichier. Ainsi, le nom est un lien physique vers le fichier.
Il existe aussi des liens symboliques, ce que l'on pourrait appeller des raccourcis : ces petits fichiers contiennent un chemin d'accès dirigé vers leur cible. La cible est en général un fichier existant cependant, sachez qu'il peut ne pas exister, ou que le lien peut 'pointer' vers un système de fichier différent de celui d'où vous l'avez éxécuté. En effet, si vous éxécutez un lien dans une partition linux, vous pouvez pointer vers du fat32, par exemple.
Pour récapituler ça, disons que les liens sont soient physiques (un emplacement en mémoire, sur le disque...), soit symboliques (chemin d'accès : beaucoup plus grande liberté dans la cible, qui peut même ne pas exister).
Pour créer un lien physique, on utilise directement la commande ln (LiNk). Par exemple, ln aqua lienphy, va faire un lien nommé 'lienphy' sur le fichier 'aqua'. Pour un lien symbolique, on utilise le commutateur s : ln -s aqua liensymb, va créer un lien nommé 'liensymb' sur le fichier 'aqua'. Dans un Terminal Gnome, par défaut si vous faites un ls, vous devriez voir les liens symboliques en cyan (bleu clair) ; avec ls -l, vous pourrez voir avec un -> le fichier pointé par le lien.
Avec readlink, vous pouvez
suivre le lien. Par exemple, readlink liensymb
renverra : aqua
. De même, si l'utilisateur aqualonne a
le fichier 'aqua' a la racine de son répertoire personnel, alors avec
ln -s ~/aqua lien, on créée
le lien dans le répertoire où l'on se trouve (si on a la permission
d'écriture dans le répertoire, bien sûr), et readlink
lien nous répondra : /home/aqualonne/aqua
.
b) Archiver et compresser >>
vers le sommaire
La commande tar permet d'archiver un ensemble
de fichiers, par exemple une arborescence (tous les dossiers contenus dans
un dossier père). On l'utilise de la façon suivante :
- tar -cvf Save.tar Img : on met tout
le contenu découlant du répertoire Img dans l'archive Save.tar
- tar -xvf Save.tar : extrait sur place
le contenu de l'archive Save.tar avec l'arborescence
Les commutateurs correspondent à : c (create, créer l'archive), v (verbose, détail de l'opération), x (extract, extraire de l'archive), t (topic, affichage du contenu d'une archive), f (file, indique le nom de l'archive à utiliser). Une erreur à ne pas faire est de placer l'archive dans le répertoire en cours d'archivage : cela pourrait créer une tâche en boucle (saturation de la mémoire, voire du disque dur) !
La commande compress permet de compresser un fichier : on spécifie le fichier à compresser, et celui-ci est remplacé par une version compressée. Ainsi, compress Save.tar remplacera le fichier Save.tar par le fichier compressé Save.tar.Z. Pour l'extraire, on utilise uncompress. Avec uncompress Save.tar.Z, le fichier Save.tar.Z est remplacé par le fichier Save.tar non compressé.