Accueil > Dossiers > UNIX

UNIX/LINUX
(tutorial 2 - réseaux et fichiers)

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.


Nouvelles commandes utilisées dans le présent tutorial, par ordre d'apparition

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.

SOMMAIRE DU TUTORIAL 2

I. Introduction aux réseaux
a) Notions élémentaires de réseau
b) Informations de réseau sur une machine
c) Accessibilité d'une machine et chemin
d) Informations sur un utilisateur et dialogues

II. Opérations utiles sur les fichiers
a) Les liens
b) Archiver et compresser


I. Introduction aux réseaux

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