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
- Depuis les stations Alpha, Hp, Sun, PC et les terminaux X des
salles de TD: taper son nom de login, puis son mot de passe.
- Depuis une autre machine reliée au réseau Internet: taper
telnet 192.48.98.14
ou simplement telnet
sil.polytechnique.fr
1
, puis login/password comme précédemment.
- Par Minitel (il faut un Minitel modèle 1B ou 2): se connecter au
01 69 33 35 12. Appuyer sur fnct-T, puis A pour passer le
Minitel en mode 80 colonnes avec défilement. Appuyer plusieurs fois
sur la touche retour chariot (¿, pas Envoi),
jusqu'à obtenir le prompt
Entrez dans Communication Server...
[1 ]CS >
Répondre c poly
, puis retour chariot. (On peut mettre
le nom d'une autre machine des salles Dec, Hp ou Sun à la place de
poly
.) Puis login/password comme précédemment.
- Par terminal ou émulation terminal, on peut aussi appeler le
01 69 33 38 38: il faut règler ses paramètres de communication à 8 bits,
sans parité, sans Xon/Xoff, 1 bit stop, puis login/passwd
comme précédemment.
C.1.2 Se déconnecter
- Depuis un terminal ou une autre machine: taper exit
- Depuis un minitel: taper exit puis logout.
- Depuis une station ou un terminal X: appuyer sur le
bouton droit ou gauche de la souris, le pointeur étant sur le fond d'écran,
et sélectionner DECONNEXION dans le menu qui apparaît
alors. (Taper exit dans une fenêtre shell ferme cette
fenêtre, mais ne vous déconnecte pas de la machine.)
- Ne jamais éteindre une station ou un terminal X.
C.1.3 Le système de fenêtres par défaut
Boutons Souris
| | Bouton de la Souris |
| Position de la souris | Gauche | Milieu | Droite |
| Titre de fenêtre | déplacer | menu opérations | |
| Titre (bouton gauche) | menu opérations | | |
| Titre (bouton milieu) | iconifier | | |
| Titre (bouton droite) | maximiser | | |
| Fenêtre Shell (xterm) | sélectionner | coller | modifier la sélection |
| Ascenseur | descendre | positionner | monter |
| Icône | déplacer | désiconifier | |
| | Sessions | Desktop | Applications |
| Fond d'écran | Xterm | | Xlock |
| | poly (Vax 9000) | | Elm (courrier) |
| | sil (vers l'Internet) | | Editeurs de texte |
| | Stations DEC | | Communication |
| | Stations SUN | | Applications |
| | : | | : |
| | DECONNEXION | | DECONNEXION |
| Fenêtre Emacs | positionner curseur | coller | |
| |
Par défaut, la fenêtre active est celle contenant le
pointeur de la souris.2
Quelques outils du système de fenêtres
| Xterm | ouverture d'une fenêtre shell sur la station où
on travaille |
| poly | ouverture d'une fenêtre shell sur poly |
| sil | ouverture d'une fenêtre shell sur sil |
| Editeurs de texte | éditeur de textes (emacs, notepad, Xedit, vi) |
| Elm | pour lire et envoyer du courrier |
| Communication | pour 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:
- au moins 6 caractères (mais seuls les 8 premiers
caractères sont pris en compte).
- ni un prénom, ni un nom propre, ni un mot du dictionnaire.
- au moins une lettre majuscule, ou un chiffre, ou un caractère
spécial.
C.1.6 Courrier électronique
La commande elm permet de lire son courrier et d'en envoyer.
Résumé des commandes de elm:
| Espace | Affiche le message sélectionné (Espace pour afficher la page
suivante, i pour sortir du message) |
| , ¯ | Sélectionne un message |
| m | Compose et envoie un message |
| r | Compose et envoie une réponse au message sélectionné |
| s | Sauve le message sélectionné dans un fichier |
| d | Efface le message sélectionné |
| q | Pour 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.fr | la machine principale de l'X |
clipper.ens.fr | la machine des ``frères'' de l'ENS |
ftp.inria.fr | une machine avec du logiciel à l'INRIA |
research.att.com | une machine à courrier des AT&T Bell Laboratories |
cs.princeton.edu | le département d'informatique de Princeton |
src.dec.com | un labo de Digital Equipment |
jpl.nasa.gov | le Jet Propulsion Laboratory
|
Quelques exemples de noms de ``pays'':
au | Australie | br | Brésil | ca | Canada | de | Allemagne |
dk | Danemark | fi | Finlande | fr | France | it | Italie |
jp | Japon | nl | Hollande | nz | Nouvelle-Zélande | se | Suède |
su | CEI | th | Thaïlande | uk | Royaume-Uni | za | Afrique du Sud
|
com | Etats-Unis, réseau des entreprises privés |
edu | Etats-Unis, réseau des universités |
gov | Etats-Unis, réseau des labos gouvernementaux |
mil | Etats-Unis, réseau de l'armée |
bitnet | Un 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:
h | aide en ligne |
q | quitter polyaf |
l | montre la liste des groupes |
g groupe | va dans le groupe de nom groupe |
g | va au prochain groupe avec des nouveaux messages |
Return | montre le prochain message |
- | montre le message précédent |
n | montre le message numéro n |
r | donne un résumé des messages du groupe courant |
m | rentre un nouveau message |
R | rentre une réponse au message courant |
z | marque 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 |
| Delete | efface le caractère précédent |
| Control-V | avance d'une page |
| Meta-V | recule d'une page (Meta, ce sont les touches
marquées à ou esc) |
| Control-X Control-S | écrit le fichier modifié |
| Control-X Control-C | quitte 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
-
ls affiche la liste des fichiers.
-
more nom affiche le contenu du fichier nom,
page par page. La touche espace passe à la page suivante; q quitte.
-
cp nom1 nom2 copie le fichier nom1
dans un fichier nom2.
-
mv nom1 nom2 change le nom d'un fichier de nom1
en nom2.
-
rm nom détruit le fichier nom.
C.1.10 Cycles de mise au point
Programmes C
| emacs prog.c | On crée le texte source. |
| cc -o prog prog.c | On compile le source prog.c en l'exécutable prog. |
| prog | On exécute le programme. |
| emacs prog.c | On corrige le source et on recommence jusqu'à ce que
ça marche.
|
Textes LATEX
| emacs memoire.tex | On crée le texte source. |
| latex memoire.tex | On compose le source memoire.tex, le résultat
est dans memoire.dvi |
| xdvi memoire.dvi | On regarde à quoi le résultat ressemble. |
| emacs memoire.tex | On corrige le source et on recommence
jusqu'à ce que ça soit correct. |
| : |
| dvips -o memoire.ps memoire.dvi | On transforme le fichier memoire.dvi en un fichier PostScript |
| lpr -Pps20 memoire.ps | On imprime le résultat sur l'imprimante
Vax recto-verso |
| lpr -Psun memoire.ps | Itou sur l'imprimante de la salle Sun
non recto-verso |
| lprm -Psun user | Pour 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/cie
n/
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
-
pwd
affiche le répertoire courant.
Exemple:
poly% pwd
/users/cie5/foch
-
cd
change le répertoire courant. Si on ne lui donne pas
d'argument, on retourne dans le home-directory.
Exemple:
poly% cd ..
poly% pwd
/users/cie5
poly% cd
poly% pwd
/users/cie5/foch
-
mkdir
crée un nouveau répertoire, (presque) vide. Il ne
contient que .
et ..
rmdir
supprime un répertoire vide. Si le répertoire
contient autre chose que .
et ..
ça ne marche pas.
mv
renomme un fichier, mais peut aussi le déplacer d'un
répertoire à un autre. Exemple:
poly% cd
poly% mkdir foo
poly% emacs bar
poly% mv bar foo/bar2
poly% cd foo
poly% pwd
/users/cie5/foch/foo
poly% ls
bar2
ls
liste les fichiers et les répertoires qu'on lui donne
en arguments, ou le répertoire courant si on ne lui donne pas
d'argument. ls
ne liste pas les fichiers dont le nom commence
par .
C'est pourquoi .
et ..
n'apparaissent pas
ci-dessus.
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
| d | | rw- | | r-- | | r-- | 1 | foch | cie5 | 512 | Sep 30 17:56 | foo |
| - | | rw- | | r-- | | r-- | 1 | foch | cie5 | 7 | Sep 30 17:58 | bar |
| | | | | | | | | | | | | 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 foo | ajoute (+ ) le droit d'exécution
(x ) pour tout le monde (a ll) au fichier foo |
| chmod g-r bar | enlève (- ) le droit de lecture
(r ) pour les gens du groupe (g roup) sur le fichier
bar |
| chmod u-w gee | enlève (- ) le droit d'écriture
(w ) pour le propriétaire (u ser) 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:
-
C'est le shell qui fait le remplacement des arguments contenant un joker.
On ne peut donc pas faire
mv *.c *.bak
, car le shell va passer à
mv
les arguments foo.c bar.c foo.bak bar.bak
, et mv
ne
sait pas quel fichier remplacer.
-
Attention aux espaces. Si vous tapez
rm * ~
, le shell remplace
l'étoile par la liste des fichiers présents, et ils seront tous effacés.
Si vous tapez rm *~
, seuls les fichiers dont le nom finit par un
tilde seront effacés.
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.html | la 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, |
| |
- 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
- Utiliser Unix
- [1] Documentation Ultrix. Une dizaine de volumes, deux
exemplaires, en salle Sun ou Dec. Contient des manuels de référence très
techniques, mais aussi de bon guides pour débutants: ``Getting started
with Unix'', ``Doing more with Unix'', ``SunView 1 beginner's guide'',
``Mail and messages: beginner's guide'', ``Basic troubleshooting''.
- [2] Steve Bourne, ``The Unix system'', Addison-Wesley.
Traduction française: ``Le système Unix'', Interéditions. Une vue
d'ensemble du système Unix. Les chapitres sur l'édition et le
traitement de texte sont dépassés.
- Programmer sous Unix
- [3] Brian Kernighan, Rob Pike, ``The Unix programming
environment'', Addison-Wesley. Traduction française: ``L'environnement
de la programmation Unix'', Interéditions. Une autre vue d'ensemble du
système Unix, plus orientée vers la programmation en C et en shell.
- [4] Jean-Marie Rifflet, ``La programmation sous Unix''.
Programmation en C et en shell (pas mal).
- Traitement de texte
- [5]
Leslie Lamport, ``LATEX user's guide and reference manual''.
Addison-Wesley, 1986. Tout sur le traitement de texte LATEX.
Un exemplaire se trouve dans la salle Sun.
- [6]
Donald E. Knuth. ``The TeXbook''. Addison-Wesley, 1984. Tout,
absolument tout sur le traitement de texte TeX. LATEX est en fait
une extension de TeX, un peu plus simple à utiliser; mais beaucoup de
commandes sont communes aux deux, et non documentés dans
[5]. Un exemplaire se trouve dans la salle Sun.
- [7] Raymond Seroul. ``Le petit livre de TeX''. Interéditions.
Petit sous-ensemble de [6]; plus accessible, cependant.
- [8] Francis Borceux. ``LATEX, la perfection dans le
traitement de texte''. (Hum?) Editions Ciaco. Resucée de
[5]. Moins complet et guère plus accessible.
- Le langage C
- [9] Brian Kernighan, Dennis Ritchie, ``The C
programming language'', Prentice-Hall. Traduction française: ``Le
langage C'', Interéditions. Le livre de référence sur le langage C.
- [10] Samuel Harbison, Guy Steele. ``C: a reference
manual''. Une autre bonne description du langage C.
- Utiliser le réseau
- [11] Brendan P. Kehoe, ``Zen and the art of the
Internet --- A beginner's guide to the Internet''. (Non publié.) Un
exemplaire se trouve en salle Sun.
- [12] Ed Krol, ``The whole Internet user's guide
& catalog'', O'Reilly & Associates, 1992.
- 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.