Unix et programmation du shell Table des mati res

Transcription

Unix et programmation du shell Table des mati res
TABLE DES MATIRE
ii
Table des matires
Universit de Nice Sophia-Antipolis
i
Prsentation du polycopi
I Connaissances de base
Unix
et
programmation du shell
Version 3.0
Richard Grin
31 juillet 1998
1 Gnralits sur Unix
1.1
1.2
1.3
1.4
1.5
Systmes d'exploitation . . . . . . . .
Historique . . . . . . . . . . . . . . .
Standards et versions d'Unix . . . . .
Proprits d'Unix . . . . . . . . . . .
Structure d'Unix . . . . . . . . . . .
1.5.1 Noyau . . . . . . . . . . . . .
1.5.2 Shell . . . . . . . . . . . . . .
1.6 Organisation des systmes de chiers
1.6.1 Systme de chiers . . . . . .
1.6.2 Types de chiers . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.1 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Un utilisateur dans le systme . . . . . . . . . . . . . . . . . .
2.1.2 Super-utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Administrateur du systme . . . . . . . . . . . . . . . . . . . .
2.2 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Signaux envoys aux processus . . . . . . . . . . . . . . . . . .
2.2.2 Terminal de contrle d'un processus, excution en arrire-plan
2.2.3 Propritaires et groupes eectifs et rels d'un processus . . . .
2.2.4 Cration d'un nouveau processus, arbre des processus . . . . .
2.3 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 i-node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Structure interne des rpertoires . . . . . . . . . . . . . . . . .
2.3.3 Propritaire et groupe d'un chier . . . . . . . . . . . . . . . .
2.3.4 Mode d'accs au chier . . . . . . . . . . . . . . . . . . . . . .
2.4 Protection des chiers . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Acteurs/objets du monde Unix
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
1
1
1
1
1
1
1
1
1
1
TABLE DES MATIRES
2.4.1 Droits associs aux autorisations . . . . . . . . . . . . . . . . . . .
2.4.2 Autorisations set user id et set group id . . . . . . . . . . . . . .
2.4.3 Mcanisme de protection des chiers . . . . . . . . . . . . . . . . .
3 Premiers pas dans le systme
3.1 Entre dans le systme . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Changer son mot de passe (passwd) . . . . . . . . . . . .
3.1.2 Dmarrage d'une session . . . . . . . . . . . . . . . . . .
3.2 Sortie du systme . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Touches spciales . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Format des commandes Unix . . . . . . . . . . . . . . . . . . . .
3.5 Consultation du manuel en ligne (man) . . . . . . . . . . . . . .
3.6 Nom d'un chier, nom absolu, nom relatif . . . . . . . . . . . .
3.7 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1 Lancer une commande, supprimer un processus . . . . .
3.7.2 Nom d'une commande, variable PATH . . . . . . . . . .
3.7.3 Nom complet et type d'une commande (whence, whereis)
3.7.4 Compltion des commandes par zsh . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iv
16
16
17
6 Commandes d'observation du systme
18
18
18
19
19
19
20
21
22
22
22
22
23
24
II Commandes
25
4 Commandes lies l'arborescence des chiers
27
4.1 Visualisation de l'arborescence (ls) . . . . . . . . . . . .
4.2 Information dtaille sur les chiers (ls -l) . . . . . . . .
4.2.1 Format d'achage . . . . . . . . . . . . . . . . .
4.2.2 Types de chiers . . . . . . . . . . . . . . . . . .
4.2.3 Mode d'accs au chier . . . . . . . . . . . . . . .
4.2.4 Nombre de liens . . . . . . . . . . . . . . . . . . .
4.3 Se dplacer dans l'arborescence (cd) . . . . . . . . . . . .
4.4 Acher le rpertoire courant (pwd) . . . . . . . . . . . .
4.5 Caractres spciaux pour le shell . . . . . . . . . . . . .
4.5.1 Gnration des noms de chiers (*,?, ) . . . . . .
4.5.2 Le caractre spcial . . . . . . . . . . . . . . .
4.5.3 Le caractre spcial # . . . . . . . . . . . . . . .
4.5.4 Autres caractres spciaux . . . . . . . . . . . . .
4.6 Acher le type d'un chier (le) . . . . . . . . . . . . . .
4.7 Rechercher des chiers dans l'arborescence (nd, locate)
5 Protection des chiers
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5.1 Changement des autorisations (chmod) . . . . . . . . . . . . . . . . . . . .
5.2 Masque pour les autorisations (umask) . . . . . . . . . . . . . . . . . . . .
TABLE DES MATIRE
iii
27
28
28
29
29
30
30
30
30
30
31
32
32
32
32
35
35
36
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Date et Heure (date) . . . . . . . . . . . . . . . . . . . .
Nom de l'ordinateur (hostname) . . . . . . . . . . . . . .
Nom du systme d'exploitation (uname) . . . . . . . . .
Information sur les utilisateurs (who, nger) . . . . . . .
Dernires connexions au systme (last) . . . . . . . . . .
Systme Network Information Service (NIS) . . . . . .
Espace disque occup . . . . . . . . . . . . . . . . . . . .
6.7.1 Place occupe par la branche d'un rpertoire (du)
6.7.2 Place libre d'un systme de chiers (df) . . . . . .
6.8 Nom du terminal utilis (tty) . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
3
3
3
3
3
3
3
3
7 Commandes pour la gestion des processus
4
8 Acher, imprimer, envoyer le contenu d'un chier
4
7.1
7.2
7.3
7.4
Processus en cours d'excution (ps) . . . . . . . . . . . . . . . . . . . . . .
Supprimer un processus en cours d'excution (kill) . . . . . . . . . . . . . .
Lancement automatique de processus des moments donns (at, crontab) .
Gestion du plan d'un processus par le shell . . . . . . . . . . . . . . . . . .
8.1 Acher le contenu d'un chier, concatner plusieurs chiers (cat) - Notion
de redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Acher les octets d'un chier (od) . . . . . . . . . . . . . . . . . . . . . .
8.3 Acher page page (more) - Notion de pipe . . . . . . . . . . . . . . . . .
8.4 Sorties sur les imprimantes . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.1 Informations sur le systme d'impression (lpstat, printcap) . . . . .
8.4.2 Lancement d'une requte d'impression (lpr) . . . . . . . . . . . . .
8.4.3 Informations sur les requtes d'impression (lpq) . . . . . . . . . . .
8.4.4 Suppressions de requtes d'impression (lprm, cancel) . . . . . . . .
8.5 Envoyer le contenu d'un chier (mail) . . . . . . . . . . . . . . . . . . . . .
8.6 Mise en page (pr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7 Passer en Postscript (a2ps) . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Gestion des chiers
9.1
9.2
9.3
9.4
9.5
9.6
9.7
Copier des chiers (cp) . . . . . . . . . . . . . . . . . . . .
Liens avec mme numro de i-node (ln) . . . . . . . . . . .
Liens symboliques (ln -s) . . . . . . . . . . . . . . . . . . .
Supprimer des chiers (rm) . . . . . . . . . . . . . . . . .
Dplacer, renommer des chiers (mv) . . . . . . . . . . . .
Sauvegarder sur les lecteurs de disquettes des stations Sun
Compression et dcompression (zip, gzip, compress) . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
TABLE DES MATIRES
v
10 Travail sur les rpertoires
10.1
10.2
10.3
10.4
10.5
10.6
Crer un rpertoire (mkdir) . . . . . . . . . . . .
Supprimer un rpertoire (rmdir, rm -r)) . . . . . .
Changer le nom d'un rpertoire (mv) . . . . . . .
Copier l'arborescence d'un rpertoire (cp -r) . . .
Lien symbolique (ln -s) . . . . . . . . . . . . . . .
Pliage de rpertoires en une seul chier (tar, cpio)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11 Expressions rgulires
55
55
55
55
56
56
57
58
11.1 Expressions rgulires reprsentant un seul caractre . . . . . . . . . . . . 58
11.2 Expressions rgulires reprsentant un ensemble de caractres d'un seul type 59
11.3 Autres expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . 60
12 diteur de texte (emacs, xemacs)
12.1 Entre et sortie . . . . . . . . . . . . . . .
12.1.1 Lancer emacs . . . . . . . . . . . .
12.1.2 Sortir de emacs . . . . . . . . . . .
12.2 Concepts de base . . . . . . . . . . . . . .
12.2.1 Description d'une fentre emacs . .
12.2.2 Commandes et associations de cls
12.2.3 Buers et fentres . . . . . . . . . .
12.2.4 Point d'insertion, marque, rgions .
12.2.5 Mode de travail . . . . . . . . . . .
12.3 Commandes . . . . . . . . . . . . . . . . .
12.3.1 Commandes de base . . . . . . . .
12.3.2 Autres commandes . . . . . . . . .
12.4 Personnalisation de emacs . . . . . . . . .
12.5 Complments pour les versions graphiques
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tri (sort) . . . . . . . . . . . . . . . . . . . . . .
Recherche d'une cha ne de caractres (grep) . . .
Compter les caractres, les mots, les lignes (wc) .
Conversion, suppression de caractres (tr) . . . .
Fractionnement vertical (cut) . . . . . . . . . . .
Comparaison du contenu de 2 chiers . . . . . . .
13.6.1 Dirences entre deux chiers texte (di) .
13.6.2 !galit du contenu de 2 chiers (cmp) . .
13.7 Traiter les lignes conscutives identiques (uniq) .
13.8 Extraire le dbut ou la n d'un chier . . . . . . .
13.8.1 Dbut d'un chier (head) . . . . . . . . . .
13.8.2 Fin d'un chier (tail) . . . . . . . . . . . .
13.9 Un diteur non interactif (sed) . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13 Manipulation des donnes des chiers
13.1
13.2
13.3
13.4
13.5
13.6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
62
62
63
63
63
64
66
67
68
68
68
71
71
72
73
73
74
74
75
76
78
78
78
79
79
79
79
80
TABLE DES MATIRE
vi
13.9.1 Description gnrale de l'diteur . . . . . . . .
13.9.2 Structure d'une ligne de programme . . . . . .
13.9.3 Format pour indiquer les lignes traiter . . .
13.9.4 Excution du programme . . . . . . . . . . . .
13.9.5 Commandes . . . . . . . . . . . . . . . . . . .
13.10Un langage d'dition de chiers (awk) . . . . . . . . .
13.10.1Description gnrale de la commande . . . . .
13.10.2Champs . . . . . . . . . . . . . . . . . . . . .
13.10.3Structure d'un programme . . . . . . . . . . .
13.10.4Cas particuliers pour une ligne de programme
13.10.5Slecteurs . . . . . . . . . . . . . . . . . . . .
13.10.6Actions . . . . . . . . . . . . . . . . . . . . .
13.10.7Fonctions, oprateurs . . . . . . . . . . . . . .
13.11Exemples de programmes . . . . . . . . . . . . . . . .
13.12Tableaux . . . . . . . . . . . . . . . . . . . . . . . . .
13.13D'autres commandes de manipulation de chiers . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
III Mcanismes d'interprtation du shell
14 Interprtation du shell. Mcanismes de base
14.1 Gnralits sur le shell . . . . . . . . . . . . . . . . . . . . . .
14.1.1 Dnition . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.2 Compatibilit des dirents shells . . . . . . . . . . . .
14.1.3 Commandes et processus, commandes internes au shell
14.1.4 Prompts . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.5 Environnement d'une commande ou d'un shellscript . .
14.1.6 Code retour d'une commande . . . . . . . . . . . . . .
14.2 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2.1 Redirections de la sortie standard . . . . . . . . . . . .
14.2.2 Redirection du chier d'erreur (2>) . . . . . . . . . . .
14.2.3 Envoi d'un message d'erreur (>&2) . . . . . . . . . . .
14.2.4 Redirection de l'entre standard (<) . . . . . . . . . .
14.2.5 Pseudo-chier /dev/null . . . . . . . . . . . . . . . . .
14.3 Pipe (j) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4 Regroupement des commandes . . . . . . . . . . . . . . . . . .
14.4.1 Regroupement entre parenthses . . . . . . . . . . . . .
14.4.2 Regroupement entre accolades . . . . . . . . . . . . . .
14.5 Processus en arrire-plan (&) . . . . . . . . . . . . . . . . . .
14.5.1 Gestion des jobs par ksh ou zsh . . . . . . . . . . . .
14.6 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.7 Substitution de commande . . . . . . . . . . . . . . . . . . . .
14.8 Mcanismes d'interprtation . . . . . . . . . . . . . . . . . . .
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
TABLE DES MATIRES
14.9 Inhiber l'interprtation du shell . . . . . . . . . . . . . .
14.10Recherche d'une commande par le shell . . . . . . . . . .
14.11Lancement de l'excution d'un shellscript . . . . . . . . .
14.11.1Lancement par le nom du shellscript . . . . . . .
14.11.2Lancement par l'appel de la commande interne .
14.11.3Lancement par l'appel explicite d'un shell . . . .
14.12Lancement explicite d'un shell . . . . . . . . . . . . . . .
vii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15.1 Paramtres, variables de position . . . . . . . . . . . . . . . . .
15.1.1 Paramtres des shellscripts . . . . . . . . . . . . . . . . .
15.1.2 Donner des valeurs aux paramtres de position (set) . . .
15.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.2.1 Identicateur . . . . . . . . . . . . . . . . . . . . . . . .
15.2.2 Aectation . . . . . . . . . . . . . . . . . . . . . . . . .
15.2.3 Dsignation de la valeur de la variable ($) . . . . . . . .
15.2.4 Dcomposition en mots des valeurs des variables de zsh .
15.2.5 Supprimer une variable (unset) . . . . . . . . . . . . . .
15.2.6 Variables spciales du shell . . . . . . . . . . . . . . . . .
15.2.7 Acher la valeur d'une variable (echo) . . . . . . . . . .
15.2.8 Entre de la valeur d'une variable au clavier (read) . . .
15.2.9 Porte d'une variable (export), environnement de travail
15.2.10Visualisation des variables disponibles (set, printenv) . .
15.3 Personnalisation de l'environnement . . . . . . . . . . . . . . . .
15.3.1 Options des shells (set, setopt) . . . . . . . . . . . . . . .
15.3.2 Fichiers de personnalisation . . . . . . . . . . . . . . . .
15.4 Stratgie pour la personnalisation de l'environnement . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Listes de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ordre de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Complments sur les redirections . . . . . . . . . . . . . . . . . . . . . .
16.4.1 Redirection de l'entre standard sur chier inclus (<<) . . . . . .
16.4.2 Redirection pour tout un shell (exec) . . . . . . . . . . . . . . . .
16.4.3 Descripteurs de chier suprieurs 2 . . . . . . . . . . . . . . . .
16.4.4 Redirection vers un chier dsign par son descripteur . . . . . . .
16.4.5 Ordre d'valuation des redirections . . . . . . . . . . . . . . . . .
16.4.6 Redirection sans commande avec zsh . . . . . . . . . . . . . . . .
16.5 Complments sur les variables . . . . . . . . . . . . . . . . . . . . . . . .
16.5.1 Valeurs par dfaut pour les variables . . . . . . . . . . . . . . . .
16.5.2 Modier l'environnement d'une commande . . . . . . . . . . . . .
16.5.3 Facilits de ksh et zsh pour le traitement des valeurs de variables
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15 Variables, environnement
16 Complments sur le shell
16.1
16.2
16.3
16.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
100
100
100
102
102
103
104
104
104
104
105
105
105
105
106
106
106
108
108
109
110
110
110
110
112
113
113
114
114
115
115
116
116
117
117
118
118
118
119
119
TABLE DES MATIRE
viii
16.5.4 Modication interactive de la valeur d'une variable sous zsh (vared) 12
16.5.5 Tableaux sous ksh et zsh . . . . . . . . . . . . . . . . . . . . . . . . 12
IV Programmation
17 Programmation des shellscripts
17.1
17.2
17.3
17.4
Tests divers (test, ... ], ... ]]) . . . . . . . . . . . . . .
Dcaler les paramtres de position (shift) . . . . . . . . .
Sortie d'un shellscript (exit) . . . . . . . . . . . . . . . .
Les structures de contrle . . . . . . . . . . . . . . . . .
17.4.1 if .. then .. else .. . . . . . . . . . . . . . . . . .
17.4.2 case ... esac . . . . . . . . . . . . . . . . . . . . .
17.4.3 for ... do ... done . . . . . . . . . . . . . . . . . .
17.4.4 while ... do ... done . . . . . . . . . . . . . . . . .
17.4.5 until ... do ... done . . . . . . . . . . . . . . . . .
17.4.6 Instructions lies aux boucles (continue, break) .
17.4.7 Problmes avec les boucles rediriges et les pipes .
17.5 Interception des signaux . . . . . . . . . . . . . . . . . .
17.6 Commandes internes diverses . . . . . . . . . . . . . . .
17.7 Rcursivit dans l'excution des shellscripts . . . . . . .
17.8 Calculs, traitement des cha nes de caractres . . . . . . .
17.8.1 Commande expr . . . . . . . . . . . . . . . . . .
17.8.2 Commande let . . . . . . . . . . . . . . . . . . . .
17.9 Traitement des cha nes de caractres . . . . . . . . . . .
17.10Aide pour traiter les options (getopts) . . . . . . . . . .
17.11Mise au point des shellscripts (set -xv) . . . . . . . . . .
12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
12
12
12
12
12
13
13
13
13
13
13
13
13
13
13
13
13
13
ix
Prsentation du polycopi
Ce polycopi est un support du cours donn dans direntes lires de l'Universit de
Nice-Sophia Antipolis.
Le cours est une introduction au systme d'exploitation Unix. Le but est de prsenter,
travers des cas concrets d'utilisation sous le systme Unix, les concepts essentiels des
systmes d'exploitation utiles un utilisateur averti.
La programmation des shellscripts qui fait si souvent gagner un temps prcieux dans
l'excution des t&ches rptitives ou complexes est prsente la n de ce cours et en
prsente en fait l'aboutissement.
Les chapitres de ce support de cours ne suivent pas ncessairement l'ordre de leur
prsentation dans orale le cours. Ce polycopi est plutt un manuel de rfrence qui aidera
l'utilisateur se remettre rapidement en mmoire les principales commandes et concepts
d'Unix. L'exhaustivit (impossible de toute fa'on) n'a pas t recherche. Une lecture du
manuel en ligne (commande man ) est indispensable pour conna tre toutes les commandes
et options de la dernire version installe. Mais cette aide en ligne est crite en anglais
et les informations essentielles sont souvent noyes dans les trs nombreuses options et
commandes, et les exemples sont trop souvent absents.
Ce cours n'aborde ni l'administration d'un systme Unix ni la programmation systme,
mme s'il donne quelques rudiments d'information concernant ces deux thmes.
Il ne suppose aucune connaissance en informatique si ce n'est quelques notions lmentaires sur l'architecture des ordinateurs et sur la programmation.
Un autre polycopi rassemble les notions et commandes lies l'utilisation des rseaux
informatiques. Ces deux cours devront tre complts par quelques connaissances de base
de l'interface graphique X Window, en particulier les notions de gestionnaire de fentres
et de ressources.
Le lecteur interess par l'implmentation des dirents Unix pourra consulter le livre
Unix Internals crit par Uresh Vahalia, ditions Prentice Hall (disponible la bibliothque
de l'universit de Nice).
Les remarques et les corrections d'erreurs peuvent tre envoyes par courrier lectronique l'adresse [email protected], en prcisant le sujet Poly Unix et programmation du
shell et la date de la version du polycopi.
Premire partie
Connaissances de base
Chapitre 1
Gnralits sur Unix
1.1 Systmes d'exploitation
Unix est un systme d'exploitation.
Un systme d'exploitation est un logiciel qui fournit un environnement d'excutio
pour les programmes qui vont s'excuter sur l'ordinateur. Il doit grer en particulier le
ressources que vont se partager les programmes. Il a, entre autres, la charge des fonction
suivantes, essentielles pour la bonne marche d'un ordinateur :
) gestion du processeur
) gestion de la mmoire centrale
) gestion du systme de chiers
) gestion des priphriques
Un ordinateur ne peut fonctionner sans systme d'exploitation. Un ordinateur donn
peut fonctionner avec plusieurs systmes d'exploitation * par exemple, certains PC pe
mettent l'utilisateur de travailler sous Unix ou sous Windows 95 ou NT.
1.2 Historique
1969 Ken Thompson crit Unix en assembleur dans les laboratoires de Bell (AT&T).
1973 Dennis Ritchie et Ken Thompson rcrivent Unix en langage C (seulement 10 % e
assembleur).
1974 Unix est distribu aux universits amricaines.
1975 Premire version d'Unix commercialise (licence pour le code source * version 6).
1977 Unix BSD (Berkeley Software Development) 1.0 de l'universit de Berkeley au
!tats)Unis.
CHAPITRE 1. GNRALITS SUR UNIX
4
1979 Unix Version 7. Commercialisation d'une licence binaire (moins onreuse que la
licence pour le code source).
1.5. STRUCTURE D'UNIX
SHELLSCRIPTS
1984 Unix Systme V
1991 Unix OSF/1
SHELL
NOYAU UNIX
MATERIEL
1.3 Standards et versions d'Unix
Unix est un systme ouvert : il n'est pas li un constructeur d'ordinateur ou une
socit d'dition de logiciels * AT&T a largement dius le code source d'Unix dans les
universits ses dbuts et de multiples Unix ont t dvelopps par des socits direntes.
Tous les grands constructeurs ont leur Unix, rcrit entirement par eux (Unix-like) ou
dvelopp partir d'une licence achete AT&T (Unix-based). Tous ces Unix respectent
un minimum de normes et il n'est pas trop dicile de porter une application d'un Unix
vers l'autre.
Les direntes versions d'Unix taient issues de Systme V de AT&T ou de Unix BSD
de l'universit de Berkeley. Au dbut des annes 1990, Open Software Fondation (OSF) a
dvelopp un nouvel Unix : OSF/1.
Le systme Solaris actuellement utilis sur de nombreux ordinateurs de l'universit de
Nice est issu de Unix Systme V.
La plupart des commandes que vous utiliserez en tant qu'utilisateur ordinaire ou dveloppeur d'applications sont les mmes dans toutes les versions d'Unix. Les dirences les
plus sensibles se trouvent au niveau de l'administration du systme.
La tendance actuelle est au rapprochement des direntes versions d'Unix, au moins au
niveau de l'utilisateur et du dveloppeur, autour de normes dnies par des groupements
d'utilisateurs, des constructeurs d'ordinateurs ou des diteurs de logiciels. Ces normes
spcient des interfaces : elles dnissent les signatures et smantiques (mais pas les implmentations) des fonctions qui constituent ces interfaces. Les trois normes principales
sont SVID (System V Interface Denition), POSIX (Portable Operating System based on
unIX) de l'IEEE et CAE (Common Applications Environment) de X/Open.
1.4 Proprits d'Unix
Unix est un systme d'exploitation
) d'usage gnral,
) multi-utilisateurs, multi-t&ches,
) interactif,
) orient temps partag,
APPLICATIONS
Fig.
1.1 ) Structure d'Unix
) portable,
) dont les systme de chiers sont hirarchiss en arbre,
) qui ore une compatibilit totale des entres-sorties (pour Unix, les priphrique
sont des chiers * voir 1.6.2),
) pour lequel il est trs facile d'ajouter de nouvelles commandes sans modier le noya
(gr&ce la grande puissance des langages des shells).
1.5 Structure d'Unix
1.5.1 Noyau
Le noyau est la partie centrale d'Unix. Il se charge des t&ches essentielles pour la bonn
marche du systme : gestion du systme des chiers, gestion du processeur et de la mmoir
centrale. Les drivers de priphriques sont intgrs au noyau. Ils grent les changes (le
entres-sorties) entre l'unit centrale et les priphriques.
Le noyau met la disposition des autres programmes des procdures appeles primitive
Les autres programmes peuvent inclure dans leur code des appels systme qui lancen
l'excution de ces primitives. Les primitives permettent de lancer de nouveaux processu
de lire ou d'crire sur des chiers, d'obtenir plus de place en mmoire centrale, etc... Ce
appels systme sont rpertoris dans la section 2 du manuel en ligne (voir 3.5).
Ce fonctionnement par primitives permet en particulier de rsoudre les problmes d'ac
cs concurrent aux informations du systme (sur un systme mono-processeur). En ee
les appels systme font entrer l'excution en mode noyau. Dans ce mode le processus es
assur de garder le processeur jusqu'au retour au mode utilisateur quand l'appel systm
est termin.
1.5.2 Shell
Le shell est l'interprteur de commandes. Quand un utilisateur tape des commande
Unix, ces commandes sont lues par le shell qui eectue ventuellement des traitement
CHAPITRE 1. GNRALITS SUR UNIX
6
1.6. ORGANISATION DES SYSTMES DE FICHIERS
avant de lancer l'excution de la commande. Le shell est une couche logicielle bien spare
du noyau. Il existe plusieurs shells dont les plus utiliss sont :
/
) le Bourne shell sh , le shell standard d'Unix AT&T,
) le C-shell csh , le shell d'Unix BSD * sa syntaxe rappelle le langage C,
) le Korn-shell ksh est une extension du Bourne shell. Il possde toutes les commandes
du Bourne shell (et il se comporte presque exactement comme lui pour ces commandes) et il comprend aussi d'autres commandes et fonctionnalits qui facilitent le
travail de l'utilisateur comme, par exemple, la gestion de l'historique des commandes
tapes par l'utilisateur, qui existe aussi dans le C-shell. On le trouve maintenant dans
la plupart des distributions Unix.
) le Z shell zsh est une extension du Korn-shell. Il ore en particulier la compltion et
la correction de commande : l'utilisateur peut lui demander de complter un nom de
commande et il propose des corrections l'utilisateur lorsque la commande comporte
une erreur, par exemple lorsqu'une commande a t mal orthographie.
Certaines commandes la disposition de l'utilisateur, sont programmes dans le shell
et celui-ci peut donc les excuter directement. Elles sont peu nombreuses * on trouve par
exemple les commandes cd ou pwd. On les appelle les commandes internes au shell. Les
autres commandes sont des commandes externes au shell. Pour les excuter le shell lance
un programme qui correspond un chier excutable situ dans l'arborescence des chiers.
Le shell possde un vritable langage avec des structures de programmation (alternatives, rptitions,...) et l'utilisateur peut crire ses propres commandes dans ce langage (le
programme s'appelle un shellscript). Une fois crites, ces nouvelles commandes peuvent
tre utilises exactement comme les commandes classiques d'Unix.
Le shell que nous utiliserons est zsh.
1.6 Organisation des systmes de chiers
1.6.1 Syst
me de chiers
Les chiers d'Unix sont enregistrs dans un ensemble structur hirarchiquement en
arbre, appel systme de chiers. Un systme de chiers est compos d'une racine et de
noeuds qui sont des chiers rpertoires (ces chiers contiennent des rfrences d'autres
chiers), et de chiers ordinaires qui contiennent des donnes et des programmes.
En gnral, plusieurs systmes de chiers sont monts sur le systme racine, c'est
dire celui qui contient le rpertoire / (voir commande df en 6.7.2). Ces systmes sont
enregistrs sur des disques physiques dirents ou sur un mme disque mais sur des partitions direntes (un disque physique peut tre divis en plusieurs disques logiques appels
partitions). Tous ces systmes de chiers sont vus par l'utilisateur comme un seul systme.
dev
etc
usr
students
classe1
Commandes et fichiers
système
Commandes
tmp
Commandes
Fichiers spéciaux
(périphériques)
bin
bin
classe2
bibi
ucb
local
lib
Commandes
bin
emacs
lib
toto
Commandes
bin
Fichiers de
l’étudiant toto
Commandes de
l’étudiant toto
Fig.
1.2 ) Arborescence des chiers
Des utilitaires de rseaux (comme NFS) permettent mme de voir des systmes implant
sur des machines direntes comme s'ils appartenaient une mme arborescence.
L'arborescence totale ressemble l'arborescence de la gure 1.2.
1.6.2 Types de chiers
Unix utilise les types de chiers suivants :
chiers ordinaires : ils contiennent les donnes ou les programmes. Ils n'ont aucun
structure particulire : ils sont considrs comme une suite d'octets. Il n'y a pa
de notion d'enregistrement ni d'accs par index. Si on veut un squentiel index, o
le programme (ou on l'achte dans le commerce) !
8
CHAPITRE 1. GNRALITS SUR UNIX
On peut cependant distinguer trois grands types de chiers ordinaires :
) les chiers binaires excutables, crits dans le code du processeur de la machine,
qui ont une structure particulire reconnue par le noyau Unix.
) les chiers de textes qui sont structurs en lignes.
En Unix, le caractre de n de ligne est par convention le caractre de code
ASCII 10 ( linefeed en anglais).
On remarquera que ce n'est pas le mme caractre que celui utilis par les
systmes d'exploitation MS-DOS (sur PC) ou Mac-OS (sur Macintosh), ce qui
oblige eectuer un traitement minimum pour transfrer des chiers de textes
entre ces systmes.
) les autres chiers qui n'ont pas de structure particulire pour Unix (mais peuvent
avoir une structure particulire adapte au logiciel qui les a crs).
rpertoires : ils sont les noeuds de la structure arborescente des chiers. Ils contiennent les
identicateurs (i-nodes) d'autres chiers. Ils correspondent des sous-bibliothques
ou dossiers qui contiennent d'autres chiers.
chiers spciaux : ils sont lis un priphrique (/dev/tty01 est par exemple li un
terminal) * ils correspondent des programmes (pilotes * drivers en anglais) qui grent
les changes avec les priphriques : disques, terminaux, imprimantes, streamers, lecteurs de bandes, etc.
liens symboliques : ils contiennent le nom d'un autre chier et permettent des indirections.
sockets : ils sont utiliss pour les liaisons inter-processus * ils ne seront pas tudis ici.
Unix Systme V utilise aussi les pipes nomms qui sont utiliss pour la communication
entre les processus. Ils ne seront pas tudis ici.
Chapitre 2
Acteurs/objets du monde Unix
Ce chapitre expose quelques notions et concepts de base sur le fonctionnement d'Unix
Les commandes associes ces notions seront tudies dans les chapitres suivants.
Les acteurs/objets principaux que l'on rencontre en Unix sont les utilisateurs, les pro
cessus et les chiers.
2.1 Utilisateurs
2.1.1 Un utilisateur dans le syst
me
Nom, mot de passe, uid
Un utilisateur est repr par son nom qu'il doit taper au moment de l'entre dans
systme.
Chaque nom correspond un numro d'utilisateur (un nombre entier) : le uid (use
identier ). Plusieurs utilisateurs peuvent avoir un mme uid mais cette possibilit n'es
utilise que pour quelques pseudo-utilisateurs du systme qui ont par exemple besoin de
autorisations du super-utilisateur (voir 2.1.2) pour accomplir une t&che bien dnie.
Un utilisateur s'authentie lors de son entre dans le systme gr&ce son mot de pass
Groupes d'un utilisateur
Un utilisateur appartient un groupe d'utilisateurs dont le numro est enregistr dan
la ligne rserve cet utilisateur dans le chier /etc/passwd (ou dans les chiers systm
qui jouent un rle quivalents * voir ci-dessous page 10 la section sur les chiers systme)
La notion de groupe permet plusieurs utilisateurs de partager certains droits pou
l'utilisation des chiers appartenant au groupe (voir 2.4 et 2.3.3).
La plupart des Unix modernes permettent un utilisateur d'appartenir plusieur
groupes en plus de son groupe principal (celui qui est enregistr dans le chier des mot
de passe).
CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX
10
Les groupes ne sont pas grs de la mme fa'on par les dirents types d'Unix. Nous
n'tudierons pas cette notion en dtails dans ce cours.
Rpertoire HOME
Un utilisateur possde un rpertoire HOME dans lequel il est positionn lorsqu'il entre
dans le systme. Ce rpertoire est choisi par l'administrateur en fonction de l'utilisateur.
En gnral, le nom terminal de ce rpertoire est le nom de l'utilisateur et il est plac dans
un rpertoire rserv sa fonction dans l'institution. Par exemple, l'tudiant jean en
deuxime anne d'informatique aura le rpertoire HOME /students/info2/jean.
Programme de dmarrage
L'administrateur attribue chaque utilisateur un programme de dmarrage qui sera
excut quand l'utilisateur entrera dans le systme. Pour vous, c'est le shell zsh.
Attributs d'un utilisateur
En rsum, chaque utilisateur est associ :
) un nom,
) un mot de passe,
) un uid,
) un ou plusieurs groupes,
) un rpertoire HOME,
) un programme de dmarrage.
Fichiers systme
Les informations sur un utilisateur sont enregistres dans le chier /etc/passwd. Pour
des raisons de scurit ou de commodit (pour grer un rseau de machines), l'administrateur peut ajouter des utilitaires de gestion du systme (Yellow pages ou NIS, Kerberos,
etc.). Dans ce cas, le chier /etc/passwd peut ne pas contenir toutes les informations
concernant les utilisateurs (par exemple, les mots de passe sont remplacs par *) ou
mme aucune information sur certains utilisateurs (ces informations ne sont enregistres
que sur certaines machines du rseau * voir en particulier 6.6).
2.2. PROCESSUS
1
2.1.2 Super-utilisateurs
Les utilisateurs de uid 0 sont appels des super-utilisateurs. Ces utilisateurs ont de
droits que les autres utilisateurs n'ont pas. Ils peuvent, par exemple, changer le mot d
passe des autres utilisateurs et changer les autorisations ou le propritaire de n'import
quel chier de l'arborescence.
2.1.3 Administrateur du syst
me
Un systme Unix doit tre gr par un administrateur qui est responsable du bo
fonctionnement du systme. Voici quelques unes de ses t&ches :
) enregistrer les nouveaux utilisateurs et crer leur environnement de travail,
) installer les nouvelles versions des logiciels,
) reprer les problmes qui empchent le systme de fonctionner correctement,
) nettoyer priodiquement le disque des chiers non utiliss,
) eectuer rgulirement des sauvegardes des donnes et des programmes.
Pour beaucoup des t&ches qu'il doit accomplir, l'administreur doit entrer dans le systm
comme super-utilisateur.
2.2 Processus
L'unit d'excution est le processus. Toute action est excute par un processus. Tous le
Unix modernes orent une unit plus lgre appele thread qui permet un processus d
faire excuter une t&che par plusieurs sous-t&ches qui s'excutent en parallle et partagen
le mme espace mmoire. Nous ne les tudierons pas dans ce cours.
Chaque processus est identi par le systme par un numro de processus (pid * proces
identier ).
Une commande tape par l'utilisateur peut engendrer un ou plusieurs processus, o
n'engendrer aucun nouveau processus si la commande est interne au shell.
Unix est multi-t&che. Tous les processus en cours d'excution se partagent le processeur
de la machine. Chaque processus re'oit l'usage du processeur pendant un laps de temp
assez court (environ un centime de seconde) pour que l'utilisateur ne s'aper'oivent pa
de la prsence des autres processus pendant les priodes d'interaction avec le programm
(entres-sorties avec le clavier ou avec la souris).
Un processus travaille dans son propre environnement (en particulier avec ses propre
variables). A un moment donn, son environnement est reprsent par une image qui es
une sorte de clich (au sens photographique) du processus.
1. mme si la machine est a plusieurs processeurs, ceux-ci sont habituellement bien moins nombreu
que les processus
CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX
12
L'image d'un processus est compose de :
) son code
) les donnes associes (traites par le code)
) les chiers ouverts et leur tat
) le rpertoire courant
) les informations du systme sur le processus (propritaire, terminal associ, etc.)
On remarquera en particulier qu' un moment donn de son excution un processus a
un rpertoire courant o- il est situ.
Tout le code du programme n'est pas ncessairement en mmoire durant l'excution.
Le code est dcoup en pages par le systme et seules les pages ncessaires sont charges en
mmoire centrale. Au cours de l'excution du programme des pages peuvent tre transportes du disque vers la mmoire centrale si la page n'est plus ncessaire et que le systme a
besoin de place en mmoire centrale, et faire le chemin inverse lorsque la page est ncessaire
l'excution du programme. Ce systme de gestion de la mmoire s'appelle le demand
paging . La zone du disque rserve ces allers et retours s'appelle la zone de swap .
2.2.1 Signaux envoys aux processus
Durant son excution, un processus peut recevoir un signal. La plupart des signaux
interrompent l'excution du processus mais celui-ci peut les intercepter. Il peut alors effectuer un traitement spcial et choisir ensuite de continuer s'excuter ou d'arrter son
excution (voir 7.2 et 17.5).
Les signaux peuvent tre envoys par :
) un processus, avec la commande ou l'appel systme kill (voir 7.2),
) le noyau, engendrs par la frappe d'une touche du clavier par l'utilisateur pour interrompre (ou stopper momentanment) tous les processus lis au terminal (notion
tudie en 2.2.2),
) le noyau, engendrs par des erreurs venant du matriel ou du logiciel.
Voici quelques numros, noms et descriptions de signaux utiles conna tre (on les trouve
dans le chier /usr/include/signal.h) :
2.2. PROCESSUS
1
1
HUP
(hangup ) envoy ses processus quand on sort de la session de travail ou
quand se dconnecte par un modem
2 INT
envoy au processus en avant-plan dans le terminal dans lequel la touche
d'interruption a t tape (voir 3.3 et 3.7.1)
3 QUIT comme INT, mais cre souvent un chier core
9 KILL signal qui ne peut tre intercept (voir commande trap en 17.5) et qui va
donc tuer coup s.r le processus qui le re'oit
15 TERM (terminate ) envoy par dfaut par la commande kill (voir 7.2). Pour
terminer un processus d'une manire lgante si possible
18 TSTP suspend un processus (touche Ctrl Z)
19 CONT pour continuer aprs une suspension
2.2.2 Terminal de contrle d'un processus, excution en arri
re
plan
Les processus lancs par un utilisateur restent lis au terminal d'o- ils ont t lanc
appel terminal de contrle du processus. Le systme peut ainsi reprer les processus qu
recevront le signal engendr par la frappe de la touche d'annulation ou les processus qu
seront arrts si l'utilisateur teint son terminal.
Un utilisateur peut lancer certains processus en arrire-plan (voir 14.5). Ces processu
deviennent indpendants du terminal : ils s'excutent sans intervention de l'utilisateur e
sans que celui-ci ait attendre la n de leur excution. Il peut ainsi lancer plusieurs t&che
en parallle (mais sans relle synchronisation entre elles). Ces processus ne seront pa
arrts si l'utilisateur appuie sur la touche d'annulation mais ils peuvent toujours tre tu
par la commande kill (voir 7.2). Ils ne peuvent pas lire les caractres taps sur le termina
mais ils peuvent toujours y crire.
Des processus peuvent tre lancs automatiquement par le systme, en arrire-pla
(comme le systme de spool pour l'impression tudi en 8.4). Ces processus sont appe
ls des daemons, acronyme de l'anglais deferred auxiliary execution monitor c'est--dir
programme de contrle d'excution dire. On les appelle souvent dmons en fran'ais
2.2.3 Propritaires et groupes eectifs et rels d'un processus
Chaque processus a un propritaire eectif et un propritaire rel. Le propritaire r
est l'utilisateur qui a lanc la commande qui a gnr les processus. Le propritaire eect
dtermine les droits du processus dans le systme et en particulier les actions autorise
sur les chiers (voir 2.4).
Le plus souvent le propritaire eectif est le propritaire rel. Il existe une exceptio
importante lie la notion de set user id tudie en 2.4.2.
De mme, chaque processus a un groupe rel (le groupe de l'utilisateur qui a lanc l
commande qui a gnr les processus) et un groupe eectif (voir 2.4.2). Nous n'tudieron
pas ces notions en dtails dans ce cours.
CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX
14
2.4. PROTECTION DES FICHIERS
1
2.2.4 Cration d'un nouveau processus, arbre des processus
2.3.3 Propritaire et groupe d'un chier
Chaque processus (sauf le processus de pid 1) est cr par son processus parent. On a
ainsi un arbre gnalogique des processus crs dans une session. Les pid ainsi que les pid
des parents de tous les processus sont achs par la commande ps.
Au moment de sa cration, le propritaire d'un chier est l'utilisateur qui l'a cr. Seu
un super-utilisateur (voir 2.1.2) peut changer le propritaire d'un chier.
Un chier a aussi un groupe qui est le nom d'un groupe d'utilisateur. C'est le plu
souvent le groupe de l'utilisateur qui a cr le chier. Cette notion de groupe facilite
partage de chiers entre plusieurs utilisateurs. Nous n'tudierons pas cette notion en dtai
dans ce cours.
2.3 Fichiers
Les donnes (que l'on veut conserver entre deux sessions) et les programmes sont enregistrs dans des chiers.
On a vu en 1.6 que Unix utilise aussi la notion de chier pour organiser l'ensemble des
chiers (rpertoires) et pour travailler avec les priphriques (chiers spciaux).
2.3.1 i-node
Outre le contenu du chier, le systme conserve d'autres informations (par exemple le
propritaire) sur chacun des chiers de l'arborescence.
Ces informations lui seront utiles pour la gestion et la scurit du systme. Ces informations ne sont pas enregistres avec le contenu du chier, elles sont enregistres dans la
table des i-nodes (une table pour chaque systme de chiers) qui est conserve dans un
endroit spcial sur le disque. Chaque chier a un numro de i-node (un nombre entier) qui
indique dans quelle entre de la table des i-nodes les informations systme le concernant
sont ranges.
2.3.2 Structure interne des rpertoires
La liaison entre les noms des chiers et les informations enregistres dans le i-node du
chier se fait gr&ce aux rpertoires.
Les rpertoires sont des chiers de l'arborescence mais leur contenu dire des chiers
ordinaires. Un chier rpertoire contient le nom et le numro de i-node des chiers placs
directement sous ce rpertoire dans l'arborescence des chiers.
Les informations concernant un chier sont donc conserves dans trois endroits dirents :
) le nom du chier est conserv dans le rpertoire contenant le chier,
) les informations systme sont conserves dans le i-node du chier,
) le contenu du chier (les donnes) est enregistr dans les blocs du disque dont les
adresses sont dans le i-node.
2.3.4 Mode d'acc
s au chier
A chaque chier sont attaches les autorisations pour le propritaire du chier, pou
les membres du groupe du chier (mais sans le propritaire), pour les autres (le rest
du monde, ceux qui ne sont pas le propritaire et qui n'appartiennent pas au groupe d
chier). Ces autorisations forment le mode d'accs au chier. Elles sont aches par l
commande ls -l (voir gure 4.2 et section 4.2) juste aprs le type du chier.
Les autorisations peuvent tre (leur signication exacte sera tudie en 2.4.1) :
) l'autorisation de lecture (r pour la commande ls
-l
) l'autorisation d'criture (w pour la commande ls
-l
) l'autorisation d'excution (x pour la commande ls
)
)
)
-l
Il existe aussi des autorisations spciales rserves certains chiers excutables (elle
accordent des droits spciaux aux processus qui excutent ces chiers * elles sont tudie
en dtail en 2.4.2) :
) set user id * suid en abrg (s la place du x dans les autorisations du propritair
pour la commande ls -l)
) set group id * sgid en abrg (s la place du x dans les autorisations du group
pour la commande ls -l)
2.4 Protection des chiers
La protection des chiers en Unix est fonde sur les droits des processus sur les chier
(rappelons que le processus est l'unit lmentaire d'excution en Unix). Un processus n'es
pas autoris faire n'importe quelle action sur les chiers. Par exemple, il peut avoir
droit de lire le contenu d'un chier mais pas de supprimer ce chier. Nous allons examine
dans cette section comment sont dtermins les droits d'un processus sur un chier.
16
CHAPITRE 2. ACTEURS/OBJETS DU MONDE UNIX
2.4.1 Droits associs aux autorisations
Les autorisations qui constituent le mode d'accs au chier ne dnissent pas toujours
d'une fa'on vidente les actions qu'un processus a le droit d'excuter sur le chier. Par
exemple, un processus peut avoir le droit de supprimer un chier sans avoir l'autorisation
w sur ce chier. On peut aussi s'interroger sur la signication de l'autorisation x pour
un rpertoire.
L'autorisation de lecture correspond au droit de lire le contenu du chier, l'autorisation
d'criture correspond au droit d'crire dans le chier, l'autorisation d'excution correspond
au droit d'excution du chier si le chier n'est pas un rpertoire et au droit de travailler
dans son arborescence si le chier est un rpertoire.
Pratiquement, on a le tableau suivant :
Type de Fichier
Fichier ordinaire
Rpertoire
Autorisation
Lecture
r lire le contenu du chier
lister les sous-chiers
Ecriture
w modier le contenu du chier ajouter, enlever des souschiers
Excution
x excuter le chier
travailler dans le rpertoire
Pour mieux comprendre le tableau ci-dessus il est bon de se rappeler la structure interne
d'un rpertoire (voir 2.3.2). Ainsi, on comprend que, si on veut supprimer un chier d'un
rpertoire, il faut et il sut d'avoir l'autorisation d'crire dans le rpertoire (pour eacer
l'entre correspondant au chier dans le rpertoire).
Donc, si l'on veut protger un chier sans interdire l'accs au rpertoire dans lequel il
est situ, il faut enlever l'autorisation d'criture dans le rpertoire parent pour interdire
la suppression de ce chier et enlever l'autorisation d'criture sur le chier lui-mme pour
interdire la modication du chier.
2.4.2 Autorisations set user id et set group id
Les droits d'un processus sur un chier dpendent du propritaire et du groupe eectifs
d'un processus et pas du propritaire et du groupe rels.
Habituellement le propritaire et le groupe eectifs sont le propritaire et le groupe rels
(l'utilisateur qui a lanc le processus, et son groupe). Cependant, si le code excut par
un processus est celui d'un chier binaire qui a le bit set user id (resp. group user id)
positionn, le propritaire eectif (resp. le groupe eectif) du processus est le propritaire
(resp. le groupe) du chier binaire.
Ce fait est par exemple utilis par la commande passwd pour permettre un simple
utilisateur de changer son mot de passe dans des chiers qu'il n'est pas normalement
autoris modier : seul le super-utilisateur root a le droit de modier le chier des mots
de passe mais la commande passwd a l'autorisation set user id et appartient root. Le
simple utilisateur a donc tous les droits de root le temps qu'il excute la commande passwd
(qui ne lui permet de modier que son propre mot de passe). Il rcupre ses droits de
simple utilisateur ds la n de l'excution de la commande passwd.
2.4. PROTECTION DES FICHIERS
2.4.3 Mcanisme de protection des chiers
1
On a vu en 2.4.1 les actions qu'un processus a le droit d'eectuer sur un chier * elle
dpendent des autorisations que ce processus a sur le chier lui-mme et sur les rpertoire
parents de ce chier. Voici les rgles qui dterminent les autorisations d'un processus su
un chier :
) si le propritaire eectif du processus et le propritaire du chier sont les mmes, le
autorisations du processus sont les autorisations du chier accordes au propritair
) sinon, si le groupe du chier est le groupe eectif du processus ou l'un des groupe
de l'utilisateur chier, les autorisations du processus sont les autorisations du chie
accordes au groupe,
) sinon, les autorisations du processus seront celles accordes aux autres.
CHAPITRE 3. PREMIERS PAS DANS LE SYSTME
18
Chapitre 3
Premiers pas dans le systme
Ce chapitre donne quelques informations utiles pour commencer travailler dans un
systme Unix. Certaines notions voques sont dveloppes dans la suite du cours (par
exemple, les chiers de conguration du shell).
3.1 Entre dans le systme
Lorsqu'un terminal est allum, certains processus sont automatiquement lancs par le
systme pour grer les entres et les sorties depuis ce terminal. En particulier, un processus
est lanc pour attendre l'entre d'un nom d'utilisateur et d'un mot de passe.
Le nom d'utilisateur est attribu par l'administrateur du systme.
3.1.1 Changer son mot de passe (passwd)
Par prudence, l'utilisateur doit changer le mot de passe que l'administrateur lui a
attribu lorsqu'il entre pour la premire fois dans le systme.
passwd
permet d'entrer un nouveau mot de passe.
Remarque 3.1
Sur les systmes dont les mots de passe sont grs par le systme NIS (voir 6.6),
les mots de passe (et plusieurs autres chiers utiliss par le systme) de plusieurs
machines sont centraliss sur une seule machine. La commande pour changer le mot
de passe est alors yppasswd qui a la syntaxe :
yppasswd nom-login
L'utilisateur doit entrer l'ancien mot de passe avant de donner le nouveau. Pour viter
des fautes de frappe (impossibles voir puisque le mot de passe ne s'ache pas l'cran),
le nouveau mot de passe doit tre entr deux fois. Seul le propritaire du mot de passe (ou
le super utilisateur) peut entrer un nouveau mot de passe. Le mot de passe doit comporter
au moins 6 caractres.
3.2. SORTIE DU SYSTME
1
Dans un mot de passe on peut utiliser tous les caractres sauf # et @. Dans les compa
raisons pour tester si un mot de passe est valable, les majuscules et les minuscules ne son
pas quivalentes.
Pour des raisons de scurit, l'administrateur peut imposer la modication du mot d
passe intervalles rguliers.
3.1.2 Dmarrage d'une session
Aprs que l'utilisateur ait entr son nom et son mot de passe, certaines actions son
automatiquement eectues par Unix :
- le shell de dmarrage est lanc (le plus souvent zsh pour les tudiants de l'universit
de Nice),
- le rpertoire HOME devient le rpertoire courant,
- des chiers d'initialisation sont automatiquement lancs. Ils initialisent l'environne
ment de l'utilisateur. Ils donnent en particulier des valeurs initiales aux variable
TERM (nom du type de terminal, le plus souvent xterm si on travaille sous X
Window) et PATH (voir 3.7.2). Ces chiers sont tudis plus en dtails en 15.3.
Remarque 3.2
Si on travaille sous X Window, une variable importante est DISPLAY qui indiqu
aux clients X (programmes qui utilisent le systme graphique X Window) avec qu
terminal clavier-cran-souris ils doivent travailler.
3.2 Sortie du systme
La commande exit permet de sortir d'un shell. S'il s'agit du shell de connexion, l
session de travail se termine.
3.3 Touches spciales
Quelques touches/caractres ont des signications spciales (Ctrl C s'obtient au clavie
en maintenant appuye la touche Ctrl] du clavier tout en appuyant sur la touche C) :
Ctrl S interrompt la transmission des caractres entre le terminal et le programme e
cours
Ctrl Q rtablit la transmission en librant tous les caractres taps depuis un prc
dent Ctrl S
Ctrl D est transmis comme une n de chier par le driver de terminal s'il est l'uniqu
caractre d'une ligne (voir 8.1).
Elle permet donc de terminer un shell la place de la commande exit, sauf
l'utilisateur inhibe cette fonction pour viter des sorties involontaires en pla'an
CHAPITRE 3. PREMIERS PAS DANS LE SYSTME
20
la commande interne set -o ignoreeof du shell dans un chier d'initialisation
du shell (voir 15.3). Il est en eet facile de taper par erreur Ctrl] D au lieu, par
exemple, de Shift] D.
La touche Ctrl] D permet aussi d'eacer le caractre sur lequel se trouve le
curseur quand on modie une ligne de commande.
Ctrl C interrompt l'excution d'une commande
Ctrl U eace la ligne de commande en cours d'criture
Les quatre 0ches permettent de rappeler les commandes dj tapes et de se dplacer
dans ces commandes pour les modier (tout caractre tap s'insre dans la commande).
3.4 Format des commandes Unix
Une grande partie des commandes Unix ont t crites l'origine par des utilisateurs
et ont t intgres dans le lot des commandes standards. Dans un premier temps, aucune
syntaxe standard n'avait t clairement choisie pour le format des options des commandes.
Une consquence f&cheuse est que certaines options qui se correspondent dans des commandes direntes, peuvent avoir des noms et des syntaxes direntes. Par exemple, pour
dsigner un sparateur de champ, la commande sort utilise -d alors que la commande
cut utilise -t.
La syntaxe gnrale des commandes Unix est :
commande options... arguments...
Les arguments indiquent les objets sur lesquels la commande va agir et les options
indiquent des variantes dans l'excution de la commande.
Les options sont le plus souvent prcdes d'un tiret -. L'ordre des options est le plus
souvent indirent et plusieurs options peuvent tre regroupes derrire un seul tiret.
Les arguments peuvent tre absents et, dans ce cas, prennent des valeurs par dfaut.
Exemples 3.1
(a) date
(b)
ls -la
(c)
ls -l /users/students
(d)
ls /users/students
3.5. CONSULTATION DU MANUEL EN LIGNE (MAN)
2
3.5 Consultation du manuel en ligne (man)
La commande man permet de consulter le manuel de rfrence des commandes Unix
man -s numro-section ] commande
ache les pages du manuel de rfrence sur la commande et dans la section indique. Su
certaines versions de man le numro de la section est donn seul, sans tre prcd d
l'option -s. 1 est le numro de section par dfaut.
Les direntes sections sont les suivantes (sur un Unix Solaris * on peut trouver de
variantes sur les dirents Unix) :
1. commandes pour l'utilisateur (ls, sort, etc.),
2. appels systme (pour les programmeurs en langage C),
3. fonctions diverses de direntes librairies (pour les programmeurs en langage C),
4. information sur les formats de chiers (passwd, group, etc.),
5. informations diverses,
6. jeux et dmonstrations,
Les informations pour l'administration du systme sont donnes dans la section 1M.
Chaque section a une entre particulire intro qui la dcrit et donne quelques info
mations gnrales.
Exemples 3.3
(a) man man
(b)
man ls
(c)
man -s 2 intro
(ou man
2 intro
suivant les Unix)
man -k mot-cl
ache une ligne sur chaque entre (en gnral le nom d'une commande Unix) du manu
qui contient mot-cl dans la section NAME (qui comporte une description succincte d
la commande) du manuel.
Dans les manuels de rfrence,
] indique les options ou les arguments facultatifs,
arg... indique que l'argument arg peut tre rpt.
Remarque 3.3
Pour que cette option fonctionne, l'administrateur doit eectuer une indexation pra
lable des noms de commandes qui sont rpertories dans le manuel.
Exemple 3.2
Exemple 3.4
ls -abcCdfFgilmnopqrRstux] files...]
man -k directory
CHAPITRE 3. PREMIERS PAS DANS LE SYSTME
22
3.6 Nom d'un chier, nom absolu, nom relatif
Le nom terminal est compos d'au plus 14 caractres si l'on veut rester compatible
avec toutes les versions d'Unix systme V (jusqu' 255 caractres dans toutes les versions
rcentes d'Unix). Tous les caractres du code ASCII sont autoriss sauf / et le caractre
de code 0.
Le nom (ou chemin) absolu est compos du nom terminal prcd du chemin d'accs
ce chier depuis la racine. Par exemple, /users/students/jean/ache Le premier /
dsigne le rpertoire racine. Les / suivants servent de sparateurs entre les noms des
rpertoires et le nom terminal.
Ce nom absolu est souvent lourd manier car il peut tre trs long. Un chier peut tre
dsign par son nom (ou chemin) relatif qui correspond la position du chier relativement
au rpertoire courant o- se trouve le processus qui dsigne le chier (voir 2.2). Un nom est
relatif quand il ne commence pas par un /.
Exemple 3.5
Si l'utilisateur (plus prcisment le processus qui excute le shell courant de l'utilisateur) se trouve dans le rpertoire /users/students/jean, il pourra dsigner le chier
de l'exemple ci-dessus par ache. S'il se trouve dans le rpertoire /users/students,
il pourra dsigner ce chier par jean/ache.
3.7. COMMANDES
2
peuvent tre appeles par leur nom terminal. Il n'est pas ncessaire de taper leur nom
absolu ou relatif.
On peut par exemple taper 'man' au lieu de '/bin/man' parce que le rpertoire /bi
fait partie de la liste de rpertoires de la variable PATH.
On peut acher la valeur de PATH avec la commande (en gnral la liste est plu
longue que la rponse donne ici * (~) est le prompt) :
(~) echo $PATH
/bin:/usr/bin:/users/students/toto/bin:/usr/ucb:.
La valeur est une suite de noms de rpertoires spars par :. Le rpertoire courant peu
tre indiqu par un ., ou par : au dbut ou la n de la liste.
Pour des raisons de scurit, il n'est pas conseill de mettre le rpertoire courant a
dbut de la liste. En eet, la liste est parcourue de gauche droite pour rechercher un
commande et on n'est pas certain de ne pas avoir par exemple un chier ls pig dan
le rpertoire courant, lorsque l'on se dplace dans l'arborescence et que l'on lance cett
commande.
Cette variable est initialise par l'administrateur du systme au moment de la cratio
de l'utilisateur. L'utilisateur peut ensuite modier sa valeur. Le plus souvent cette valeu
est donne dans le chier .zshenv si on travaille avec zsh (voir 15.3).
3.7 Commandes
Remarque 3.4
La variable PATH n'est utilise pour rechercher une commande que si le nom de l
commande ne comporte aucun /. Si vous tapez bin/cmd, la commande ne ser
recherche que dans le rpertoire bin situ sous le rpertoire courant et pas sou
tous les rpertoires bin de tous les rpertoires lists dans la variable PATH. Tape
./cmd est un bon moyen d'excuter une commande de son rpertoire courant, alor
que cmd risque d'excuter un autre cmd situ dans un des rpertoires de la variab
PATH.
3.7.1 Lancer une commande, supprimer un processus
3.7.3 Nom complet et type d'une commande (whence, whereis)
.
..
Noms relatifs particuliers :
dsigne le rpertoire courant (o- l'on se trouve)
dsigne le rpertoire parent du rpertoire courant
Lorsqu'il a la main (le prompt est ach) l'utilisateur peut lancer une commande en
tapant son nom suivi ventuellement de ses options et de ses arguments.
La plupart des commandes peuvent s'interrompre en tapant sur la touche d'annulation.
Cette touche est le plus souvent Ctrl] C ou la touche DEL].
Certaines commandes peuvent se protger contre une interruption par la touche d'annulation. Dans ce cas, on peut tout de mme les interrompre par la commande kill (voir 7.2).
Un processus lanc en arrire-plan est automatiquement protg d'une interruption par
la touche d'annulation et la seule fa'on de l'interrompre est d'utiliser la commande kill.
3.7.2 Nom d'une commande, variable PATH
Pour faciliter le travail de l'utilisateur, les commandes qui sont situes dans la liste
des rpertoires enregistre dans la variable PATH (attention, le nom est en majuscules)
Comme on vient de le voir, la facilit oerte par la variable PATH provoque parfois de
problmes. Sous ksh et zsh (mais pas sous sh ), la commande whence permet de savoir o
se situera la commande excute :
whence -vp] commande
indique comment serait interprte la commande si elle tait tape : fonction, command
interne du shell, alias ou chemin absolu pour un chier situ dans un des rpertoires de l
variable PATH.
-v est l'option verbeuse un peu plus bavarde. Avec l'option -p, on demande de n
rechercher que les chiers excutables (et pas les fonctions, commandes internes ou alias
Certaines commandes peuvent se retrouver plusieurs endroits de l'arborescence. C
sont souvent des versions direntes. On peut par exemple avoir les versions Unix BSD
et Unix OSF d'une commande. Pour retrouver toutes les versions qui se trouvent de
emplacements standards de l'arborescence, on dispose de la commande whereis . Cett
24
CHAPITRE 3. PREMIERS PAS DANS LE SYSTME
2
commande donne aussi les emplacements de pages du manuel en ligne et des sources des
programmes.
3.7.4 Compltion des commandes par zsh
Avec zsh, l'utilisateur peut utiliser la touche Tab] pour complter les noms de commandes ou les noms de chiers.
S'il y a plusieurs possibilits, zsh complte avec le plus de caractres qu'il peut et envoie
un beep sonore. L'utilisateur peut avoir les direntes possibilits en tapant Ctrl D.
S'il ne peut complter, il envoie un beep sonore.
Pour entrer une tabulation dans une commande, l'utilisateur doit la faire prcder de
Ctrl V.
Deuxime partie
Commandes
2
Chapitre 4
Commandes lies l'arborescence des
chiers
4.1 Visualisation de l'arborescence (ls)
ls options...] fichiers...]
donne des informations pour chaque chier spci (pour le rpertoire en cours si aucu
chier n'est spci). Le type d'information donn dpend du type du chier :
) si le chier cit est un rpertoire, ls ache des renseignements sur les chiers (de tou
types, pas seulement les chiers ordinaires) qui sont directement sous ce rpertoir
Sans option, seuls les noms terminaux (pas les noms absolus ou relatifs) des chier
sont donns.
) si un chier cit n'est pas un rpertoire, ls ache des renseignements sur ce chie
Le nom du chier est donn (tel qu'il a t donn dans la ligne de commande : nom
relatif ou absolu). Sans option, c'est surtout utile quand on emploie des caractre
spciaux (* ou ? par exemple, tudis en 4.5) dans la ligne de commande.
Options
-l
-a
-A
-d
-t
-i
-R
-g
format dtaill (voir 4.2)
liste aussi les noms de chiers qui commencent par un . (qui ne sont pas no
malement lists)
comme l'option -a mais les rpertoires . et .. ne sont pas achs
si l'argument est un rpertoire, liste seulement son nom (et pas les chiers qu
sont sous ce rpertoire)
trie par date de dernire modication (sinon la liste des chiers est trie pa
dfaut par ordre alphabtique), les plus rcemment modis en premier
ache au dbut de la ligne le numro de i-node des chiers
listage rcursif des sous-rpertoires
ache le groupe du chier quand elle est associe l'option -l (utile seulemen
en Unix BSD * voir remarque (a) de 4.2.1)
28
CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS
$ ls -l /
total 20954
lrwxrwxrwx
drwxr-xr-x
drwxr-xr-x
lrwxrwxrwx
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxrwxrwt
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
-rwxr-xr-x
........
1
6
15
1
2
4
10
25
3
4
22
20
1
root
root
root
root
root
root
root
root
root
root
root
root
root
Fig.
system
system
system
system
system
system
system
system
system
system
system
system
bin
7
6144
4608
7
512
512
2560
512
5120
512
512
512
9246472
Apr
Jan
Jan
Apr
Feb
Sep
Jun
Dec
Jan
Jan
Dec
Apr
Jun
26
18
18
26
3
19
23
7
18
13
19
26
23
1995
07:02
07:02
1995
1995
10:52
1995
10:15
08:45
1995
13:07
1995
1995
bin -> usr/bin
dev
etc
lib -> usr/lib
mnt
net
sbin
students
tmp
users
usr
var
vmunix
4.1 ) Format de sortie de la commande ls -lg
-L
si un chier est un lien symbolique, cette option indique que l'on veut des renseignements sur le chier point par le lien et pas sur le chier lui-mme (voir
commande ln en 9.3)
Exemples 4.1
(a) ls -l bin /usr/bin
(b) ls -ld a*
ache les informations sur les chiers du rpertoires courant (dont le nom commence
pas par un a). L'option -d est indispensable pour ne pas entrer dans les sousrpertoires s'il y en a dont le nom commence par a.
(c) ls -t f* | head -1
ache le nom du chier le plus rcemment modi parmi tous les chiers du rpertoire
courant, dont le nom commence par un f.
4.2 Information dtaille sur les chiers (ls -l)
4.2.1 Format d'achage
Un exemple de format d'achage de la commande ls -l applique un rpertoire est
donn la gure 4.1. Une premire ligne donne le nombre de blocs de 1024 octets qu'occupent l'ensemble des chiers lists par la commande. Le format d'une ligne est dtaill
dans la gure 4.2.
4.2. INFORMATION DTAILLE SUR LES FICHIERS (LS -L)
taille du
fichier
nom du
propriétaire
autorisations
drwxr-xr-x
15 root
system
nombre
de liens
type du
fichier
Fig.
nom du
groupe
2
nom du
fichier
4608 Jan 19 07:02 etc
date de dernière
modification
4.2 ) Format de sortie d'une ligne de la commande ls -lg
Remarques 4.1
(a) Les versions Unix OSF et Systme V de ls achent le nom du groupe du chie
avec l'option -l. En Unix BSD, le groupe s'ache avec l'option -g. Si on veu
rcuprer une information dans une des colonnes il est donc prfrable d'associe
toujours l'option -g l'option -l.
(b) Les dates sont aches avec l'anne, ou l'heure et la minute selon que la date es
plus ou moins rcente (six mois avant la date actuelle).
4.2.2 Types de chiers
Le type du chier est ach l'aide du premier caractre de la ligne de description d
chier :
chier ordinaire
d
rpertoire (directory)
b
chier spcial de type bloc (essentiellement les disques)
c
chier spcial de type caractre (disque, streamer, terminal, etc.)
l
lien symbolique
s
socket
Pour les liens symboliques, le nom du chier point est donn la suite des autre
renseignements sur le chier :
lrwxrwxrwx
1 root
1200
Feb 25 20:09 fich
-> fichierP
Pour les chiers spciaux, la taille n'a aucun sens * elle est remplace par le majeur e
le mineur : le majeur dsigne le pilote (le programme de gestion du priphrique * driver e
anglais) et le mineur dsigne le priphrique particulier gr par ce pilote :
crw-rw-rw1 root
39,6 Feb 25 20:09 tty01
4.2.3 Mode d'acc
s au chier
Les autorisations (on dit aussi le mode d'accs au chier) du chier sont indique
par les neuf caractres qui suivent le type du chier. Les trois premiers caractres sont le
autorisations du propritaire du chier, les trois suivants sont les autorisations du groupe d
CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS
30
chier et les trois derniers sont les autorisations des autres (qui ne sont pas le propritaire
et qui n'appartiennent pas au groupe).
4.2.4 Nombre de liens
Pour les chiers ordinaires il s'agit du nombre de chiers ayant le mme numro de
i-node.
Pour les rpertoires, il indique le nombre de sous-rpertoires du rpertoire (augment
de 2, car . et .. sont compts).
4.3 Se dplacer dans l'arborescence (cd)
cd rpertoire]
dplace le processus dans rpertoire (rpertoire HOME par dfaut).
Exemple 4.2
cd /users/students/jean
Une facilit oerte par zsh est bien utile quand on a besoin de travailler entre deux
rpertoires :
cd -
permet de se dplacer dans le rpertoire o- l'on tait avant le dernier dplacement.
4.4 Acher le rpertoire courant (pwd)
pwd
Il est souvent plus prudent de taper cette commande avant d'eectuer une commande
dangereuse (suppression de chiers par exemple) pour savoir o- l'on est plac dans l'arborescence.
4.5 Caractres spciaux pour le shell
4.5.1 Gnration des noms de chiers (*,?, )
Les caractres * ? ] sont interprts par le shell quand ils gurent dans une commande. Cette interprtation s'appelle la gnration des noms de chiers. Le shell interprte
chaque mot qui les contient comme un modle de noms de chiers : il remplace le mot par
une liste alphabtique des noms des chiers qui correspondent ce modle.
Si aucun chier ne correspond au modle, le modle est laiss tel quel par sh et ksh. Pour
zsh, c'est le cas si l'option NO_NOMATCH est positionne (voir 14.1.2), sinon, zsh interrompt
l'interprtation de la commande et ne lance pas son excution.
*
dsigne zro, un ou plusieurs caractres,
4.5. CARACTRES SPCIAUX POUR LE SHELL
3
?
dsigne un caractre quelconque,
c1 -c2] ou c1 c2...]
dsigne un caractre spci par l'intrieur des crochets. Par exemple, a-z
dsigne une lettre minuscule et AEIOUY] dsigne une voyelle majuscule.
On peut aussi dsigner un caractre quelconque qui n'est pas parmi les caractre
spcis entre les crochet en faisant suivre le crochet ouvrant du caractre ^
Par exemple, sous zsh, ^0-9] dsigne un caractre qui n'est pas un chir
Attention, sous sh et ksh, il faut crire !0-9] 1 .
n
supprime la signication spciale du caractre suivant.
Exemple 4.3
Si l'utilisateur tape la commande
ls -l bin/A0-9]*
la commande suivante sera lance aprs l'interprtation du shell :
ls -l bin/A1abc bin/A2xy
si les 2 chiers A1abc et A2xy sont les deux seuls chiers du rpertoire bin qu
commencent par un A suivi d'un chire.
Remarque 4.2
Attention, * ne peut dsigner une cha ne de caractres qui comprend un / o
une cha ne de caractres qui commence par un . si ce . est plac en tte ou just
derrire un /. Ces deux exceptions sont aussi valables pour les caractres spciau
? et ].
Autrement dit, le caractre . doit tre explicitement dsign s'il est plac au dbu
d'un nom terminal de chier. Par exemple, si on veut tous les chiers du rpertoir
courant qui se terminent par la lettre c (y compris ceux qui commencent par un .
il faut taper
ls -d .*c *c
L'interprtation par le shell de ces caractres spciaux peut avoir des eets indsirable
car le shell l'eectue n'importe o- dans une commande. On peut utiliser \ pour vite
cette interprtation sur le caractre suivant. On peut aussi utiliser " ou ' pour empche
l'interprtation sur une portion de texte (voir 14.9).
4.5.2 Le caract
re spcial Pour ksh et zsh (mais pas pour sh ), le caractre ~ (seul ou plac en tte de mot)
une signication particulire :
dsigne le rpertoire HOME de l'utilisateur,
utilisateur
dsigne le rpertoire HOME de l'utilisateur indiqu.
1. Il faut se souvenir (voir 14.11.1) que, sous zsh et sans indication particulire, un shellscript est ex
cu
par sh et il faut donc utiliser cette syntaxe dans les shellscripts
32
CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS
Exemples 4.4
(a) cp ~/fich
(b)
~/bin
ls -l ~toto/bin/fich
4.5.3 Le caract
re spcial #
Dans les shellscripts, le shell considre que tout mot qui commence par un # est le
dbut d'un commentaire qui va jusqu' la n de la ligne. Si un mot commence par un #
et n'introduit pas un commentaire, il faut donc le faire prcder de n. Un # l'intrieur
d'un mot n'est pas considr comme un caractre spcial.
Remarques 4.3
(a) En mode interactif (c'est--dire lorsque la commande est tape directement au clavier
par l'utilisateur), zsh (mais pas ksh ) ne considre pas # comme un caractre spcial.
(b) Voir le cas particulier d'un chier excutable dont la premire ligne commence par
#! en 14.11.1.
4.5.4 Autres caract
res spciaux
Sous zsh, ! et la tabulation sont des caractres particuliers.
! est li l'historique des commandes. Si on veut l'utiliser dans un autre sens, il faut le
faire prcder de \. Ce caractre tant li l'historique des commandes n'a d'utilit qu'en
interactif. zsh ne le considre donc pas comme un caractre spcial dans un shellscript.
La tabulation permet la compltion de commande. Si on veut insrer une tabulation
dans une commande, on la fait prcder de Ctrl V.
4.6 Acher le type d'un chier (le)
file fichiers...
tente de deviner le type de chier (rpertoire, excutable binaire, shellscript, ASCII, langage, etc.).
4.7 Rechercher des chiers dans l'arborescence (nd, locate)
find rpertoires... -name modle-nom -print
ache les noms des chiers dont les noms correspondent modle-nom et situs dans
l'arborescence des rpertoires.
modle-nom peut comporter des caractres spciaux semblables aux caractres spciaux
utiliss dans la gnration des noms de chiers par le shell (voir 4.5). Plus exactement, nd
4.7. RECHERCHER DES FICHIERS DANS L'ARBORESCENCE (FIND, LOCATE)3
reconnait les caractres *, ?, ] (attention, la ngation des caractres entre crochets es
donne par un ! et pas par un ^). Un . n'est reconnu en dbut de nom que s'il est donn
explicitement.
Exemple 4.5
find /usr -name "info*" -print
recherche tous les chiers situs sous /usr dont le nom commence par info. On do
entourer info* avec des guillemets pour viter le remplacement (par le shell) de * pa
des noms de chiers (voir 14.8).
La commande nd a de nombreuses autres options qui permettent de rechercher le
chiers qui vrient certains critres. En voici quelques unes :
-size n
taille en nombre de blocs de 512 octets
-mtime n nombre de jours depuis la dernire modication
-atime n nombre de jours depuis le dernier accs
Dans les options ci-dessus, n peut tre remplac par +n (nombre suprieur n) ou pa
-n (nombre infrieur n).
-user nom propritaire
-type t
type du chier (un f pour un chier ordinaire et les autres abrviation
comme dans la commande ls -l * voir 4.2)
-perm nb_octal
est vrai si le chier a les autorisations nb_octal
-perm -nb_octal
est vrai si le chier a au moins les autorisations nb_octal
Les deux options -exec et -ok permettent d'excuter une commande sur les chier
qui vrient les critres prcdents. Le chier examin peut tre dsign par {} (isol de
autres caractres) dans la commande. Ces deux options renvoient vrai si le code retour d
la commande est 0 (voir 14.1.6). L'option -ok demande une conrmation de l'utilisateu
avant l'excution de la commande. Il ne faut pas oublier le * nal qui indique que l
commande est nie. Il doit tre prcd par \ pour que le shell ne l'interprte pas.
-exec commande n
-ok commande n
Toutes ces options peuvent tre relies par les oprateurs logiques ! (ngation), -o
(ou logique) et regroupes avec des parenthses. Le et logique est obtenu par la juxtapo
sition des options.
Les options sont examines (et excutes pour -print, -exec et -ok) tant que la cond
tion peut tre satisfaite pour le chier en cours d'examen. Ds que la condition ne peu
plus tre satisfaite nd passe au chier suivant.
Exemples 4.6
(a) find ~ -mtime -10 -print
ache les noms des chiers de l'arborescence du rpertoire HOME de l'utilisateu
qui ont t modis dans les dix derniers jours.
34
(b)
(c)
(d)
(e)
(f)
CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS
3
find /users -user toto -mtime -10 -exec ls -ld {} \#
ache des renseignements dtaills sur les chiers de l'arborescence de /users, qui
appartiennent toto et qui ont t modis dans les 10 derniers jours.
find ~toto ! -user toto -exec ls -ld {} \#
ache des renseignements dtaills sur les chiers qui n'appartiennent pas toto
dans son rpertoire HOME.
find ~toto -perm -002 -exec ls -ld {} \#
ache des renseignements dtaills sur les chiers du rpertoire HOME de toto, qui
ont (au moins) l'autorisation d'criture pour les autres.
Chapitre 5
Protection des chiers
find ~ -name core -ok rm {} \#
supprime (aprs conrmation par l'utilisateur) tous les chiers core situs sous le
rpertoire HOME.
Les chiers core sont cres automatiquement quand certains programmes s'interrompent par suite d'une erreur. Ils peuvent servir aux experts pour trouver la cause
de l'erreur.
find . \( -name "*.java" -o -name "*.html" \) -exec more {} \#
ache page page tous les chiers "*.java" et "*.html" de l'arborescence du rpertoire courant.
locate modle-de-nom...
recherche les chiers dont le nom correspond modle-de-nom.
Si modle-de-nom contient des jokers (*,? ou ]), locate donne tous les chiers dont
le nom contient modle-de-nom. Sinon elle donne les chiers dont le nom correspond au
modle.
Cette commande GNU n'est pas toujours installe sur les systmes Unix. Si l'administrateur l'a installe, elle permet de grer une base de donnes des chiers disponibles.
Dans ce cas, cette commande est normment plus rapide que la commande nd et charge
beaucoup moins le systme.
5.1 Changement des autorisations (chmod)
chmod -R] mode-accs fichiers...
donne des autorisations aux chiers. Seuls le propritaire du chier et le super utilisateu
peuvent utiliser chmod.
mode-accs indique quelles sont les autorisations que l'on donne * on peut donner ce
autorisations sous forme absolue ou symbolique.
L'option -R (rcursif) indique que, si un des chiers est un rpertoire, chmod do
changer les autorisations de toute l'arborescence du rpertoire.
Mode d'accs absolu
Les autorisations sont donnes par mode-accs sous forme d'un nombre octal compos
de 3 chires.
Le premier chire correspond aux autorisations que l'on donne au propritaire de
chiers, le deuxime correspond au groupe des chiers et le troisime correspond tous le
autres utilisateurs.
Pour calculer chacun des chires, on ajoute les valeurs des autorisations en comptan
4 pour read, 2 pour write et 1 pour execute.
d'o-, par exemple,
chmod 755 fichier
donne toutes les autorisations au propritaire et les autorisations de lecture et d'excutio
aux autres.
Mode d'accs symbolique
Les autorisations sont donnes par mode-accs sous la forme suivante :
qui]... op permissions... op permissions ...]
qui dsigne celui ou ceux qui recevront ces autorisations : u (propritaire), g (groupe
o (les autres) ou a (tous les 3, par dfaut)
op indique si l'on veut ajouter ou enlever des autorisations : + (ajouter), - (enlever
= (donner les autorisations comme dans le mode absolu)
CHAPITRE 5. PROTECTION DES FICHIERS
36
Les permissions sont donnes par r, w ou x.
Exemples 5.1
(a) chmod ug+wx fichier
(b) chmod ug+w-x fich
(c) chmod o=w fich
5.2 Masque pour les autorisations (umask)
3
Chapitre 6
Commandes d'observation du systme
umask nnn]
donne la valeur octale nnn (cf. mode absolu de chmod en 5.1) au masque qui sera utilis pour limiter les autorisations que recevront les nouveaux chiers au moment de leur
cration.
Exemple 5.2
umask 026
les chiers et rpertoires qui seront crs dans la suite de la session n'auront ni
l'autorisation d'criture pour le groupe (2) ni les autorisations d'criture et de lecture
pour les autres (6).
umask
(seul) ache le masque en cours. Celui-ci est en gnral 022 si l'utilisateur n'a pas lanc de
commande umask. Les nouveaux chiers sont alors crs avec les autorisations rw-r--r--
(car ils ne sont pas supposs tre excutables) et les nouveaux rpertoires avec les autorisations rwxr-xr-x.
6.1 Date et Heure (date)
date
ache la date et l'heure. Des formats d'achage sont disponibles en option.
6.2 Nom de l'ordinateur (hostname)
hostname
ache le nom de l'ordinateur sur lequel la commande s'excute (taloa.unice.fr, par exemp
6.3 Nom du systme d'exploitation (uname)
uname -a
ache des informations sur le systme d'exploitation.
6.4 Information sur les utilisateurs (who, nger)
who
ache le nom de login, le nom du terminal et l'heure du login pour chaque utilisateu
actuellement en ligne.
Si un utilisateur s'est connect par l'intermdiaire du rseau (et pas directement sur l
machine qui excute la commande who), le nom de la machine d'o- il vient est indiqu
entre parenthses la n de la ligne.
who am I
ache les informations sur l'utilisateur qui s'est connect pour dmarrer la session en cour
whoami
ache le nom de login de l'utilisateur qui a lanc la commande.
CHAPITRE 6. COMMANDES D'OBSERVATION DU SYSTME
38
finger @machines...]
6.7. ESPACE DISQUE OCCUP
3
ypcat -k network
ache les informations de la commande who et des informations informelles sur les utilisateurs (leur nom et prnoms, leur tlphone,. . . ) actuellement connects sur les machines
(la machine locale par dfaut).
ache l'ensemble des netgroups (voir cours sur les rseaux). L'option -k permet d'avo
les noms des groupes et pas seulement les noms des membres.
ache les informations sur les utilisateurs spcis, mme s'il ne sont pas connects. nger
donne plus d'informations sur les utilisateurs que lorsque l'on n'indique pas d'utilisateurs
en particulier. De plus les contenus des chiers .plan et .project des rpertoires HOME
des utilisateurs sont achs. Pour utilisateur on peut donner le nom de login ou le nom
rel ach par la commande.
6.7 Espace disque occup
finger utilisateur@machine]...
rusers
devrait donner une liste des utilisateurs connects sur le rseau (mais 'a ne marche pas
toujours...).
6.5 Dernires connexions au systme (last)
Il est prudent de vrier rgulirement que personne n'est entr sous son propre nom.
last -n] utilisateur] terminal]
ache des informations sur les dernires connexions. On peut se limiter aux connexions
d'un utilisateur ou aux connexions tablies partir d'un certain terminal. On peut aussi
se limiter aux n dernires connexions.
Exemple 6.1
last -3 toto
ache les trois dernires connexions (y compris l'actuelle) de toto.
Remarque 6.1
last ne donne pas toujours les connexions partir des terminaux X ou des stations
de travail. Cela dpend du systme de gestion des connexions de X Window et des
chiers de conguration installs par l'administrateur systme.
6.6 Systme Network Information Service (NIS)
Le systme NIS (anciennement appel Yellow Pages) permet de concentrer sur une
seule machine la gestion de certains chiers utiliss pour l'administration du systme Unix.
Il permet en particulier de grer les chiers qui contiennent les informations sur les
utilisateurs (noms, mot de passe, rpertoire HOME, programme de dmarrage) et sur les
noms et numros IP des machines du rseau local.
ypcat passwd
ache l'ensemble du chier des mots de passe (si l'administrateur systme l'a autoris).
ypcat hosts
ache l'ensemble des noms et des numros IP des machines du rseau local.
ypwhich -x
ache les noms possibles pour les dirents types de chiers que le systme NIS peut gre
6.7.1 Place occupe par la branche d'un rpertoire (du)
du options...] fichiers...]
ache le nombre de blocs occups par les chiers indiqus (rpertoire en cours par dfaut
Si un des chiers est un rpertoire, c'est le nombre de blocs occups par toute l'arborescenc
place sous le rpertoire qui est ache.
Sous Unix Systme V ou OSF les blocs ont une taille de 512 octets, sous Unix BSD i
ont une taille de 1 Ko. Consultez le manuel en ligne de du pour en savoir plus.
-s
ache seulement le nombre total de blocs
-a
ache la taille de tous les chiers et rpertoires
Exemple 6.2
du -s $HOME
6.7.2 Place libre d'un syst
me de chiers (df)
df systme-fichiers] fichier]
ache le nombre de blocs de 512 octets disponibles pour le systme de chiers spci
Le systme de chiers peut tre spci par le nom du priphrique (/dev/. . . ) ou par u
chier quelconque du systme mont.
df (sans argument) ache les renseignements sur tous les systmes monts (voir 1.6.1
Exemples 6.3
(a) df /dev/rz3a
ache les renseignements sur le systme de chier du systme de chier li au nom
de chier spcial /dev/rz3a (une partition d'un disque).
(b) df .
ache les renseignements sur le systme de chiers sur lequel se trouve le rpertoir
courant.
6.8 Nom du terminal utilis (tty)
tty
ache le nom du terminal associ l'entre standard du processus courant. Le code retou
40
CHAPITRE 6. COMMANDES D'OBSERVATION DU SYSTME
4
(voir 14.1.6) est 0 si l'entre standard est un terminal et 1 sinon.
Chapitre 7
Commandes pour la gestion des
processus
Pour la gestion des processus on se reportera aussi aux facilits oertes par les shel
ksh et zsh dcrites en 14.5.1 et la section 14.5 sur les processus lancs en arrire-plan.
7.1 Processus en cours d'excution (ps)
ps options...]
ache des renseignements sur les processus en cours d'excution et associs au termina
numro de processus, terminal qui a lanc le processus, temps d'excution du processu
nom de la commande qui a lanc le processus.
Si aucune option n'est spcie, ps donne les informations sur les processus associs
l'utilisateur qui a lanc la commande.
Cette commande ore de nombreuses options qui varient suivant les systmes Unix.
existe au moins trois versions direntes : BSD, OSF et Systme V (ou Solaris). Voici le
principales options oertes par la version Unix BSD :
-a
tous les processus lancs depuis un terminal par tous les utilisateurs,
-x
tous les processus de l'utilisateur, mme ceux qui n'ont pas t lancs depuis u
terminal
-l
donne des renseignements supplmentaires, en particulier le pid du processus pr
(PPID) de chacun des processus,
-e
ache les valeurs des variables d'environnement,
-w
ache en 132 colonnes (80 colonnes par dfaut),
-ww ache autant de caractres qu'il faut pour avoir tous les renseignements su
chaque processus (utile avec l'option -e).
Exemple 7.1
Pour acher des informations dtailles sur tous les processus sans exception on do
lancer dans les direntes versions :
en BSD : ps -axlww
CHAPITRE 7. COMMANDES POUR LA GESTION DES PROCESSUS
42
en OSF : ps -Al ww
en Systme V : ps -Afl
7.2 Supprimer un processus en cours d'excution (kill)
On peut supprimer un processus lanc en avant-plan en tapant la touche d'annulation
(le plus souvent Ctrl-C) dans la fentre dans laquelle ce processus a t lanc. Pour les
processus lancs en arrire-plan (voir 14.5), cette touche d'annulation n'a aucun eet. Pour
les supprimer il faut utiliser la commande kill.
kill -signal] pid
envoie le signal indiqu au processus dont pid est le numro de processus. signal est un
numro de signal compris entre 0 et 15 (15 par dfaut) ou le symbole d'un signal : HUP
(1), INT (2), QUIT (3), KILL (9), TERM (15), etc... (taper kill -l pour avoir la liste
complte des noms des signaux.)
Exemples 7.2
(a) kill 128
(b)
kill -9 128
(c)
kill %2
(d)
tue le processus lanc en arrire-plan qui a le numro 2 pour le shell dans lequel la
commande kill a t tape.
kill -9 -1
tue tous les processus lancs par l'utilisateur qui a tap le kill. 4 excuter en cas
d'anomalie et d'urgence. Par exemple quand des nouveaux processus sont engendrs
grande vitesse par une erreur de programmation.
Les super-utilisateurs peuvent tuer tous les processus. L'utilisateur normal ne peut tuer
que ses propres processus.
Remarque 7.1
Le signal 15 (envoy par dfaut) peut tre intercept par le processus qui il est
destin. Ce processus peut avoir l'amabilit de laisser la place nette avant de mourir
(par exemple, il peut eacer les chiers temporaires qu'il a crs). Il peut aussi refuser
de mourir et continuer de s'excuter normalement.
Si on veut tre certain de tuer un processus, il faut lui envoyer le signal 9 qui ne peut
tre intercept.
Pour laisser une chance au processus de mourir proprement, il est conseill d'essayer
d'abord de tuer avec le signal 15 et de n'utiliser le signal 9 que si le processus vis ne
veut pas se laisser tuer.
7.3. LANCEMENT AUTOMATIQUE DE PROCESSUS DES MOMENTS DONNS (
7.3 Lancement automatique de processus des moment
donns (at, crontab)
Si l'administrateur du systme l'a autoris (voir le manuel en ligne des commandes a
et crontab ), les utilisateurs peuvent programmer le lancement automatique de processu
mme lorsqu'il ne sont pas connects.
at sert lancer une commande un moment donn. crontab est plus spcialemen
utilis pour lancer des commandes intervalles rguliers (chaque jour par exemple).
Sans entrer dans les dtails, voici des exemples standards :
at
-f ~/fichier 3:00
at
-l
am
January
24
lance les commandes contenues dans ~/fichier (indiquez toujours un nom absolu)
3 heures du matin le 24 janvier.
ache les commandes programmes.
crontab fichier-cron
programme ce qui est indiqu dans le chier fichier-cron. Voici un exemple de conten
d'un tel chier (voir le manuel en ligne pour plus d'explications) :
#
#
#
0
Lance 'dumptout -f' tous les jours (sauf le lundi) ' 2h du matin
(0 minutes), tous les jours du mois, tous les mois,
le dimanche (0) et du mardi au vendredi (2-6)
2 * * 0,2-6 /usr/adm/dumptout -f
crontab -l
ache les commandes programmes.
crontab -e
permet de modier les commandes programmes.
7.4 Gestion du plan d'un processus par le shell
La plupart des shells (mais pas sh ) permettent de grer le plan o- se droule les pro
cessus (en arrire-plan ou non). Cette gestion est tudie en 14.5.1.
44CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER
8.2. AFFICHER LES OCTETS D'UN FICHIER (OD)
4
ligne2
<-- on tape la touche Ctrl] D
nouveaufichier
cre Chapitre 8
Acher, imprimer, envoyer le contenu
d'un chier
8.1 Acher le contenu d'un chier, concatner plusieurs
chiers (cat) - Notion de redirection
cat -nsv] fichiers...]
ache le contenu des chiers.
Si aucun chier n'est spci, l'entre standard est prise par dfaut.
-n
-s
-v
Options
numrote les lignes
runit plusieurs lignes vides en une seule ligne
ache les caractres non visibles
Exemples 8.1
(a) cat /etc/passwd
(b)
cat
ache (plus exactement, envoie sur la sortie standard) les lignes qui sont tapes au
clavier. On termine en tapant Ctrl D qui est transform en annonce de n de chier
par le driver de terminal. C'est surtout utile avec une redirection (voir ci-dessous).
Le nom de la commande vient de concatner car
cat fich1 fich2 >fich3
concatne ch1 et ch2 dans ch3. > est un symbole de redirection (la sortie standard
est redirige vers ch3 * par dfaut, la sortie standard est l'cran). Cette notion sera dtaille
en 14.2.
La commande cat permet de crer des petits chiers sans passer par un diteur de
textes ( $ est le prompt dans l'exemple suivant) :
$ cat >nouveaufichier
ligne1
avec deux lignes de texte.
8.2 Acher les octets d'un chier (od)
Cette commande ne sera pas tudie ici mais il faut conna tre son existence pour le
cas o- l'on doit examiner le contenu des chiers qui ne contiennent pas du texte achabl
emacs possde aussi le mode de travail Hexl qui permet de voir, et mme de modie
les octets d'un chier. On tape M-x hexl-nd-le pour charger le chier binaire. On peu
aussi simplement passer en mode Hexl une fois que l'on a charg un chier dans un bue
(M-x hexl-mode).
8.3 Acher page page (more) - Notion de pipe
more fichiers...]
ache le contenu des chiers page par page. Le chier par dfaut est l'entre standard.
En bas de chaque page on dispose de plusieurs commandes :
h
ache la liste des commandes disponibles
Retour] ache une ligne de plus
espace] ache l'cran suivant
iespace] ache i lignes de plus
Ctrl B
revient la page prcdente (ne marche pas si le 0ot de donne ne vient pa
d'un chier ordinaire)
q ou Q
sort de more
=
ache le numro de la ligne en cours
/texte
recherche un texte : ache un nouvel cran qui commence 2 lignes avant l
1re ligne qui contient texte
n
refait la dernire recherche
:n
va au chier suivant
:f
ache le nom du chier et le numro de la ligne
Gr&ce un pipe (notion tudie en 14.3) la commande more peut recevoir sur so
entre standard ce qu'une autre commande a envoy vers la sortie standard. On peu
ainsi eectuer un achage page page de ce qu'aurait ach cette autre commande. Pa
exemple :
ls -l /bin | more
8.4 Sorties sur les imprimantes
Lorsque l'utilisateur lance l'impression d'un chier, le contenu de ce chier est envoy
dans une le d'attente. Il sera imprim lorsque le programme gestionnaire du spoule (tra
46CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER
duction du terme anglais spool qui est d'ailleurs le plus souvent utilis) le slectionnera.
Ce systme de spool permet de redonner la main tout de suite l'utilisateur sans attendre
la n de l'impression du contenu du chier.
Il existe deux systmes d'impression : lp (Unix Systme V) et lpr (Unix BSD). Le
systme dcrit ici est le systme lpr. Avec le systme lp, la commande lp remplace la
commande lpr et la commande lpstat donne des informations sur le systme d'impression,
en particulier sur les noms des imprimantes. Les systmes Unix actuels disposent des deux
systmes d'impression et des passerelles sont souvent installes par l'administrateur pour
laisser le choix l'utilisateur : un seul des deux systmes fonctionne mais les commandes
de l'autre systme sont disponibles (elles font appel au seul systme install sans que
l'utilisateur s'en aper'oive).
8.4.1 Informations sur le syst
me d'impression (lpstat, printcap)
En Unix BSD, le chier /etc/printcap contient les noms et descriptifs des imprimantes du systme. Sous Unix Systme V et OSF, la commande lpstat permet d'avoir des
informations sur le systme d'impression.
lpstat options ]
-d
-p
-r
-s
-t
-v
Options
donne l'imprimante par dfaut
statut des imprimantes et de la gestion des les d'attente associes
tat du dmon d'impression
un rsum des prcedentes options
tout ce que vous avez toujours voulu savoir sur le systme d'impression
noms des imprimantes et des noms de chiers spciaux ou de machines
distantes associes
Exemple 8.2
Certaines de ces options peuvent tre suivies de listes d'imprimantes, d'utilisateurs
ou d'identicateurs de requtes d'impression.
lpstat -p lp17,lp30
8.4.2 Lancement d'une requte d'impression (lpr)
lpr options] fichiers...]
place une liste de chiers dans la le d'attente d'une imprimante. Un saut de page est
envoy aprs chaque chier.
Si la liste de chiers est vide, c'est l'entre standard qui est place en le d'attente (ce
qui permet d'utiliser lpr la n d'un pipe).
Dans tout systme, l'administrateur donne une imprimante par dfaut vers laquelle les
requtes sont diriges (imprimante de nom lp). La variable PRINTER peut contenir le
nom d'une autre imprimante. On peut aussi utiliser l'option -P.
Les options sont nombreuses et peuvent varier suivant la version du systme.
8.4. SORTIES SUR LES IMPRIMANTES
4
Options
-Pimprimante dirige l'impression vers l'imprimante spcie
-h
supprime la bannire d'impression (premire page o- sont imprims le nom
de l'utilisateur qui a lanc l'impression et diverses autres informations)
Exemples 8.3
(a) lpr -h -Plp3 fichier
(b) ls -l | lpr -h
8.4.3 Informations sur les requtes d'impression (lpq)
lpq -Pimprimante] utilisateur]
ache des renseignements (utilisateur, position dans la le d'attente, nom du chier
imprimer, identicateur de la requte, taille de ce qui sera imprim) sur les requtes d'im
pressions actuellement en attente d'tre imprimes.
Options
-Pimprimante
limitent les informations aux requtes envoyes sur l'imprimante
utilisateur limitent les informations aux requtes lances par utilisateur.
Exemple 8.4
lpq -Plp3 jean
donne les informations sur les requtes envoyes par jean sur l'imprimante lp3.
8.4.4 Suppressions de requtes d'impression (lprm, cancel)
lprm -Pimprimante] -] identificateur-requte]
permet un utilisateur de supprimer une requte d'impression qu'il avait prcdemmen
lance (si l'impression est dj commence, elle est interrompue). On ne peut supprime
les requtes d'un autre utilisateur (sauf si l'on est le super-utilisateur). Si aucune optio
n'est spcie, la requte en cours d'impression est supprime sur l'imprimante par dfau
si elle appartient l'utilisateur qui a lanc la commande lprm.
Options
-Pimprimante
supprime toutes les requtes que l'utilisateur a lances sur imprimante
supprime toutes les requtes que l'utilisateur a lances
identicateur-requte
supprime la requte dnie par son identicateur (on peut faire ache
l'identicateur par la commande lpq tudie en 8.4.3).
Exemples 8.5
(a) lprm -Plp1
(b) lprm -
26
48CHAPITRE 8. AFFICHER, IMPRIMER, ENVOYER LE CONTENU D'UN FICHIER
8.7. PASSER EN POSTSCRIPT (A2PS)
Si la commande lprm semble ne pas fonctionner, on peut essayer la commande cancel.
Par exemple, pour supprimer les requtes que l'utilisateur toto a envoyes sur l'imprimante
lp0, on tapera :
De plus, les noms des options peuvent changer avec les versions de a2ps. Heureusemen
l'une des options que l'on retrouve dans toutes les versions est l'option -h qui donne un
liste des options disponibles.
Les options globales permettent d'indiquer si le Postscript gnr est envoy sur l
sortie standard ou sur une certaine imprimante, s'il faut imprimer les chiers binaires,
les pages auront une en-tte, etc.
Les options particulires chaque chier (ou groupe de noms de chiers qui suivent le
options) permettent d'indiquer si on veut une ou deux pages par feuille physique de papie
si on veut le mode de positionnement portrait ou paysage (sur la largeur de la pag
landscape en anglais), etc. Il existe de trs nombreuses options, souvent trs utiles que l'o
aura intrt lire dans le manuel en ligne.
Exemple 8.7
Sur la version de a2ps installe aujourd'hui sur les stations Sun de l'universit d
Nice, la commande suivante imprime le chier truc.java sur l'imprimante par dfau
deux pages par feuille en mode paysage :
cancel -u toto lp0
8.5 Envoyer le contenu d'un chier (mail)
Le plus simple pour envoyer par courrier lectronique un chier est d'utiliser la commande mail avec une redirection de l'entre standard (voir 14.2.4) :
mail adresse
<fichier
envoie le contenu de chier l'utilisateur dsign par adresse.
Le chier doit tre un chier texte. Si on veut envoyer un chier binaire, il faut le traiter
auparavant par uuencode (voir cours sur les rseaux).
Exemple 8.6
mail -s "Fichier fich" [email protected] < rep/fich
L'option -s permet de donner un sujet au message * elle n'est pas disponible sur
toutes les versions de la commande.
Nous ne dcrirons pas davantage la commande mail puisque nous utiliserons d'autres
commandes (netscape, xmh ou emacs ) pour envoyer et recevoir du courrier lectronique.
8.6 Mise en page (pr)
pr options] fichiers...]
met en forme les chiers (longueur de ligne, longueur de page, en-tte, ...) et envoie le
rsultat vers la sortie standard. pr prend l'entre standard par dfaut si aucun chier n'est
indiqu.
pr possde de nombreuses options que nous ne dcrirons pas ici.
8.7 Passer en Postscript (a2ps)
a2ps options-globales] options-partic.] fichiers]...
passe le contenu d'un ou plusieurs chiers (entre standard par dfaut) en Postscript.
C'est une commande trs utile pour imprimer le contenu de chiers sur des imprimantes
Postscript. En particulier, les programmes informatiques sont souvent traits d'une fa'on
particulire par a2ps qui imprimera par exemple tous les mots-cls du langage en caractres
gras.
Attention, le fonctionnement standard dpend des versions intalles, en particulier pour
l'endroit o- est envoy le Postscript gnr.
a2ps truc.java | lpr
Pour imprimer une page par feuille en mode portrait :
a2ps -P -1 truc.java | lpr
4
CHAPITRE 9. GESTION DES FICHIERS
50
9.2. LIENS AVEC MME NUMRO DE I-NODE (LN)
5
9.2 Liens avec mme numro de i-node (ln)
Chapitre 9
Gestion des chiers
Ce chapitre traite des commandes qui travaillent sur des chiers ordinaires en les considrant comme un tout, sans faire d'oprations sur le contenu des chiers.
9.1 Copier des chiers (cp)
cp -ip] fichier1 fichier2
copie le chier ordinaire chier1 sur le chier ordinaire chier2.
L'utilisateur doit avoir l'autorisation de lecture sur le chier chier1.
Si chier2 existe, l'utilisateur doit avoir l'autorisation d'criture dans ce chier. Dans
ce cas, le contenu de chier2 est cras par celui de chier1. chier2 garde son propritaire,
son groupe et ses autorisations.
Si chier2 n'existe pas, l'utilisateur doit avoir l'autorisation d'criture sur le rpertoire
de chier2. Dans ce cas, chier2 est cr et son propritaire et son groupe sont ceux de
l'utilisateur et les autorisations sont celles de chier1 (mais tient compte de la valeur du
masque de umask * voir 5.2).
-i
-p
Options
fait acher un message de demande de conrmation si chier2 existe dj
conserve les dates de modication et d'accs, le propritaire et le groupe, le mode
d'accs de chier1 pour chier2 (ne tient pas compte du masque pour le mode
d'accs * voir 5.2)
cp -ip] fichiers... rpertoire
copie les chiers dans le rpertoire.
Exemples 9.1
(a) cp fich* jean/courrier
(b) cp fichier1 fichier2 jean
Remarque 9.1
Si un des chiers est un rpertoire, cp envoie un message d'erreur mais les autres
chiers sont copis (voir 10.4 pour la copie de rpertoires).
Un rpertoire contient des liens qui rfrencent les chiers placs sous le rpertoir
Un chier peut avoir plusieurs liens qui le rfrence. On peut ajouter un lien vers un chie
dans un autre rpertoire que le rpertoire de cration du chier en utilisant la command
ln.
Un lien permet de donner plusieurs noms un mme chier physique. La cratio
d'un lien permet, par exemple, de partager une commande entre plusieurs utilisateurs san
dupliquer son contenu.
ln -f] fichier1 fichier2]
cre un lien chier2 : chier2 sera un chier qui aura le mme i-node que chier1.
chier1 doit dj exister et ne pas tre un rpertoire. Les deux chiers doivent apparten
un mme systme de chiers.
L'utilisateur doit avoir l'autorisation d'criture sur le rpertoire de chier2. L'autorisa
tion d'criture sur le chier chier2 n'est pas ncessaire (comme pour rm * voir 9.4).
chier2 est optionnel. S'il n'est pas indiqu, le lien se fait sur le chier situ dans
rpertoire courant de mme nom terminal que chier1.
L'option -f permet d'craser chier2 s'il existe dj.
ln -f] fichiers... rpertoire
cre des liens entre les chiers et les chiers situs sous le rpertoire et de mme nom
terminal que les chiers. Les chiers doivent appartenir un mme systme de chiers qu
le rpertoire. Les chiers ne peuvent tre des rpertoires.
Remarques 9.2
(a) Quand un lien a t cr entre deux chiers, les deux chiers jouent ensuite un r
symtrique et il n'y a pas lieu de distinguer un chier originel parmi tous ces chier
(b) Tous les chiers lis ont le mme i-node. Ceci implique que lorsque l'on modie
contenu ou les autorisations d'un chier, tous les chiers qui lui sont lis sont modi
de mme. Le propritaire, le groupe et les dates de dernire modication et de cratio
sont les mmes pour tous les chiers lis correspondant un mme chier physique
(c) La commande ls
ainsi lis.
-l
renverra un nombre de liens suprieur 1 pour les chier
(d) Si on supprime un des deux chiers par la commande rm, l'autre continuera existe
avec un nombre de lien ach par ls -l diminu de 1.
Exemples 9.2
(a) ln rep1/fichier
(b)
rep2
ln rep1/fichier rep2/fichier2
CHAPITRE 9. GESTION DES FICHIERS
52
9.3 Liens symboliques (ln -s)
Les liens tudis dans la section prcdente ont quelques limitations. En particulier,
les deux chiers lis doivent tre placs dans un mme systme de chiers et les chiers
auxquels on ajoute un lien (ceux que l'on rfrence) ne peuvent tre des rpertoires. Les
liens symboliques orent plus de souplesse.
Un lien symbolique est un chier de type spcial qui contient le nom d'un autre chier
auquel il est li. Toutes les commandes usuelles qui contiendront le nom du lien symbolique,
travailleront en fait avec le chier dont le nom est contenu dans le lien symbolique.
ln -s fichier1 fichier2]
cre un lien symbolique chier2 qui se rfrera chier1. chier1 et chier2 peuvent tre
des rpertoires et ils peuvent appartenir deux systmes de chiers dirents. chier1
peut mme tre supprim ensuite (et dans ce cas, toute rfrence chier2 provoquera une
erreur) !
chier1 peut tre un rpertoire.
chier2 est optionnel. S'il n'est pas indiqu, le lien se fait avec le chier situ dans le
rpertoire courant de mme nom terminal que chier1.
On peut aussi indiquer un rpertoire comme but (comme pour les commandes cp ou
mv ) :
ln -s fichiers... rpertoire
Exemple 9.3
ln -s /usr/new/emacs/emacs bin
cre un lien symbolique bin/emacs qui pointe sur /usr/new/emacs/emacs.
Remarques 9.3
(a) ls -l fichier d'un chier (ou rpertoire) qui est un lien symbolique, ache le
nom du chier sur lequel le chier est li. Si on veut les renseignements sur le chier
point (ou les sous-chiers du rpertoire point), il faut utiliser l'option -L de ls. Par
exemple, ls -lL fichier
(b) les autorisations sur un lien symbolique n'ont aucune signication : les droits rels
sont ceux du chier point.
(c) on fera attention de donner un nom absolu pour chier1, ou un nom relatif par
rapport au rpertoire de chier2 pour que le chier point soit retrouv lorsque le
systme utilisera le lien symbolique.
9.4 Supprimer des chiers (rm)
rm options...] fichiers...
enlve le chier de son rpertoire.
9.5. DPLACER, RENOMMER DES FICHIERS (MV)
5
Cette commande ncessite l'autorisation d'criture sur le rpertoire du chier mais pa
la lecture ou l'criture sur le chier lui-mme (mais si l'utilisateur n'a pas l'autorisatio
d'criture sur le chier, une conrmation est demande).
-f
Options
-r
-i
pas de demande de conrmation quand on n'a pas l'autorisation d'criture sur
chier, renvoie un code retour 0 (tout s'est bien pass) mme si un des chier
n'existe pas
dtruit tout le contenu d'un rpertoire et le rpertoire lui-mme
demande de conrmation pour chaque chier (ou rpertoire avec l'option -r)
Exemple 9.4
rm -fr l*
Attention ne pas glisser par mgarde un espace entre le l et le *. On se mer
aussi des claviers dont la touche l ne fonctionne pas bien ! Il est prudent de lire su
l'cran la commande tape avant de la lancer.
9.5 Dplacer, renommer des chiers (mv)
mv fich1 fich2
renomme ch1 en ch2. Le chier peut changer de rpertoire cette occasion.
mv fichiers... rpertoire
les chiers passent sous rpertoire. Ils gardent le mme nom terminal.
Exemples 9.5
(a) mv fichier1 rep/fichier2
(b)
mv jean/fich1 jean/fich2 pierre
9.6 Sauvegarder sur les lecteurs de disquettes des sta
tions Sun
Certaines stations Sun de l'universit de Nice ont des lecteurs de disquettes compatible
avec les lecteurs installs sur les ordinateurs compatibles PC. Les utilisateurs peuvent ain
recopier sur des disquettes des programmes rcuprs sur le rseau Internet ou leurs chier
de travail pour les emmener sur leur PC personnel.
Les sauvegardes sont eectues rgulirement par l'administrateur du systme su
bandes ou autres supports. Pour les chiers importants, deux prcautions valent mieu
qu'une et on peut faire ses propres sauvegardes si on a accs des stations Sun.
Les commandes qui permettent de travailler avec les disquettes sont les commande
mcopy, mdir, etc. (chercher toutes les commandes dont le nom commence par m dans
rpertoire contenant la commande mcopy). De plus, la commande eject permet d'jecte
la disquette du lecteur. On pourra consulter le manuel en ligne pour plus de dtails.
54
CHAPITRE 9. GESTION DES FICHIERS
5
9.7 Compression et dcompression (zip, gzip, compress)
Ces trois commandes permettent de compresser les chiers. On peut ainsi archiver des
chiers non utiliser actuellement en sauvegardant de la place. La commande zip se trouve
sur PC MS-DOS et sur Unix.
Pour compresser des arborescences (tout le contenu d'un rpertoire et de ses sousrpertoires) on pourra utiliser la commande tar (voir 10.6).
Consultez les manuels en ligne de ces commandes pour plus de prcisions.
Chapitre 10
Travail sur les rpertoires
Les commandes principales de gestion des chiers que l'on a vu au chapitre prcden
permettent de travailler sur les rpertoires. Ce chapitre indique seulement les options o
fonctionnalits lies aux rpertoires. La plupart des options dj vues (par exemple le
options -i de cp ou -f de rm ) sont toujours valables pour les rpertoires.
10.1 Crer un rpertoire (mkdir)
mkdir -p] rpertoires...
cre les rpertoires indiqus.
On doit avoir l'autorisation d'criture dans le rpertoire pre.
En l'absence de masque donn par la commande umask (voir 5.2), les autorisations su
le nouveau rpertoire sont 777.
L'option `-p cre les rpertoires intermdiaires si besoin est.
10.2 Supprimer un rpertoire (rmdir, rm -r))
rmdir rpertoires...
supprime les rpertoires indiqus. Les rpertoires doivent tre vides.
Un autre moyen de supprimer un rpertoire :
rm -r rpertoires...
supprime les rpertoires et toute l'arborescence dont ils sont la racine.
ATTENTION ! rm -r * supprime tout le rpertoire de travail.
10.3 Changer le nom d'un rpertoire (mv)
mv rpertoire1 rpertoire2
CHAPITRE 10. TRAVAIL SUR LES RPERTOIRES
56
Autoris seulement si les 2 rpertoires ont le mme parent en Unix Systme V. Unix
BSD l'autorise si les deux rpertoires sont dans le mme systme de chiers.
Exemple 10.1
mv /users/students/jean /users/students/jp
10.4 Copier l'arborescence d'un rpertoire (cp -r)
cp -r rpertoire1 rpertoire2
copie toute l'arborescence de rpertoire1 sous rpertoire2.
L'endroit o- seront copis les chiers dpend de l'existence du rpertoire rpertoire2.
Si celui-ci n'existe pas, il sera cr et il correspondra rpertoire1. Sinon, les nouveaux
chiers se retrouveront sous le rpertoire situ dans le rpertoire rpertoire2 et de mme
nom terminal que le nom terminal de rpertoire1.
Exemples 10.2
(a) cp -r ~toto/rep .
cre (s'il n'existe pas dj) un rpertoire rep sous le rpertoire courant et copie les
chiers de l'utilisateur toto sous ce rpertoire
(b)
cp -r ~toto/rep/. .
copie les chiers de rep directement sous le rpertoire courant
Remarque 10.1
La commande suivante copie les chiers placs directement sous un rpertoire rep1
dans un rpertoire rep2.
cp rep1/* rep1/.* rep2
Les sous-rpertoires ne seront pas copis et engendreront des messages d'erreurs.
10.5 Lien symbolique (ln -s)
Un lien symbolique peut pointer un rpertoire. Ceci permet d'obtenir une conguration
attendue par un logiciel. Par exemple, beaucoup de logiciels du domaine public travaillent
par dfaut avec des sous-rpertoire de /usr/local. Un lien sur ces rpertoires peut viter de
modier les chiers de conguration des logiciels lorsque c'est impossible ou trop complexe.
Exemple 10.3
Supposons que le systme de chier qui contient le rpertoire /usr/local n'a pas
assez de place pour accueillir dans /usr/local/rep1 tous les chiers ncessaires au
fonctionnement d'un logiciel. Si le paramtrage du logiciel pour lui indiquer de chercher les chiers un autre endroit que /usr/local/rep1 est impossible ou complexe,
on peut installer les chiers dans le repertoire /usr/local2/rep1 et taper :
10.6. PLIAGE DE RPERTOIRES EN UNE SEUL FICHIER (TAR, CPIO)
5
ln -s /usr/local2/rep1 /usr/local/rep1
Si le rpertoire /usr/local/rep1 existe dj, on crera des liens symboliques sou
le rpertoire /usr/local/rep1 pour tous les chiers de /usr/local2/rep1 qui son
concerns * par exemple, pour fichier1 :
ln -s /usr/local2/rep1/fichier1 /usr/local/rep1
10.6 Pliage de rpertoires en une seul chier (tar, cpio
La commande tar peut plier un rpertoire en un seul chier. Tous les chiers d
rpertoire sont alors runis en ce chier. Le transfert des chiers sur le rseau et leu
archivage en est facilit, surtout si on compacte le chier rsultat.
Cette commande possde de nombreuses options. On ne donne ici que les options prin
cipales sur des exemples simples.
tar cvf fichier.tar rep
cre le chier fichier.tar qui contiendra tous les chiers des chiers indiqus. Si u
chier indiqu est un rpertoire (comme ici rep), toute l'arborescence du rpertoire es
plie dans le chier dont le nom complte l'option f (l'option v est l'option verbeuse
Il est fortement conseill d'utiliser un nom relatif pour les chiers plis car on peut ain
rcuprer les chiers (par tar x) un autre endroit.
tar tvf fichier.tar
liste les noms des chiers plis dans le chier fichier.tar.
tar xvf fichier.tar
rcupre tous les chiers plis dans fichier.tar.
tar xvf fichier.tar f1 f2
rcupre tous les chiers plis dans chier.tar qui ont pour nom f1 ou f2.
La commande cpio permet aussi l'archivage de chiers. Elle ne sera pas tudie ici.
58
CHAPITRE 11. EXPRESSIONS RGULIRES
11.2. EXPRESSIONS RGULIRES REPRSENTANT UN ENSEMBLE DE CARACT
chane]
Chapitre 11
Expressions rgulires
Ces expressions sont utilises par plusieurs commandes * en particulier par more, emacs,
grep, ed, sed, awk, perl 1 . Ce sont des cha nes de caractres qui reprsentent des modles
pour des cha nes de caractres. Certains caractres ont des signications particulires.
Toutes les commandes qui utilisent les expressions rgulires ne reconnaissent pas toutes
les expressions. Les commandes grep, more et emacs travaillent avec le noyau minimum
d'expressions rgulires qui sont prsentes dans ce chapitre. Il existe d'autres types d'expressions rgulires. Pour conna tre exactement les expressions reconnues par une commande, il faut se rfrer au manuel de rfrence, ou faire des tests... De plus, les direntes
versions d'une commande (par exemple la commande grep) ne reconnaissent pas le mme
ensemble d'expressions rgulires.
Attention ne pas confondre les expressions rgulires qui ne sont reconnues que par
certaines commandes avec les expressions qui contiennent des caractres spciaux interprts par le shell (voir 4.5) et qui sont donc reconnues dans toutes les lignes de commandes.
11.1 Expressions rgulires reprsentant un seul caractre
Un caractre ordinaire se dsigne par lui-mme. Les expressions rgulires peuvent
aussi contenir des caractres spciaux. Les expressions rgulires suivantes dsignent un
seul caractre * elles sont reconnues par toutes les commandes :
n
suivi d'un autre caractre dsigne ce caractre. Il permet d'enlever le sens spcial
des caractres comme ., *, et \.
!
plac en dbut d'expression, dsigne un dbut de ligne.
$
plac en n d'expression, dsigne une n de ligne.
.
(le point) dsigne n'importe quel caractre except le passage la ligne (quivalent de ? du langage de commande).
1. cette commande n'est pas tudi
e dans ce cours
dsigne n'importe quel caractre de la cha ne. On peut dsigner plusieurs ca
ractres contigus l'aide de -. Si le premier caractre de la cha ne est ^
l'expression dsigne n'importe quel caractre qui n'est pas dans la cha ne.
Exemples 11.1
(a) ^ab
dsigne la cha ne ab place en dbut de ligne.
(b)
0-9]
(c)
adh-lA-Z]
(d)
^0-9]
(e)
^\.
(f)
-d]
dsigne un chire quelconque.
dsigne a ou d ou une lettre minuscule comprise entre h et l, ou une lettre majuscule
dsigne n'importe quel caractre qui n'est pas un chire.
dsigne une ligne qui commence par un point.
dsigne un - ou un d.
11.2 Expressions rgulires reprsentant un ensemble d
caractres d'un seul type
4 partir des expressions rgulires correspondant un seul caractre (et seulement
partir de ces expressions), on peut construire les expressions rgulires suivantes :
*
une expression ci-dessus suivie du caractre * dsigne 0 ou plus occurrences de
caractres dsigns par l'expression. S'il y a plusieurs possibilits, l'expressio
dsigne la plus longue cha ne partir de la gauche qui permette de trouver un
cha ne correspondant l'expression rgulire. La signication de * dire don
de la signication habituelle lors de l'interprtation des commandes par le shel
+ et ? certaines commandes, (mais pas toutes les versions de grep) donnent un sen
particulier aux caractres + et ? :
? dsigne 0 ou 1 occurrence des caractres dsigns par l'expression qui prcde
+ dsigne 1 ou plusieurs occurrences des caractres dsigns par l'expression qu
prcde.
Pour les commandes qui ne reconnaissent pas le +, on peut le simuler * pa
exemple, xx* peut remplacer x+.
CHAPITRE 11. EXPRESSIONS RGULIRES
60
n{ et n} certaines commandes (mais pas toutes les versions de grep) permettent de don-
ner encore plus de prcision sur le nombre d'occurrences : on peut faire suivre une
expression rgulire par (m et n sont des entiers compris entre 0 et 256) :
n{mn} pour indiquer exactement m occurrences
n{m,n} pour indiquer au moins m occurences
n{m,nn} pour indiquer entre m et n occurrences (bornes comprises)
Exemples 11.2
(a) ^a-zA-Z]*
dsigne la plus longue cha ne de lettres partir du dbut de la ligne * si la ligne
contient Bonjour Monsieur, c'est Bonjour qui est dsign.
(b) 0-9]\{3\}
dsigne un nombre de 3 chires.
11.3 Autres expressions rgulires
On peut construire des expressions rgulires partir d'autres expressions rgulires :
concatnation
la concatnation d'expressions rgulires dsigne la concatnation des cha nes
dsignes par chacune des expressions rgulires.
Exemple 11.3
0-9]\{3\}A.*T$
dsigne une cha ne qui commence par 3 chires suivis de la lettre A et qui se termine
par la lettre T la n de la ligne.
n(...n) et nn
Les commandes grep (cela dpend des versions) et awk permettent de dsigner
des sous-cha nes de caractres l'aide des deux types d'expressions suivants :
n(expressionn) dsigne la mme chose que l'expression elle-mme (voir utilit
ci-aprs)
nn o- n est un entier dsigne la cha ne de caractres qui correspond la nieme
expression entoure prcdemment par \( et \).
Exemples 11.4
(a) ^\(.*\)\1$
dsigne une ligne forme d'une cha ne rpte 2 fois.
(b) who | grep*'^\(a-z]\)^*]*\1*'
ache des informations sur les utilisateurs connects la machine locale et dont le
nom de login commence et se termine par la mme lettre minuscule ( * dsigne un
espace).
11.3. AUTRES EXPRESSIONS RGULIRES
6
Des possibilits supplmentaires sont utilises par certaines commandes et en particulie
par la commande awk (mais gnralement pas par ed ou grep) :
expression1jexpression2
(...)
dsigne une cha ne correspondant la 1ere ou la 2eme expression.
les parenthses permettent de modier l'ordre de priorit des oprateurs. L'ordr
de priorit est et ], puis *, + et ?, puis la concatnation et enn |.
62
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
Chapitre 12
diteur de texte (emacs, xemacs)
Pour crire des textes (programmes ou donnes) sous Unix, il faut disposer d'un programme qui permette d'entrer du texte et de le modier sans tre oblig de tout retaper.
Les programmes qui font ce genre de travail s'appellent des diteurs de textes. Ils possdent
de nombreuses commandes qui facilitent la t&che de l'utilisateur : recherche de cha nes de
caractres dans un texte, remplacement automatique de cha nes par une autre, copie, suppression de partie de texte, etc.
L'diteur emacs est un diteur pleine page trs puissant. L'diteur pleine page le plus
commun sous Unix est vi mais il est moins agrable utiliser que emacs, moins puissant
et moins souple.
Une caractristique essentielle de emacs est qu'il est possible (et pas trop complexe) de
personnaliser son fonctionnement en aectant des valeurs des variables d'environnement
ou mme en programmant des nouvelles fonctionnalits.
Nous ne donnerons ici que les commandes essentielles de emacs, susantes pour commencer crire des programmes et des textes simples sous Unix. La version dcrite est la
version 19 avec quelques ajouts pour la version 20. Cette dernire version ore de nombreuses facilits pour travailler avec des langues non europennes et pour congurer plus
simplement emacs.
xemacs est une version d'emacs plus graphique mais moins standard. Il possde beaucoup de points en commun avec emacs mais certains points sont incompatibles. Nous ne
l'tudierons pas dans ce cours mais xemacs est disponible sur la plupart des machines de
l'universit de Nice.
12.1 Entre et sortie
12.1.1 Lancer emacs
emacs -q] fichier] &
lance la version X Window de emacs. Comme tous les clients X, il faut lancer emacs en
arrire-plan pour garder la possibilit de travailler dans la fentre X d'origine. Dans un
12.2. CONCEPTS DE BASE
6
environnement X Window, emacs est lanc dans sa propre fentre X.
Le noyau d'emacs charge en mmoire de nombreux modules crits en elisp pour tendr
ses fonctionnalits. Il faut indiquer l'diteur o- aller chercher ces modules. Si on ut
lise un seul diteur de la famille emacs, on peut utiliser la variable d'environnemen
EMACSLOADPATH. Pour cela, on ajoutera, par exemple, les lignes suivantes dans le chie
.zshrc (voir 15.3.2) :
export EMACSDIR=/usr/local/emacs-19.31
export EMACSLOADPATH=$HOME/emacs:$EMACSDIR/site-lisp:$EMACSDIR/lisp
Attention, emacs et xemacs utilisent des variantes direntes de certains modules. O
vitera d'utiliser la variable EMACSLOADPATH si on utilise les deux diteurs. Dans ce cas,
langage elisp permet de donner des valeurs direntes selon le type, et mme la versio
de l'diteur qui lit le chier .emacs. L'criture d'un chier .emacs ne fait pas partie d
ce cours * rcuprez des exemples dj crits de chiers .emacs et/ou lisez le manuel d
langage si vous tes intresss.
Le chier .emacs du rpertoire HOME de l'utilisateur est excut automatiquement a
dmarrage d'emacs. Si on ne veut pas qu'il s'excute (par exemple si ce chier contient de
erreurs), on lance emacs avec l'option -q.
12.1.2 Sortir de emacs
Sous X Window, le menu File permet de sortir de emacs.
C-x C-c permet de sauvegarder (aprs demande de conrmation) les buers avant d
sortir.
12.2 Concepts de base
12.2.1 Description d'une fentre emacs
Une fentre ache par emacs est compose de :
) une barre de menus (seulement pour les versions sous graphiques en haut de la fentr
) la fentre de travail proprement dite o- s'ache le buer courant, sous la barre d
menus,
) la ligne d'information, situe sous la fentre de travail,
) le mini-buer se trouve en bas de la fentre * il contient en gnral une seule lign
Dans la version X Window, un ascenseur borde la droite de la fentre de travail.
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
64
Menus de la version graphique (X Window)
12.2. CONCEPTS DE BASE
6
indiques par C-M- dans le manuel s'obtiennent alors en tapant d'abord Esc] puis Ctr
et le caractre suivant (et non pas l'inverse).
Si on travaille dans l'environnement graphique (X Window, Windows 95 ou autre), le
haut de l'cran est occup par une ligne de noms de menus :
Buers permet de choisir son buer de travail
File
permet de charger, sauvegarder un chier, ouvrir une nouvelle fentre, imprimer
ou supprimer un buer, sortir de emacs
Edit
permet de copier, couper, coller, dfaire l'eet d'une commande, remplir avec le
plus de mots possible les lignes d'une rgion (Fill)
Help
permet d'obtenir de l'aide sur emacs ou une commande Unix
De nombreux modes de travail (voir 12.2.5) modient ces menus ou ajoutent de nouvelles entres.
Toutes les actions sous emacs sont excutes par des commandes dont le nom rappel
le type de l'action excute :
Ligne d'information sur le mode de travail
L'utilisateur peut lancer ces commandes par leur nom en les prxant avec M-x. Pa
exemple,
La dernire ligne en bas de l'cran contient quelques indications utiles l'utilisateur :
--**-Emacs : nom-buffer
Commandes emacs
next-line
load-file
kill-word
goto-line
save-buffers-kill-emacs
M-x kill-word
(mode majeur mineur)--L106--position--------
Les ** indiquent que le buer a t modi (on peut aussi avoir %% qui indique que
le buer est readonly).
mode majeur et mode mineur sont les modes de travail (voir 12.2.5).
L106 dsigne le numro de la ligne courante.
position peut tre All, Bot, Top ou nn% suivant que tout le texte est ach ou
seulement la n ou le dbut, ou si nn% du texte est au dessus de la premire ligne ache.
Mini-bu%er
Les commandes tapes par l'utilisateur et les messages envoys par emacs sont achs
sous la ligne d'information dans une zone appele minibuer.
On peut annuler une commande en cours et ache dans ce minibuer en tapant C-g.
Associations de cls
Les actions les plus couramment employes sont associes des cls (combinaisons d
touches du clavier). Il sut de taper la cl pour lancer la commande associe. Voici deu
exemples :
Commande
Cl
C-n
C-x C-c
Les autres commandes comme goto-line doivent tre lances avec M-x.
Les associations ( bindings) peuvent tre modies (voir 12.4) et peuvent dpendre d
mode de travail (voir 12.2.5).
next-line
save-buffers-kill-emacs
12.2.2 Commandes et associations de cls
Complter automatiquement des noms de commandes
emacs fait un grand usage de deux touches spciales notes C- et M- dans le manuel
d'utilisation.
C- dsigne la touche Ctrl]. Taper C-x revient appuyer sur la touche Ctrl], et
appuyer sur la touche x tout en gardant la touche Ctrl] enfonce. Le maintien sur la
touche Ctrl] est indiqu par le - qui suit le C. M- dsigne la touche Meta On l'utilise
de la mme manire que la touche Ctrl].
Pour les claviers qui n'ont pas de touche Meta], la touche Alt] (ou la touche marque
d'un } sur les claviers des machines Sun) joue souvent le mme rle. Sinon, on peut
simuler M-x en tapant sur la touche Esc] avant de taper sur la touche x. Les commandes
Certaines commandes ont des noms assez longs (par exemple goto-line). Il exist
des facilits pour ne pas tre oblig de taper les noms en entier : on tape Tab] (touch
de tabulation) ds que le nom de la commande peut se distinguer des autres noms d
commandes * si on tape ESP] (barre d'espace), emacs complte un mot ds que ce mot s
distingue des autres mots cls. Pour l'exemple de goto-line, il sut de taper g suivi d
ESP] pour avoir goto- et l suivi de TAB]. Pour entrer une tabulation ou un espace,
sut de les faire prcder de C-q.
Si emacs ne peut complter parce qu'il y a plusieurs possibilits de compltions, il ach
une fentre d'aide o- sont aches toutes les suites possibles. On peut alors parcourir cett
fentre par C-M-v. On peut choisir une des commandes en cliquant sur son nom avec
Touches spciales
66
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
bouton du milieu de la souris. Cette fentre se referme automatiquement quand on lance
la commande complte.
De mme, les noms de chiers taps dans le mini-buer (par exemple pour donner
le nom d'un chier charger dans un buer) peuvent tre complts par emacs quand
l'utilisateur tape la touche Tab] ou la barre d'espace.
12.2.3 Buers et fentres
Tampon (ou bu%er)
Chaque texte dit est conserv en mmoire centrale dans un buer. Plus gnralement, toute activit de emacs (aide en ligne, courrier lectronique, etc.) est eectue dans
un buer.
On peut travailler avec plusieurs buers en mme temps. Chaque buer a un nom. Le
nom d'un buer associ un chier est le nom terminal du chier. Si on travaille avec
plusieurs chiers qui ont le mme nom terminal, un numro est accol la n du nom du
buer.
Sous X Window, le menu Buers permet de choisir un buer.
Fen&tre emacs
emacs ouvre une premire fentre au dmarrage.
Par la suite l'utilisateur peut diviser cette fentre en plusieurs sous-fentres. Une fentre
emacs visualise une portion de buer et permet de travailler avec les donnes aches.
Deux fentres peuvent visualiser des portions direntes d'un mme buer ou visualiser
des buers dirents.
Le menu File permet de grer les fentres : Split Window pour dcouper la fentre
en cours en deux, ou One Window pour fermer toutes les fentres sauf une (pour cela,
on peut aussi, dans les versions graphiques cliquer avec le bouton du milieu de la souris
sur la ligne d'information de la fentre choisie).
On peut accder une fentre en cliquant avec le bouton gauche dans la fentre.
Fen&tre X ('frame( dans le manuel en anglais)
Sous X Window, l'utilisateur peut ouvrir une nouvelle fentre X pour y acher le buer
courant. Il peut ensuite y charger un autre buer ou y visualiser une autre partie du buer
courant comme il le ferait pour une fentre emacs.
Chaque fentre X possde son propre menu.
Pour ouvrir une nouvelle fentre X, le plus simple est d'utiliser le menu File, choix
Make New Frame. La fentre peut tre ferme par le mme menu, choix Delete Frame.
12.2. CONCEPTS DE BASE
6
12.2.4 Point d'insertion, marque, rgions
Point d'insertion
Le point d'insertion indique l'endroit o- les modications apportes au texte par l'ut
lisateur seront eectues (insertion de nouveaux caractres, suppression,...). Le point es
situ entre deux caractres. Il est indiqu sur l'cran par un curseur ach sur la positio
qui suit le point.
Chaque tampon a un point d'insertion.
Rgion
La rgion est la zone de texte comprise entre le point d'insertion et la marque.
La marque peut tre positionne dans le texte en tapant C-<barre d'espace>ou impl
citement par des manipulations de la souris.
C-x h met tout le texte du document comme rgion
M-h
met tout le paragraphe comme rgion
Utilisation de la rgion et de l'anneau de suppression
Plusieurs commandes permettent de manipuler une rgion (une zone de texte) et d
l'enregistrer dans un anneau de suppression.
emacs conserve dans un anneau de suppression (commun toutes les fentres) le
textes supprims par les commandes qui suppriment plus d'un seul caractre (C-k, Cmais pas C-d, DEL] ou Backspace]). La commande M-w permet aussi d'ajouter des texte
cet anneau sans les supprimer :
C-w
supprime la rgion (attention au w trompeur !) et la place dans l'anneau de sup
pression
M-w
enregistre la rgion dans l'anneau de suppression
L'utilisateur peut ensuite rutiliser les textes ainsi conservs :
C-y
colle le dernier texte plac dans l'anneau de suppression l'endroit du poin
d'insertion
M-y
remplace le texte prcdemment coll par le texte plac juste avant dans l'annea
de suppression. On peut ainsi passer en revue tous les textes conservs jusqu'
trouver le texte que l'on veut.
Dans un environnement X Window, on peut utiliser le menu Edit pour supprime
copier ou coller une rgion. On peut aussi utiliser la souris :
Double-clic sur le bouton gauche
enregistre le mot point par la souris dans l'anneau de suppression
Triple-clic sur le bouton gauche
enregistre la ligne pointe dans l'anneau de suppression
Bouton du milieu
colle l'endroit du clic un texte prcdemment copi ou coup (idem C-y)
68
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
Bouton droit
copie le texte plac entre le point et l'endroit du clic pour tre coll ensuite (idem M-w).
Si on clique 2 fois, le texte est coup au lieu d'tre copi (idem C-w).
Glisser (drag en anglais)
(c'est--dire, cliquer et se dplacer en maintenant un bouton de la souris enfonc) avec le
bouton gauche, du dbut la n d'un texte, permet de dnir une rgion et de l'enregistrer
dans l'anneau de suppression.
12.2.5 Mode de travail
Emacs permet de travailler en plusieurs modes de travail adapts au type de texte que
l'on tape et au type de travail auquel ce buer est associ. Il existe par exemple un mode
de travail pour crire un programme en langage C et des modes pour envoyer et recevoir
du courrier lectronique depuis emacs.
Chaque fentre emacs a un mode de travail majeur en cours.
On peut aussi lancer des modes mineurs qui modient lgrement le fonctionnement
des modes majeurs.
Nous n'tudierons pas ces modes dans ce cours. Voici seulement une description rapide
du mode dired qui peut tre trs utile.
On entre dans ce mode directory edition soit en ouvrant un chier rpertoire au
lieu d'un chier ordinaire, soit en appelant explicitement le mode par la commande M-x
dired-mode.
Ce mode est trs pratique pour se dplacer dans l'arborescence : on clique avec le bouton
du milieu sur le nom du rpertoire o- l'on veut aller ou sur le chier que l'on veut charger
dans un buer. Dans ce cas, l'achage se fait dans une deuxime fentre. Si on tape f
sur la ligne qui contient le curseur, l'achage se fait dans la mme fentre.
On peut aussi copier et supprimer des chiers. On se reportera l'aide en ligne d'emacs
et aux menus oerts par ce mode pour en savoir plus.
12.3 Commandes
12.3.1 Commandes de base
Insertion
Par dfaut emacs est en mode insertion : tout caractre non spcial (achable) tap est
insr l'endroit du point.
C-q
permet d'insrer un caractre non achable tap la suite
Suppression
Backspace supprime le caractre avant le point
C-d
supprime le caractre situ aprs le point (donc plac sous le curseur)
12.3. COMMANDES
C-k
6
eace la n de la ligne (situe aprs le point) et la place dans l'anneau de sup
pression
Dplacer le point d'insertion
Les terminaux sont souvent congurs pour que l'utilisateur puisse utiliser les 0che
pour se dplacer d'un caractre ou d'une ligne et les touches Next] et Prev] pour s
dplacer d'un cran.
On peut aussi utiliser les commandes ci-dessous :
C-a
va au dbut de la ligne
C-e
va la n de la ligne
M-< va au dbut du chier
M-> va la n du chier
Dans un environnement X Window,
Bouton gauche
dplace le point l'endroit du clic
On peut aussi utiliser la barre de dlement pour se dplacer.
Barre de dlement ou 'ascenseur( (Scroll Bar)
Toutes les fentres X Window associes emacs possdent une barre de dlemen
verticale droite de la fentre. Cette barre reprsente tout le texte. Un rectangle intern
plus ou moins long, reprsente la portion du texte actuellement ache.
On utilise la souris pour se dplacer dans le texte l'aide de cette barre. Les utilisateur
de Windows sur PC ou du Macintosh remarqueront que la manipulation de la barre d
dlement est dirente sous emacs. Cette manipulation est identique la manipulatio
des ascenseurs sous le client X Window xterm (voir cours sur X Window).
Bouton gauche
dplace en haut de la fentre la ligne en face de laquelle on a cliqu. Le texte est don
dplac vers la n du chier d'au plus un cran. Plus on clique bas, plus on avance dans
texte.
Bouton du milieu
dplace l'endroit du clic le rectangle interne la barre de dlement. Le texte ach es
le texte correspondant la position nouvelle du rectangle interne. Si on veut se dplace
vers la n du chier, on clique donc sous le rectangle interne.
On peut aussi cliquer sur le rectangle interne de l'ascenseur avec ce bouton et glisser pou
se dplacer contin.ment dans le texte.
Bouton droit
dplace l'endroit du clic la ligne place en haut de la fentre. Le texte est donc dplac
vers le dbut du chier d'au plus un cran. Plus on clique bas, plus on remonte dans
texte.
70
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
Sauvegarder un chier
Les chiers chargs dans un buer ne sont modis que lorsque l'utilisateur indique
explicitement qu'il veut sauvegarder les modications qu'il a eectues sur le buer.
C-x C-s sauvegarde le buer courant
Sous X Window le menu File permet aussi de sauvegarder les chiers sous son nom
actuel (Save Buer ) ou sous un autre nom (Save Buer As...).
Remarque 12.1
L'ancienne version du chier (s'il ne s'agit pas d'un nouveau texte) est conserve sous
l'ancien nom suivi du caractre ~.
emacs eectue des sauvegardes automatiques intervalles rguliers. Ces sauvegardes
sont eectues dans des chiers dont le nom est le nom du chier modi entour du
caractre #. Ces sauvegardes sont supprimes en cas de n d'dition normale. S'il y a eu
une sortie anormale d'emacs et si vous n'avez pu sauvegarder vos chiers, ces sauvegardes
automatiques vous permettent de rcuprer les bonnes versions de vos chiers. De plus,
si vous voulez charger un des chiers qui n'a pu tre sauvegard normalement et si emacs
s'aper'oit qu'il y a un chier # plus rcent que le chier que vous voulez charger, emacs
vous envoie le message Auto save le is newer* consider M-x recover-le. Vous pouvez
alors taper M-x recover-le et rcuprer automatiquement la version enregistre dans la
sauvegarde automatique.
12.4. PERSONNALISATION DE EMACS
7
12.3.2 Autres commandes
Rechercher du texte
C-s
C-r
C-M-s
eectue une recherche incrmentale (les caractres sont recherchs au fur et
mesure qu'ils sont taps) du texte tap vers la n du buer. Pour passer l'occu
rence suivante, on retape C-s. Pour arrter la recherche, on tape la touche Retur
ou une commande de dplacement. On peut ensuite relancer la mme recherch
en tapant C-s C-s.
eectue une recherche incrmentale vers le dbut du chier. Pour passer l'oc
curence suivante, on retape C-r.
eectue la recherche d'une expression rgulire (voir chapitre 11).
Remplacer une cha)ne de caractres par une autre
M-%
La question Query replace s'ache. On doit alors entrer la cha ne de caractre
remplacer suivie de Return]. Il s'ache alors with et l'on entre la cha ne d
remplacement suivie de Return].
A chaque fois que la cha ne remplacer est rencontre, l'utilisateur peut ta
per :
y ou n pour remplacer ou non,
q
pour arrter de remplacer,
!
pour tout remplacer jusqu' la n,
C-h
pour avoir de l'aide sur la rponse
Aide
12.4 Personnalisation de emacs
Sous X Window, le menu Help permet d'accder aisment toutes les aides ncessaires.
Le chier ~/.emacs est excut au dmarrage de emacs. Il doit contenir du code Lisp
Les amateurs clairs pourront consulter le manuel de programmation de emacs pour plu
de prcisions (environ 700 pages). On dispose aussi d'une description des variables et de
fonctions Lisp disponibles gr&ce au menu Help, Describe Function et Describe Variable
Certaines personnalisations ne sont pas diciles eectuer, mme si l'on ne conna
pas le langage Lisp. Par exemple, les aectations de valeurs des variables (on peut s'aide
du menu Help Describe Variable) ou les associations de touches sont trs simples :
Dfaire (' undo()
Si l'utilisateur s'est tromp il peut annuler la plupart des commandes qu'il a tap.
Sous X Window, il peut utiliser pour cela le choix Undo du menu Edit.
Il utile de noter que
C-g
sort du minibuer d'entre des commandes en annulant la commande que l'utilisateur est en train de taper.
On peut ainsi se sortir d'un mauvais pas lorsqu'emacs vous ache continuellement
le mme message dans le mini-buer parce que vous avez lanc une commande par une
mauvaise man8uvre. Il est alors souvent ncessaire de taper C-g, si ncessaire plusieurs
fois, et en se pla'ant avec la souris dans le minibuer si emacs s'entte.
(setq inhibit-startup-message t)
aecte la valeur t (true) la variable inhibit-startup-message pour viter d'avoir
message initial de emacs
(global-set-key find] 'isearch-forward)
associe la commande de emacs isearch-forward la touche du clavier Find qui pourr
ainsi tre utilise pour lancer une recherche. Les noms des touches reconnus par emacs son
achs par la commande C-h k ou par le menu Help Describe Key.
1. Plus exactement, elisp, une variante du langage Lisp
72
CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS)
Si une erreur survient lors de l'excution du chier .emacs ou des dirents modules
appels, on peut visualiser les messages d'erreurs en allant dans le buer *Messages*. On
peut aussi valuer du code elisp d'un buer en mode Emacs-Lisp en tapant C-x C-e
avec le curseur plac juste derrire la parenthse fermante du code elisp.
Un grand nombre de packages crits en elisp par la communaut internationale des
utilisateurs d'emacs permettent d'ajouter de nombreuses fonctionnalits aux possibilits
de base oerte par la distribution ocielle d'emacs. On peut trouver la plupart sur le site ftp
archive.cis.ohio-state.edu dans le rpertoire /pub/gnu/emacs/elisp-archive/packages.
Si on travaille sous X Window, on peut aussi personnaliser quelques caractristiques
de son environnement (couleurs, prsence d'un ascenceur sur les fentres X, etc.) avec les
chiers d'initialisation des ressources. Tapez man emacs pour plus de prcisions 2.
Depuis la version 20 un environnement minimum peut tre install pour tous les utilisateurs d'emacs. Cet environnement est dni dans les chiers site-load.el et site-start.el
(cherchez-les dans l'arborescence o- est installe la version 20 * les commandes locate ou
nd sont faites pour cela). Cet environnement, s'il vous convient vous permet de rduire
de fa'on signicative la taille de votre chier .emacs. Si des options ne vous conviennent
pas, allez consulter ces chiers pour voir comment changer les choix qui y ont t faits.
12.5 Complments pour les versions graphiques
Copier ou coller entre fen&tres X Window
Quand un texte est copi ou coup (dans l'anneau de suppression) il peut tre coll
dans une autre fentre X Window, mme s'il ne s'agit pas d'une fentre associe emacs.
Inversement, on peut coller dans emacs un texte prcdemment copi ou coup dans une
autre fentre X Window.
Choix de la police de caractres sous X Window
S-BD (Shift + bouton droit de la souris) ache un menu qui permet de choisir la police
utilise. On choisira plutt une police espacement xe du type Courier 14 ou 7x14.
2. La plupart des versions d'emacs ne sont pas crites au-dessus de la bote outils Xt et tous les chiers
de ressources ne sont pas utilis
s
7
Chapitre 13
Manipulation des donnes des chiers
13.1 Tri (sort)
sort options] fichiers...]
trie les lignes des chiers (regroupes ensemble). La sortie se fait sur la sortie standard
Par dfaut, les lignes viennent de l'entre standard.
Les lignes sont tries selon la valeur d'une cl de tri forme d'une ou plusieurs zone
extraites de chaque ligne. Par dfaut le tri se fait sur les lignes entires selon l'ordre lex
cographique (et selon le code ASCII) et selon l'ordre croissant par dfaut.
Options pour indiquer la cl de tri :
+pos1 pos2 permet d'indiquer le dbut et la n d'une zone de la cl de tri. Le coup
+pos1 )pos2 indique que la zone de tri commence au champ numro pos
+ 1 et se termine au champ numro pos2 + 1 (attention, non compris !
S'il n'y a pas de )pos2, la zone de tri va jusqu' la n de la ligne. La notio
de champ est dnie ci-dessous dans la dnition de l'option -t.
-tsparateur indique le caractre qui spare les dirents champs.
Si un sparateur n'est pas dni, les champs sont spars par toute suit
d'espaces ou de tabulations contigus. Le premier caractre blanc est cons
dr comme un sparateur * les espaces et tabulations suivants font part
du champ suivant (voir option -b).
Il peut y avoir plusieurs cls de tri (voir exemple (b) ci-dessous).
-b
ignore les espaces de tte dans chaque champ (-b est plac avant tous le
+pos1 ou b est accol derrire les +pos1 des champs pour lesquels cett
option est valable).
-n
eectue un tri numrique (et non lexicographique) sur les cls. On peu
aussi accoler la lettre n derrire +pos1 si on ne veut trier numriquemen
que certains champs.
-f
ignore la dirence entre majuscules et minuscules
Autres options :
-c
ache un message si les lignes ne sont pas dans le bon ordre (et dans ce ca
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
74
-ochier
-r
-u
renvoie un code retour gal 1 au lieu de 0)
sort le rsultat du tri dans chier. Attention l'erreur suivante :
sort chier > chier
qui dtruit chier avant de le trier (voir redirections en 14.2). La bonne
commande est
sort -ochier chier
inverse l'ordre de tri. On peut aussi accoler la lettre r derrire +pos1 si on
ne veut trier par ordre dcroissant que certains champs.
si plusieurs lignes ont la mme valeur pour la cl de tri, une seule de ces
lignes est envoye sur la sortie standard.
Exemples 13.1
(a) Tri de /etc/passwd sur le numro de l'utilisateur :
13.4. CONVERSION, SUPPRESSION DE CARACTRES (TR)
ache le nombre de lignes, de mots, de caractres et le nom de chaque chier. Si des chier
ne sont pas spcis, l'entre standard est prise par dfaut.
Options
-l
-w
-c
nombre de lignes seulement
nombre de mots seulement
nombre de caractres seulement
Exemples 13.3
(a) Nombre de chiers de /bin :
ls -A /bin | wc -l
(b) Compter les lignes, mots et caractres de tous les chiers du rpertoire courant don
le nom commence par b :
sort -t: +2n -3 /etc/passwd
Le tri ne se fait pas correctement si on oublie le n la suite de +2.
(b) Tri les chiers du rpertoire courant par taille et par nom pour les chiers qui ont la
mme taille :
ls -lgA | sort +4n -5 +8
13.2 Recherche d'une chane de caractres (grep)
grep options] expr-reg fichiers...]
ache sur l'cran les lignes des chiers, qui contiennent une cha ne de caractres correspondant l'expression rgulire expr-reg (voir chapitre 11. L'entre standard est prise par
dfaut si des chiers ne sont pas spcis. Le code retour renvoy est 0 si l'expression
rgulire a t trouve ou 1 sinon.
Si expr-reg comporte des caractres spciaux pour le shell (* ou par exemple), il ne
faut pas oublier de les protger en les entourant d'apostrophes ou de guillemets (voir 14.8).
-c
-i
-n
-v
Options
wc b*
13.4 Conversion, suppression de caractres (tr)
La commande tr permet de convertir ou de supprimer des caractres provenant d
l'entre standard.
Conversion de caractres
tr -cs] chane1 chane2
transforme les caractres provenant de l'entre standard ainsi : les caractres contenus dan
chane1 sont transforms en les caractres correspondants de chane2 et les autres caractre
sont conservs tels quels. Le tout est envoy vers la sortie standard.
Si chane2 contient moins de caractres que chane1, le dernier caractre de chane
remplace les caractres manquants.
On peut dsigner un caractre par son code ASCII en octal prcd par n. On peu
dsigner un intervalle de caractres : e-l dsigne les lettres minuscules comprises entre
et l (bornes comprises). En Unix systme V, la syntaxe est plutt e-l].
ache seulement le nombre de lignes contenant la cha ne
ignore la dirence entre minuscules et majuscules
ache les numros des lignes
ache les lignes qui ne contiennent pas la cha ne
Exemple 13.2
Exemples 13.4
( > est le prompt dans les exemples suivants)
~> tr aeiou AEIOU
bonjour
Ctrl] D
bOnjOUr
grep -c '^bin' fichier
ache le nombre de lignes de chier qui commencent par bin.
13.3 Compter les caractres, les mots, les lignes (wc)
wc options...] fichiers...]
7
(b)
(a)
~> tr "a-z" "A-Z"
abcd
Ctrl] D
ABCD
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
76
(c)
cat toto | tr ae AE > totobis
ou
tr ae AE > totobis < toto
-c
Options
prend pour chane1 le complment de la chane1 indique dans la commande. Le
complment est pris par rapport l'ensemble des caractres de code 0 255.
-s
(squeeze) ne garde en sortie qu'un seul exemplaire d'une suite d'un mme caractre de chane2.
Exemple 13.5
tr -cs a-zA-Z '\012'
ache l'entre au clavier, un mot (cha ne compose uniquement de lettres) par ligne
(\012 est le caractre passage la ligne de code 10 en dcimal, 012 en octal).
Suppression de caractres
tr -d chane
envoie vers la sortie standard les caractres re'us dans l'entre standard s'ils ne sont pas
inclus dans cha ne. tr supprime au passage tous les caractres inclus dans cha ne.
Exemple 13.6
~> tr -d ac
abcad
Ctrl] D
bd
~>
13.5 Fractionnement vertical (cut)
cut -cliste fichiers...]
dcoupe un ou plusieurs chiers (entre standard par dfaut) verticalement en slectionnant des intervalles de caractres (comme l'indique l'option -c) conserver dans chaque
ligne. Le rsultat est envoy sur la sortie standard.
liste est une liste de nombres entiers spars par des virgules avec ventuellement des
tirets pour indiquer un intervalle. Le dcoupage se fait sur les numros de caractres (le
premier caractre a le numro 1). Cette liste indique quels seront les caractres qui seront
conservs sur chaque ligne.
Exemples 13.7
(a) 1,3,8
dsigne les caractres situs en position 1, 3 et 8
(b)
2-5,10
dsigne les caractres situs en position 2 5 et 10
13.5. FRACTIONNEMENT VERTICAL (CUT)
(c)
-5,8
(d)
3-
(e)
12-20,4-15
7
dsigne les caractres situs en position 1 5 et 8
dsigne les caractres situs en position 3 la n de la ligne
dsigne les caractres situs en position 4 20
Les caractres seront toujours achs dans l'ordre qu'ils ont sur la ligne du chier, qu
que soit l'ordre donn dans la liste (voir exemple b ci-dessous).
Exemples 13.8
(a) cut -c-5,10-15 fichier1 fichier2
extrait les 5 premiers caractres et les caractres 10 15 de chaque ligne de fichier
et de fichier2 et les ache sur l'cran
(b)
cut -c10-12,4-11 fichier
extrait les caractres 4 12 de chaque ligne. On remarquera que les caractres 10 e
11 ne sont achs qu'une seule fois.
cut -fliste -ddlimiteur] -s] fichiers...]
dans ce cas le dcoupage se fait sur des champs (comme l'indique l'option -f) dlimite
par dlimiteur (option -d * tabulation par dfaut).
Attention, si plusieurs dlimiteurs sont accols, ils dnissent plusieurs champs. C'es
une source frquente d'erreurs quand le dlimiteur est la tabulation ou l'espace. Quand o
veut extraire des champs spars par un ou plusieurs espaces il est prfrable d'utiliser l
commande awk (voir 13.10).
Les lignes sans dlimiteur sont conserves en entier. L'option -s indique qu'il ne fau
pas conserver les lignes sans dlimiteur.
liste est une liste de nombres entiers spars par des virgules avec ventuellement de
tirets pour indiquer un intervalle. Le dcoupage se fait sur les numros de champs (
premier champ a le numro 1). Cette liste indique quels seront les champs qui seron
conservs sur chaque ligne.
Les caractres seront toujours achs dans l'ordre qu'ils ont sur la ligne du chier, qu
que soit l'ordre donn dans la liste.
Exemples 13.9
(a) cut -f1,5 -d: /etc/passwd
ache les utilisateurs et le commentaire associ du chier /etc/passwd
(b) Compter combien il y a de clients distincts dans un chier de factures dont chaqu
ligne correspond un client plac en tte de ligne (tabulation entre chaque zone d'un
ligne) :
cut -f1 factures | sort -u | wc -l
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
78
13.6 Comparaison du contenu de 2 chiers
13.7. TRAITER LES LIGNES CONSCUTIVES IDENTIQUES (UNIQ)
Exemple 13.11
$ cmp fich1 fich2
fich1 fich2 differ : char 160, line 5
13.6.1 Dirences entre deux chiers texte (di)
diff -e] fichier1 fichier2
indique quelles lignes doivent tre changes dans chier1 pour qu'il soit identique chier2.
Les deux chiers doivent tre de type texte, structurs en lignes (voir 1.6.2).
On peut ainsi comparer deux versions d'un mme chier.
Le rsultat n'est pas toujours facile comprendre. La lettre a indique que des lignes ont
t ajoutes chier2 par rapport chier1, d indique que des lignes ont t supprimes,
c que des lignes ont t changes. Les nombres avant la lettre sont des numros de lignes
de chier1 et les numros qui suivent la lettre sont des numros de lignes de chier2. Les
lignes de chier1 sont prcdes de <, celles de chier2 sont prcdes de >.
Exemple 13.10
~> cat f1
ab
c
e
fg
h
~> cat f2
ab
e
f
u
~> diff f1 f2
2d1
< c
4,5c3,4
< fg
< h
--> f
> u
13.6.2 galit du contenu de 2 chiers (cmp)
cmp -s] fichier1 fichier2
ache le premier octet dirent dans les 2 chiers.
-s
Option
cmp n'ache rien mais retourne seulement un code de retour (voir 14.1.6) : 0 si
les 2 chiers sont identiques, 1 s'ils sont dirents et 2 s'il y a eu une erreur.
7
13.7 Traiter les lignes conscutives identiques d'un chier (uniq)
uniq -cdu] fichier]
n'ache qu'un seul exemplaire des lignes de chier] (entre standard par dfaut). Si plu
sieurs lignes conscutives sont identiques, une seule est envoye vers la sortie standard
Cette commande ne considre pas deux lignes identiques si elles ne sont pas conscutive
(il faut faire un tri pralable si on veut les prendre en compte).
-c
-d
-u
Option
ache chaque ligne en un seul exemplaire, en la faisant prcder du nombre d
lignes voisines identiques
n'ache que les lignes identiques (en un seul exemplaire)
n'ache que les lignes en un seul exemplaire
13.8 Extraire le dbut ou la n d'un chier
13.8.1 Dbut d'un chier (head)
head -n] fichiers...]
sort sur la sortie standard les n premires lignes de chacun des chiers (de l'entre standar
par dfaut). Par dfaut, n est gal 10.
Exemple 13.12
head -5 fich*
13.8.2 Fin d'un chier (tail)
tail dbut] fichier]
copie la n du chier sur la sortie standard.
La premire ligne ache est indique par dbut qui peut tre +n (neme ligne du chier
ou )n (neme ligne partir de la n du chier).
n peut aussi tre suivi des lettres b ou c qui indiquent que l'on compte en blocs ou e
caractres et non pas en lignes.
Si le chier n'est pas indiqu, tail prend l'entre standard par dfaut.
Exemples 13.13
(a) tail +120 fich
(b) tail -2b fich
80
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
13.9 Un diteur non interactif (sed)
13.9.1 Description gnrale de l'diteur
sed est un diteur non interactif de chier : il lit les donnes provenant d'un chier (ou
de l'entre standard par dfaut), les traite suivant un programme et sort le rsultat du
traitement sur la sortie standard.
sed est souvent utilis comme ltre dans un pipe.
Comme pour la commande awk vue la section suivante, nous ne verrons qu'une petite
partie des possibilits oertes par cette commande.
sed -n] -e commande fichiers...]
copie les chiers (l'entre standard par dfaut) sur la sortie standard aprs avoir eectu le
traitement indiqu dans commande. commande doit tre un mot pour le shell (donc entour
de guillemets ou d'apostrophes s'il contient des espaces). Il peut y avoir plusieurs options
-e. S'il n'y en a qu'une, -e est optionnel.
sed -n] -f fichier-pgm fichiers...]
indique que le programme est enregistr dans un chier.
L'option -n indique que les lignes lues ne doivent pas tre automatiquement renvoyes
sur la sortie standard aprs leur traitement. Seules les lignes explicitement envoyes par la
commande p ou une commande similaire le seront (il faut par exemple ajouter l'option p
de la commande s).
Une grande partie des traitements eectus par sed peut tre excute par awk. awk est
plus puissant mais sed est plus simple d'emploi pour remplacer une cha ne de caractres
par une autre (commande s).
13.10. UN LANGAGE D'DITION DE FICHIERS (AWK)
8
aucune adresse
qui dsigne toutes les lignes.
13.9.4 Excution du programme
sed applique chaque commande du programme la premire ligne du chier trait.
passe ensuite la ligne suivante et ainsi de suite.
Chaque commande s'applique la version de la ligne courante dj modie par le
commandes dj excutes sur cette ligne.
13.9.5 Commandes
Les commandes les plus utilises sont
s pour substituer une cha ne de caractres une autre,
d pour supprimer des lignes,
p pour envoyer des lignes vers la sortie standard.
On peut regrouper plusieurs commandes avec { et }.
Exemple 13.14
for dir in `echo $PATH | sed -e 's/:/ /g'`
do .........
lignes indique les lignes sur lesquelles la commande sed sera applique. L'argument permet
de prciser le traitement eectuer sur les lignes.
Une grande partie des traitements eectus par sed peut tre excut par awk. awk es
plus puissant mais sed est plus simple d'emploi pour certaines t&ches, en particulier pou
remplacer une cha ne de caractres par une autre (commande s).
On remarquera que le chier trait n'est pas modi par sed. Si on veut modier u
chier de fa'on non interactive, le plus simple est d'utiliser l'diteur ed avec un chie
inclus (voir 16.4.1 * la commande s y est dtaille).
13.9.3 Format pour indiquer les lignes traiter
13.10 Un langage d'dition de chiers (awk)
13.9.2 Structure d'une ligne de programme
lignes commande arguments
Les lignes sont numrotes de 1 au nombre de lignes re'ues.
L'adresse d'une ligne peut tre dsigne par un numro de ligne, par $ (dernire ligne)
ou par une expression rgulire entoure de /.
Les lignes traites peuvent tre dsignes par :
adresse1, adresse2
qui dsigne un ou plusieurs blocs de lignes comprises entre les lignes dsignes par les deux
adresses
adresse
qui dsigne toutes les lignes correspondant l'adresse
13.10.1 Description gnrale de la commande
awk 1 lit un texte contenu dans un ou plusieurs chiers, le modie et envoie le rsulta
vers la sortie standard.
awk est une commande trs puissante pour travailler sur le contenu d'un chier. Elle po
sde un langage de programmation comportant des structures conditionnelles, des boucle
et des fonctions prdnies * ce langage peut travailler avec des variables et des tableaux
Nous n'tudierons ici que les fonctionnalits les plus simples oertes par awk.
1. du nom de ses d
veloppeurs Aho, Weinberger et Kernighan
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
82
Il est fortement conseill d'tudier plus en dtail cette commande si l'on veut eectuer
des traitements complexes sur le contenu des chiers. Un langage encore plus puissant est
fourni par le langage Perl qui ne sera pas tudi ici.
Le traitement eectuer est crit dans un programme tap directement dans la ligne
de commande (forme 1 de la syntaxe) ou enregistr dans un chier (forme 2 de la syntaxe).
awk -Fc] programme fichiers...]
ou
awk -Fc] -f fichier-programme fichiers...]
L'option -F permet d'indiquer le sparateur de champ (voir13.10.2).
Pour la premire forme de la syntaxe, le programme doit tre considr comme un seul
mot par le shell * en gnral, il est donc ncessaire de l'entourer par des apostrophes ou
des guillemets.
Excution de la commande :
awk travaille sur des enregistrements constitus de champs. Le sparateur d'enregistrement tant par dfaut le sparateur de ligne de Unix, awk travaille ordinairement sur des
lignes.
awk lit enregistrement par enregistrement les donnes des chiers (l'entre standard
par dfaut). Chaque enregistrement est trait son tour selon les indications donnes par
toutes les instructions du programme, avant la lecture de l'enregistrement suivant.
13.10.2 Champs
Quand awk lit un enregistrement d'un chier, il l'clate en champs spars par des
espaces ou des tabulations (par dfaut) ou par le caractre suivant l'option -F.
Le programme peut faire rfrence un ou plusieurs champs de la ligne lue :
$1, $2,...
reprsentent les 1er 2eme ,... champs
$0
reprsente la ligne entire.
Exemples 13.15
(a) Acher le nom, les autorisations et le propritaire des sous-rpertoires du rpertoire
courant :
ls -lg | awk '/^d/ { print $9, $1, $3 }'
(b) Acher les noms des utilisateurs :
awk -F: '{print $1}' /etc/passwd
13.10.3 Structure d'un programme
Un programme peut tre complexe et comporter de nombreuses lignes incluant toutes
les structures de programmation que l'on trouve habituellement dans les langages de programmation comme le langage Pascal ou le langage C.
13.10. UN LANGAGE D'DITION DE FICHIERS (AWK)
8
Une ligne d'un programme a la structure suivante :
slecteur { action }
slecteur indique si action doit tre excute sur l'enregistrement en cours de traitement
Dans ce cours nous ne verrons que les programmes comportant une seule ligne qu
ache (par la commande print) des portions de lignes du chier trait.
Les constantes de type cha ne de caractres sont entoures par des guillemets.
On peut inclure des commentaires dans une ligne du programme en les faisant prcde
du caractre #.
13.10.4 Cas particuliers pour une ligne de programme
) S'il n'y a pas de slecteur, action est toujours excute (pour tous les enregistrements
Exemple 13.16
ls -lg | awk ' { print $9, $5 }'
ache le nom et la taille (les neuvime et cinquime champs de la ligne) de
chiers du rpertoire courant.
) S'il n'y a pas d'action, l'enregistrement trait est recopi vers la sortie s'il a t
slectionn par slecteur.
Exemple 13.17
L'exemple de 13.18 pourrait donc s'crire plus simplement.
ls -l | awk '/^d/'
13.10.5 Slecteurs
Ils peuvent tre du type :
) /expression rgulire/
Dans ce cas, action sera excute sur un enregistrement s'il contient une cha ne d
caractres qui correspond expression-rgulire (voir 11).
Exemple 13.18
ls -l | awk '/^d/ { print }'
ls -l
ache toutes les lignes de courant.
concernant les sous-rpertoires du rpertoir
) expression de comparaison (semblables celles du Langage C) :
==, !=, <, >, <=, >=
De plus, ~ (tilde) permet de comparer une cha ne de caractres une expressio
rgulire (place entre deux /). Par exemple,
$5 ~ /^0-9]/
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
84
) expression compose des deux types prcdents relis par des oprateurs logiques
|| (ou), && (et), ! (ngation de l'oprateur qui suit)
) mots cl BEGIN ou END. Si le slecteur de la premire (resp. dernire) ligne du
programme est BEGIN (resp. END), l'action de cette ligne sera excute une fois
avant (resp. aprs) de traiter le premier (resp. dernier) enregistrement des chiers.
Des exemples d'utilisation de ces mots cls sont donns en 13.11.
Exemples 13.19
(a) $2 == ""
(b)
$2 == "1" || $2 =="5"
(c)
$2 !~ /^ab/
(d)
$2 > 3
(e)
/^$/
# deuxieme champ ne commence pas par ab
# ligne vide
Le format gnral d'un programme est donc :
BEGIN { instruction de d-but }
s-lecteur { action }
....
....
s-lecteur { action }
END { instruction de fin }
13.10.6 Actions
Une action est une suite d'instructions. Comme en Langage C plusieurs actions peuvent
tre regroupes entre accolades. Une instruction se termine par un *, un passage la ligne
ou par une accolade fermante.
Une instruction peut tre une instruction de contrle, une aectation, print ou printf.
Les instructions de contrle disponibles sont :
if, while, for, break, continue, next, exit.
L'instruction next fait passer directement au traitement de la ligne suivante.
Pour les autres instructions, la syntaxe est semblable celle du langage C. Les instructions composes de plusieurs instructions sont entoures d'accolades :
{ if (n > 1000) {
i++
somme += $4
}
}
13.10. UN LANGAGE D'DITION DE FICHIERS (AWK)
8
Pour une description plus dtaille, on se reportera au manuel de rfrence ou, encor
mieux, un guide d'utilisation de awk.
Des exemples d'utilisation des instructions de contrle sont donns dans la sectio
suivante.
Voyons un peu plus en dtails print et printf :
>
print expressions...] fichier]
ou
print expressions...] fichier]
>>
ache les expressions sur la sortie standard ou vers le chier ventuellement spci e
redirection. print eectue ensuite un passage la ligne.
Si les expressions qui suivent print sont spares par un ou plusieurs espaces, elle
sont sorties accoles les unes derrire les autres. Si elles sont spares par une virgule, elle
sont sorties spares par un espace.
On peut ajouter un pipe en sortie de print. La commande Unix qui re'oit ce qui es
envoy par print doit tre entoure de guillemets.
print (seul) ache l'enregistrement complet.
Variables utilisateur
Des variables peuvent tre utilises dans les programmes. La syntaxe de leur utilisatio
est semblable au Langage C. Les variables sont initialises la cha ne vide. Les variable
qui sont utilises dans des calculs sont automatiquement initialises 0.
Exemple 13.20
Acher la taille totale des chiers achs par la commande ls :
ls -lg |
awk ' { print $9, $5
somme = somme + $5 }
END { print "Total des tailles des fichiers :", somme }'
Remarque 13.1
Les constantes cha nes de caractres doivent tre entoures par des guillemets sino
elles sont considres comme des noms de variables par awk. C'est une source d'erreu
frquente lorsque l'on commence programmer avec awk.
Variables systme
Voici quelques variables systme utilises par awk :
nombre de champs de la ligne
nombre de lignes qui ont t lues
sparateur de champs en entre (par dfaut l'espace ou la tabulation)
sparateur de champs en sortie (par dfaut l'espace)
NF
NR
FS
OFS
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
86
RS
sparateur d'enregistrements (line feed de code 10 par dfaut).
RS="" indique que le sparateur d'enregistrement est la ligne vide. C'est
utile pour travailler avec des enregistrements multi-lignes.
FILENAME nom du chier en cours de traitement
FS, OFS et RS sont modiables par le programme.
13.10.7 Fonctions, oprateurs
On peut utiliser des fonctions (de syntaxes semblables aux fonctions du Langage C)
dans les slecteurs et les actions.
Pour faire des calculs :
int, sqrt, log, exp, int,...
Pour travailler avec des cha nes de caractres :
substr, length, index,...
La fonction getline permet de lire une ligne ou la valeur d'une variable :
getline lit une ligne du chier en cours.
getline variable lit une ligne du chier en cours et met la valeur dans variable.
On peut spcier en entre un autre chier pour getline par une redirection de l'entre :
getline variable ] < chier La valeur lue par getline peut aussi provenir d'une commande Unix :
commande j getline variable ]
Pour lancer une commande Unix, on dispose de la fonction system . Par exemple,
system("rm fichier")
On peut utiliser aussi des calculs avec les oprateurs du langage C :
+, -, *, /, %, ++, ), +=, *=, /= et %=
Exemple 13.21
length($0) > 72 { print "Ligne", NR, "longue:", substr($0, 1, 72)}
Les versions nawk et gawk ont les fonctions gsub et sub qui permettent de remplacer
une cha ne de caractres par une autre dans les lignes du chier.
13.11 Exemples de programmes
) Acher le nombre de lignes du chier :
awk 'END { print NR }' fichier
) Acher le premier et le dernier champ de chaque ligne :
awk '{ print $1, $NF }' fichier
) Acher le nom et la taille des chiers du rpertoire courant :
ls -alg | awk '{ print $9, $3 }'
13.11. EXEMPLES DE PROGRAMMES
8
) Acher le nom et la taille des chiers du rpertoire courant avec un format de sort
plus agrable (le nom cadr gauche dans un champ de 20 caractres et la tail
cadre droite dans un champ de 6 caractres) :
ls -alg | awk '{ printf "%-20s %6d\n", $9, $4 }'
) Acher les lignes qui contiennent ab ou cde :
awk '/ab/ || /cde/'
) Acher tous les intervalles de lignes qui sont incluses entre deux lignes gales
debut et n :
awk '/^debut$/,/^fin$/'
) Acher les lignes dont le premier champ est dirent de celui de la ligne prcdente
awk '$1 != prev { print # prev = $1 }'
) Voici un chier programme adjacents que l'on peut appeler par
awk -f adjacents fichier
pour reprer les mots adjacents identiques dans un chier :
NF>0 {
if ($1 == derniermot)
print "double %s, ligne %s\n", $1, NR
for (i=2 # i<=NF # i++)
if ($i == $(i-1))
printf "double %s, ligne %s\n", $i, NR
if (NF>0)
derniermot = $NF
}
) Acher les groupes auxquels l'utilisateur appartient :
awk -F: /:,]`logname`'($|,)/{ printf "%s\n", $1 }' /etc/group
Remarquez l'expression ($|,) qui indique que le nom d'utilisateur est suivi pa
une virgule ou par la n de la ligne.
) Plier les lignes qui ont plus de 50 caractres dans un chier (on ajoute un \ droit
des lignes plies :
length($0) > 72 {
print substr($0,1,50) "\\"
ligne = substr($0,51)
while (length(ligne) > 50) {
print substr(ligne,1,50) "\\"
CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS
88
8
ligne = substr(ligne,51)
}
print ligne
}
length($0) < 72
13.12 Tableaux
awk peut manier des tableaux dont les indices ne sont pas ncessairement des entiers.
Voici un exemple de programme utilisant un tableau pour additionner toutes les valeurs
correspondant des noms d'un chier de la forme :
toto 100
bibi 200
toto 150
jean 200
toto 300
bibi 150
Le programme achera :
toto 550
bibi 350
jean 200
Voici le programme :
{ somme$1] += $2 }
END { for (nom in somme) print nom, sommenom] }
for (nom in somme)
Remarquez le qui parcourt le tableau.
On peut utiliser l'lment d'un tableau comme condition d'un if. Dans ce cas, la condition est vraie si l'indice correspond un lment qui a re'u une valeur dans le programme :
{ if (valeur$1]) print $1, "a deja une valeur" }
La fonction split permet de dcouper une cha ne de caractres en aectant chaque
champ de la cha ne aux lments d'un tableau.
13.13 D'autres commandes de manipulation de chiers
split
csplit
fold
paste
comm
join
Fractionnement horizontal d'un chier en chiers de tailles xes (on peut
recoller les morceaux par cat)
Fractionnement horizontal d'un chier selon le contenu des lignes du chier
(on peut recoller les morceaux par cat)
dcoupe les lignes trop longues en plusieurs lignes
Recollement vertical (en colonnes) de plusieurs chiers (le contraire de cut)
Slection/rejet de lignes communes 2 chiers
Jointure sur une zone commune (au sens des bases de donnes relationnelles)
de 2 chiers tris suivant cette zone
Troisime partie
Mcanismes d'interprtation du shell
9
Chapitre 14
Interprtation du shell. Mcanismes de
base
14.1 Gnralits sur le shell
14.1.1 Dnition
Quand l'utilisateur tape son nom et son mot de passe, le programme de dmarrag
associ l'utilisateur (voir 2.1.1) est automatiquement lanc. Ce programme est le plu
souvent un shell et toute la session de l'utilisateur se droule en fait dans ce shell.
Quand une commande est tape au clavier, le programme shell la lit, l'interprte e
lance son excution. La ligne tape au clavier peut ne comporter qu'un nom de command
mais elle peut aussi tre beaucoup plus complexe car le shell comprend un vritable langag
de programmation qui apporte beaucoup de souplesse et de puissance l'utilisateur.
L'utilisateur peut d'ailleurs crire des programmes dans le langage du shell et les enre
gistrer dans des chiers appels shellscripts (voir 14.11).
14.1.2 Compatibilit des dirents shells
Nous travaillerons avec le shell zsh. Sous ce shell les shellscripts sont excuts par le she
sh sauf mention contraire explicite du programmeur. Le shell standard est actuellemen
ksh.
Nous tudierons donc essentiellement les commandes communes sh, ksh et zsh, e
indiquant les cas o- les shells ne fonctionnent pas exactement de la mme fa'on.
Autant que possible on essaiera de n'utiliser que les commandes et possibilits oerte
par tous les shells quand on crira un shellscript, pour favoriser sa portabilit. En interacti
le problme ne se pose pas et on pourra utiliser toutes les facilits du shell avec lequel o
travaille.
Les shells peuvent tre congurs de direntes fa'ons selon les valeurs d'options qu
l'on peut donner, soit l'appel du shell, soit par la commande set (le plus souvent lanc
dans un chier d'initialisation du shell * voir 15.3). Par exemple,
92
ou
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
zsh -o NOCLOBBER
set -o NOCLOBBER
positionne l'option NOCLOBBER (voir 14.2.1) au dmarrage ou durant une session de zsh.
Pour avoir une bonne compatibilit de zsh avec ksh et sh, il faut positionner l'option
NO_NOMATCH (voir 4.5) et ne pas positionner les options GLOBDOTS et NOCLOBBER. Dans ce cas, l'incompatibilit principale de zsh avec les autres shells provient de la
fa'on d'indiquer la ngation de caractres pour la gnration des noms de chiers : ! ]
pour sh et ksh et ^ ] pour zsh.
14.1.3 Commandes et processus, commandes internes au shell
Suivant les cas, une ligne tape au clavier peut lancer aucun, un ou plusieurs nouveaux
processus (voir 2.2) :
) La plupart des lignes de commandes tapes par l'utilisateur entrainent l'excution
d'un chier binaire enregistr dans l'arborescence des chiers. Le shell lance l'excution de ce chier aprs avoir interprt la ligne de commande. Cette excution
engendre un nouveau processus.
) Certaines lignes de commandes peuvent engendrer plusieurs processus (par exemple
les lignes de commandes comportant un pipe).
) D'autres commandes sont internes au shell * le shell sait les excuter sans faire appel
un chier externe et aucun nouveau processus n'est engendr. Ces commandes sont
peu nombreuses : essentiellement cd et pwd dans les commandes les plus courantes.
14.1.4 Prompts
Le shell indique qu'il est prt prendre une nouvelle commande en achant le prompt
(par dfaut le prompt est $ ).
Une commande se termine par un passage la ligne. Dans certains cas le passage la
ligne n'est pas considr comme un terminateur de commande par le shell * dans ces cas, il
s'ache un deuxime prompt ( > par dfaut) pour indiquer que le shell attend la suite
de la commande :
$ echo "LIGNE 1
> LIGNE 2"
LIGNE 1
LIGNE 2
14.1.5 Environnement d'une commande ou d'un shellscript
Toutes les commandes lances dans Unix s'excutent dans un environnement de travail
dni par un ensemble de variables (voir chapitre 15).
14.2. REDIRECTIONS
9
Cet environnement peut guider les commandes pendant leur excution. Par exemple, l
commande lpr envoie les requtes d'impression vers l'imprimante dont le nom est conten
dans le variable PRINTER si cette variable fait partie de l'environnement.
14.1.6 Code retour d'une commande
Toute commande Unix renvoie un code retour.
En gnral, le code retour est gal 0 si tout s'est bien pass et un entier strictemen
positif sinon. Il permet d'automatiser des t&ches l'aide de shellscripts en tenant compt
des rsultats des commandes comme nous le verrons dans le chapitre 17.
Remarque 14.1
Ce code retour ne s'ache pas 1 * il est enregistr dans la variable ? du she
(voir 15.2.6). Il peut tre ach par la commande echo $?.
La touche d'annulation (souvent Ctrl] C * voir 3.3) permet d'interrompre l'excutio
d'une commande si elle n'a pas t lance en arrire-plan. Le code retour est alors en gnra
dirent de 0 (cela dpend de la manire dont a t crite la commande * voir command
interne trap en 17.5).
14.2 Redirections
Avant de lancer un processus, le shell 2 lui associe 3 chiers :
Entre standard (par dfaut le clavier) * le descripteur de chier est 0.
Sortie standard (par dfaut l'cran) * le descripteur de chier est 1.
Erreur standard (par dfaut l'cran) * le descripteur de chier est 2.
Ces 3 descripteurs peuvent tre lis d'autres chiers que ceux indiqus ci-dessus gr&c
aux commandes de redirection. Le shell va associer d'autres chiers que le clavier ou l'cra
ces 3 descripteurs et il lancera ensuite la commande.
14.2.1 Redirections de la sortie standard
Redirection avec crasement du chier de redirection (>)
On redirige la sortie standard d'une commande dans un autre chier que le chie
spcial associ l'cran, par la redirection
>chier
1. Sous zsh, l'option print_exit_value fait acher le code retour s'il est di
rent de 0
2. C'est une convention adopt
e par tous les shells et par l'immense majorit
des programmes cri
pour Unix
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
94
Cette redirection associe le chier chier au descripteur 1. Tout ce qui est envoy vers
la sortie standard (connue par la commande comme le chier de descripteur 1) est donc
envoy chier. La redirection doit tre crite la suite de la commande sur laquelle elle
agit.
Si chier existait dj, son contenu est cras * s'il n'existait pas, il est cr.
Remarque 14.2
Avec zsh (et ksh ), le comportement en cas d'existence de chier dpend de la valeur
de l'option NOCLOBBER (voir 14.1.2). Si cette option est mise, le chier ne sera
pas cras et zsh achera un message d'erreur. Dans ce cas, pour indiquer que l'on
souhaite craser un chier s'il existe dj, il faut utiliser le signe de redirection >!
Exemples 14.1
(a) ls - l >
(b)
fich
cat fich1 fich2 > fich3
Redirection avec ajout la n du chier de redirection (>>)
Il faut utiliser >> au lieu de >.
Exemple 14.2
ls -l >> fich
14.2.2 Redirection du chier d'erreur (2>)
Le chier d'erreur peut tre redirig en ajoutant 2>chier ( 2>>chier, si on ne veut
pas craser chier) la suite d'une commande (attention, pas d'espace entre le 2 et >).
Exemple 14.3
find /students -name core -print 2>erreurs
14.2.3 Envoi d'un message d'erreur (>&2)
Les message d'erreur doivent tre envoys vers la voie numro 2. Voici un exemple
(voir 16.4.4) :
echo "ERREUR" >&2
14.2.4 Redirection de l'entre standard (<)
L'entre standard peut tre redirige par <chier.
Exemple 14.4
mail [email protected] < fichier
14.3. PIPE (j)
9
14.2.5 Pseudo-chier /dev/null
Le chier spcial de type caractres (voir 1.6.2) /dev/null est un pseudo-chier qu
valent un puits sans fond.
Il est souvent utilis avec les redirections, en particulier pour ignorer les message
d'erreur :
find /students -name core -print 2>/dev/null
14.3 Pipe ( )
j
Les donnes de sortie d'une commande peuvent tre directement utilises comme don
nes d'entre d'une autre commande gr&ce au symbole |. En eet, la sortie standard d
la commande de la commande place avant le | est redirige vers l'entre standard de l
commande place aprs le |.
Les commandes du pipe sont excutes en parallle par des processus distincts 3. Il fau
se le rappeler quand une des commandes du pipe contient un exit : la commande exit n
fait sortir que du sous-shell qui excute la commande du pipe et pas du shell dans lequ
s'excute le pipe (voir 17.4.7).
Le code retour du pipe est le code retour de la dernire commande excute dans
pipe.
Exemples 14.5
(a) ls -l /bin
| grep '^d'
(b) On peut composer plusieurs pipes :
ls -l /bin | grep '^d' | lpr
14.4 Regroupement des commandes
Le regroupement de commandes est souvent utilis pour appliquer une redirection o
un pipe plusieurs commandes.
14.4.1 Regroupement entre parenth
ses
Les commandes regroupes entre des parenthses sont excutes dans un sous-shell ave
un environnement dirent de celui prcdant et suivant les parenthses.
Exemple 14.6
$ pwd
/users/students/toto
3. Dans les dernires versions de zsh, la dernire commande s'ex
cute dans le shell dans lequel le pipe
t
lanc
96
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
$ (cd /bin # pwd)
/bin
$ pwd
/users/students/toto
14.4.2 Regroupement entre accolades
Les commandes regroupes entre des accolades ne sont pas excutes dans un sous-shell
comme avec les parenthses.
Les accolades doivent tre spares des commandes par au moins un espace.
Attention, } et { ne sont reconnus qu'en dbut de commande. Ils doivent donc tre
prcds par un * (sparateur de commandes) si on veut les placer sur la mme ligne que
ce qui prcde. L'oubli du * est frquent et il est dicile reprer car le shell n'indique
pas clairement le problme dans ses messages d'erreur.
Exemple 14.7
{ echo "Fichiers fich1 et fich2 :" # pr fich1 fich2 # } | lpr -h
14.5 Processus en arrire-plan (&)
Lorsqu'on lance une commande, le shell attend la n de l'excution de la commande
avant d'excuter une autre commande.
Si on ajoute le signe & derrire le nom de la commande (prcd ou non d'un espace),
le shell n'attend plus la n de son excution. On dit qu'il lance la commande en arrire-plan.
Exemple 14.8
ls -l | grep '^d' > fich &
Quand on lance une commande en arrire-plan dans un shell interactif (pas dans un
shellscript), le shell renvoie l'cran le numro de job entre crochets (le premier processus
lanc en arrire-plan par le shell en cours a le numro 1), et le pid de processus (voir 2.2)
attribu cette commande.
On ne peut interrompre une commande lance en arrire-plan qu'avec la commande kill
(tudie en 7.2).
Remarque 14.3
Lorsque l'utilisateur sort du systme (en fait, du shell lanc au dmarrage), tous les
processus lancs en arrire-plan sont tus.
Pour tre prcis, il existe une commande nohup (pas tudie ici) qui permet de
lancer des commandes en arrire-plan, qui continueront leur excution aprs la sortie
de l'utilisateur.
Les commandes at et batch permettent de lancer en arrire-plan des commandes des
moments choisis ou lorsque le systme n'est pas trop charg, mme si l'utilisateur n'est pas
connect.
14.6. ALIAS
9
14.5.1 Gestion des jobs par ksh ou zsh
En ksh ou zsh (mais pas sous sh) l'utilisateur dispose de plusieurs commandes pou
choisir le plan o- les processus lancs s'excutent :
) l'utilisateur peut faire acher la liste de ses processus avec leur numro de job pou
le shell en cours et leur pid (voir 2.2), en tapant
jobs -l]
(l'option -l ache l'identicateur de processus)
) l'utilisateur peut suspendre le processus en cours en tapant
Ctrl] Z
) il peut ensuite relancer l'excution de ce processus en arrire-plan en tapant
bg %n]
n est le numro de job pour le shell (voir 14.5) * par dfaut c'est le processus qu
vient d'tre suspendu qui est pass en arrire-plan.
) les processus en arrire-plan ou suspendus peuvent tre passs en avant-plan en tapan
fg %n]
(si aucun numro de job n n'est donn, la commande lance en avant-plan le dernie
processus lanc en arrire-plan).
Ceci permet de suspendre momentanment un processus pour eectuer un travail e
de revenir ensuite ce processus exactement l'endroit o- on l'avait laiss. On peut pa
exemple crire un programme sous emacs, enregistrer ce programme, suspendre emacs pa
Ctrl] Z, compiler et excuter le programme et revenir sous emacs par fg. Cette possibilit
perd de son utilit si l'on travaille en environnement X Window car on peut alors facilemen
passer d'une application l'autre sans devoir en suspendre une.
14.6 Alias
Un alias est un synonyme pour une cha ne de caractres dans une commande. Les alia
sont particuliers ksh et zsh * il n'y a pas d'alias dans le shell sh.
Par exemple, alias x='chmod u+x' dnit l'alias x : si le premier mot d'une com
mande est x, le shell remplacera ce mot par chmod u+x.
On peut dfaire un alias par la commande unalias, par exemple, unalias x.
La liste des alias peut s'acher en tapant alias sans argument. alias x ache l
valeur de l'alias x.
Un alias peut tre utilis comme raccourci d'une commande avec ses options comm
pour l'alias x ci-dessus. On peut aussi l'utiliser pour dsigner une commande qui n'es
pas place dans un des rpertoires de la variable PATH. Par exemple (sous Unix OSF),
alias quota=/usr/sbin/quota
98
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
14.8. MCANISMES D'INTERPRTATION
9
14.7 Substitution de commande
14.8 Mcanismes d'interprtation
Le shell interprte `commande` en le rempla'ant par tout ce que la commande envoie
sur la sortie standard.
Cette section dcrit comment les lignes de commandes sont interprtes par le she
avant que la commande ne soit lance.
Voici les t&ches eectues par le shell dans l'ordre de leur excution :
1. interprtation des espaces (pour distinguer les dirents mots),
2. substitution de tilde (~) (seulement pour ksh ou zsh),
3. substitution des alias (seulement pour ksh ou zsh),
4. interprtation des redirections, des pipes 4 et des regroupements de commandes,
5. interprtation des aectations 5,
6. substitution des paramtres de position et de variables ($),
7. substitution des commandes,
8. gnration des noms de chiers (caractres * ? ] * voir 4.5.1).
Exemples 14.9
(a) date=`date`
(b)
nom_maj=`echo $nom | tr 'a-z' 'A-Z'`
(c)
echo je suis sous `pwd`
Remarques 14.4
(a) le code retour d'une aectation a=`commande` est le code retour renvoy par
commande. On peut ainsi crire
if ligne=`grep mot fichier` # then
# cas ou grep a trouve une ligne
else
# cas ou grep n'a pas trouve une ligne
fi
(b) la commande est excute dans un sous-shell.
(c) Attention, si la commande renvoie plusieurs lignes vers la sortie standard, le comportement est dirent selon que l'on travaille sous sh et ksh ou zsh. Par exemple,
a=`ls -l`
rangera dans a une seule longue ligne sous sh et ksh, ce qui peut tre gnant, mais
donnera bien plusieurs lignes sous zsh.
(d) l'interprtation l'intrieur des ` est complexe et peut donner des rsultats surprenants :
echo \\$HOME
\/users/profs/toto
ache
echo `echo \\$HOME`
$HOME
, et pourtant
ache
A cause de ce type d'exemple, ksh et zsh ont ajout le nouveau type de substitution
de commande $(commande) qui n'a pas de telles anomalies :
echo $(echo \\$HOME)
\/users/profs/toto
ache
14.9 Inhiber l'interprtation du shell
On peut inhiber l'interprtation du shell (on dit aussi dpersonnaliser) avec les carac
tres suivants :
n
inhibe l'interprtation spciale du caractre suivant.
'
toute interprtation est inhibe pour les portions de lignes entoures de '
"
dans les portions de lignes entoures de " (guillemets), l'interprtation des e
paces, la gnration des noms, la substitution des alias et de ~ sont inhibe
mais pas la substitution des paramtres ($). Une apostrophe n'est pas interprt
entre deux guillemets (ce qui permet d'introduire le caractre ' dans une cha n
de caractres.
Exemple 14.10
Essayez cette suite de commandes :
a=bonjour
echo $a bc *
echo \$a bc
echo "\$a bc
echo '$a *'
*"
4. il n'y a pas de g
n
ration des noms de chiers dans l'interpr
tation des parties correspondant au
chiers dans les redirections
5. comme pour les redirections, les tapes suivantes sont aussi trait
es part pour les aectations pa
exemple, aucune g
n
ration des noms n'est eectu
e dans a=*
100
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
14.10 Recherche d'une commande par le shell
Lorsque l'utilisateur tape une commande au clavier, voici les direntes tapes qui
conduisent l'excution de la commande :
1. Interprtation de la ligne de commande par le shell,
2. Recherche de la commande,
3. Excution de la commande avec redirection pralable des entres-sorties par le shell
si ncessaire.
Voici comment s'eectue la recherche de la commande :
) Si la commande correspond une commande interne du shell, cette commande est
excute l'intrieur du shell,
) sinon, si la commande correspond une fonction (voir 16.3), cette fonction est excute l'intrieur du shell,
) sinon il ne peut s'agir que d'une commande correspondant un chier de l'arborescence. Si le nom de la commande ne comporte pas de /, la variable PATH est
examine pour rechercher le rpertoire o- se trouve la commande.
) Si le chier est un shellscript un nouveau shell est cr * il lit les lignes du
shellscript et les excute,
) si le chier contient du code binaire excutable, un nouveau processus est cr,
qui excute ce code.
14.11 Lancement de l'excution d'un shellscript
Un shellscript est un chier qui contient des noms de commandes et des instructions
internes au shell. On peut utiliser un shellscript comme toutes les autres commandes. En
particulier un autre shellscript peut l'utiliser. On peut ainsi se construire facilement de
nouvelles commandes adaptes sa propre fa'on de travailler.
Les instructions internes du shell forment un langage de haut niveau possdant des
instructions de tests et de boucles, des variables et des fonctions.
On peut lancer l'excution d'un shellscript de trois manires direntes.
14.11.1 Lancement par le nom du shellscript
Si on a l'autorisation de lecture et d'excution sur le shellscript, on peut le lancer en
tapant simplement son nom.
14.11. LANCEMENT DE L'EXCUTION D'UN SHELLSCRIPT
10
Le systme s'aper'oit que le chier qui contient le shellscript n'est pas crit dans d
code directement excutable par le processeur de la machine et il lance donc un interprteu
pour lire et excuter les lignes contenues dans le chier.
Toutes les commandes du shellscript sont excutes comme si elles taient tapes a
clavier. Une dirence importante est que les commandes sont excutes dans un processu
ls (dont la zone de code contient le code de l'interprteur) qui lit les lignes du shellscript e
lance leur excution. Si le shellscript modie l'environnement de dpart, celui-ci est rtab
lorsque l'excution du shellscript est termine (voir 15.2.9).
Il est important de noter que, sauf cas particulier tudi ci-dessous (#!),
) si on travaille sous sh ou ksh, l'interprteur lanc implicitement pour lire et excute
le shellscript est le shell courant (sh ou ksh selon le cas),
) si on travaille sous zsh, l'interprteur lanc implicitement est sh et pas zsh ! Si
chier contient des instructions comprises par zsh et pas par sh, il y aura une erreu
l'excution.
Pour que le shellscript soit interprt par zsh, il doit commencer par la ligne :
#! /usr/local/bin/zsh -f
Excution d'un chier dont la premire ligne commence par '#!(
Si le chier comporte une premire ligne qui commence par #!, Unix lance comm
interprteur non pas le shell habituel, mais le programme dont le nom absolu suit #!
(avec ventuellement un argument comme -f dans l'exemple ci-dessus), auquel il ap
plique comme arguments la ligne de commande tape par l'utilisateur. Voici des exemple
concrets :
Si l'utilisateur tape la commande c1 f1 f2,
) si c1 commence par #! /bin/sh,
la commande excute sera /bin/sh c1 f1 f2.
Le shellscript c1 est lu par le shell sh et excut avec les arguments f1 f2.
) si c1 commence par #! /usr/local/bin/zsh -f,
la commande excute sera /usr/local/bin/zsh -f c1 f1 f2.
Le shellscript c1 est lu par le shell zsh et excut avec les arguments f1 f2. L'optio
-f indique que le chier d'initialisation .zshenv ne doit pas tre lu * voir 14.11.3
) si c1 commence par #! /bin/awk -f,
la commande excute sera /bin/awk -f c1 f1 f2.
Le programme c1 (ncessairement crit avec du code awk) est interprt par aw
sur les chiers f1 et f2 (voir 13.10).
Remarque 14.5
Ce mcanisme ne peut fonctionner qu'avec les interprteurs (tels les shells ou awk
pour lesquels # introduit des commentaires.
102
CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE
14.11.2 Lancement par l'appel de la commande interne .
Il reste une autre possibilit pour faire excuter un shellscript. Le nom du shellscript
est prcd d'un point (laisser un espace entre le point et le nom du shellscript) :
. fichier
Dans ce cas, le shellscript chier est excut comme si ses commandes taient tapes
directement au clavier. Un nouveau processus n'est pas cr. Les modications de l'environnement seront donc conserves.
En fait, . est une commande interne du shell qui lit toutes les commandes contenues
dans le chier et les excute comme si elles avaient t tapes au clavier.
Remarque 14.6
Quel que soit le shell, le shellscript est toujours lu et excut par le shell en cours, la dirence de l'appel par le nom du shellscript o- il y a une dirence entre zsh et
les autres shells (voir remarques de 14.11.1).
Exemple 14.11
Soit le shellscript cdbin contenant la seule commande
cd bin
Si on tape
cdbin
(le nom du shellscript), le rpertoire sera le mme aprs l'excution qu'avant. En
eet, le shellscript s'excute dans son propre environnement et il n'a pas d'action sur
l'environnement du shell de dpart.
Si on tape
. cdbin
le rpertoire courant sera bin aprs l'excution car cd est une commande interne du
shell et non pas une commande externe correspondant un chier Unix. Elle est
donc excute directement par le shell sans faire appel un autre shell qui aurait son
propre environnement. Puisque l'on a excut cdbin avec un . initial, les commandes
de cdbin sont donc excutes par le shell initial dont le rpertoire courant devient
donc le rpertoire bin.
14.11.3 Lancement par l'appel explicite d'un shell
Si on a l'autorisation de lecture sur le shellscript, on peut lancer son excution par :
zsh -f] fichier
(si on travaille avec zsh ) dans ce cas, un nouveau shell est lanc explicitement. Celui-ci lit
les commandes du shellscript chier et les fait excuter comme si les commandes avait t
tapes au clavier.
Le chier .zshenv est excut sauf si le shell est lanc avec l'option -f. Le chier
/etc/zshenv est toujours excut.
14.12. LANCEMENT EXPLICITE D'UN SHELL
10
Il faut noter que c'est le mode de lancement de zsh lorsqu'on lance une command
rsh machine commande sur une machine distante et un compte utilisateur qui a zs
comme shell de dmarrage (voir cours sur les rseaux).
14.12 Lancement explicite d'un shell
zsh -f]
Les chiers .zshenv, .zshrc et /etc/zshrc sont excuts sauf si le shell est lanc ave
l'option -f. Le chier /etc/zshenv est toujours excut.
Il faut noter que c'est le mode de lancement de zsh lorsque l'on ouvre une fentre ave
xterm .
CHAPITRE 15. VARIABLES, ENVIRONNEMENT
104
15.2. VARIABLES
10
Cette possibilit est souvent utilise dans les shellscripts pour rcuprer un ou plusieur
mots d'une ligne. Par exemple, les deux commandes suivantes achent le mois et l'ann
de la date systme :
Chapitre 15
Variables, environnement
15.1 Paramtres, variables de position
15.1.1 Param
tres des shellscripts
Lorsqu'on lance une commande, on peut la faire suivre par des arguments ou paramtres.
4 l'intrieur d'un shellscript, ces paramtres sont dsigns par les variables de position
$1, $2,..., $9 ($0 dsigne le nom de la commande).
Exemples 15.1
(a) Si le shellscript lt contient
ls -lt $1 | more
on peut lancer
lt /users/students/jean
(b) Si le shellscript cherche contient
find $1 -name "$2" -print
on peut taper
cherche /usr "compt*"
qui cherchera sous l'arborescence du rpertoire /usr les chiers dont le nom commence
par compt.
15.1.2 Donner des valeurs aux param
tres de position (set)
La commande set permet d'aecter des valeurs aux paramtres de position l'intrieur
d'un shellscript. La commande suivante donne les valeurs val1, val2, ... aux paramtres $1,
$2, ... :
set val1 val2 ...
set `date`
echo $2 $6
Remarque 15.1
set -x abc
ne convient pas pour donner $1 la valeur -x et $2 la valeur abc. En eet, set v
penser que -x est l'option du shell tudie en 17.11. L'option -- indique que le
paramtres suivants ne sont pas des options du shell mais les valeurs des paramtre
de position. Il faut donc crire :
set -- -x abc
15.2 Variables
15.2.1 Identicateur
Durant une session de travail d'un shell (dlimite par le dmarrage et l'arrt du shell
on peut utiliser des variables dsignes par un identicateur. Cet identicateur peut com
porter des lettres, des chires ou le caractre soulign * il doit commencer par une lettre o
le caractre soulign.
15.2.2 Aectation
On peut aecter une cha ne de caractres aux variables :
variable=valeur
(pas d'espaces de part et d'autre du signe = !).
variable= aecte la cha ne vide variable.
Remarque 15.2
Le code retour d'une aectation du type
a=`commande`
est le code retour renvoye par la commande.
On peut par exemple crire
if lignes=`grep mot fichier` # then ...
et ce qui suit le then ne sera excut que si le chier contient le mot.
15.2.3 Dsignation de la valeur de la variable ($)
On peut rutiliser la valeur aecte une variable dans toute commande.
CHAPITRE 15. VARIABLES, ENVIRONNEMENT
106
$variable
dsigne la valeur de variable. C'est le shell qui fera le remplacement.
Remarque 15.3
Le shell ne fera pas le remplacement dans les portions de commande places entre
apostrophes ou si le $ est prcd d'un \. Au contraire de la gnration de noms
de chiers, le remplacement est eectu dans les portions de commande places entre
guillemets (voir 14.8).
Exemple 15.2
r1=/us2/acct/jean/dvp
r2=/us2/bin
cd $r1
cp fich $r2
Si la valeur de la variable doit tre suivie d'un caractre autoris dans un nom de
variable, on entoure d'accolades le nom de la variable :
Exemple 15.3
serie=math
cp classe/${serie}1 rep
15.2.4 Dcomposition en mots des valeurs des variables de zsh
Attention ! zsh ne dcoupe pas la valeur d'une variable en mots. Le programme suivant
va copier les deux chiers f1 et f2 sous le rpertoire rep s'il est excut sous sh ou
ksh, mais il ne fonctionnera pas sous zsh car cp essaiera de copier le chier de nom f1 f2
(un seul nom avec un espace au milieu) :
fichiers="f1 f2"
cp $fichiers repertoire
${=fichiers}
Il faut crire si on veut que la valeur de la variable chier soit dcoupe en mots. Sous zsh la commande de l'exemple prcdent doit donc s'crire :
cp ${=fichiers} repertoire
15.2.5 Supprimer une variable (unset)
unset variable
Remarque 15.4
La commande unset n'existe pas dans le shell sh.
15.2.6 Variables spciales du shell
Voici les principales variables utilises par le shell.
HOME
rpertoire de login
15.2. VARIABLES
10
PATH
rpertoire de recherche des commandes
Exemple : PATH=/bin:/usr/bin:/users/students/util:.
Le rpertoire courant peut tre indiqu par : au dbut ou la n de la va
leur de PATH. Il est recommand de ne pas mettre trop de rpertoires dan
cette variable pour ne pas surcharger le systme en cas de recherche d'un
commande qui n'existe pas (et qui sera recherche dans tous ces rpertoires
CDPATH est une variable quelquefois utile si on travaille souvent dans des rpertoire
dont le chemin est long taper. Si l'utilisateur tape un nom qui ne commenc
pas par un / en argument de cd, cd recherchera ce nom dans les rpertoire
indiqus dans CDPATH. Le format de CDPATH est le mme que celui d
PATH.
Attention, sous sh et ksh, si la variable CDPATH a une valeur, cette va
riable est utilise exclusivement pour rechercher les rpertoires dont le nom
ne commence par / dans une commande cd (comme pour la variab
PATH et la recherche de commandes). Si on est par exemple plac dans so
rpertoire HOME et que celui-ci contient un rpertoire bin, la command
cd bin dplacera dans le premier rpertoire bin plac sous un des r
pertoires de la variable CDPATH, et renverra une erreur s'il n'y en a pa
Veillez donc toujours avoir le rpertoire courant au dbut de la valeur d
CDPATH si vous ne voulez pas avoir ce comportement. Sous zsh, le rpe
toire courant est toujours cherch en premier mme s'il n'est pas dans l
variable CDPATH.
PS1
premier prompt Unix. zsh ore de nombreuses possibilits particulires pou
personnaliser le prompt (voir 15.3).
PS2
deuxime prompt Unix (> par dfaut)
TERM
nom du type de terminal utilis
IFS
sparateur(s) de mots dans les commandes (espace, tabulation ou passag
la ligne par dfaut). IFS est utilise lors d'une substitution de command
(`...` ou $()), de paramtre ou de variable ($), ou lors de la lecture d'un
ligne par la commande interne read, pour dcouper une ligne en mots. O
remarquera que IFS n'est pas utilise entre guillemets car les guillemet
inhibent la sparation en mots. Essayez la suite de commandes suivante :
$ IFS=/
$ read x y
v1/v2
$ echo $x
$ var=a/b/c
$ echo $var # $=var avec zsh
$ echo "$var" # different si entre guillemets
$ cat /etc/passwd
IFS=
remet la valeur par dfaut.
CHAPITRE 15. VARIABLES, ENVIRONNEMENT
108
Les variables suivantes ont leur valeur donne automatiquement par le shell * on ne peut
modier leur valeur.
#
nombre de paramtres de position
?
valeur retourne par la dernire commande excute
!
numro de processus de la dernire commande lance en arrire plan
$
numro de processus du processus en cours
*
$* est quivalent $1 $2 ...
@
$@ est quivalent $1 $2 ... comme $* * mais il existe une dirence subtile
entre les 2 variables * et @: "$*" (entour de guillements) reprsente un
seul mot compos des arguments $1 $2 ... spars par un espace alors que
"$@" reprsente dirents mots gaux aux contenus de $1, $2, ..., avec un
espace sparateur qui sera interprt par le shell comme un sparateur de
mots ( voir exemple de l'instruction for en 17.4.3).
15.2.7 Acher la valeur d'une variable (echo)
echo -n] $variable
Plus gnralement, echo envoie sur la sortie standard les valeurs de tous ses paramtres,
spars par un espace. Dans la commande ci-dessus, c'est le shell qui va remplacer $variable
par la valeur de la variable et echo achera cette valeur.
En Unix BSD, l'option -n permet d'viter le passage la ligne aprs l'achage. En
Unix Systme V, on peut passer en paramtres de echo des caractres spciaux et c'est le
caractre \c qui indique que l'on ne doit pas passer la ligne (ne pas oublier de protger
\ de l'interprtation du shell). Par exemple :
echo "Donnez le nom du fichier \c: "
Exemples 15.4
(a) echo valeur
(b)
de HOME : $HOME
echo "Voici 5 espaces entre parentheses : (
)"
Question : que se passe-t-il si on enlve les guillemets?
La commande interne print de ksh et de zsh, permet des formats d'achage plus sophistiqus, mais cette commande n'existe pas dans le shell sh.
15.2.8 Entre de la valeur d'une variable au clavier (read)
read variable...
Une ligne est lue sur l'entre standard. Le premier mot est aect la premire variable,
le deuxime mot est aect la deuxime variable,... La dernire variable re'oit le restant
de la ligne.
S'il y a moins de mots que de variables, les dernires variables sont initialises la
cha ne vide.
15.2. VARIABLES
10
Le code retour est 0 sauf si on a atteint une n de chier.
Exemples 15.5
(a) echo Nom du repertoire a lister :
read rep
ls -ld $rep | more
pour lire au clavier le nom d'un rpertoire lister.
(b)
read v1 v2 v3 <fichier
lit dans la premire ligne du chier les valeurs des variables v1, v2 et v3. On verra
la page 131 comment lire toutes les lignes d'un chier.
15.2.9 Porte d'une variable (export), environnement de travail
L'environnement de travail d'un shell est constitu des variables auxquelles le shell
donn une valeur et des variables que le shell a hrites du processus qui l'a lanc.
Une variable n'est ordinairement utilise que dans le shell o- elle re'oit son aectation
Si on veut la rutiliser dans les programmes appels ultrieurement par le shell, on do
exporter la valeur par export.
Remarque 15.5
On dira que les programmes appels ultrieurement par un shellscript sont des de
cendants du shellscript qui les a appels, ou que le shellscript est un anctre de ce
programmes.
export variables...
recopie la valeur des variables dans l'environnement qui sera pass aux programmes appel
ultrieurement.
Remarques 15.6
(a) Puisque c'est une recopie, les ventuelles modications des variables exportes n
modieront pas l'environnement du shellscript appelant.
(b) ksh et zsh permettent d'aecter des valeurs des variables tout en exportant le
variables :
export a=3 fichier=fich12
On obtiendra une erreur si le shellscript est excut par sh et il faut donc l'viter.
(c) export qui ne se comporte pas de la mme fa'on dans les tous les shells :
) avec sh, si un programme modie une variable qui a t exporte par un pro
gramme anctre et s'il n'exporte pas cette variable (avant ou aprs sa modi
cation), les programmes descendants qu'il appellera, recevront la valeur initia
pour cette variable (et non la valeur modie).
Si un programme modie la valeur d'une variable et veut transmettre la nouvel
valeur aux programmes qu'il appelle, il doit donc exporter cette variable.
CHAPITRE 15. VARIABLES, ENVIRONNEMENT
110
15.3. PERSONNALISATION DE L'ENVIRONNEMENT
) avec ksh et zsh, si une variable a t exporte par un programme, elle le sera
automatiquement par tous les programmes appels par le programme.
est le seul chier qui est toujours excut. Si ncessaire, il donne un environnemen
minimum pour travailler.
Si zsh a t lanc avec l'option -f, c'est le seul chier de conguration a tr
excut.
15.2.10 Visualisation des variables disponibles (set, printenv)
printenv
ache les valeurs des variables de l'environnement du processus en cours (celles qu'il a
recues et celles qu'il a exportes) * export (sans nom de variable) donne un rsultat
semblable sous zsh et ksh, mais sous sh, export donne uniquement le nom des variables
exportes par le shell en cours.
11
2.
.zshenv
3.
/etc/zprofile
est toujours excut si zsh n'a t pas lanc avec l'option -f. Il initialise les va
riables d'environnement indispensables au bon fonctionnement du shell dans tous le
cas (PATH par exemple).
set
ache les valeurs des variables disponibles (mme celles qui ne sont pas exportes et qui
n'appartiennent pas l'environnement qui sera transmis).
15.3 Personnalisation de l'environnement
15.3.1 Options des shells (set, setopt)
De nombreuses options permettent de congurer le fonctionnement des shells (voir en
particulier 14.1.2). Ces options peuvent tre entres en paramtres lors du lancement du
shell ou positionnes gr&ce la commande set. On se reportera au manuel de rfrence du
shell pour la syntaxe utilise pour positionner les options.
On a vu aussi en 3.3 l'option -o ignoreeof et on verra l'utilit des options -v et
-x pour la mise au point des shellscripts en 17.11.
La fonction interne setopt de zsh permet aussi de positionner les options du shell. On
peut avoir une liste de toutes les options positonne en tapant setopt seul.
4.
Dans les sections suivantes nous allons tudier les dirents chiers de conguration
de l'environnement que le shell zsh excutent automatiquement au dmarrage.
et .zshrc
(excut par les shells interactifs seulement) contiennent les dnitions d'alias, d
prompts et des variables lies l'utilisation interactive d'un shell.
Remarque 15.7
Quand on ouvre une nouvelle fentre X Window, ces chiers sont excuts (apr
les chiers /etc/zshenv et .zshenv) par le nouveau shell qui s'excute dans l
fentre.
Exemple 15.6
/etc/zshrc
umask 022
# definition des alias
alias ll='ls -l'
alias x='chmod u+x'
# definition prompt : ordinateur et repertoire courant
PS1=%m'(%~) '
# definition de variables
export PRINTER=17
export MAIL=/usr/spool/mail/$USER
export MANPATH=/usr/man:/usr/local/man:/usr/local/X11R5
export SAVEHIST=300 HISTFILE=$HOME/.sh_history HISTSIZE=300
# Pour compatibilite avec ksh :
setopt NO_NOMATCH
export NULLCMD=:
15.3.2 Fichiers de personnalisation
4 chaque fois qu'un shell zsh est lanc, des chiers de conguration sont lus et excuts
automatiquement par le shell.
Certains chiers sont communs tous les utilisateurs et permettent l'administrateur du systme de leur donner un environnement minimum commun. Ce sont les chiers
zshenv, zshrc, zprofile et zlogin du rpertoire /etc.
Les autres chiers sont situs dans le rpertoire HOME de chaque utilisateur. Celuici peut les crer ou les modier sa convenance. Ce sont les chiers .zshenv, .zshrc,
.zprofile et .zlogin
Ces chiers ne sont pas toujours tous excuts. Voyons les dirents cas.
1. /etc/zshenv
et .zprofile
(excuts par les shells de login seulement) initialisent les variables d'environnemen
indispensables au bon fonctionnement du shell juste aprs un login. Ce chier n'es
en gnral pas utilis car un shell de login est le plus souvent un shell interactif et o
utilise alors plutt le chier .zlogin (voir ci-dessous).
5.
/etc/zlogin
et .zlogin
112
CHAPITRE 15. VARIABLES, ENVIRONNEMENT
(excuts par les shells de login interactifs seulement) contiennent les initialisations
qui doivent tre faites au dbut d'une session de travail interactive, en particulier
l'aectation des variables TERM et DISPLAY.
Exemple 15.7
if tty -s # then
stty dec crt
fi
if -z "$DISPLAY" ] # then
# cas ou DISPLAY est vide
echo '-----------------------------------------------'
echo ' 1. vt100
2. X Window'
echo -n "Type de votre terminal (2 par defaut): "
read terminal
case $terminal:-2 in
1) TERM=vt100##
2) TERM=xterm
echo "Nom du DISPLAY ? "
read DISPLAY##
esac
fi
Remarque 15.8
Les chiers utiliss lors de l'criture de chiers de conguration (au moins ceux qui
ne sont pas lis un shell de login) doivent tre dsigns par leur nom absolu car les
shells peuvent tre lancs d'un autre rpertoire que le rpertoire de login.
15.4 Stratgie pour la personnalisation de l'environnement
On travaille le plus souvent dans plusieurs domaines bien distincts, par exemple, un
environnement pour le dveloppement en langage Java, un environnement pour le travail
avec une base de donnes et un autre pour la recherche d'information sur le Web.
Dans ce cas, il est prfrable d'avoir des environnements de travail dirents plutt
que d'avoir un seul environnement alourdi par un grand nombre de variables et avec une
variable PATH contenant de nombreux rpertoires.
Pour cela le plus simple est d'allger les chiers d'initialisation vus ci-dessus en ne gardant que les lments qui seront utiles tous les environnements, et de crer un shellscript
d'initialisation pour chacun des environnements. Chacun de ces shellscripts initialisera les
variables (en particulier la variable PATH), placera l'utilisateur dans le bon rpertoire de
travail et lancera les programmes ncessaires (par exemple, il ouvrira une nouvelle fentre
X Window dans laquelle il lancera un programme pour travailler avec une base de donnes).
11
Chapitre 16
Complments sur le shell
Ce chapitre donne quelques complments sur des notions dj tudies dans les deu
chapitre prcdents. Il prsente aussi quelques nouveaux aspects moins essentiels du langag
du shell.
16.1 Listes de commandes
Un pipe est une suite de commandes spares par j. Le code retour d'un pipe est
code retour de la dernire commande excute.
Une liste de commandes est une suite de pipes 9ou de simples commandes * dans l
suite, par commodit, pipe pourra dsigner une simple commande) spares par un de
signes suivant :
correspond une excution squentielle des pipes
&
correspond une excution squentielle des pipes sans attente de la n de l'ex
cution du pipe prcdent
&& le pipe suivant n'est excut que si le pipe prcdent renvoie la valeur 0 (drou
lement normal du pipe prcdent)
jj
le pipe suivant n'est excut que si le pipe prcdent ne renvoie pas la valeur
(droulement anormal du pipe prcdent)
Exemples 16.1
(a) rm fich
(b)
|| echo Suppression impossible !!
cat $2 | { write $1 || mail $1 #}
shellscript qui envoie un message sur l'cran ou dans la bo te aux lettres d'un util
sateur connect la machine locale.
Quelques subtilits (false est une commande qui ne fait que renvoyer un code retou
non nul * true est une commande qui ne fait que renvoyer un code retour nul) :
false && echo 1 && echo 2
n'ache rien
114
CHAPITRE 16. COMPLMENTS SUR LE SHELL
true && echo 1 && echo 2
ache 1 et 2
false || echo 1 && echo 2
ache 1 et 2
true || echo 1 && echo 2
ache 2
16.2 Ordre de priorit
L'ordre de priorit des dirents signes qui ont une signication particulire pour le
shell est (par ordre dcroissant) :
1. les redirections
2. j
3. && et jj
4. & et *
16.3 Fonctions
Les shellsripts peuvent contenir des dnitions de fonctions qui pourront ensuite tre
utilises dans le shell dans lequel elles ont t dnies.
Les fonctions sont plus rapidement excutes que les shellscripts puisque le shell n'a pas
aller chercher de chier pour l'excuter. De plus une fonction peut modier les variables
du shell appelant puisqu'elle s'excute dans le mme environnement que ce shell.
Dnition d'une fonction
nom-fonction ()
{
...
...
}
L'accolade de n de fonction doit tre en dbut de ligne (ou prcde de *).
Appel de la fonction
nom-fonction param1 param2 ...
16.4. COMPLMENTS SUR LES REDIRECTIONS
11
Excution de la fonction
Les commandes de la fonction s'excutent dans le shell dans lequel la fonction a t
appele. Les $1, $2,... sont remplacs par les paramtres d'appel de la fonction (param
param2,...).
Exemple 16.2
Si la fonction lt est dnie par :
lt () { ls -lt $1 | more }
on pourra lancer la fonction par :
lt /bin
Place l'intrieur d'une fonction la commande
return n
joue le rle de la commande exit pour un shellscript : elle arrte l'excution de la fonctio
en renvoyant le code retour n.
16.4 Complments sur les redirections
16.4.1 Redirection de l'entre standard sur chier inclus (<<)
<< permet d'indiquer dans un programme des lignes qui seront lues sur l'entre stan
dard pendant l'excution du programme. Le dlimiteur de ces lignes est indiqu juste apr
le signe <<. Le dlimiteur de n doit absolument tre le premier caractre dans sa lign
(avec ventuellement des tabulations si on fait suivre << de - * voir ci-dessous) sino
on obtient des messages du type n de chier inattendue car le dlimiteur n'a pas t
reconnu.
L'ensemble des lignes ainsi dlimites est appel un chier inclus. En eet, tout se pass
comme si elles appartenaient un chier vers lequel on redirigeait l'entre standard.
Si le premier caractre du dlimiteur est prcd de \, cela signie que le shell ne do
pas interprter les caractres spciaux (*, ?, `, ...) situs entre les deux dlimiteurs. Tou
se passe comme si le texte entre les deux dlimiteurs tait entour du caractre '.
Si - est ajout la suite de <<, toutes les tabulations de dbut de ligne sont enleve
du chier inclus. Ceci permet d'indenter ces lignes si elles appartiennent, par exemple,
une boucle for ou une structure if.
Utilis avec l'diteur de texte ed , la notion de chier inclus permet de modier un chie
avec des commandes construites dans un shellscript. Nous n'tudierons pas ici l'diteur d
texte ed. Les commandes de ed utilises dans l'exemple ci-dessous sont :
s substitue une cha ne de caractres une autre. Dans chaque ligne, seule la premir
occurrence de la cha ne cherche sera remplace sauf si on ajoute l'option g la de la commande (voir exemple ci-dessous). Comme la commande suivante, s peu
CHAPITRE 16. COMPLMENTS SUR LE SHELL
116
tre prcd d'un intervalle de lignes qui indique les lignes sur lesquelles portera la
commande ($ dsigne la dernire ligne).
En fait, les cha nes de caractres peuvent tre des expressions rgulires et on peut
se rfrer dans la deuxime cha ne une sous-cha ne de la premire. Par exemple,
s/^\(^:]*\),\(.*\)$/\2 est le prenom de \1/
transformera Dupond,Pierre en Pierre est le prenom de Dupond.
Consultez le manuel en ligne de ed pour plus de prcisions.
g excute une commande sur toutes les lignes qui contiennent une expression rgulire
(par exemple, 1,5g/^toto/d supprime les lignes qui commencent par toto dans
les 5 premires lignes.
w sauvegarde le chier en cours d'dition.
q quitte ed.
La syntaxe d'appel de ed est :
ed -s] fichier
o- l'option -s indique que l'on ne veut pas que ed ache certaines informations comme,
par exemple, le nombre d'octet enregistrs lors de la commande w.
Exemple 16.3
ed -s $3 <<FIN
1,\$s/$1/$2/g
w
q
FIN
Le shellscript remplace ci-dessus remplace une cha ne par une autre dans un chier
(par exemple : remplace ch1 ch2 fichier)
16.4.2 Redirection pour tout un shell (exec)
La commande interne exec, outre le lancement d'une comande en remplacement du
shell, permet des redirections qui seront valables jusqu' la sortie du shell. La commande
suivante, place dans un shellscript, enregistrera tous les messages d'erreurs du shellscript
dans le chier suivi.err, jusqu' la n du shellscript :
exec 2>suivi.err
16.4.3 Descripteurs de chier suprieurs 2
On sait que les trois chiers standards sont ouverts avec les descripteurs 0, 1 et 2. Un
shellscript peut ouvrir d'autres chiers en utilisant les descripteurs suprieurs 2.
16.4. COMPLMENTS SUR LES REDIRECTIONS
11
Si le signe de redirection < ou > est prcd d'un nombre entier, cela signie qu
la redirection concerne le chier dont le descripteur est le nombre entier donn, et no
l'entre, la sortie ou l'erreur standard. Il ne doit pas y avoir d'espace entre le numro et
signe qui le suit.
Exemples 16.4
(a) 3< fichier et 3> fichier
ces deux commandes ouvrent chier avec le descripteur 3 (et non pas le descripteu
0 ou 1 s'il n'y avait pas eu le 3). La dirence est que la deuxime redirection cras
fichier.
(b) Pour fermer le chier ouvert avec le descripteur 3, on utilise les commandes <&- e
>&- (pas d'espace aprs le signe de redirection) qui ferment les chiers d'entre et d
sortie standard * la commande suivante ferme le chier de descripteur 3 :
3<&-
16.4.4 Redirection vers un chier dsign par son descripteur
>&n
(resp.
<&n)
signie que la sortie (resp. entre) standard est redirige vers le chier ouvert avec
descripteur n et que les deux chiers partagent le mme pointeur de chier (voir fonctio
dup() en langage C). Il ne faut pas d'espace entre > et &.
> fichier crase fichier et positonne le pointeur de poistions courante du chie
au dbut du chier alors que >&n (ou <&n) dsigne un chier sans modier la valeur d
position courante.
Exemples 16.5
(a) Pour acher un message d'erreur :
echo "$0: Erreur ...." >&2
(b) Si on veut faire imprimer les erreurs de syntaxe d'un programme en langage C :
cc pgm.c 2>&1 | lpr
car les erreurs sont rediriges vers la sortie standard qui est envoye par le pipe l
commande lpr.
16.4.5 Ordre d'valuation des redirections
Les redirections sont values de gauche droite. Par exemple, les deux redirection
suivantes
1>fich1 2>&1
vont rediriger la sortie standard et le chier standard des erreurs vers ch1. Dans l'ordr
inverse, seule la sortie standard aurait t redirige vers ch1.
CHAPITRE 16. COMPLMENTS SUR LE SHELL
118
16.4.6 Redirection sans commande avec zsh
Avec les shells sh ou ksh, une redirection sans commande ne va rien faire ( < fichier)
ou va crer un chier vide ( > fichier). Avec zsh, une commande par dfaut est ajoute
avant la redirection. Le nom de cette commande est contenue dans la variable NULLCMD *
c'est la commande cat par dfaut. Si on veut que zsh se comporte comme sh et ksh, on
ajoute les lignes suivantes dans le chier .zshrc :
NULLCMD=:
export NULLCMD
16.5 Complments sur les variables
16.5.1 Valeurs par dfaut pour les variables
Il est possible de substituer des valeurs aux valeurs des variables ou des paramtres de
position comme suit (les valeurs relles des variables ou paramtres ne sont pas modies
par ces substitutions sauf pour =).
On dit qu'une variable est active si elle a re'u une valeur. Un paramtre de position
est activ si la commande a t lance avec au moins autant d'arguments que le numro
du paramtre.
${variable-mot}
si la variable n'est pas active, elle est remplace par la valeur mot.
${variable?mot}
si la variable n'est pas active, mot est ach et l'excution est arrte. Si mot est omis,
un message standard est ach.
${variable+mot}
si la variable est active, elle est remplace par mot, sinon la cha ne vide est substitue.
${variable=mot}
si la variable n'est pas active, sa valeur devient mot. Ne marche pas pour les paramtres
de position.
Remarque 16.1
mot est interprt par le shell, sauf quand il suit un ?. Il peut ainsi tre une
substitution de commande ou dsigner la valeur d'une variable.
Exemples 16.6
(a) cd ${rep=$HOME}
(b)
var=${2?il manque des parametres}
(c) cd ${DIR-$HOME}
Si les signes -,?, +, = sont prcds du signe :, le comportement pour une variable
gale la cha ne vide est le mme que pour une variable non active. Par exemple,
16.5. COMPLMENTS SUR LES VARIABLES
11
${var:=val}
donnera la valeur val la variable var si celle-ci est gale la cha ne vide.
16.5.2 Modier l'environnement d'une commande
On peut modier l'environnement d'une commande en la prxant d'une ou de plusieur
aectations de variables (spares par des espaces).
Exemple 16.7
rep=/usr/bin commande arguments...
Attention, la porte de cette aectation se limite la commande prxe * l'aectatio
ne modiera pas l'environnement du shell dans lequel la commande aura t tape.
Exemple 16.8
a=5
a=6 echo $a
achera 5 et pas 6 car la commande echo est une commande interne au shell.
Erreur ne pas faire : si l'on veut concatner deux valeurs dans une variable (pa
exemple abc et def), en les sparant par un espace, ne pas crire
a=abc def
qui serait interprt comme le lancement de la commande def en lui exportant la valeu
abc de la variable a. Ecrire plutt :
a="abc def"
16.5.3 Facilits de ksh et zsh pour le traitement des valeurs d
variables
ksh et zsh orent un plus par rapport sh ( ne pas utiliser si on veut crire u
shellscript portable sur sh * utiliser plutt la commande expr ) :
${#variable}
donne la taille du contenu de la variable.
${variable#modle}
(o- modle est une cha ne de caractres pouvant contenir les caractres spciaux utilis
par la gnration des noms de chiers par le shell) si modle correspond au dbut de l
valeur de variable, la valeur renvoye est la valeur de variable sans la plus petite portio
de texte du dbut qui correspond modle. Sinon, la valeur renvoye est celle de variabl
${variable##modle}
la mme chose que ci-dessus mais on supprime la plus grande portion de texte du dbu
qui correspond modle.
${variable%modle}
ou
CHAPITRE 16. COMPLMENTS SUR LE SHELL
120
12
${variable%%modle}
la mme chose que # et ## mais on supprime la portion de texte de la n de la valeur de
variable qui correspond au modle.
Exemples 16.9
(a) Si var contient la valeur /usr/local/bin,
${var##*/}
est gal bin et
${var#*/}
usr/local/bin
est gal (sans le / du dbut)
(b) Si on travaille avec ksh, on peut placer
PS1='${PWD#$HOME/}$ '
.profile
dans le chier
pour avoir un prompt qui indique le rpertoire courant sans
tre trop long pour les noms de rpertoire qui sont sous le rpertoire courant.
16.5.4 Modication interactive de la valeur d'une variable sous
zsh (vared)
zsh ore une facilit pour modier en interactif la valeur d'une variable avec la commande vared ( variable editor ). Par exemple,
vared PATH
permet de modier la valeur de la variable PATH la manire de emacs.
16.5.5 Tableaux sous ksh et zsh
Les shells ksh et zsh permettent d'utiliser des tableaux.
La syntaxe n'est pas la mme pour ces deux shells. Nous ne donnerons que des exemples
avec la syntaxe de zsh :
samoa(~)
samoa(~)
abc def
samoa(~)
abc
samoa(~)
def
tableau=(abc def)
echo $tableau
echo $tableau1]
echo $tableau2]
Quatrime partie
Programmation
12
Chapitre 17
Programmation des shellscripts
Ce chapitre tudie les commandes les plus souvent utilises dans l'criture des shell
cripts. Toutes ces commandes sont internes au shell, sauf la commandes expr.
17.1 Tests divers (test, ... ], ... ]])
Cette commande permet de tester une condition. Elle est souvent utilise par les struc
tures de contrle du shell. Cette commande est interne ou externe selon les shells et le
versions d'Unix et les options peuvent varier suivant les versions (consultez le manuel e
ligne).
test condition
ou
condition ]
renvoie 0 si condition est vraie et une valeur dirente de 0 si condition est fausse.
Dans la deuxime forme, est le nom d'une commande synonyme de la command
test. Le ] est l pour faire joli. Il ne faut pas oublier les espaces de part et d'autre d
condition.
Quelques conditions (attention bien sparer les dirents mots par des espaces) :
-d chier vrai si chier est un rpertoire
-f chier vrai si chier est un chier ordinaire
-r chier vrai si on a l'autorisation de lire chier
-w chier vrai si on a l'autorisation d'crire dans chier
-x chier vrai si on a l'autorisation d'excution dans chier
-s chier vrai si chier n'est pas vide
chane
-n chane vrai si la cha ne n'est pas vide
-z chane vrai si la cha ne est vide
n1 -eq n2 vrai si les 2 nombres entiers n1 et n2 sont gaux. A la place de eq on peu
avoir ne, gt, ge, lt, le (pour =
6 , >, , <, ).
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
124
chane1 = chane2
vrai si les 2 cha nes sont gales
chane1 != chane2
-t numro]
-L chier
vrai si les 2 cha nes ne sont pas gales
vrai si le numro est le numro d'une voie ouverte sur un terminal (par
dfaut, numro est gal 1, c'est--dire correspond la sortie standard)
vrai si chier est un lien symbolique. Cette option existe pour la commande
interne de ksh et de zsh mais pas pour toutes les commandes externes. Elle
peut aussi s'appeler -h pour certaines commandes externes.
Remarque 17.1
Si un lien symbolique pointe sur un rpertoire, l'option -d est vraie sur ce lien. Il faut
donc commencer par tester si c'est un lien symbolique si on veut faire la dirence.
On peut combiner ces conditions avec les oprateurs logiques
-a
et logique
-o
ou logique
!
ngation logique
On peut regrouper avec des parenthses (entoures d'un espace de part et d'autre et
prcdes par n pour qu'elles ne soient pas interprtes par le shell).
Exemples 17.1
(a) test -d
(b)
$1 && echo OUI || echo NON
test \( -d fich -o -f fich2 \) -a $var = oui
De plus ksh et zsh orent un mcanisme interne pour tester les expressions conditionnelles :
expression conditionnelle ]]
(des espaces sont ncessaires entre expression conditionnelle et les doubles crochets).
Les expressions sont les mmes que pour test mais le et logique se traduit par && et le
ou logique par ||.
On dispose aussi de quelques ajouts. Par exemple, < et > permettent de comparer
deux cha nes de caractres dans l'ordre lexicographique (ordre du dictionnaire), chane =
modle est vrai si chane correspond modle qui peut contenir les caractres spciaux
utiliss dans la gnration des noms de chiers (voir 4.5).
Aucune gnration des noms de chiers n'est eectue par le shell dans expression
conditionnelle.
Exemple 17.2
$fichier = *.c ]]
17.2. DCALER LES PARAMTRES DE POSITION (SHIFT)
12
17.2 Dcaler les paramtres de position (shift)
shift n]
dcale les paramtres de position de n positions. Par dfaut n est gal 1 : $2 devient $
$3 devient $2, etc.
shift est souvent utilis par les structures de contrle de rptition pour utiliser tou
de rle les dirents paramtres de position (voir exemples en 17.4.4).
Exemple 17.3
Si le shellscript decale contient
shift
echo $1
l'excution de decale 1 2 achera 2.
17.3 Sortie d'un shellscript (exit)
exit n]
fait sortir du shell (donc en gnral du shellscript qui est excut par le shell * voir 14.11
en renvoyant le code n (voir 14.1.6).
Exemple 17.4
exit 1
Si le shellscript ne se termine pas par un exit ou si exit n'est pas suivi d'un nombre n
il renvoie le code de la dernire commande qu'il a excute.
Remarque 17.2
Il faut se mer des constructions des shells qui crent implicitement un sous-she
(voir 14.3 ou 17.4.7). Si une commande exit s'excute dans un de ces sous-shells, el
ne fera sortir que du sous-shell et pas du shellscript.
17.4 Les structures de contrle
17.4.1 if .. then .. else .. Les commandes Unix renvoient toute un code retour qui est un nombre entier (voir 14.1
En gnral, si la commande s'est bien droule, elle renvoie 0 * s'il y a eu une erreu
ou un droulement anormal de la commande, le code renvoy est ngatif ou strictemen
positif.
La commande if prend en compte ce code renvoy par les commandes.
126
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
if liste-commandes # then
liste-commandes
else
liste-commandes
fi
teste la valeur renvoye par la liste de commande qui suit le if (code de la dernire commande de la liste excute). Si la valeur est nulle, la liste de commandes qui suit le then
est excute, sinon c'est la liste qui suit le else qui est excute.
Remarque 17.3
Les mots cls if, then, else, doivent appara tre en dbut de ligne (prcds seulement
d'espaces ou de tabulations) pour tre reconnus par le shell. Si on veut les mettre
la suite d'autres instructions sur la mme ligne il faut les faire prcder d'un #.
La prsentation choisie dans ce cours suit le format couramment utilis en langage
C (else align avec le if ). Le then est plac sur la mme ligne que le if et il est donc
prcd d'un #.
Exemples 17.5
(a) if cp rep1/* rep2 # then
:
else
echo "Impossible de copier les fichiers" >&2
fi
(b) !crivons un shellscript oui qui pourra tre utilis par d'autres shellscripts. Il renverra 0 si l'utilisateur rpond oui et il renverra 1 sinon :
read reponse
if test "$reponse" = oui # then
exit 0
else
exit 1
fi
On peut utiliser ce shellscript dans un autre shellscript comme suit :
echo -n "Confirmez-vous la suppression ? "
if oui # then
rm *
fi
Remarque 17.4
Puisqu'en l'absence de commande exit, un shellscript sort avec le code retour de
la dernire commande excute, le shellscript oui pourrait aussi s'crire :
read reponse
test "$reponse" = oui
17.4. LES STRUCTURES DE CONTRLE
12
Variantes de if
if liste-commandes # then
liste-commandes
fi
if liste-commandes # then
liste-commandes
elif liste-commandes # then
liste-commandes
elif ...
...
...
else
liste-commandes
fi
Cette structure est un raccourci plus simple et plus lisible pour la structure suivante
if liste-commandes # then
liste-commandes
else
if liste-commandes # then
liste-commandes
else
if ...
...
...
...
else
liste-commandes
fi
fi
fi
Exemple 17.6
if test "$reponse" = oui # then
exit 0
elif test "$reponse" = non # then
exit 1
else
exit 2
fi
128
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
17.4.2 case ... esac
case mot in
modle1) liste-commandes ##
.
.
modlen) liste-commandes ##
esac
case est une instruction de choix multiple : le premier modle rencontr qui correspond
la valeur de mot indique la liste de commandes excuter. Si mot ne correspond aucun
des modles, l'excution se poursuit l'instruction qui suit esac.
Les modles sont de la forme :
val1 | val2... | valp
Dans les modles, on peut utiliser les caractres spciaux ? * ] comme dans les
noms de chiers (voir 4.5). On peut ainsi tester si une valeur commence par un chire par
le modle 0-9]*.
Exemple 17.7
Le shellscript oui donn en b peut s'crire :
read reponse
case "$reponse" in
o|O|oui|OUI) exit 0 ##
n|N|non|NON) exit 1 ##
*) exit 2 ##
esac
17.4.3 for ... do ... done
Il est frquent d'avoir un traitement qui se rpte pour chaque paramtre d'une commande (par exemple, lpr ch1 ch2). La commande for permet de traiter successivement
tous les paramtres d'une commande. Elle permet aussi de rpter un traitement pour
plusieurs valeurs direntes.
for variable in mots...]
do
liste-commandes
done
variable prend tour de rle pour valeur chaque mot de la liste mots qui suit in. Pour
chaque valeur de variable, liste-commandes est excute.
Si in mots... n'est pas prsent, variable prend pour valeur chacun des paramtres de
la commande (ce qui est quivalent : for variable in $@ * voir 15.2.6).
Remarque 17.5
Une boucle for sans in ne modie pas les valeurs de $1, $2,...
17.4. LES STRUCTURES DE CONTRLE
Exemples 17.8
(a) for i in
12
1 2 3
do
echo $i
done
(b) Pour voir la dirence entre $* et $@, excutez le shellscript suivant avec quelque
paramtres, remplacez ensuite $* par $@ et excutez le nouveau avec les mme
paramtres. Notez la dirence. Dans la premire version on n'a qu'un seul tour
car $* est considr comme un mot unique.
for i in "$*"
do
echo $i
done
(c) Le shellscript cherche suivant ache les chemins d'accs des chiers donns e
argument :
for fichier
do
find / -name "$fichier" -print
done
Il sura de taper
cherche fich1 fich2 fich3
pour faire acher les chemins d'accs des chiers spcis.
Si on veut ajouter quelques tests et entrer la racine de la recherche en premier para
mtre, le shellscript cherche devient :
if test $# -lt 2 # then
echo "$0 : Il faut au moins 2 arguments" >&2
exit 2
fi
if test ! -d $1 # then
echo "$0 : $1 n'est pas un repertoire" >&2
exit 3
fi
racine=$1
shift
for fichier
do
find $racine -name "$fichier" -print
done
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
130
(d) Pour excuter un traitement (ici acher le nom) sur tous les chiers d'un rpertoire
on utilise la substitution de commande :
for i in `ls -A`
do
echo $i
done
13
do
cherche "$1" "$2"
shift 2
done
(d) Lecture ligne ligne d'un chier structur en lignes :
17.4.4 while ... do ... done
while liste-commandes1
do
liste-commandes2
done
excute liste-commandes2 tant que liste-commandes1 renvoie un code 0.
Exemples 17.9
(a) while test "$1"
do
echo $1
shift
done
while read ligne
do
echo $ligne
done < fichier
17.4.5 until ... do ... done
Est semblable while mais la sortie de la boucle s'eectue si la liste de commandes qu
suit until renvoie une valeur nulle.
17.4.6 Instructions lies aux boucles (continue, break)
continue n]
ache tous les paramtres, un par ligne. Retenez le test sur $1 pour reprer le dernier
paramtre.
(b) Si le shellscript coucou contient :
while :
do
echo coucou
sleep 30
done
permet de sauter la n de la boucle et de recommencer une nouvelle boucle.
break n]
provoque la sortie de la boucle en cours d'excution et passe l'instruction qui suit l
boucle.
On peut ajouter un nombre entier n la suite de ces 2 instructions pour indiquer qu
l'action porte sur des boucles externes. Par exemple, break 2 sortira de la boucle qu
englobe la boucle dans laquelle cette instruction est crite.
17.4.7 Probl
mes avec les boucles rediriges et les pipes
Si on tape
coucou &
il s'achera coucou sur l'cran toutes les 30 secondes (ne pas rediriger sur le terminal
du collgue !). La commande interne : est une commande qui ne fait rien et renvoie
le code retour 0 (voir 17.6).
(c) Pour rechercher dans l'arborescence une liste de chiers ($2) situs sous des rpertoires dirents ($1), on peut utiliser le shellscript suivant (le shellscript cherche a
t crit en c) :
while "$1" ]
17.4. LES STRUCTURES DE CONTRLE
# teste la fin de la liste
Lorsqu'une boucle est redirige vers un chier, le shell l'excute dans un sous-shell.
en est de mme avec les commandes d'un pipe (sauf peut-tre la dernire commande).
Ceci implique les deux problmes suivants :
) une commande exit ne sortira pas du shellscript mais seulement de la boucle ou d
pipe,
) les aectations de variables l'intrieur de la boucle ne seront pas connues en dehor
de la boucle ou du pipe.
Remarque 17.6
Malgr tout on n'est pas oblig d'exporter une variable pour qu'elle soit connue de
sous-shells engendrs par le shell pour excuter la boucle redirige (vriez-le tout d
mme pour la version du shell que vous utilisez).
132
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
Voici des mthodes (de type bidouillage) pour contourner ces deux problmes dans le
cas d'une boucle redirige :
) Pour le problme du exit, il n'y a pas de solution miracle. On doit s'adapter chaque
cas particulier. On peut envoyer un code retour spcial avec la commande exit l'intrieur de la boucle (par exemple 5) et on teste le code retour juste la sortie de
la boucle. On peut ainsi sortir du shellscript si le code retour lu est le code spcial
choisi.
) Pour l'aectation de variable, il n'y a pas non plus de solution simple. On peut
crire l'aectation dans un chier temporaire que l'on excute avec la commande .
(voir 14.11.2) la sortie de la boucle. Par exemple (la valeur de $$ est la mme dans
les sous-processus du pipe mais il vaut mieux vrier),
echo "var=valeur" > ftemp$$
On peut aussi dans certains cas utiliser la substitution de commande comme il est
dcrit ci-dessous pour le pipe. C'est alors la solution la plus propre'.
) Pour le pipe, une solution est d'utiliser un chier temporaire qui contient les informations que l'on veut faire passer au shell qui a appel le pipe. Dans certains cas, une
autre solution est de mettre le pipe dans un shellscript part (ou une fonction), de
faire acher par ce shellscript les informations que l'on veut rcuprer, et d'utiliser
une substitution de commande pour rcuprer ces valeurs. Cette dernire solution
est aussi utilisable dans le cas d'une boucle redirige.
17.5 Interception des signaux
trap liste-commandes] n...
Le plus souvent, un processus s'interrompt quand il re'oit un signal (voir 2.2.1). La commande trap permet un comportement dirent la rception du signal : liste-commandes
sera excute si le programme re'oit un des signaux dont le numro est indiqu dans la liste
des n * ensuite, le programme continue l'endroit o- il tait au moment de la rception du
signal (sauf si une instruction comme exit a t excute entre temps).
Si n est 0, la liste de commandes sera excute la sortie du shell en cours (en gnral,
la n de l'excution du chier de commande qui contient l'instruction trap) ou la sortie
de la fonction (voir 16.3) dans laquelle a t dni le trap.
Si liste-commandes est la cha ne nulle (indique explicitement par '' : 2 apostrophes
accoles), le signal est ignor.
Si liste-commandes est absente, le signal sera nouveau trait normalement. trap
(sans aucun paramtre) ache la liste des commandes associes chacun des signaux.
La liste de commandes du trap est lue et interprte une premire fois quand le shell
lit la ligne qui comprend la commande trap et le rsultat de la premire interprtation est
interprte une deuxime fois si la liste de commande est excute aprs la rception d'un
signal.
17.5. INTERCEPTION DES SIGNAUX
13
Ces signaux sont pour la plupart des signaux d'interruption pour cause de droulemen
anormal (erreur au niveau du bus, mmoire insusante, etc.) ou d'interruption par l'util
sateur (l'appui sur la touche d'annulation correspond au signal numro 2). La command
kill (tudie en 7.2) permet d'envoyer un signal un processus repr par son numro.
Exemples 17.10
(a) trap '' 2 # les deux apostrophes designent la chaine vide
ignore l'interruption par la touche d'annulation
(b) trap 2
rtablit la prise en compte de cette touche
(c)
temp=temp$$
trap 'rm -f $temp # exit 2' 1 2 15
supprime le chier temporaire dont le nom est compos de la cha ne temp suiv
du numro de processus, la n du programme, si l'utilisateur appuie sur la touch
d'annulation ou si le programme a t interrompu par un kill ou par la dconnexio
de l'utilisateur.
Porte d'un trap : Le trap est en activit dans un shellscript partir du moment oest lu et jusqu' ce qu'un autre trap sur le mme signal soit lu. Les sous-shell n'hriten
pas d'un traitement du signal initi par un trap. Cependant, si un shellscript ignore u
signal, le signal ne sera pas transmis ses ls.
Exemples 17.11
(a) Lancez le programme suivant, tapez sur la touche d'annulation et voyez le messag
s'acher l'cran.
trap "echo $0 : fin de programme # exit 2" 2
coucou
o- coucou est le shellscript suivant :
while :
do
echo coucou
sleep 5
done
(b) Le schma ci-dessous permet d'interrompre commande en tapant la touche d'annu
lation, sans interrompre le programme principal * l'excution reprend la suite d
programme.
trap "trap '' 2" 2
# les guillemets pour entourer la chaine
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
134
# avec les deux apostrophes
commande
trap '' 2
Suite du programme...
Si le premier trap tait trap '' 2, on ne pourrait pas interrompre la commande.
On pourrait aussi mettre trap : 2 comme premier trap mais il pourrait peut-tre
y avoir un problme si la touche d'annulation tait tape pendant l'excution du
deuxime trap (plac aprs la commande) : le signal 2 ne serait plus ignor dans la
suite du programme.
17.6 Commandes internes diverses
:
commande nulle (elle peut tre suivie de commentaires sur la mme ligne). Elle renvoie
le code 0 ce qui permet de construire des boucles innies (voir exemple de while de la
page 130).
eval chanes...
les cha nes sont interprtes par le shell et elles sont ensuite excutes comme si elles avaient
t tapes au clavier (donc avec une nouvelle interprtation du shell). Cette commande
permet de construire des commandes complexes morceau par morceau et des les excuter
ensuite. Elle permet aussi des astuces qui sont lies une double interprtation du shell
comme dans l'exemple suivant.
Exemple 17.12
eval dernier='$'$#
aecte la variable dernier la valeur du dernier paramtre de position du shellscript.
En eet, quand le shell lit la commande et l'interprte, la commande devient
eval dernier=$3
(s'il y avait par exemple 3 paramtres de position) car le shell eectue la substitution
de variable ($#).
La commande interne eval est ensuite lance : elle commence par interprter la
cha ne dernier=$3 comme le ferait le shell. Cette cha ne devient dernier=toto
(si toto est la valeur du troisime paramtre).
L'aectation est ensuite excute et on obtient bien ce que l'on voulait.
exec commande
la commande est excute la place du shell sans cration de nouveau shell.
On a vu en 16.4.2 que exec permet aussi de faire des redirections dnitives dans le
shell.
wait n]
attend le processus ls de pid n. Si n n'est pas spci, attend tous les processus ls.
17.7. RCURSIVIT DANS L'EXCUTION DES SHELLSCRIPTS
13
Cette commande permet de lancer des processus en arrire-plan et d'en attendre certain
avant de continuer une action. Il peut tre utile de conserver le pid d'un processus lanc
en arrire-plan dans une variable l'aide de la variable spciale $! (voir 15.2.6).
17.7 Rcursivit dans l'excution des shellscripts
Un shellscript (ou une fonction) peut s'appeler lui-mme. Par exemple le shellscrip
dirr suivant ache tous les sous-rpertoires de l'arborescence d'un rpertoire donn e
paramtre en dcalant les dirents niveaux de sous-rpertoires :
dir=${1-.}
indent=$2
for fich in `ls -A $dir`
do
if -d $dir/$fich ]# then
echo "$indent"$fich
$0 $dir/$fich "$indent "
fi
done
Remarques 17.7
(a) L'utilisation de $0 au lieu du nom du shellscript assure que le shellscript fonctionner
mme si on change son nom.
(b) L'excution de ce shellscript risque de provoquer une erreur si l'arborescence d
rpertoire est profonde et si la mmoire alloue la pile est trop faible.
17.8 Calculs, traitement des chanes de caractres
ksh et zsh fournissent la commande interne let pour eectuer des calculs arithmtique
Cette commande n'existe pas dans sh mais on peut utiliser la commande expr.
expr permet aussi d'extraire des sous-cha nes d'une cha ne de caractres.
17.8.1 Commande expr
expr arguments...
value les arguments comme une expression. Le rsultat est envoy sur la sortie standard
Ce n'est pas une commande interne au shell mais elle est trs utile dans l'criture d
shellscripts
Attention, sauf pour les options ci-dessous o- le code retour est indiqu, le code retou
renvoy est 0 lorsque la valeur envoye sur la sortie standard est dirente de 0 et 1 si l
valeur est 0.
Les calculs se font sur des entiers cods sur 32 bits en complment 2.
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
136
arguments est une expression comprenant des oprateurs. On peut utiliser les oprateurs
suivants. Il ne faut pas oublier de les protger contre une interprtation du shell s'ils sont
des caractres spciaux pour le shell (par exemple, les caractres < > * & |).
Voici ces oprateurs par ordre de priorit croissante, regroups par groupes d'gales
priorits :
17.8. CALCULS, TRAITEMENT DES CHANES DE CARACTRES
(b) Le programme suivant ache les nombres entiers de 1 9 :
a=1
while $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
exp1 n j exp2
si exp1 est non nulle et non vide, elle est envoye sur la sortie standard, sinon
si exp2 est non nulle et non vide, elle est envoye sur la sortie standard, sinon
0 est envoye sur la sortie standard.
exp1 n& exp2
(c)
expr "$a" : ".*"
exp1 op_comp exp2
(d)
expr 123abc : '0-9]*'
si exp1 et exp2 sont non nulles et non vides, exp1 est envoye sur la sortie
standard, sinon 0 est envoye sur la sortie standard.
o- op_comp est un oprateur de comparaison :
< <= = != >= >
La comparaison est numrique si les deux expressions sont numriques * elle
est lexicographique sinon. Envoie 1 sur la sortie standard si l'expression est
vrai et 0 sinon.
exp1 + exp2
exp1 - exp2 addition et soustraction
exp1 n* exp2
exp1 / exp2
exp1 n% exp2 multiplication, division et modulo
Autres arguments :
(une seule cha ne de caractre) envoie chane sur la sortie standard et le
code retour 0 si chane est non vide * envoie une ligne vide et le code retour
1 si chane est vide.
chane
chane : exp-reg
renvoie le nombre de caractres de chane qui peuvent tre dsigns par
l'expression rgulire exp-reg (voir chapitre 11). exp-reg doit reprsenter le
dbut de chane et il ne faut donc pas commencer exp-reg par le caractre
^.
Si une partie de l'expression rgulire est parenthse par \( et \), expr
renvoie la sous-cha ne de chane qui correspond cette partie. Le code
retour 1 est renvoy si l'expression rgulire exp-reg ne correspond aucune
sous-cha ne de chane et 0 sinon.
On peut regrouper les expressions en les parenthsant par ( et ).
Exemples 17.13
(a) a=`expr $a + 1`
incrmente a de 1.
13
ache le nombre de caractres de la cha ne contenue dans la variable a.
ache 3.
(e) Le shellscript option suivant ache le nombre n associ une option -n. Il renvoi
le code retour 1 si le paramtre ne commence pas par le caractre - :
expr $1 : '-\(.*\)'
17.8.2 Commande let
Cette commande n'existe pas en sh. Elle est disponible dans ksh et zsh.
let expression arithmtique
permet d'aecter des valeurs numriques une variable.
L'expression arithmtique doit tre un seul mot pour le shell (on peut l'entourer d
guillemets pour cela). Il ne faut pas faire prcder les noms des variables du shell par
signe $ pour dsigner leur contenu.
Exemples 17.14
(a) let a=10+b
(b)
let "a = 10 * a"
((expression arithmtique))
est quivalent let "expression arithmtique"
(voir 14.8)
Exemples 17.15
(a) ((a=10+b))
(b) ((a = 10 * a))
Pour des calculs plus complexes on utilisera la commande bc .
138
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
17.9 Traitement des chanes de caractres
Le langage Perl permet d'eectuer de nombreuses manipulations sur les cha nes de
caractres. Le langage est complexe et n'est pas tudi dans ce cours. Son usage doit
tre envisag pour les programmes qui comportent beaucoup de traitements de cha nes de
caractres. Il est en particulier trs utilis dans les programmes CGI (Common Gateway
Interface ) installs sur les serveurs Web (voir cours polycopis sur les rseaux).
La commande habituelle utilise pour la manipulation de cha nes de caractres est la
commande expr (voir 17.8.1).
Voici des mthodes (plus ou moins) simples pour extraire une sous-cha ne de caractres.
Pour ces exemples, on extrait l'heure les minutes et les secondes en utilisant la commande
date et la substitution de commande (voir 14.7) :
heure=`date | cut -c12-19`
heure=`date | awk '{print $4}'`
heure=`date | read a b c d e# echo $d`
heure=`date | sed 's/^ ]* ^ ]* ^ ]* \(^ ]*\).*/\1/'`
heure=`set \`date\` # echo $4`
heure=`expr "\`date\`" : '^ ]* ^ ]* ^ ]* \(^ ]*\)'`
IFS
On peut aussi utiliser la variable . Voici des lignes de programme pour acher le
nom de la machine d'une adresse internet :
nom=samoa.unice.fr
IFS=.
set $nom
echo $1
17.10 Aide pour traiter les options (getopts)
La commande getopts est une commande interne qui aide rcuprer les valeurs des
paramtres de position des shellscripts dont la syntaxe suit la syntaxe habituelle des commandes Unix.
On sait que les commandes Unix acceptent plusieurs formats dirents. On peut crire
par exemple ls -la ou ls -l -a. Quand une option ncessite un complment, ce
complment peut tre accol l'option ou spar de l'option par un espace ( -P1rv ou
-P 1rv par exemple). La rcupration des options d'un shellscript ncessite donc un
traitement assez complexe. La commande getopts facilite grandement la t&che du programmeur.
L'ancienne commande getopt eectuait le mme type de traitement mais ne fonctionnait
pas correctement ds qu'un des arguments tait compos de plusieurs mots (comme le
complment de l'option -s dans mail -s "Sujet du message" toto).
getopts options nom-variable paramtres...]
getopts analyse les paramtres de position (ou la cha ne constitue de paramtres... si elle
est donne). getopts traite une une toutes les options, chaque fois qu'on le lance. Il
17.11. MISE AU POINT DES SHELLSCRIPTS (SET -XV)
13
met dans la variable du shell nom-variable la prochaine option et le numro de prochai
argument traiter dans la variable OPTIND.
La premire fois que getopts est appele, OPTIND vaut 1 et ensuite OPTIND est incrment
chaque fois que l'on appelle getopts, au fur et mesure du traitement des dirent
paramtres. Si une des options ncessite un argument (comme l'option -P voque c
dessus), cet argument est rang dans la variable OPTARG.
Si une option illgale est rencontre, nom-variable re'oit la valeur ?.
Quand toutes les options ont t passes en revue, getopts renvoie un code retour no
nul. L'option spciale -- peut indiquer la n des options (on peut ainsi indiquer u
argument qui n'est pas une option et qui commence par -).
Les options acceptes sont indiques dans la cha ne options. Le caractre : est acco
derrire les options qui doivent tre suivies d'un complment.
Voici un exemple d'utilisation de getopt en dbut de shellscript. Ce shellscript est sup
pos accepter les options simples -a et -b et les options -s et -f avec des complments. O
notera que l'on analyse d'abord tous les paramtres avant de commencer les traitement
On n'est ainsi pas tributaire de l'ordre dans lequel l'utilisateur a donn les paramtres su
la ligne de commande.
opta=0# optb=0# optf=0# opts=0
fichier= # complement pour option -f
sujet=
# complement pour option -s
while getopts abs:f: argument
do
case $argument in
a) opta=1 ##
b) ooptb=1 ##
f) optf=1
fichier="$OPTARG"##
s) opts=1
sujet="$OPTARG"##
\?) echo "`basename $0`: Usage: \
`basename $0` -ab] -s sujet] -f fichier-adresses message]" >&
exit 2##
esac
done
shift `expr $OPTIND - 1`
if $optf -eq 0 ] # then
...
17.11 Mise au point des shellscripts (set -xv)
set -v
140
CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS
fait acher les lignes du shellscript au moment o- elles sont lues par le shell. set
cette option.
set -x
+v
annule
fait acher les commandes (et leurs arguments) au moment de leur excution, aprs l'interprtation du shell. set +x annule cette option.
Ces commandes peuvent tre insres de part et d'autre des lignes que l'on veut suivre
la trace dans les shellscripts que l'on veut mettre au point.
Si on veut suivre la trace l'excution entire d'un shellscript, le plus simple (car on
vite de modier le shellscript) est de lancer le shellscript par (on remplacera sh par zsh si
le shellscript doit tre excut par zsh ).
sh -x nom-shellscript
ou
sh -v nom-shellscript
Index
#, 32
#!, 101
.zshenv, 111
.zshrc, 111
:, 118, 134
#, 113
<, 94
<&n, 117
<<, 115
=, 105
>, 93
>!, 94
>&n, 117
>>, 94
?, 31, 59
, 31, 59
(test), 123
... ]], 124
n, 31, 58, 99
, 99
n(...n), 60
%n, 97
nn, 60
n{m, n}, 60
n{m,nn}, 60
n{mn}, 60
^, 31
^, 58
`, 98
{...}, 96
j, 61, 95
jj, 113
, 31
a2ps, 48
administrateur, 11
aectation, 105
acher, 108
, 58
$
$!, 108
$#, 108
$$, 108
$(...), 98
$*, 108
$?, 108
$@, 108
$n, 104
$variable, 105
${#variable}, 119
${=variable}, 106
${variable##modle}, 119
${variable#modle}, 119
${variable+mot}, 118
${variable-mot}, 118
${variable=mot}, 118
, 118
${variable?mot}
${variable%%modle}, 120
${variable%modle}, 119
${variable}, 106
&, 96, 113
&&, 113
', 99
((...)), 137
(...), 95
*, 30, 59
+, 59
., 58, 102
.plan, 38
.project, 38
.zlogin, 111
.zprole, 111
141
INDEX
142
acher le contenu d'un chier, 44
acher les octets d'un chier, 45
acher page page, 45
alias, 97
appels systme, 5
arrire-plan, 13, 96
at, 43, 96
autorisations, 35, 36
autorisations d'un chier, 15
awk, 81
batch, 96
bc, 137
bg, 97
boucles rediriges, 131
Bourne shell, 6
break, 131
C-shell, 6
calculs, 135
calculs mathmatiques, 137
cancel, 47
caractres spciaux pour le shell, 30
case, 128
cat, 44
cd, 30
CDPATH, 107
CGI, 138
cha ne de caractres, 135, 138
chmod, 35
cmp, 78
code retour, 78, 93, 125
comm, 88
commande externe, 6
commande interne, 6, 92, 134
commentaire, 32
comparer deux chiers, 78
compatibilit de zsh, 92
compltion des commandes, 24
compress, 54
compter les caractres, mots et lignes, 74
concatner plusieurs chiers, 44
congurer zsh, 92
continue, 131
convertir des caractres, 75
copier des chiers, 50
copier l'arborescence d'un rpertoire, 56
core, 13, 34
cp, 50, 56
cpio, 57
crer un rpertoire, 55
csh, 6
csplit, 88
cut, 76
daemon, 13
date, 37
dbut d'un chier, 79
dcaler les paramtres, 125
demand paging, 12
dmon, 13
dpersonnaliser, 99
dplacer des chiers, 53
descripteur de chier, 116
df, 39
di%, 78
dirences entre deux chiers, 78
DISPLAY, 112
disquette, 53
driver, 5, 29
droits sur un chier, 16
du, 39
echo, 108
ed, 115
diteur de texte, 62
eject, 53
emacs, 62
EMACSLOADPATH, 63
entre standard, 93
environnement, 11, 92, 104, 109, 110, 119
Envoyer un chier, 48
erreur standard, 93
eval, 134
excution d'un shellscript, 100
exec, 116, 134
INDEX
14
exit, 19, 125, 131
export, 109
expr, 135
interprtation du shell, 99
interprteur de commandes, 5
false, 113
fg, 97
Korn-shell, 6
ksh, 6
expression conditionnelle, 124
expression rgulire, 58
extraire une sous-cha ne, 135
chier
type de, 7, 29
chier inclus, 115
chier ordinaire, 7
chier spcial, 8, 29
le, 32
n d'un chier, 79
nd, 32
nger, 38
fold, 88
fonction, 114
for, 128
gnration des noms de chiers, 30
gestion des jobs, 97
getopt, 138
getopts, 138
grep, 74
groupe d'un chier, 15
groupe d'un processus, 13
groupe d'utilisateurs, 9
gzip, 54
head, 79
historique de Unix, 3
HOME, 30, 106
hostname, 37
i-node, 8, 14, 51
identicateur d'une variable, 105
if, 125
IFS, 107
imprimantes disponibles, 46
imprimer, 45
inhiber l'interprtation du shell, 99
jobs, 97
join, 88
kill, 22, 42
lancer une commande, 22
last, 38
lecteur de disquettes, 53
lecture ligne ligne d'un chier, 131
let, 137
lien, 30, 52
lien hard, 51
lien symbolique, 52
lien symbolique pour un rpertoire, 56
lignes conscutives distinctes, 79
lignes conscutives identiques, 79
liste de commandes, 113
ln, 52, 56
locate, 34
lpq, 47
lpr, 46
lprm, 47
lpstat, 46
ls, 27
mail, 48
majeur, 29
man, 21
mcopy, 53
mdir, 53
message d'erreur, 94
mineur, 29
mise au point, 139
mise en page, 48
mkdir, 55
mode dired d'emacs, 68
mode d'accs un chier, 15
modier la valeur d'une variable, 120
monter un systme de chiers, 6
INDEX
144
more, 45
mot de passe, 18
mv, 53, 55
NFS, 7
NIS, 18, 38
NOCLOBBER, 94
nohup, 96
nom absolu, 22
nom d'un chier, 22
nom d'une commande, 22
nom de l'ordinateur, 37
nom relatif, 22
noyau, 5
NULLCMD, 118
numro de job, 96
numro de processus, 11
od, 45
options
traitement, 138
options des shells, 92, 110
ordre de priorit, 114
OSF, 4
paramtre, 104
partition d'un disque, 6
passwd, 18
paste, 88
PATH, 22, 100, 107
PC (compatible), 53
Perl, 82
pid, 11, 96
pilote, 29
pipe, 95
pipe nomm, 8
place libre d'un systme de chiers, 39
place occupe par un rpertoire, 39
pliage de rpertoires, 57
Postscript, 48
pr, 48
primitive, 5
print, 108
\subitem printcap, 46
printenv, 110
PRINTER, 46
processus, 11
image, 11
processus en cours d'excution, 41
programme de dmarrage, 10
prompt, 92
propritaire d'un chier, 15
propritaire eectif, 13
propritaire rel, 13
protection des chiers, 15
ps, 41
PS1, 107, 120
PS2, 107
pseudo-chier, 95
pwd, 30
racine, 22
read, 108
recherche d'une cha ne, 74
recherche d'une commande, 100
recherche de chiers, 32
rechercher le manuel en ligne, 23
rechercher une commande, 23
rcursivit, 135
redirection, 44, 93, 115, 116
redirection des erreurs, 94
redirection sur chier inclus, 115
regrouper des commandes, 95
renommer des chiers, 53
renommmer un rpertoire, 55
rpertoire
structure interne, 14
rpertoire courant, 12
rpertoire HOME, 10
requte d'impression, 46
return, 115
rm, 52, 55
rmdir, 55
sauvegarder sur disquette, 53
sed, 80
set, 91, 104, 110, 139
INDEX
set group id, 16
set user id, 16
setopt, 110
sgid, 16
sh, 6
shell, 5, 91
shell d'excution d'un shellscript, 101
shellscript, 6, 91, 100
shift, 125
signal, 12, 42, 132
sleep, 130
socket, 8
Solaris, 4
sort, 73
sortie standard, 93
split, 88
spool, 46
substitution de commande, 98
suid, 16
super-utilisateur, 11
supprimer des caractres, 75
supprimer des chiers, 52
supprimer des rpertoires, 55
supprimer des requtes d'impression, 47
supprimer un processus, 22, 42
supprimer une variable, 106
suspendre un processus, 97
swap, 12
systme d'exploitation, 3
nom du, 37
systme d'impression, 46
systme de chiers, 6
tail, 79
tar, 57
TERM, 107, 112
terminal de contrle, 13
test, 123
thread, 11
touche spciale, 19
tr, 75
traiter les options, 138
trap, 132
14
tri, 73
true, 113
tty, 39
type d'un chier, 32
type de chier, 29
uid, 9
umask, 36
unalias, 97
uname, 37
uniq, 79
Unix BSD, 4
Unix OSF, 4
Unix Systme V, 4
unset, 106
until, 131
uuencode, 48
valeur par dfaut d'une variable, 118
vared, 120
variable, 118
dcomposition en mots sous zsh, 106
valeur par dfaut, 118
variable de position, 104
variable du shell, 105
variable spciale du shell, 106
wait, 134
wc, 74
whence, 23
whereis, 23
while, 130
who, 37
whoami, 37
write, 113
xemacs, 62
xterm, 103
Yellow Pages, 38
ypcat, 38
yppasswd, 18
Z shell, 6
zip, 54
146
zone de swap, 12
zsh, 6, 92
INDEX