Previous Next Contents

Annexe C    Initiation au système Unix

Le système Unix fut développé à Bell laboratories (research) de 1970 à 1980, puis à l'université de Berkeley. C'est un système maintenant standard dans le milieu scientifique. Les machines de l'X en Unix sont le Vax 9000 ou les stations des salles Dec, HP et Sun pour les élèves. Cette annexe reprend des notes de cours du magistère de l'ENS écrites par Damien Doligez et Xavier Leroy. Son adaptation pour l'X est due à Dominique Moret. Il y a deux parties: une trousse de survie pour connaître les manipulations élémentaires, un approfondissement pour apprendre les commandes élémentaires. Enfin, le béaba du réseau figure dans une troisième section.

C.1  Trousse de Survie

C.1.1  Se connecter

C.1.2  Se déconnecter

C.1.3  Le système de fenêtres par défaut

Boutons Souris

 Bouton de la Souris
Position de la sourisGaucheMilieuDroite
Titre de fenêtredéplacermenu opérations 
Titre (bouton gauche)menu opérations  
Titre (bouton milieu)iconifier  
Titre (bouton droite)maximiser  
Fenêtre Shell (xterm)sélectionnercollermodifier la sélection
Ascenseurdescendrepositionnermonter
Icônedéplacerdésiconifier 
 SessionsDesktopApplications
Fond d'écranXterm Xlock
 poly (Vax 9000) Elm (courrier)
 sil (vers l'Internet) Editeurs de texte
 Stations DEC Communication
 Stations SUN Applications
     :     :
 DECONNEXION DECONNEXION
Fenêtre Emacspositionner curseurcoller 

Par défaut, la fenêtre active est celle contenant le pointeur de la souris.2

Quelques outils du système de fenêtres

Xtermouverture d'une fenêtre shell sur la station où on travaille
polyouverture d'une fenêtre shell sur poly
silouverture d'une fenêtre shell sur sil
Editeurs de texteéditeur de textes (emacs, notepad, Xedit, vi)
Elmpour lire et envoyer du courrier
Communicationpour discuter à plusieurs ou lire les news


C.1.4  Obtenir de l'aide

man commande
Montre page par page le manuel de commande. Faire Espace pour passer à la page suivante, q pour quitter avant la fin. Pour quitter, on peut aussi faire Ctrl-C, qui interrompt la plupart des commandes Unix.

man -k mot
Donne la liste des commandes indexées sur le mot-clé mot, avec un résumé de ce qu'elles font en une ligne.
Dans les programmes interactifs (elm, polyaf, maple), on peut souvent obtenir de l'aide en tapant ? ou h. Enfin, on peut aussi poser des questions aux utilisateurs habituels de la salle Sun ou Dec; certains en savent très long.

C.1.5  Changer son mot de passe

La commande est passwd. Critères de choix d'un mot de passe:

C.1.6  Courrier électronique

La commande elm permet de lire son courrier et d'en envoyer. Résumé des commandes de elm:

EspaceAffiche le message sélectionné (Espace pour afficher la page suivante, i pour sortir du message)
­, ¯Sélectionne un message
mCompose et envoie un message
rCompose et envoie une réponse au message sélectionné
sSauve le message sélectionné dans un fichier
dEfface le message sélectionné
qPour sortir


En jargon elm, un folder est simplement le nom d'un fichier qui contient des messages.

Les adresses de courrier

Une adresse de courrier électronique est de la forme login pour du courrier local, ou login@machine pour du courrier vers l'extérieur. Le login est le nom de login du destinataire. (Certains sites admettent aussi le nom complet du destinataire, sous la forme prénom.nom.) La machine est le nom complet de la machine de destination. Il ne faut pas mettre d'espaces dans une adresse de courrier: login @ machine ne marche pas. Votre adresse de courrier sur les machines de l'X est:
prénom.nom@polytechnique.fr
ou
nom-de-login@poly.polytechnique.fr

On omet les accents; on met un tiret - pour les prénoms ou noms composés. Exemples (purement imaginaires):

Henri Poincaré    poincare@poly.polytechnique.fr
Henri.Poincare@polytechnique.fr
Anne--Sophie de Barreau de Chaise    barreau@poly.polytechnique.fr
Anne-Sophie.de-Barreau-de-Chaise@polytechnique.fr
Fulgence l'Hôpital    lhopital@poly.polytechnique.fr
Fulgence.l-Hopital@polytechnique.fr


(Si vous n'êtes pas sûr de votre adresse, expérimentez en vous envoyant du courrier à vous-même.)

Pour ce qui est des noms complets de machines, ils sont généralement en trois parties: machine.institution.pays. Quelques exemples de noms complets:

poly.polytechnique.frla machine principale de l'X
clipper.ens.frla machine des ``frères'' de l'ENS
ftp.inria.frune machine avec du logiciel à l'INRIA
research.att.comune machine à courrier des AT&T Bell Laboratories
cs.princeton.edule département d'informatique de Princeton
src.dec.comun labo de Digital Equipment
jpl.nasa.govle Jet Propulsion Laboratory


Quelques exemples de noms de ``pays'':

auAustraliebrBrésilcaCanadadeAllemagne
dkDanemarkfiFinlandefrFranceitItalie
jpJaponnlHollandenzNouvelle-ZélandeseSuède
suCEIthThaïlandeukRoyaume-UnizaAfrique du Sud


comEtats-Unis, réseau des entreprises privés
eduEtats-Unis, réseau des universités
govEtats-Unis, réseau des labos gouvernementaux
milEtats-Unis, réseau de l'armée
bitnetUn réseau de machines IBM


C.1.7  Polyaf (malheureusement obsolète)

Un système de messagerie électronique inter-écoles peut être obtenu par la commande polyaf. (Il est recommandé au début d'utiliser la commande z de remise à zéro pour ne pas avoir trop de messages à lire). Résumé des commandes:

haide en ligne
qquitter polyaf
lmontre la liste des groupes
g groupeva dans le groupe de nom groupe
gva au prochain groupe avec des nouveaux messages
Returnmontre le prochain message
-montre le message précédent
nmontre le message numéro n
rdonne un résumé des messages du groupe courant
mrentre un nouveau message
Rrentre une réponse au message courant
zmarque lus tous les messages du groupe courant


C.1.8  Éditeur de texte

Plusieurs éditeurs sont disponibles: emacs vi textedit .... Nous recommandons chaudement emacs. On le lance par emacs ou emacs nom-de-fichier. Les commandes vitales sont:

¬, ®, ­, ¯déplace le curseur
Deleteefface le caractère précédent
Control-Vavance d'une page
Meta-Vrecule d'une page (Meta, ce sont les touches marquées à ou esc)
Control-X Control-Sécrit le fichier modifié
Control-X Control-Cquitte Emacs


Pour apprendre à se servir d'Emacs, on peut lancer emacs et taper Control-h, puis t; ça affiche un petit cours assez bien fait.

C.1.9  Manipulations simples de fichiers

C.1.10  Cycles de mise au point

Programmes C

emacs prog.cOn crée le texte source.
cc -o prog prog.cOn compile le source prog.c en l'exécutable prog.
progOn exécute le programme.
emacs prog.cOn corrige le source et on recommence jusqu'à ce que ça marche.


Textes LATEX

emacs memoire.texOn crée le texte source.
latex memoire.texOn compose le source memoire.tex, le résultat est dans memoire.dvi
xdvi memoire.dviOn regarde à quoi le résultat ressemble.
emacs memoire.texOn corrige le source et on recommence jusqu'à ce que ça soit correct.
    :
dvips -o memoire.ps memoire.dviOn transforme le fichier memoire.dvi en un fichier PostScript
lpr -Pps20 memoire.psOn imprime le résultat sur l'imprimante Vax recto-verso
lpr -Psun memoire.psItou sur l'imprimante de la salle Sun non recto-verso
lprm -Psun userPour stopper l'impression de user


C.1.11  Types de machines

Il y a 4 types de machines Unix à l'X: Silicon Graphics, Hp, Sun et stations Alpha. Chacune a un processeur différent: Mips pour les Silicon Graphics, HP-PA pour les Hp, sparc pour les Sun, Alpha pour les stations Alpha. Les fichiers exécutables sont donc différents sur ces 4 types de machines. Tout l'environnement par défaut fait que les commandes vont exécuter les exécutables de bon type. Il faut noter que les fichiers des élèves eux se trouvent toujours au même endroit, car Unix permet de partager les fichiers entre machines différentes grâce à NFS (Network File System). De même, toutes les imprimantes sont accessibles depuis toute machine. Enfin, il existe aussi 32 terminaux X qui n'ont pas de processeur et qui peuvent atteindre toute machine sur le réseau.

C.2  Approfondissement

C.2.1  Système de fichiers

Répertoires

On les appelle aussi directories. Un répertoire est une boîte qui peut contenir des fichiers et d'autres répertoires (comme les catalogues de MS-DOS, ou les dossiers du Macintosh). Exemples de répertoires:

/users  /bin   /usr/local/bin
On désigne les fichiers (et les répertoires) contenus dans un répertoire par: nom de répertoire/nom de fichier. Exemple: /bin/sh est le fichier sh contenu dans le répertoire /bin. Les répertoires sont organisés en arbre, c'est-à-dire qu'ils sont tous contenus dans un répertoire appelé la racine, et désigné par /. Chaque répertoire contient deux répertoires spéciaux:

.       désigne le répertoire lui-même
..      désigne le père du répertoire
Exemples: /users/cie1/. est le même répertoire que /users/cie1. /users/cie1/.. est le même répertoire que /users.

Chaque utilisateur a un home-directory. C'est l'endroit ou il range ses fichiers. Le home-directory a pour nom /users/cien/nom.

Exemples: /users/cie7/joffre, /users/cie5/foch.

On peut aussi désigner le home-directory d'un autre utilisateur par le nom de login de l'utilisateur précédé d'un tilde (le caractère ~). Exemple: ~foch.

Noms de fichiers

Un nom de fichier qui commence par / est dit absolu. Il est interprété en partant de la racine, et en descendant dans l'arbre. Un nom de fichier qui ne commence pas par / est relatif. Il est interprété en partant du répertoire courant. Le répertoire courant est initialement (au moment où vous vous connectez) votre home-directory.

Exemples: /users/cie7/joffre/foo est un nom (ou chemin) absolu. bar est un nom relatif. Il désigne un fichier appelé bar et situé dans le répertoire courant. Le fichier exact dont il s'agit dépend donc de votre répertoire courant.

Remarque: Le seul caractère spécial dans les noms de fichiers est le slash /. Un nom de fichier peut avoir jusqu'à 255 caractères, et contenir un nombre quelconque de points.

Commandes pour manipuler le système de fichiers

Les droits d'accès

Chaque fichier a plusieurs propriétés associées: le propriétaire, le groupe propriétaire, la date de dernière modification, et les droits d'accès. On peut examiner ces propriétés grâce à l'option -lg de ls. Exemple:
     poly% ls -lg
     drw-r--r--1fochcie5512Sep 30 17:56foo
     -rw-r--r--1fochcie57Sep 30 17:58bar
              
nom du fichier
             
date de dernière modif.
            
taille
           
groupe propriétaire
          
propriétaire
        
droits des autres
       
droits du groupe
      
droits du propriétaire
     
type


Type
- pour les fichiers, d pour les répertoires.
Droits du propriétaire

r ou -droit de lire le fichier (r pour oui, - pour non)
w ou -droit d'écrire dans le fichier
x ou -droit d'exécuter le fichier ou de visite pour un répertoire


Droits du groupe
Comme les droits du propriétaire, mais s'applique aux gens qui sont dans le groupe propriétaire.

Droits des autres
Comme les droits du propriétaire, mais s'applique aux gens qui sont ni le propriétaire, ni dans le groupe propriétaire.

Propriétaire
Le nom de login de la personne à qui appartient ce fichier. Seul le propriétaire peut changer les droits ou le groupe d'un fichier.

Groupe propriétaire
Le nom du groupe du fichier. Les groupes sont des ensembles d'utilisateurs qui sont fixés par l'administrateur du système.

Taille
En octets.
Pour changer les droits d'un fichier, la commande est chmod. Exemples:

chmod a+x fooajoute (+) le droit d'exécution (x) pour tout le monde (all) au fichier foo
chmod g-r barenlève (-) le droit de lecture (r) pour les gens du groupe (group) sur le fichier bar
chmod u-w geeenlève (-) le droit d'écriture (w) pour le propriétaire (user) sur le fichier gee


C.2.2  Raccourcis pour les noms de fichiers

Il est ennuyeux d'avoir à taper un nom complet de fichier comme nabuchodonosor. Il est encore plus ennuyeux d'avoir à taper une liste de fichier pour les donner en arguments à une commande, comme: cc -o foo bar.c gee.c buz.c gog.c. Pour éviter ces problèmes, on peut utiliser des jokers (wildcards en anglais.)

Une étoile * dans un nom de fichier est interprétée par le shell comme ``n'importe quelle séquence de caractères qui ne commence pas par un point.'' Exemple: cc -o foo *.c.

Pour interpréter l'étoile, le shell va faire la liste de tous les noms de fichiers du répertoire courant qui ne commencent pas par . et qui finissent par .c Ensuite, il remplace *.c par cette liste (triée par ordre alphabétique) dans la ligne de commande, et exécute le résultat, c'est-à-dire par exemple: cc -o foo bar.c buz.c foo.c gee.c gog.c.

On a aussi le ?, qui remplace un (et exactement un) caractère quelconque. Par exemple, ls ?* liste tous les fichiers, y compris ceux dont le nom commence par un point.

La forme [abcd] remplace un caractère quelconque parmi a, b, c, d. Enfin, [^abcd] remplace un caractère quelconque qui ne se trouve pas parmi a, b, c, d.

Exemple: echo /users/* affiche la même chose que ls /users. (La commande echo se contente d'afficher ses arguments.)

Attention: Interlude: comment effacer un fichier nommé ?* ? On ne peut pas taper rm ?* car le shell remplace ?* par la liste de tous les fichiers du répertoire courant. On peut taper rm -i * qui supprime tous les fichiers, mais en demandant confirmation à chaque fichier. On répond no à toutes les questions sauf rm: remove ?*?. Autre méthode: utiliser les mécanismes de quotation (voir ci-dessous).

C.2.3  Variables

Le shell a des variables. Pour désigner le contenu d'une variable, on écrit le nom de la variable précédé d'un dollar. Exemple: echo $HOME affiche le nom du home-directory de l'utilisateur.

On peut donner une valeur a une variable avec la commande setenv:
poly% setenv foo bar
poly% echo $foo
bar
Les valeurs des variables sont accessibles aux commandes lancées par le shell. L'ensemble de ces valeurs constitue l'environnement. On peut aussi supprimer une variable de l'environnement avec unsetenv.

Quelques variables d'environnement:
PRINTER
Pour les commandes d'impression. Contient le nom de l'imprimante sur laquelle il faut envoyer vos fichiers.
EDITOR
Utilisée par elm, polyaf, et beaucoup d'autres commandes. Contient le nom de votre éditeur de textes préféré.
VISUAL
La même chose qu'EDITOR.
SHELL
Contient le nom de votre shell préféré.
HOME
Contient le nom de votre home-directory.
USER
Contient votre nom de login.
LOGNAME
La même chose que USER.
PATH
Contient une liste de répertoires dans lesquels le shell va chercher les commandes exécutables.
DISPLAY
Contient le nom de la machine qui affiche.

C.2.4  Le chemin d'accès aux commandes

La variable PATH contient le chemin d'accès aux commandes. Le shell l'utilise pour trouver les commandes. Il s'agit d'une liste de répertoires séparés par des :. La plupart des commandes sont en fait des programmes, c'est-à-dire des fichiers qu'on trouve dans le système de fichiers. Quand vous tapez ls, par exemple, le shell exécute le fichier /bin/ls. Pour trouver ce fichier, il cherche dans le premier répertoire du PATH un fichier qui s'appelle ls. S'il ne trouve pas, il cherche ensuite dans le deuxième répertoire et ainsi de suite. S'il ne trouve la commande dans aucun répertoire du PATH, le shell affiche un message d'erreur. Exemple:
poly% sl
sl: Command not found.
Exercice: Assurez-vous que /usr/games se trouve bien dans votre PATH.

C.2.5  Quotation

Avec tous ces caractères spéciaux, comment faire pour passer des arguments bizarres à une commande ? Par exemple, comment faire afficher un point d'interrogation suivi d'une étoile et d'un dollar par echo ? Le shell fournit des mécanismes pour ce faire. Ce sont les quotations. Le plus simple est le backslash \. Il suffit de précéder un caractère spécial d'un backslash, et le shell remplace ces deux caractères par le caractère spécial seul. Evidemment, le backslash est lui-même un caractère spécial. Exemples:

poly% echo \*\$
?*$
poly% echo \\\\\*\\\$
\*\$
Un autre moyen est d'inclure une chaîne de caractères entre apostrophes (simple quotes) '. Tout ce qui se trouve entre deux apostrophes sera passé tel quel par le shell à la commande. Exemple:
poly% echo '$?*\'
$?*\
Enfin, on peut utiliser des guillemets (double quotes) ". Les guillemets se comportent comme les apostrophes, à une exception près: les dollars et les backslashes sont interprétés entre les guillemets. Exemple:
poly% echo "$HOME/*"
/users/cie5/foch/*
Une technique utile: Quand on juxtapose deux chaînes de caractères quotées, le shell les concatène, et elles ne forment qu'un argument. Exemple:
poly% echo "'"'"'
'"
Quant aux interactions plus compliquées (backslashes à l'intérieur des guillemets, guillemets à l'intérieur des apostrophes, etc.), le meilleur moyen de savoir si ça donne bien le résultat attendu est d'essayer. La commande echo est bien utile dans ce cas.

Dernière forme de quotation: `commande`. Le shell exécute la commande, lit la sortie de la commande mot par mot, et remplace `commande` par la liste de ces mots. Exemple:

poly% echo `ls`
Mail News bin foo g7 lib misc marne.aux marne.dvi marne.log marne.tex
poly% ls -lg `which emacs`
-rwxr-xr-x  1 root     system     765952 Dec 17  1992 /usr/local/bin/emacs
La commande which cmd employée ci-dessus affiche sur sa sortie le nom absolu du fichier exécuté par le shell quand on lance la commande cmd.

poly% which emacs
/usr/local/bin/emacs

C.2.6  Redirections et filtres

Chaque commande a une entrée standard, une sortie standard, et une sortie d'erreur. Par défaut, l'entrée standard est le clavier, la sortie standard est l'écran, et la sortie d'erreur est aussi l'écran.

On peut rediriger la sortie standard d'une commande vers un fichier (caractère >). Le résultat de la commande sera placé dans le fichier au lieu de s'afficher sur l'écran. Exemple:
poly% ls -l >foo
Le résultat de ls -l ne s'affiche pas à l'écran, mais il est placé dans le fichier foo. On peut alors taper
poly% more foo
pour lire le fichier page par page.

On peut aussi rediriger l'entrée standard d'une commande (caractère <). La commande lira alors le fichier au lieu du clavier. Exemple:
poly% elm joffre <foo
envoie par mail à Joseph Joffre le résultat de la commande ls -l de tout à l'heure.

On peut aussi taper more <foo qui est équivalent à more foo car more sans argument lit son entrée standard et l'affiche page par page sur le terminal.

On peut aussi se passer du fichier intermédiaire grâce à un pipe (caractère |). Un pipe connecte directement la sortie standard d'une commande sur l'entrée standard d'une autre commande. Exemple: pour afficher page par page la liste des fichiers du répertoire courant, faire
ls -l | more
La panoplie complète des redirections est la suivante:

>
change la sortie standard de la commande pour la placer dans un fichier.
<
change l'entrée standard de la commande pour la prendre dans un fichier.
>&
place la sortie standard et la sortie erreur dans un fichier.
|
branche la sortie standard de la commande de gauche sur l'entrée standard de la commande de droite.
|&
branche la sortie standard et la sortie erreur de la commande de gauche sur l'entrée standard de la commande de droite.
>>
change la sortie standard pour l'ajouter à la fin d'un fichier existant.
>>&
place la sortie standard et la sortie erreur à la fin d'un fichier existant.
Remarques: Normalement, une redirection avec > sur un fichier qui existe déjà efface le contenu du fichier avant d'y placer le résultat de la commande. Il existe une option qui dit au shell tcsh de refuser d'effacer le fichier.

Le pipe avec |& est utile pour capturer tout ce qui sort d'une commande. Exemple: ls -R / |& more affiche page par page la liste de tous les fichiers du système, sans que les messages d'erreur dérangent l'affichage.

Une ligne de commandes contenant des | s'appelle un pipe-line. Quelques commandes souvent utilisées dans les pipe-lines sont:
more
à la fin du pipe-line, affiche le résultat page par page, pour laisser le temps de le lire.
wc
compte le nombre de caractères, de mots et de lignes de son entrée.
grep
cherche dans son entrée les lignes contenant un mot donné, et les écrit sur sa sortie.
sort
lit toutes les lignes de son entrée, les trie, et les écrit dans l'ordre sur sa sortie
tail
écrit sur sa sortie les dernières lignes de son entrée.
head
écrit sur sa sortie les premières lignes de son entrée.
cat
copie plusieurs fichiers sur sa sortie.
fold
coupe les lignes de son entrée à 80 caractères et écrit le résultat sur sa sortie.
Exemples:
poly% cat glop buz >toto
Concatène les fichiers glop et buz et place le résultat dans toto.
poly% wc -w /usr/dict/words
Affiche le nombre de mots du dictionnaire Unix.
poly% grep gag /usr/dict/words | tail
Affiche les 20 derniers mots du dictionnaire qui contiennent la chaîne gag.

C.2.7  Processus

Si on lance une commande qui prend beaucoup de temps, on peut l'interrompre par Control-C. Ceci interrompt (définitivement) la commande. On peut aussi exécuter une commande en tâche de fond. Le shell rend alors la main avant la fin de la commande. Pour le faire, on ajoute un & à la fin de la commande:
poly% cc -o grosprogramme grosfichier.c &
Cette commande lance le compilateur cc en parallèle avec le shell. On reprend la main immédiatement, sans attendre la fin de l'exécution de la commande. On peut donc taper d'autres commandes pendant que la précédente d'exécute. La commande ps ou ps -x montre où en sont les tâches de fond:
poly% ps
  PID TT STAT  TIME COMMAND
 4450 p9 S     0:00 /usr/local/bin/tcsh
 4782 p9 S     0:02 cc -o grosprogramme grosfichier.c
 4841 p9 R     0:00 ps
Unix est un système multi-tâches, c'est-à-dire qu'il peut exécuter plusieurs programmes à la fois. Un processus est un programme en train de s'exécuter. La commande ps affiche la liste des processus que vous avez lancés. Chaque processus a un numéro. C'est la colonne PID ci-dessus. Le shell crée un nouveau processus pour exécuter chaque commande. Pour une commande ``normale'' (sans &), il attend que le processus termine, indiquant que la commande a fini de s'exécuter. Pour une commande en tâche de fond (avec &), le shell n'attend pas. On peut interrompre (``tuer'') un processus avant la fin, avec la commande kill -9 (plus le numéro du processus).
poly% kill -9 4782
poly% ps
  PID TT STAT  TIME COMMAND
 4450 p9 S     0:00 /usr/local/bin/tcsh
 4851 p9 R     0:00 ps

C.2.8  Programmation du shell

Le shell peut aussi exécuter des commandes prises dans un fichier. Un fichier contenant des commandes pour le shell est appelé un script. C'est en fait un programme écrit dans le langage du shell. Ce langage comprend non seulement les commandes que nous avons déjà vues, mais aussi des structures de contrôle (constructions conditionnelles et boucles).3 Pour être un script, un fichier doit commencer par la ligne:
#!/bin/sh
Il doit aussi avoir le droit d'exécution (bit x). (Le #!/bin/sh sur la première ligne indique que ce script doit être exécuté par le shell sh.)

Structures de contrôle

Code de retour

On remarque que la condition des commandes if et while est une commande. Chaque commande renvoie un code de retour (qui est ignoré en utilisation normale). Si le code est 0, la commande a réussi; sinon, la commande a échoué. Par exemple, le compilateur cc renvoie un code d'erreur non nul si le fichier compilé contient des erreurs, ou s'il n'existe pas.

Les commandes if et while considèrent donc le code de retour 0 comme ``vrai'', et tout autre code comme ``faux''.

Il existe une commande test, qui évalue des expressions booléennes passées en argument, et renvoie un code de retour en fonction du résultat. Elle est bien utile pour les scripts. Exemple:
if test $var = foo
then echo 'La variable vaut foo'
else echo 'La variable ne vaut pas foo'
fi

Variables

Dans les scripts, on peut utiliser des variables définies à l'extérieur (avec setenv), mais aussi définir ses propres variables locales au script. On donne une valeur à une variable avec une commande de la forme nom-de-variable = valeur.

On a aussi des variables spéciales, initialisées automatiquement au début du script:

$*La liste de tous les arguments passés au script.
$#Le nombre d'arguments passés au script.
$1, $2, ...Les arguments passés au script.
$?Le code de retour de la dernière commande lancée.
$!Le numéro de process de la dernière commande lancée en tâche de fond.
$$Le numéro de process du shell lui-même.


Commandes internes

Certaines commandes du shell ne sont pas des programmes mais des commandes internes. Elles sont directement reconnues et exécutées par le shell. Un exemple de commande interne est cd. C'est le répertoire courant du shell qui est modifié par cd, ce qui signifie que le script suivant:
#! /bin/sh
cd $*
ne marche pas, car le shell lance un autre shell pour exécuter le script. C'est ce sous-shell qui change son répertoire courant, et ce changement est perdu quand le sous-shell meurt.

Fichier de démarrage

Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce script est contenu dans le fichier $HOME/.login. C'est ce fichier qui vous dit s'il y a de nouveaux messages dans polyaf, si vous avez du courrier, etc .... Chacun peut ainsi personnaliser son environnement au début de chaque session. On a quelques informations sur la ``customization'' en utilisant le menu Aide (bouton de droite de la souris sur fond d'écran).

C.3  Unix et le réseau de l'X

Le réseau Internet relie 20 millions de machines ou de réseaux locaux dans le monde en juillet 97, soit 130 millions de personnes. Avec le système Unix, les machines s'interfacent facilement à l'Internet, certains services sont aussi disponibles sur Macintosh ou PC. Le réseau local de l'X contient plusieurs sous-réseaux pour les élèves, pour les labos et pour l'administration. Le réseau des élèves relie les chambres, les salles de TD (salles Dec, Sun ou Hp), la salle DEA, la salle Mac et la machine sil (passerelle vers l'Internet).

Physiquement, dans une chambre, on connecte sa machine par un petit cable muni d'une prise RJ45. Une ligne en paires torsadées 10Base/T part de la chambre vers une boîte d'interconnexion avec une fibre optique FDDI (Fiber Data Distributed Interface) qui arrive dans chaque casert. La fibre repart des caserts vers les salles de TD et les autres machines centrales. Le tout est certifié à 10 Méga bit/s, et vraisemblablement à 100 Mbit/s. Dans une salle de TD, les stations Unix et les imprimantes sont déjà connectées au réseau. Pour les Mac ou PC, une prise différente existe devant chaque chaise.

Logiquement, la partie 10Base/T supporte le protocole Ethernet à 10 Mbit/s (pour les PC) ou le protocole PhoneNet à 230 kbit/s (pour les Mac). Tout est transparent pour l'utilisateur, qui signale en début d'année au Centre Info s'il désire une prise PhoneNet ou Ethernet dans sa chambre. L'interconnexion avec la fibre optique sera alors positionné correctement.

Toute machine a une adresse Internet en dur (192.48.98.14 pour sil) ou symbolique (sil.polytechnique.fr) qui sont les mêmes adresses que pour le courrier électronique. A l'intérieur de l'X, le suffixe polytechnique.fr est inutile. Les stations Alpha ont des noms d'os (radius, cubitus, ...), les stations Hp des noms de poissons (carpe, lieu, ...) ou de voitures (ferrari, bugatti, ...) et les stations Sun des noms d'acteurs (garbo, dean, ...). Les Mac obtiennent leur adresse Internet dynamiquement de la boite d'interconnexion à Ethernet. C'est en principe automatique. Il peut être nécessaire de se servir de l'utilitaire MacTCP pour donner la zone à laquelle on appartient, par exemple son nom de casert + le numéro d'étage. Pour les PC, il faut rentrer l'adresse Internet manuellement. Dans les salles TD, elle est écrite en face de chaque chaise.

Voici une liste de services courants (cf. la référence [12] pour beaucoup plus de détails).

telnet
Pour se connecter sur une autre machine et y exécuter des commandes.
rlogin
Idem.
ftp
Pour transférer des fichiers depuis une autre machine. Sur certaines machines, on peut faire des transferts sans y avoir un compte, en se connectant sous le nom anonymous; d'où le nom de ``anonymous FTP'', ou ``FTP anonyme'', donné à cette méthode de transfert de fichiers.
xrn
Pour lire les ``News'' (le forum à l'échelle mondiale).
xwais
Pour interroger des bases de données par mots-clé.
xarchie
Pour obtenir les sources domaine public sur le réseau.

netscape
Pour consulter des bibliothèques multi-media du World Wide Web. Quelques adresses pour commencer:

http://www.polytechnique.fr/le serveur officiel de l'X,
http://www.polytechnique.fr/~eleves/le serveur des élèves de l'X,
http://www.ens.fr/le serveur de l'ENS,
http://www.stanford.edu/Stanford University,
http://www.labri.u-bordeaux.fr/le Labri de Bordeaux,
http://www.meteo.fr/Météo France,
http://www.sncf.fr/la SNCF,
http://www.delta-air.com/Delta Air Lines,
http://pauillac.inria.fr/caml/les langages Caml,
http://www.research.digital.com/SRC/modula-3/html/Modula-3,
http://java.sun.com/et Java,
http://inferno.bell-labs.com/inferno/système Inferno,
http://www.lmet.fr/Homefr.htmlla librairie du Monde en Tique,
http://www.technical.powells.portland.or.us/Powell's Technical Books,
http://www.radio-france.fr/Radio France,
http://www.msnbc.com/MSNBC,


http://www-groups.dcs.st-and.ac.uk/%7Ehistory/Mathematicians/Godel.html
 une biographie de Kurt Gödel,
http://www-cs-faculty.stanford.edu/~knuth/la page de D. Knuth,
http://www.netfrance.com/Libe/le journal Libération,
http://www.mapquest.com/un atlas interactif des USA,
http://www.apple.com/Apple computers,
http://www.cern.ch/le CERN à Genève,
http://www.culture.fr/louvre/le vrai Louvre
http://www.cnam.fr/louvre/et celui de Nicolas Pioch,
http://www.urec.fr/France/cartes/France.htmlWeb en France
http://www.yahoo.com/ou sur la planète,
http://webcrawler.com/une belle araignée chercheuse,
http://altavista.digital.com/l'index automatique de l'Internet


irc
Pour perdre son énergie à discuter avec le monde entier.
eudora
Pour lire son courrier sur Mac.
fetch
Pour faire ftp depuis les Mac.
Certains services (connexions internes, courrier, news) sont disponibles depuis toute machine du réseau des élèves. Les autres (et en particulier les connexions à l'Internet) ne sont disponibles que depuis la machine sil. Il convient donc d'ouvrir une session sur sil pour accéder à tous les services de l'Internet.

C.4  Bibliographie Unix


1
sil signifie passerelle en breton
2
Cet environnement est celui qui a été installé par Dominique Moret et Laurent de Munico, mais il est bien sûr entièrement reconfigurable avec un peu d'habileté.
3
Il existe en fait plusieurs shells, ayant des langages de commandes différents. Jusqu'ici, on a pris comme exemple le shell csh et sa variante tcsh. Pour la programmation du shell, nous allons utiliser le shell sh, qui a un meilleur langage de commandes. Ce que nous avons vu jusqu'ici s'applique aussi bien à sh qu'à csh, à l'exception de setenv et de certaines redirections.

Previous Next Contents