Cours Unix - Richard Grin
Cours Unix - Richard Grin
Cours Unix - Richard Grin
I Connaissances de base
1 Gnralits sur Unix
Unix 1.1
1.2
1.3
Systmes d'exploitation . . . . . . . .
Historique . . . . . . . . . . . . . . .
Standards et versions d'Unix . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1.4 Proprits d'Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
et 1.5 Structure d'Unix . . . . . . . . . . .
1.5.1 Noyau . . . . . . . . . . . . .
1.5.2 Shell . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1.6 Organisation des systmes de chiers . . . . . . . . . . . . . . . . . . . . .
programmation du shell 1.6.1 Systme de chiers . . . . . .
1.6.2 Types de chiers . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Acteurs/objets du monde Unix
2.1 Utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Version 3.0 2.1.1 Un utilisateur dans le systme . . . . . . . . . . . . . . . . . . . . .
2.1.2 Super-utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.3 Administrateur du systme . . . . . . . . . . . . . . . . . . . . . . . 1
Richard Grin 2.2 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Signaux envoys aux processus . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
1
1
2.2.2 Terminal de contrle d'un processus, excution en arrire-plan . . . 1
31 juillet 1998 2.2.3 Propritaires et groupes eectifs et rels d'un processus . . . . . . . 1
2.2.4 Cration d'un nouveau processus, arbre des processus . . . . . . . . 1
2.3 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.3.1 i-node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.3.2 Structure interne des rpertoires . . . . . . . . . . . . . . . . . . . . 1
2.3.3 Propritaire et groupe d'un chier . . . . . . . . . . . . . . . . . . . 1
2.3.4 Mode d'accs au chier . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.4 Protection des chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
TABLE DES MATIRES iii iv TABLE DES MATIRE
2.4.1 Droits associs aux autorisations . . . . . . . . . . . . . . . . . . . 16 6 Commandes d'observation du systme 3
2.4.2 Autorisations set user id et set group id . . . . . . . . . . . . . . 16 6.1 Date et Heure (date) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.4.3 Mcanisme de protection des chiers . . . . . . . . . . . . . . . . . 17 6.2 Nom de l'ordinateur (hostname) . . . . . . . . . . . . . . . . . . . . . . . . 3
6.3 Nom du systme d'exploitation (uname) . . . . . . . . . . . . . . . . . . . 3
3 Premiers pas dans le systme 18 6.4 Information sur les utilisateurs (who, nger) . . . . . . . . . . . . . . . . . 3
3.1 Entre dans le systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6.5 Dernires connexions au systme (last) . . . . . . . . . . . . . . . . . . . . 3
3.1.1 Changer son mot de passe (passwd) . . . . . . . . . . . . . . . . . . 18 6.6 Systme Network Information Service (NIS) . . . . . . . . . . . . . . . . 3
3.1.2 Dmarrage d'une session . . . . . . . . . . . . . . . . . . . . . . . . 19 6.7 Espace disque occup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 Sortie du systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Touches spciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.7.1 Place occupe par la branche d'un rpertoire (du) . . . . . . . . . . 3
3.4 Format des commandes Unix . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6.7.2 Place libre d'un systme de chiers (df) . . . . . . . . . . . . . . . . 3
3.5 Consultation du manuel en ligne (man) . . . . . . . . . . . . . . . . . . . . 21 6.8 Nom du terminal utilis (tty) . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.6 Nom d'un chier, nom absolu, nom relatif . . . . . . . . . . . . . . . . . . 22
3.7 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 7 Commandes pour la gestion des processus 4
3.7.1 Lancer une commande, supprimer un processus . . . . . . . . . . . 22 7.1 Processus en cours d'excution (ps) . . . . . . . . . . . . . . . . . . . . . . 4
3.7.2 Nom d'une commande, variable PATH . . . . . . . . . . . . . . . . 22 7.2 Supprimer un processus en cours d'excution (kill) . . . . . . . . . . . . . . 4
3.7.3 Nom complet et type d'une commande (whence, whereis) . . . . . . 23 7.3 Lancement automatique de processus des moments donns (at, crontab) . 4
3.7.4 Compltion des commandes par zsh . . . . . . . . . . . . . . . . . . 24 7.4 Gestion du plan d'un processus par le shell . . . . . . . . . . . . . . . . . . 4
8 Acher, imprimer, envoyer le contenu d'un chier 4
II Commandes 25 8.1 Acher le contenu d'un chier, concatner plusieurs chiers (cat) - Notion
de redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Commandes lies
l'arborescence des chiers 27 8.2 Acher les octets d'un chier (od) . . . . . . . . . . . . . . . . . . . . . . 4
4.1 Visualisation de l'arborescence (ls) . . . . . . . . . . . . . . . . . . . . . . 27 8.3 Acher page page (more) - Notion de pipe . . . . . . . . . . . . . . . . . 4
4.2 Information dtaille sur les chiers (ls -l) . . . . . . . . . . . . . . . . . . 28 8.4 Sorties sur les imprimantes . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2.1 Format d'achage . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 8.4.1 Informations sur le systme d'impression (lpstat, printcap) . . . . . 4
4.2.2 Types de chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 8.4.2 Lancement d'une requte d'impression (lpr) . . . . . . . . . . . . . 4
4.2.3 Mode d'accs au chier . . . . . . . . . . . . . . . . . . . . . . . . . 29 8.4.3 Informations sur les requtes d'impression (lpq) . . . . . . . . . . . 4
4.2.4 Nombre de liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 8.4.4 Suppressions de requtes d'impression (lprm, cancel) . . . . . . . . 4
4.3 Se dplacer dans l'arborescence (cd) . . . . . . . . . . . . . . . . . . . . . . 30 8.5 Envoyer le contenu d'un chier (mail) . . . . . . . . . . . . . . . . . . . . . 4
4.4 Acher le rpertoire courant (pwd) . . . . . . . . . . . . . . . . . . . . . . 30 8.6 Mise en page (pr) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.5 Caractres spciaux pour le shell . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.1 Gnration des noms de chiers (*,?, ) . . . . . . . . . . . . . . . . 30 8.7 Passer en Postscript (a2ps) . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.5.2 Le caractre spcial . . . . . . . . . . . . . . . . . . . . . . . . . 31 9 Gestion des chiers 5
4.5.3 Le caractre spcial # . . . . . . . . . . . . . . . . . . . . . . . . . 32 9.1 Copier des chiers (cp) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.5.4 Autres caractres spciaux . . . . . . . . . . . . . . . . . . . . . . . 32
4.6 Acher le type d'un chier (le) . . . . . . . . . . . . . . . . . . . . . . . . 32 9.2 Liens avec mme numro de i-node (ln) . . . . . . . . . . . . . . . . . . . . 5
4.7 Rechercher des chiers dans l'arborescence (nd, locate) . . . . . . . . . . 32 9.3 Liens symboliques (ln -s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9.4 Supprimer des chiers (rm) . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Protection des chiers 35 9.5 Dplacer, renommer des chiers (mv) . . . . . . . . . . . . . . . . . . . . . 5
5.1 Changement des autorisations (chmod) . . . . . . . . . . . . . . . . . . . . 35 9.6 Sauvegarder sur les lecteurs de disquettes des stations Sun . . . . . . . . . 5
5.2 Masque pour les autorisations (umask) . . . . . . . . . . . . . . . . . . . . 36 9.7 Compression et dcompression (zip, gzip, compress) . . . . . . . . . . . . . 5
TABLE DES MATIRES v vi TABLE DES MATIRE
10 Travail sur les rpertoires 55 13.9.1 Description gnrale de l'diteur . . . . . . . . . . . . . . . . . . . . 8
10.1 Crer un rpertoire (mkdir) . . . . . . . . . . . . . . . . . . . . . . . . . . 55 13.9.2 Structure d'une ligne de programme . . . . . . . . . . . . . . . . . . 8
10.2 Supprimer un rpertoire (rmdir, rm -r)) . . . . . . . . . . . . . . . . . . . . 55 13.9.3 Format pour indiquer les lignes traiter . . . . . . . . . . . . . . . 8
10.3 Changer le nom d'un rpertoire (mv) . . . . . . . . . . . . . . . . . . . . . 55 13.9.4 Excution du programme . . . . . . . . . . . . . . . . . . . . . . . . 8
10.4 Copier l'arborescence d'un rpertoire (cp -r) . . . . . . . . . . . . . . . . . 56 13.9.5 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
10.5 Lien symbolique (ln -s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 13.10Un langage d'dition de chiers (awk) . . . . . . . . . . . . . . . . . . . . . 8
10.6 Pliage de rpertoires en une seul chier (tar, cpio) . . . . . . . . . . . . . . 57 13.10.1Description gnrale de la commande . . . . . . . . . . . . . . . . . 8
13.10.2Champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11 Expressions rgulires 58 13.10.3Structure d'un programme . . . . . . . . . . . . . . . . . . . . . . . 8
11.1 Expressions rgulires reprsentant un seul caractre . . . . . . . . . . . . 58 13.10.4Cas particuliers pour une ligne de programme . . . . . . . . . . . . 8
11.2 Expressions rgulires reprsentant un ensemble de caractres d'un seul type 59 13.10.5Slecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
11.3 Autres expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . 60 13.10.6Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
13.10.7Fonctions, oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 8
12 diteur de texte (emacs, xemacs) 62 13.11Exemples de programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
12.1 Entre et sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 13.12Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
12.1.1 Lancer emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 13.13D'autres commandes de manipulation de chiers . . . . . . . . . . . . . . . 8
12.1.2 Sortir de emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
12.2 Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
12.2.1 Description d'une fentre emacs . . . . . . . . . . . . . . . . . . . . 63 III Mcanismes d'interprtation du shell 8
12.2.2 Commandes et associations de cls . . . . . . . . . . . . . . . . . . 64
12.2.3 Buers et fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 14 Interprtation du shell. Mcanismes de base 9
12.2.4 Point d'insertion, marque, rgions . . . . . . . . . . . . . . . . . . . 67 14.1 Gnralits sur le shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
12.2.5 Mode de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 14.1.1 Dnition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
12.3 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 14.1.2 Compatibilit des dirents shells . . . . . . . . . . . . . . . . . . . 9
12.3.1 Commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . 68 14.1.3 Commandes et processus, commandes internes au shell . . . . . . . 9
12.3.2 Autres commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 14.1.4 Prompts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
12.4 Personnalisation de emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 14.1.5 Environnement d'une commande ou d'un shellscript . . . . . . . . . 9
12.5 Complments pour les versions graphiques . . . . . . . . . . . . . . . . . . 72 14.1.6 Code retour d'une commande . . . . . . . . . . . . . . . . . . . . . 9
14.2 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
13 Manipulation des donnes des chiers 73 14.2.1 Redirections de la sortie standard . . . . . . . . . . . . . . . . . . . 9
13.1 Tri (sort) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 14.2.2 Redirection du chier d'erreur (2>) . . . . . . . . . . . . . . . . . . 9
13.2 Recherche d'une cha ne de caractres (grep) . . . . . . . . . . . . . . . . . 74 14.2.3 Envoi d'un message d'erreur (>&2) . . . . . . . . . . . . . . . . . . 9
13.3 Compter les caractres, les mots, les lignes (wc) . . . . . . . . . . . . . . . 74 14.2.4 Redirection de l'entre standard (<) . . . . . . . . . . . . . . . . . 9
13.4 Conversion, suppression de caractres (tr) . . . . . . . . . . . . . . . . . . 75 14.2.5 Pseudo-chier /dev/null . . . . . . . . . . . . . . . . . . . . . . . . 9
13.5 Fractionnement vertical (cut) . . . . . . . . . . . . . . . . . . . . . . . . . 76 14.3 Pipe (j) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
13.6 Comparaison du contenu de 2 chiers . . . . . . . . . . . . . . . . . . . . . 78 14.4 Regroupement des commandes . . . . . . . . . . . . . . . . . . . . . . . . . 9
13.6.1 Dirences entre deux chiers texte (di) . . . . . . . . . . . . . . . 78 14.4.1 Regroupement entre parenthses . . . . . . . . . . . . . . . . . . . . 9
13.6.2 !galit du contenu de 2 chiers (cmp) . . . . . . . . . . . . . . . . 78 14.4.2 Regroupement entre accolades . . . . . . . . . . . . . . . . . . . . . 9
13.7 Traiter les lignes conscutives identiques (uniq) . . . . . . . . . . . . . . . 79 14.5 Processus en arrire-plan (&) . . . . . . . . . . . . . . . . . . . . . . . . . 9
13.8 Extraire le dbut ou la n d'un chier . . . . . . . . . . . . . . . . . . . . . 79 14.5.1 Gestion des jobs par ksh ou zsh . . . . . . . . . . . . . . . . . . . 9
13.8.1 Dbut d'un chier (head) . . . . . . . . . . . . . . . . . . . . . . . . 79 14.6 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
13.8.2 Fin d'un chier (tail) . . . . . . . . . . . . . . . . . . . . . . . . . . 79 14.7 Substitution de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
13.9 Un diteur non interactif (sed) . . . . . . . . . . . . . . . . . . . . . . . . . 80 14.8 Mcanismes d'interprtation . . . . . . . . . . . . . . . . . . . . . . . . . . 9
TABLE DES MATIRES vii viii TABLE DES MATIRE
14.9 Inhiber l'interprtation du shell . . . . . . . . . . . . . . . . . . . . . . . . 99 16.5.4 Modication interactive de la valeur d'une variable sous zsh (vared) 12
14.10Recherche d'une commande par le shell . . . . . . . . . . . . . . . . . . . . 100 16.5.5 Tableaux sous ksh et zsh . . . . . . . . . . . . . . . . . . . . . . . . 12
14.11Lancement de l'excution d'un shellscript . . . . . . . . . . . . . . . . . . . 100
14.11.1Lancement par le nom du shellscript . . . . . . . . . . . . . . . . . 100
14.11.2Lancement par l'appel de la commande interne . . . . . . . . . . . 102 IV Programmation 12
14.11.3Lancement par l'appel explicite d'un shell . . . . . . . . . . . . . . 102
14.12Lancement explicite d'un shell . . . . . . . . . . . . . . . . . . . . . . . . . 103 17 Programmation des shellscripts 12
17.1 Tests divers (test, ... ], ... ]]) . . . . . . . . . . . . . . . . . . . . . . . . 12
15 Variables, environnement 104 17.2 Dcaler les paramtres de position (shift) . . . . . . . . . . . . . . . . . . . 12
15.1 Paramtres, variables de position . . . . . . . . . . . . . . . . . . . . . . . 104 17.3 Sortie d'un shellscript (exit) . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.1.1 Paramtres des shellscripts . . . . . . . . . . . . . . . . . . . . . . . 104 17.4 Les structures de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.1.2 Donner des valeurs aux paramtres de position (set) . . . . . . . . . 104 17.4.1 if .. then .. else .. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 17.4.2 case ... esac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.2.1 Identicateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 17.4.3 for ... do ... done . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
15.2.2 Aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 17.4.4 while ... do ... done . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.2.3 Dsignation de la valeur de la variable ($) . . . . . . . . . . . . . . 105 17.4.5 until ... do ... done . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.2.4 Dcomposition en mots des valeurs des variables de zsh . . . . . . . 106 17.4.6 Instructions lies aux boucles (continue, break) . . . . . . . . . . . 13
15.2.5 Supprimer une variable (unset) . . . . . . . . . . . . . . . . . . . . 106 17.4.7 Problmes avec les boucles rediriges et les pipes . . . . . . . . . . . 13
15.2.6 Variables spciales du shell . . . . . . . . . . . . . . . . . . . . . . . 106 17.5 Interception des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.2.7 Acher la valeur d'une variable (echo) . . . . . . . . . . . . . . . . 108 17.6 Commandes internes diverses . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.2.8 Entre de la valeur d'une variable au clavier (read) . . . . . . . . . 108 17.7 Rcursivit dans l'excution des shellscripts . . . . . . . . . . . . . . . . . 13
15.2.9 Porte d'une variable (export), environnement de travail . . . . . . 109 17.8 Calculs, traitement des cha nes de caractres . . . . . . . . . . . . . . . . . 13
15.2.10Visualisation des variables disponibles (set, printenv) . . . . . . . . 110 17.8.1 Commande expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.3 Personnalisation de l'environnement . . . . . . . . . . . . . . . . . . . . . . 110 17.8.2 Commande let . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
15.3.1 Options des shells (set, setopt) . . . . . . . . . . . . . . . . . . . . . 110 17.9 Traitement des cha nes de caractres . . . . . . . . . . . . . . . . . . . . . 13
15.3.2 Fichiers de personnalisation . . . . . . . . . . . . . . . . . . . . . . 110 17.10Aide pour traiter les options (getopts) . . . . . . . . . . . . . . . . . . . . 13
15.4 Stratgie pour la personnalisation de l'environnement . . . . . . . . . . . . 112 17.11Mise au point des shellscripts (set -xv) . . . . . . . . . . . . . . . . . . . . 13
16 Complments sur le shell 113
16.1 Listes de commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
16.2 Ordre de priorit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
16.3 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
16.4 Complments sur les redirections . . . . . . . . . . . . . . . . . . . . . . . 115
16.4.1 Redirection de l'entre standard sur chier inclus (<<) . . . . . . . 115
16.4.2 Redirection pour tout un shell (exec) . . . . . . . . . . . . . . . . . 116
16.4.3 Descripteurs de chier suprieurs 2 . . . . . . . . . . . . . . . . . 116
16.4.4 Redirection vers un chier dsign par son descripteur . . . . . . . . 117
16.4.5 Ordre d'valuation des redirections . . . . . . . . . . . . . . . . . . 117
16.4.6 Redirection sans commande avec zsh . . . . . . . . . . . . . . . . . 118
16.5 Complments sur les variables . . . . . . . . . . . . . . . . . . . . . . . . . 118
16.5.1 Valeurs par dfaut pour les variables . . . . . . . . . . . . . . . . . 118
16.5.2 Modier l'environnement d'une commande . . . . . . . . . . . . . . 119
16.5.3 Facilits de ksh et zsh pour le traitement des valeurs de variables . 119
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
Premire partie
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
Connaissances de base
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 lmen-
taires 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 lectro-
nique l'adresse grin@unice.fr, en prcisant le sujet Poly Unix et programmation du
shell et la date de la version du polycopi.
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.
4 CHAPITRE 1. GNRALITS SUR UNIX 1.5. STRUCTURE D'UNIX
1979 Unix Version 7. Commercialisation d'une licence binaire (moins onreuse que la SHELLSCRIPTS APPLICATIONS
licence pour le code source).
1984 Unix Systme V SHELL
MATERIEL
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 format dtaill (voir 4.2)
-a liste aussi les noms de chiers qui commencent par un . (qui ne sont pas no
malement lists)
-A comme l'option -a mais les rpertoires . et .. ne sont pas achs
-d si l'argument est un rpertoire, liste seulement son nom (et pas les chiers qu
sont sous ce rpertoire)
-t trie par date de dernire modication (sinon la liste des chiers est trie pa
dfaut par ordre alphabtique), les plus rcemment modis en premier
-i ache au dbut de la ligne le numro de i-node des chiers
-R listage rcursif des sous-rpertoires
-g 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 4.2. INFORMATION DTAILLE SUR LES FICHIERS (LS -L) 2
$ ls -l / nom du taille du nom du
total 20954 autorisations propriétaire fichier fichier
lrwxrwxrwx 1 root system 7 Apr 26 1995 bin -> usr/bin
drwxr-xr-x 6 root system 6144 Jan 18 07:02 dev drwxr-xr-x 15 root system 4608 Jan 19 07:02 etc
drwxr-xr-x 15 root system 4608 Jan 18 07:02 etc
lrwxrwxrwx 1 root system 7 Apr 26 1995 lib -> usr/lib type du nombre nom du date de dernière
drwxr-xr-x 2 root system 512 Feb 3 1995 mnt
fichier de liens groupe modification
drwxr-xr-x 4 root system 512 Sep 19 10:52 net
drwxr-xr-x 10 root system 2560 Jun 23 1995 sbin Fig. 4.2 ) Format de sortie d'une ligne de la commande ls -lg
drwxr-xr-x 25 root system 512 Dec 7 10:15 students
drwxrwxrwt 3 root system 5120 Jan 18 08:45 tmp
drwxr-xr-x 4 root system 512 Jan 13 1995 users
Remarques 4.1
drwxr-xr-x 22 root system 512 Dec 19 13:07 usr
(a) Les versions Unix OSF et Systme V de ls achent le nom du groupe du chie
drwxr-xr-x 20 root system 512 Apr 26 1995 var
avec l'option -l. En Unix BSD, le groupe s'ache avec l'option -g. Si on veu
-rwxr-xr-x 1 root bin 9246472 Jun 23 1995 vmunix
rcuprer une information dans une des colonnes il est donc prfrable d'associe
........
toujours l'option -g l'option -l.
Fig. 4.1 ) Format de sortie de la commande ls -lg (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).
-L si un chier est un lien symbolique, cette option indique que l'on veut des ren-
seignements sur le chier point par le lien et pas sur le chier lui-mme (voir 4.2.2 Types de chiers
commande ln en 9.3)
Le type du chier est ach l'aide du premier caractre de la ligne de description d
Exemples 4.1 chier :
(a) ls -l bin /usr/bin chier ordinaire
d rpertoire (directory)
(b) ls -ld a* b chier spcial de type bloc (essentiellement les disques)
ache les informations sur les chiers du rpertoires courant (dont le nom commence c chier spcial de type caractre (disque, streamer, terminal, etc.)
pas par un a). L'option -d est indispensable pour ne pas entrer dans les sous- l lien symbolique
rpertoires s'il y en a dont le nom commence par a. s socket
(c) ls -t f* | head -1 Pour les liens symboliques, le nom du chier point est donn la suite des autre
ache le nom du chier le plus rcemment modi parmi tous les chiers du rpertoire renseignements sur le chier :
courant, dont le nom commence par un f. 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
4.2 Information dtaille sur les chiers (ls -l) anglais) et le mineur dsigne le priphrique particulier gr par ce pilote :
crw-rw-rw- 1 root 39,6 Feb 25 20:09 tty01
4.2.1 Format d'achage
Un exemple de format d'achage de la commande ls -l applique un rpertoire est 4.2.3 Mode d'acc
s au chier
donn la gure 4.1. Une premire ligne donne le nombre de blocs de 1024 octets qu'oc-
cupent l'ensemble des chiers lists par la commande. Le format d'une ligne est dtaill Les autorisations (on dit aussi le mode d'accs au chier) du chier sont indique
dans la gure 4.2. 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
30 CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS 4.5. CARACTRES SPCIAUX POUR LE SHELL 3
chier et les trois derniers sont les autorisations des autres (qui ne sont pas le propritaire ? dsigne un caractre quelconque,
et qui n'appartiennent pas au groupe). c1 -c2] ou c1 c2...]
dsigne un caractre spci par l'intrieur des crochets. Par exemple, a-z
4.2.4 Nombre de liens dsigne une lettre minuscule et AEIOUY] dsigne une voyelle majuscule.
On peut aussi dsigner un caractre quelconque qui n'est pas parmi les caractre
Pour les chiers ordinaires il s'agit du nombre de chiers ayant le mme numro de spcis entre les crochet en faisant suivre le crochet ouvrant du caractre ^
i-node. Par exemple, sous zsh, ^0-9] dsigne un caractre qui n'est pas un chir
Pour les rpertoires, il indique le nombre de sous-rpertoires du rpertoire (augment Attention, sous sh et ksh, il faut crire !0-9] 1 .
de 2, car . et .. sont compts). n supprime la signication spciale du caractre suivant.
Exemple 4.3
4.3 Se dplacer dans l'arborescence (cd) Si l'utilisateur tape la commande
ls -l bin/A0-9]*
cd rpertoire] la commande suivante sera lance aprs l'interprtation du shell :
dplace le processus dans rpertoire (rpertoire HOME par dfaut).
ls -l bin/A1abc bin/A2xy
Exemple 4.2 si les 2 chiers A1abc et A2xy sont les deux seuls chiers du rpertoire bin qu
cd /users/students/jean commencent par un A suivi d'un chire.
Une facilit oerte par zsh est bien utile quand on a besoin de travailler entre deux Remarque 4.2
rpertoires : Attention, * ne peut dsigner une cha ne de caractres qui comprend un / o
cd - une cha ne de caractres qui commence par un . si ce . est plac en tte ou just
permet de se dplacer dans le rpertoire o- l'on tait avant le dernier dplacement. derrire un /. Ces deux exceptions sont aussi valables pour les caractres spciau
? et ].
4.4 Acher le rpertoire courant (pwd) 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
pwd
courant qui se terminent par la lettre c (y compris ceux qui commencent par un .
Il est souvent plus prudent de taper cette commande avant d'eectuer une commande il faut taper
dangereuse (suppression de chiers par exemple) pour savoir o- l'on est plac dans l'arbo- ls -d .*c *c
rescence. 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
4.5 Caractres spciaux pour le shell 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.1 Gnration des noms de chiers (*,?, ) 4.5.2 Le caract
re spcial
Les caractres * ? ] sont interprts par le shell quand ils gurent dans une com-
mande. Cette interprtation s'appelle la gnration des noms de chiers. Le shell interprte Pour ksh et zsh (mais pas pour sh ), le caractre ~ (seul ou plac en tte de mot)
chaque mot qui les contient comme un modle de noms de chiers : il remplace le mot par une signication particulire :
une liste alphabtique des noms des chiers qui correspondent ce modle. dsigne le rpertoire HOME de l'utilisateur,
Si aucun chier ne correspond au modle, le modle est laiss tel quel par sh et ksh. Pour utilisateur
zsh, c'est le cas si l'option NO_NOMATCH est positionne (voir 14.1.2), sinon, zsh interrompt dsigne le rpertoire HOME de l'utilisateur indiqu.
l'interprtation de la commande et ne lance pas son excution. 1. Il faut se souvenir (voir 14.11.1) que, sous zsh et sans indication particuli re, un shellscript est ex
cu
* dsigne zro, un ou plusieurs caractres, par sh et il faut donc utiliser cette syntaxe dans les shellscripts
32 CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS 4.7. RECHERCHER DES FICHIERS DANS L'ARBORESCENCE (FIND, LOCATE)3
Exemples 4.4 reconnait les caractres *, ?, ] (attention, la ngation des caractres entre crochets es
(a) cp ~/fich ~/bin donne par un ! et pas par un ^). Un . n'est reconnu en dbut de nom que s'il est donn
(b) ls -l ~toto/bin/fich
explicitement.
Exemple 4.5
4.5.3 Le caract
re spcial # find /usr -name "info*" -print
Dans les shellscripts, le shell considre que tout mot qui commence par un # est le recherche tous les chiers situs sous /usr dont le nom commence par info. On do
dbut d'un commentaire qui va jusqu' la n de la ligne. Si un mot commence par un # entourer info* avec des guillemets pour viter le remplacement (par le shell) de * pa
et n'introduit pas un commentaire, il faut donc le faire prcder de n. Un # l'intrieur des noms de chiers (voir 14.8).
d'un mot n'est pas considr comme un caractre spcial. La commande nd a de nombreuses autres options qui permettent de rechercher le
Remarques 4.3 chiers qui vrient certains critres. En voici quelques unes :
(a) En mode interactif (c'est--dire lorsque la commande est tape directement au clavier -size n taille en nombre de blocs de 512 octets
par l'utilisateur), zsh (mais pas ksh ) ne considre pas # comme un caractre spcial. -mtime n nombre de jours depuis la dernire modication
-atime n nombre de jours depuis le dernier accs
(b) Voir le cas particulier d'un chier excutable dont la premire ligne commence par Dans les options ci-dessus, n peut tre remplac par +n (nombre suprieur n) ou pa
#! en 14.11.1. -n (nombre infrieur n).
-user nom propritaire
4.5.4 Autres caract
res spciaux -type t type du chier (un f pour un chier ordinaire et les autres abrviation
comme dans la commande ls -l * voir 4.2)
Sous zsh, ! et la tabulation sont des caractres particuliers. -perm nb_octal
! est li l'historique des commandes. Si on veut l'utiliser dans un autre sens, il faut le est vrai si le chier a les autorisations nb_octal
faire prcder de \. Ce caractre tant li l'historique des commandes n'a d'utilit qu'en -perm -nb_octal
interactif. zsh ne le considre donc pas comme un caractre spcial dans un shellscript. est vrai si le chier a au moins les autorisations nb_octal
La tabulation permet la compltion de commande. Si on veut insrer une tabulation Les deux options -exec et -ok permettent d'excuter une commande sur les chier
dans une commande, on la fait prcder de Ctrl V. 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
4.6 Acher le type d'un chier (le) 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.
file fichiers... -exec commande n
tente de deviner le type de chier (rpertoire, excutable binaire, shellscript, ASCII, lan- -ok commande n
gage, etc.). 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
4.7 Rechercher des chiers dans l'arborescence (nd, lo- sition des options.
Les options sont examines (et excutes pour -print, -exec et -ok) tant que la cond
cate) 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.
find rpertoires... -name modle-nom -print
ache les noms des chiers dont les noms correspondent modle-nom et situs dans Exemples 4.6
l'arborescence des rpertoires. (a) find ~ -mtime -10 -print
modle-nom peut comporter des caractres spciaux semblables aux caractres spciaux ache les noms des chiers de l'arborescence du rpertoire HOME de l'utilisateu
utiliss dans la gnration des noms de chiers par le shell (voir 4.5). Plus exactement, nd qui ont t modis dans les dix derniers jours.
34 CHAPITRE 4. COMMANDES LIES L'ARBORESCENCE DES FICHIERS 3
(b) 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.
(c) find ~toto ! -user toto -exec ls -ld {} \#
ache des renseignements dtaills sur les chiers qui n'appartiennent pas toto
dans son rpertoire HOME. Chapitre 5
(d) 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. Protection des
chiers
(e) 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'inter-
5.1 Changement des autorisations (chmod)
rompent par suite d'une erreur. Ils peuvent servir aux experts pour trouver la cause chmod -R] mode-accs fichiers...
de l'erreur. donne des autorisations aux chiers. Seuls le propritaire du chier et le super utilisateu
(f) find . \( -name "*.java" -o -name "*.html" \) -exec more {} \#
peuvent utiliser chmod.
ache page page tous les chiers "*.java" et "*.html" de l'arborescence du rper- mode-accs indique quelles sont les autorisations que l'on donne * on peut donner ce
toire courant. autorisations sous forme absolue ou symbolique.
L'option -R (rcursif) indique que, si un des chiers est un rpertoire, chmod do
locate modle-de-nom... changer les autorisations de toute l'arborescence du rpertoire.
recherche les chiers dont le nom correspond modle-de-nom. Mode d'accs absolu
Si modle-de-nom contient des jokers (*,? ou ]), locate donne tous les chiers dont Les autorisations sont donnes par mode-accs sous forme d'un nombre octal compos
le nom contient modle-de-nom. Sinon elle donne les chiers dont le nom correspond au de 3 chires.
modle.
Cette commande GNU n'est pas toujours installe sur les systmes Unix. Si l'admi- Le premier chire correspond aux autorisations que l'on donne au propritaire de
nistrateur l'a installe, elle permet de grer une base de donnes des chiers disponibles. chiers, le deuxime correspond au groupe des chiers et le troisime correspond tous le
Dans ce cas, cette commande est normment plus rapide que la commande nd et charge autres utilisateurs.
beaucoup moins le systme. 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)
36 CHAPITRE 5. PROTECTION DES FICHIERS 3
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 Chapitre 6
5.2 Masque pour les autorisations (umask) Commandes d'observation du systme
umask nnn]
donne la valeur octale nnn (cf. mode absolu de chmod en 5.1) au masque qui sera uti-
lis pour limiter les autorisations que recevront les nouveaux chiers au moment de leur
cration. 6.1 Date et Heure (date)
Exemple 5.2 date
umask 026 ache la date et l'heure. Des formats d'achage sont disponibles en option.
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). 6.2 Nom de l'ordinateur (hostname)
umask
hostname
(seul) ache le masque en cours. Celui-ci est en gnral 022 si l'utilisateur n'a pas lanc de ache le nom de l'ordinateur sur lequel la commande s'excute (taloa.unice.fr, par exemp
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 autori-
sations rwxr-xr-x. 6.3 Nom du systme d'exploitation (uname)
uname -a
ache des informations sur le systme d'exploitation.
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.
Exemples 7.2 programme ce qui est indiqu dans le chier fichier-cron. Voici un exemple de conten
(a) kill 128 d'un tel chier (voir le manuel en ligne pour plus d'explications) :
# Lance 'dumptout -f' tous les jours (sauf le lundi) ' 2h du matin
(b) kill -9 128
# (0 minutes), tous les jours du mois, tous les mois,
# le dimanche (0) et du mardi au vendredi (2-6)
(c) kill %2 0 2 * * 0,2-6 /usr/adm/dumptout -f
tue le processus lanc en arrire-plan qui a le numro 2 pour le shell dans lequel la crontab -l
commande kill a t tape. ache les commandes programmes.
crontab -e
(d) kill -9 -1 permet de modier les commandes programmes.
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. 7.4 Gestion du plan d'un processus par le shell
Les super-utilisateurs peuvent tuer tous les processus. L'utilisateur normal ne peut tuer La plupart des shells (mais pas sh ) permettent de grer le plan o- se droule les pro
que ses propres processus. cessus (en arrire-plan ou non). Cette gestion est tudie en 14.5.1.
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.
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
cre
nouveaufichier avec deux lignes de texte.
10.4 Copier l'arborescence d'un rpertoire (cp -r) 10.6 Pliage de rpertoires en une seul chier (tar, cpio
cp -r rpertoire1 rpertoire2
copie toute l'arborescence de rpertoire1 sous rpertoire2. La commande tar peut plier un rpertoire en un seul chier. Tous les chiers d
L'endroit o- seront copis les chiers dpend de l'existence du rpertoire rpertoire2. rpertoire sont alors runis en ce chier. Le transfert des chiers sur le rseau et leu
Si celui-ci n'existe pas, il sera cr et il correspondra rpertoire1. Sinon, les nouveaux archivage en est facilit, surtout si on compacte le chier rsultat.
chiers se retrouveront sous le rpertoire situ dans le rpertoire rpertoire2 et de mme Cette commande possde de nombreuses options. On ne donne ici que les options prin
nom terminal que le nom terminal de rpertoire1. cipales sur des exemples simples.
tar cvf fichier.tar rep
Exemples 10.2
(a) cp -r ~toto/rep . cre le chier fichier.tar qui contiendra tous les chiers des chiers indiqus. Si u
cre (s'il n'existe pas dj) un rpertoire rep sous le rpertoire courant et copie les chier indiqu est un rpertoire (comme ici rep), toute l'arborescence du rpertoire es
chiers de l'utilisateur toto sous ce rpertoire 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
(b) cp -r ~toto/rep/. . rcuprer les chiers (par tar x) un autre endroit.
copie les chiers de rep directement sous le rpertoire courant tar tvf fichier.tar
Remarque 10.1 liste les noms des chiers plis dans le chier fichier.tar.
tar xvf fichier.tar
La commande suivante copie les chiers placs directement sous un rpertoire rep1 rcupre tous les chiers plis dans fichier.tar.
dans un rpertoire rep2. tar xvf fichier.tar f1 f2
cp rep1/* rep1/.* rep2 rcupre tous les chiers plis dans chier.tar qui ont pour nom f1 ou f2.
Les sous-rpertoires ne seront pas copis et engendreront des messages d'erreurs. La commande cpio permet aussi l'archivage de chiers. Elle ne sera pas tudie ici.
diteur de texte (emacs, xemacs) 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
Pour crire des textes (programmes ou donnes) sous Unix, il faut disposer d'un pro- langage si vous tes intresss.
gramme qui permette d'entrer du texte et de le modier sans tre oblig de tout retaper. Le chier .emacs du rpertoire HOME de l'utilisateur est excut automatiquement a
Les programmes qui font ce genre de travail s'appellent des diteurs de textes. Ils possdent dmarrage d'emacs. Si on ne veut pas qu'il s'excute (par exemple si ce chier contient de
de nombreuses commandes qui facilitent la t&che de l'utilisateur : recherche de cha nes de erreurs), on lance emacs avec l'option -q.
caractres dans un texte, remplacement automatique de cha nes par une autre, copie, sup-
pression 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
12.1.2 Sortir de emacs
et moins souple. Sous X Window, le menu File permet de sortir de emacs.
Une caractristique essentielle de emacs est qu'il est possible (et pas trop complexe) de C-x C-c permet de sauvegarder (aprs demande de conrmation) les buers avant d
personnaliser son fonctionnement en aectant des valeurs des variables d'environnement sortir.
ou mme en programmant des nouvelles fonctionnalits.
Nous ne donnerons ici que les commandes essentielles de emacs, susantes pour com-
mencer 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 nom-
12.2 Concepts de base
breuses facilits pour travailler avec des langues non europennes et pour congurer plus 12.2.1 Description d'une fentre emacs
simplement emacs.
xemacs est une version d'emacs plus graphique mais moins standard. Il possde beau- Une fentre ache par emacs est compose de :
coup 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 ) une barre de menus (seulement pour les versions sous graphiques en haut de la fentr
l'universit de Nice.
) la fentre de travail proprement dite o- s'ache le buer courant, sous la barre d
12.1 Entre et sortie menus,
) la ligne d'information, situe sous la fentre de travail,
12.1.1 Lancer emacs
emacs -q] fichier] & ) le mini-buer se trouve en bas de la fentre * il contient en gnral une seule lign
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 Dans la version X Window, un ascenseur borde la droite de la fentre de travail.
64 CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS) 12.2. CONCEPTS DE BASE 6
Menus de la version graphique (X Window) 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 Commandes emacs
File permet de charger, sauvegarder un chier, ouvrir une nouvelle fentre, imprimer Toutes les actions sous emacs sont excutes par des commandes dont le nom rappel
ou supprimer un buer, sortir de emacs le type de l'action excute :
Edit permet de copier, couper, coller, dfaire l'eet d'une commande, remplir avec le next-line
plus de mots possible les lignes d'une rgion (Fill) load-file
Help permet d'obtenir de l'aide sur emacs ou une commande Unix kill-word
De nombreux modes de travail (voir 12.2.5) modient ces menus ou ajoutent de nou- goto-line
velles entres. save-buffers-kill-emacs
L'utilisateur peut lancer ces commandes par leur nom en les prxant avec M-x. Pa
Ligne d'information sur le mode de travail exemple,
M-x kill-word
La dernire ligne en bas de l'cran contient quelques indications utiles l'utilisateur :
--**-Emacs : nom-buffer (mode majeur mineur)--L106--position--------
Les ** indiquent que le buer a t modi (on peut aussi avoir %% qui indique que
le buer est readonly). Associations de cls
mode majeur et mode mineur sont les modes de travail (voir 12.2.5).
L106 dsigne le numro de la ligne courante. Les actions les plus couramment employes sont associes des cls (combinaisons d
position peut tre All, Bot, Top ou nn% suivant que tout le texte est ach ou touches du clavier). Il sut de taper la cl pour lancer la commande associe. Voici deu
seulement la n ou le dbut, ou si nn% du texte est au dessus de la premire ligne ache. exemples :
Commande Cl
Mini-bu%er next-line C-n
save-buffers-kill-emacs C-x C-c
Les commandes tapes par l'utilisateur et les messages envoys par emacs sont achs
sous la ligne d'information dans une zone appele minibuer. Les autres commandes comme goto-line doivent tre lances avec M-x.
On peut annuler une commande en cours et ache dans ce minibuer en tapant C-g. Les associations ( bindings) peuvent tre modies (voir 12.4) et peuvent dpendre d
mode de travail (voir 12.2.5).
12.2.2 Commandes et associations de cls Complter automatiquement des noms de commandes
Touches spciales Certaines commandes ont des noms assez longs (par exemple goto-line). Il exist
emacs fait un grand usage de deux touches spciales notes C- et M- dans le manuel des facilits pour ne pas tre oblig de taper les noms en entier : on tape Tab] (touch
d'utilisation. de tabulation) ds que le nom de la commande peut se distinguer des autres noms d
C- dsigne la touche Ctrl]. Taper C-x revient appuyer sur la touche Ctrl], et commandes * si on tape ESP] (barre d'espace), emacs complte un mot ds que ce mot s
appuyer sur la touche x tout en gardant la touche Ctrl] enfonce. Le maintien sur la distingue des autres mots cls. Pour l'exemple de goto-line, il sut de taper g suivi d
touche Ctrl] est indiqu par le - qui suit le C. M- dsigne la touche Meta On l'utilise ESP] pour avoir goto- et l suivi de TAB]. Pour entrer une tabulation ou un espace,
de la mme manire que la touche Ctrl]. sut de les faire prcder de C-q.
Pour les claviers qui n'ont pas de touche Meta], la touche Alt] (ou la touche marque Si emacs ne peut complter parce qu'il y a plusieurs possibilits de compltions, il ach
d'un } sur les claviers des machines Sun) joue souvent le mme rle. Sinon, on peut une fentre d'aide o- sont aches toutes les suites possibles. On peut alors parcourir cett
simuler M-x en tapant sur la touche Esc] avant de taper sur la touche x. Les commandes fentre par C-M-v. On peut choisir une des commandes en cliquant sur son nom avec
66 CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS) 12.2. CONCEPTS DE BASE 6
bouton du milieu de la souris. Cette fentre se referme automatiquement quand on lance 12.2.4 Point d'insertion, marque, rgions
la commande complte.
De mme, les noms de chiers taps dans le mini-buer (par exemple pour donner Point d'insertion
le nom d'un chier charger dans un buer) peuvent tre complts par emacs quand Le point d'insertion indique l'endroit o- les modications apportes au texte par l'ut
l'utilisateur tape la touche Tab] ou la barre d'espace. 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.
12.2.3 Buers et fentres Chaque tampon a un point d'insertion.
Tampon (ou bu%er)
Rgion
Chaque texte dit est conserv en mmoire centrale dans un buer. Plus gnrale-
ment, toute activit de emacs (aide en ligne, courrier lectronique, etc.) est eectue dans La rgion est la zone de texte comprise entre le point d'insertion et la marque.
un buer. La marque peut tre positionne dans le texte en tapant C-<barre d'espace>ou impl
On peut travailler avec plusieurs buers en mme temps. Chaque buer a un nom. Le citement par des manipulations de la souris.
nom d'un buer associ un chier est le nom terminal du chier. Si on travaille avec C-x h met tout le texte du document comme rgion
plusieurs chiers qui ont le mme nom terminal, un numro est accol la n du nom du M-h met tout le paragraphe comme rgion
buer.
Sous X Window, le menu Buers permet de choisir un buer. Utilisation de la rgion et de l'anneau de suppression
Plusieurs commandes permettent de manipuler une rgion (une zone de texte) et d
Fen&tre emacs l'enregistrer dans un anneau de suppression.
emacs conserve dans un anneau de suppression (commun toutes les fentres) le
emacs ouvre une premire fentre au dmarrage. textes supprims par les commandes qui suppriment plus d'un seul caractre (C-k, C-
Par la suite l'utilisateur peut diviser cette fentre en plusieurs sous-fentres. Une fentre mais pas C-d, DEL] ou Backspace]). La commande M-w permet aussi d'ajouter des texte
emacs visualise une portion de buer et permet de travailler avec les donnes aches. cet anneau sans les supprimer :
Deux fentres peuvent visualiser des portions direntes d'un mme buer ou visualiser C-w supprime la rgion (attention au w trompeur !) et la place dans l'anneau de sup
des buers dirents. pression
Le menu File permet de grer les fentres : Split Window pour dcouper la fentre M-w enregistre la rgion dans l'anneau de suppression
en cours en deux, ou One Window pour fermer toutes les fentres sauf une (pour cela, L'utilisateur peut ensuite rutiliser les textes ainsi conservs :
on peut aussi, dans les versions graphiques cliquer avec le bouton du milieu de la souris C-y colle le dernier texte plac dans l'anneau de suppression l'endroit du poin
sur la ligne d'information de la fentre choisie). d'insertion
On peut accder une fentre en cliquant avec le bouton gauche dans la fentre. 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.
Fen&tre X ('frame( dans le manuel en anglais) Dans un environnement X Window, on peut utiliser le menu Edit pour supprime
copier ou coller une rgion. On peut aussi utiliser la souris :
Sous X Window, l'utilisateur peut ouvrir une nouvelle fentre X pour y acher le buer Double-clic sur le bouton gauche
courant. Il peut ensuite y charger un autre buer ou y visualiser une autre partie du buer enregistre le mot point par la souris dans l'anneau de suppression
courant comme il le ferait pour une fentre emacs. Triple-clic sur le bouton gauche
Chaque fentre X possde son propre menu. enregistre la ligne pointe dans l'anneau de suppression
Pour ouvrir une nouvelle fentre X, le plus simple est d'utiliser le menu File, choix Bouton du milieu
Make New Frame. La fentre peut tre ferme par le mme menu, choix Delete Frame. colle l'endroit du clic un texte prcdemment copi ou coup (idem C-y)
68 CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS) 12.3. COMMANDES 6
Bouton droit C-k eace la n de la ligne (situe aprs le point) et la place dans l'anneau de sup
copie le texte plac entre le point et l'endroit du clic pour tre coll ensuite (idem M-w). pression
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 Dplacer le point d'insertion
bouton gauche, du dbut la n d'un texte, permet de dnir une rgion et de l'enregistrer
dans l'anneau de suppression. 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
12.2.5 Mode de travail dplacer d'un cran.
Emacs permet de travailler en plusieurs modes de travail adapts au type de texte que On peut aussi utiliser les commandes ci-dessous :
l'on tape et au type de travail auquel ce buer est associ. Il existe par exemple un mode C-a va au dbut de la ligne
de travail pour crire un programme en langage C et des modes pour envoyer et recevoir C-e va la n de la ligne
du courrier lectronique depuis emacs. M-< va au dbut du chier
Chaque fentre emacs a un mode de travail majeur en cours. M-> va la n du chier
On peut aussi lancer des modes mineurs qui modient lgrement le fonctionnement Dans un environnement X Window,
des modes majeurs. Bouton gauche
Nous n'tudierons pas ces modes dans ce cours. Voici seulement une description rapide dplace le point l'endroit du clic
du mode dired qui peut tre trs utile. On peut aussi utiliser la barre de dlement pour se dplacer.
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 Barre de dlement ou 'ascenseur( (Scroll Bar)
dired-mode. Toutes les fentres X Window associes emacs possdent une barre de dlemen
Ce mode est trs pratique pour se dplacer dans l'arborescence : on clique avec le bouton verticale droite de la fentre. Cette barre reprsente tout le texte. Un rectangle intern
du milieu sur le nom du rpertoire o- l'on veut aller ou sur le chier que l'on veut charger plus ou moins long, reprsente la portion du texte actuellement ache.
dans un buer. Dans ce cas, l'achage se fait dans une deuxime fentre. Si on tape f On utilise la souris pour se dplacer dans le texte l'aide de cette barre. Les utilisateur
sur la ligne qui contient le curseur, l'achage se fait dans la mme fentre. de Windows sur PC ou du Macintosh remarqueront que la manipulation de la barre d
On peut aussi copier et supprimer des chiers. On se reportera l'aide en ligne d'emacs dlement est dirente sous emacs. Cette manipulation est identique la manipulatio
et aux menus oerts par ce mode pour en savoir plus. des ascenseurs sous le client X Window xterm (voir cours sur X Window).
Bouton gauche
12.3 Commandes 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
12.3.1 Commandes de base texte.
Bouton du milieu
Insertion dplace l'endroit du clic le rectangle interne la barre de dlement. Le texte ach es
Par dfaut emacs est en mode insertion : tout caractre non spcial (achable) tap est le texte correspondant la position nouvelle du rectangle interne. Si on veut se dplace
insr l'endroit du point. vers la n du chier, on clique donc sous le rectangle interne.
C-q permet d'insrer un caractre non achable tap la suite On peut aussi cliquer sur le rectangle interne de l'ascenseur avec ce bouton et glisser pou
se dplacer contin.ment dans le texte.
Suppression Bouton droit
dplace l'endroit du clic la ligne place en haut de la fentre. Le texte est donc dplac
Backspace supprime le caractre avant le point vers le dbut du chier d'au plus un cran. Plus on clique bas, plus on remonte dans
C-d supprime le caractre situ aprs le point (donc plac sous le curseur) texte.
70 CHAPITRE 12. DITEUR DE TEXTE (EMACS, XEMACS) 12.4. PERSONNALISATION DE EMACS 7
Sauvegarder un chier 12.3.2 Autres commandes
Les chiers chargs dans un buer ne sont modis que lorsque l'utilisateur indique Rechercher du texte
explicitement qu'il veut sauvegarder les modications qu'il a eectues sur le buer. C-s eectue une recherche incrmentale (les caractres sont recherchs au fur et
C-x C-s sauvegarde le buer courant mesure qu'ils sont taps) du texte tap vers la n du buer. Pour passer l'occu
Sous X Window le menu File permet aussi de sauvegarder les chiers sous son nom rence suivante, on retape C-s. Pour arrter la recherche, on tape la touche Retur
actuel (Save Buer ) ou sous un autre nom (Save Buer As...). ou une commande de dplacement. On peut ensuite relancer la mme recherch
en tapant C-s C-s.
C-r eectue une recherche incrmentale vers le dbut du chier. Pour passer l'oc
Remarque 12.1 curence suivante, on retape C-r.
L'ancienne version du chier (s'il ne s'agit pas d'un nouveau texte) est conserve sous C-M-s eectue la recherche d'une expression rgulire (voir chapitre 11).
l'ancien nom suivi du caractre ~.
emacs eectue des sauvegardes automatiques intervalles rguliers. Ces sauvegardes Remplacer une cha)ne de caractres par une autre
sont eectues dans des chiers dont le nom est le nom du chier modi entour du M-% La question Query replace s'ache. On doit alors entrer la cha ne de caractre
caractre #. Ces sauvegardes sont supprimes en cas de n d'dition normale. S'il y a eu remplacer suivie de Return]. Il s'ache alors with et l'on entre la cha ne d
une sortie anormale d'emacs et si vous n'avez pu sauvegarder vos chiers, ces sauvegardes remplacement suivie de Return].
automatiques vous permettent de rcuprer les bonnes versions de vos chiers. De plus, A chaque fois que la cha ne remplacer est rencontre, l'utilisateur peut ta
si vous voulez charger un des chiers qui n'a pu tre sauvegard normalement et si emacs per :
s'aper'oit qu'il y a un chier # plus rcent que le chier que vous voulez charger, emacs y ou n pour remplacer ou non,
vous envoie le message Auto save le is newer* consider M-x recover-le. Vous pouvez q pour arrter de remplacer,
alors taper M-x recover-le et rcuprer automatiquement la version enregistre dans la ! pour tout remplacer jusqu' la n,
sauvegarde automatique. C-h pour avoir de l'aide sur la rponse
Exemples 13.1 (b) Compter les lignes, mots et caractres de tous les chiers du rpertoire courant don
(a) Tri de /etc/passwd sur le numro de l'utilisateur : le nom commence par b :
sort -t: +2n -3 /etc/passwd wc b*
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 :
13.4 Conversion, suppression de caractres (tr)
ls -lgA | sort +4n -5 +8 La commande tr permet de convertir ou de supprimer des caractres provenant d
l'entre standard.
Conversion de caractres
13.2 Recherche d'une chane de caractres (grep) tr -cs] chane1 chane2
transforme les caractres provenant de l'entre standard ainsi : les caractres contenus dan
grep options] expr-reg fichiers...] chane1 sont transforms en les caractres correspondants de chane2 et les autres caractre
ache sur l'cran les lignes des chiers, qui contiennent une cha ne de caractres corres- sont conservs tels quels. Le tout est envoy vers la sortie standard.
pondant l'expression rgulire expr-reg (voir chapitre 11. L'entre standard est prise par Si chane2 contient moins de caractres que chane1, le dernier caractre de chane
dfaut si des chiers ne sont pas spcis. Le code retour renvoy est 0 si l'expression remplace les caractres manquants.
rgulire a t trouve ou 1 sinon. On peut dsigner un caractre par son code ASCII en octal prcd par n. On peu
Si expr-reg comporte des caractres spciaux pour le shell (* ou par exemple), il ne dsigner un intervalle de caractres : e-l dsigne les lettres minuscules comprises entre
faut pas oublier de les protger en les entourant d'apostrophes ou de guillemets (voir 14.8). et l (bornes comprises). En Unix systme V, la syntaxe est plutt e-l].
Options
-c ache seulement le nombre de lignes contenant la cha ne Exemples 13.4
-i ignore la dirence entre minuscules et majuscules ( > est le prompt dans les exemples suivants)
-n ache les numros des lignes
-v ache les lignes qui ne contiennent pas la cha ne ~> tr aeiou AEIOU
bonjour
Exemple 13.2 Ctrl] D
grep -c '^bin' fichier
ache le nombre de lignes de chier qui commencent par bin. bOnjOUr
(b)
(a) ~> tr "a-z" "A-Z"
13.3 Compter les caractres, les mots, les lignes (wc) abcd
Ctrl] D
wc options...] fichiers...] ABCD
76 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 13.5. FRACTIONNEMENT VERTICAL (CUT) 7
(c) cat toto | tr ae AE > totobis (c) -5,8
ou dsigne les caractres situs en position 1 5 et 8
tr ae AE > totobis < toto
(d) 3-
Options dsigne les caractres situs en position 3 la n de la ligne
-c 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. (e) 12-20,4-15
-s (squeeze) ne garde en sortie qu'un seul exemplaire d'une suite d'un mme carac- dsigne les caractres situs en position 4 20
tre de chane2. Les caractres seront toujours achs dans l'ordre qu'ils ont sur la ligne du chier, qu
Exemple 13.5 que soit l'ordre donn dans la liste (voir exemple b ci-dessous).
tr -cs a-zA-Z '\012'
ache l'entre au clavier, un mot (cha ne compose uniquement de lettres) par ligne Exemples 13.8
(\012 est le caractre passage la ligne de code 10 en dcimal, 012 en octal). (a) cut -c-5,10-15 fichier1 fichier2
extrait les 5 premiers caractres et les caractres 10 15 de chaque ligne de fichier
Suppression de caractres et de fichier2 et les ache sur l'cran
tr -d chane
envoie vers la sortie standard les caractres re'us dans l'entre standard s'ils ne sont pas (b) cut -c10-12,4-11 fichier
inclus dans cha ne. tr supprime au passage tous les caractres inclus dans cha ne. extrait les caractres 4 12 de chaque ligne. On remarquera que les caractres 10 e
11 ne sont achs qu'une seule fois.
Exemple 13.6 cut -fliste -ddlimiteur] -s] fichiers...]
~> tr -d ac
abcad dans ce cas le dcoupage se fait sur des champs (comme l'indique l'option -f) dlimite
Ctrl] D
par dlimiteur (option -d * tabulation par dfaut).
bd 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).
13.5 Fractionnement vertical (cut) Les lignes sans dlimiteur sont conserves en entier. L'option -s indique qu'il ne fau
pas conserver les lignes sans dlimiteur.
cut -cliste fichiers...] liste est une liste de nombres entiers spars par des virgules avec ventuellement de
dcoupe un ou plusieurs chiers (entre standard par dfaut) verticalement en slection- tirets pour indiquer un intervalle. Le dcoupage se fait sur les numros de champs (
nant des intervalles de caractres (comme l'indique l'option -c) conserver dans chaque premier champ a le numro 1). Cette liste indique quels seront les champs qui seron
ligne. Le rsultat est envoy sur la sortie standard. conservs sur chaque ligne.
liste est une liste de nombres entiers spars par des virgules avec ventuellement des Les caractres seront toujours achs dans l'ordre qu'ils ont sur la ligne du chier, qu
tirets pour indiquer un intervalle. Le dcoupage se fait sur les numros de caractres (le que soit l'ordre donn dans la liste.
premier caractre a le numro 1). Cette liste indique quels seront les caractres qui seront Exemples 13.9
conservs sur chaque ligne. (a) cut -f1,5 -d: /etc/passwd
Exemples 13.7 ache les utilisateurs et le commentaire associ du chier /etc/passwd
(a) 1,3,8 (b) Compter combien il y a de clients distincts dans un chier de factures dont chaqu
dsigne les caractres situs en position 1, 3 et 8 ligne correspond un client plac en tte de ligne (tabulation entre chaque zone d'un
(b) 2-5,10
ligne) :
dsigne les caractres situs en position 2 5 et 10 cut -f1 factures | sort -u | wc -l
78 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 13.7. TRAITER LES LIGNES CONSCUTIVES IDENTIQUES (UNIQ) 7
13.6 Comparaison du contenu de 2 chiers Exemple 13.11
$ cmp fich1 fich2
13.6.1 Dirences entre deux chiers texte (di) fich1 fich2 differ : char 160, line 5
13.9.3 Format pour indiquer les lignes traiter 13.10 Un langage d'dition de chiers (awk)
Les lignes sont numrotes de 1 au nombre de lignes re'ues. 13.10.1 Description gnrale de la commande
L'adresse d'une ligne peut tre dsigne par un numro de ligne, par $ (dernire ligne)
ou par une expression rgulire entoure de /. awk 1 lit un texte contenu dans un ou plusieurs chiers, le modie et envoie le rsulta
Les lignes traites peuvent tre dsignes par : vers la sortie standard.
adresse1, adresse2 awk est une commande trs puissante pour travailler sur le contenu d'un chier. Elle po
qui dsigne un ou plusieurs blocs de lignes comprises entre les lignes dsignes par les deux sde un langage de programmation comportant des structures conditionnelles, des boucle
adresses et des fonctions prdnies * ce langage peut travailler avec des variables et des tableaux
adresse Nous n'tudierons ici que les fonctionnalits les plus simples oertes par awk.
qui dsigne toutes les lignes correspondant l'adresse 1. du nom de ses d
veloppeurs Aho, Weinberger et Kernighan
82 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 13.10. UN LANGAGE D'DITION DE FICHIERS (AWK) 8
Il est fortement conseill d'tudier plus en dtail cette commande si l'on veut eectuer Une ligne d'un programme a la structure suivante :
des traitements complexes sur le contenu des chiers. Un langage encore plus puissant est slecteur { action }
fourni par le langage Perl qui ne sera pas tudi ici. slecteur indique si action doit tre excute sur l'enregistrement en cours de traitement
Le traitement eectuer est crit dans un programme tap directement dans la ligne Dans ce cours nous ne verrons que les programmes comportant une seule ligne qu
de commande (forme 1 de la syntaxe) ou enregistr dans un chier (forme 2 de la syntaxe). ache (par la commande print) des portions de lignes du chier trait.
awk -Fc] programme fichiers...] Les constantes de type cha ne de caractres sont entoures par des guillemets.
ou On peut inclure des commentaires dans une ligne du programme en les faisant prcde
awk -Fc] -f fichier-programme fichiers...] du caractre #.
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 13.10.4 Cas particuliers pour une ligne de programme
mot par le shell * en gnral, il est donc ncessaire de l'entourer par des apostrophes ou
des guillemets. ) S'il n'y a pas de slecteur, action est toujours excute (pour tous les enregistrements
Excution de la commande :
awk travaille sur des enregistrements constitus de champs. Le sparateur d'enregistre- Exemple 13.16
ment tant par dfaut le sparateur de ligne de Unix, awk travaille ordinairement sur des ls -lg | awk ' { print $9, $5 }'
lignes. ache le nom et la taille (les neuvime et cinquime champs de la ligne) de
awk lit enregistrement par enregistrement les donnes des chiers (l'entre standard chiers du rpertoire courant.
par dfaut). Chaque enregistrement est trait son tour selon les indications donnes par ) S'il n'y a pas d'action, l'enregistrement trait est recopi vers la sortie s'il a t
toutes les instructions du programme, avant la lecture de l'enregistrement suivant. slectionn par slecteur.
13.10.2 Champs Exemple 13.17
L'exemple de 13.18 pourrait donc s'crire plus simplement.
Quand awk lit un enregistrement d'un chier, il l'clate en champs spars par des ls -l | awk '/^d/'
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,... 13.10.5 Slecteurs
reprsentent les 1er 2eme ,... champs Ils peuvent tre du type :
$0
reprsente la ligne entire. ) /expression rgulire/
Exemples 13.15 Dans ce cas, action sera excute sur un enregistrement s'il contient une cha ne d
(a) Acher le nom, les autorisations et le propritaire des sous-rpertoires du rpertoire caractres qui correspond expression-rgulire (voir 11).
courant : Exemple 13.18
ls -lg | awk '/^d/ { print $9, $1, $3 }' ls -l | awk '/^d/ { print }'
ache toutes les lignes de
ls -l concernant les sous-rpertoires du rpertoir
(b) Acher les noms des utilisateurs : courant.
awk -F: '{print $1}' /etc/passwd
) expression de comparaison (semblables celles du Langage C) :
13.10.3 Structure d'un programme ==, !=, <, >, <=, >=
Un programme peut tre complexe et comporter de nombreuses lignes incluant toutes De plus, ~ (tilde) permet de comparer une cha ne de caractres une expressio
les structures de programmation que l'on trouve habituellement dans les langages de pro- rgulire (place entre deux /). Par exemple,
grammation comme le langage Pascal ou le langage C. $5 ~ /^0-9]/
84 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 13.10. UN LANGAGE D'DITION DE FICHIERS (AWK) 8
) expression compose des deux types prcdents relis par des oprateurs logiques Pour une description plus dtaille, on se reportera au manuel de rfrence ou, encor
|| (ou), && (et), ! (ngation de l'oprateur qui suit)
mieux, un guide d'utilisation de awk.
Des exemples d'utilisation des instructions de contrle sont donns dans la sectio
) mots cl BEGIN ou END. Si le slecteur de la premire (resp. dernire) ligne du suivante.
programme est BEGIN (resp. END), l'action de cette ligne sera excute une fois Voyons un peu plus en dtails print et printf :
avant (resp. aprs) de traiter le premier (resp. dernier) enregistrement des chiers. >
print expressions...] fichier]
Des exemples d'utilisation de ces mots cls sont donns en 13.11. ou
print expressions...] >>
fichier]
Exemples 13.19 ache les expressions sur la sortie standard ou vers le chier ventuellement spci e
(a) $2 == "" redirection. print eectue ensuite un passage la ligne.
Si les expressions qui suivent print sont spares par un ou plusieurs espaces, elle
(b) $2 == "1" || $2 =="5" sont sorties accoles les unes derrire les autres. Si elles sont spares par une virgule, elle
sont sorties spares par un espace.
(c) $2 !~ /^ab/ # deuxieme champ ne commence pas par ab 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.
(d) $2 > 3 print (seul) ache l'enregistrement complet.
(e) /^$/ # ligne vide
Variables utilisateur
Le format gnral d'un programme est donc : Des variables peuvent tre utilises dans les programmes. La syntaxe de leur utilisatio
BEGIN { instruction de d-but }
s-lecteur { action }
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
s-lecteur { action } Acher la taille totale des chiers achs par la commande ls :
END { instruction de fin }
ls -lg |
13.10.6 Actions awk ' { print $9, $5
somme = somme + $5 }
Une action est une suite d'instructions. Comme en Langage C plusieurs actions peuvent END { print "Total des tailles des fichiers :", somme }'
tre regroupes entre accolades. Une instruction se termine par un *, un passage la ligne
ou par une accolade fermante. Remarque 13.1
Une instruction peut tre une instruction de contrle, une aectation, print ou printf. Les constantes cha nes de caractres doivent tre entoures par des guillemets sino
Les instructions de contrle disponibles sont : elles sont considres comme des noms de variables par awk. C'est une source d'erreu
if, while, for, break, continue, next, exit. frquente lorsque l'on commence programmer avec awk.
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 instruc- Variables systme
tions composes de plusieurs instructions sont entoures d'accolades :
{ if (n > 1000) { Voici quelques variables systme utilises par awk :
i++ NF nombre de champs de la ligne
somme += $4 NR nombre de lignes qui ont t lues
} FS sparateur de champs en entre (par dfaut l'espace ou la tabulation)
} OFS sparateur de champs en sortie (par dfaut l'espace)
86 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 13.11. EXEMPLES DE PROGRAMMES 8
RS sparateur d'enregistrements (line feed de code 10 par dfaut). ) Acher le nom et la taille des chiers du rpertoire courant avec un format de sort
RS="" indique que le sparateur d'enregistrement est la ligne vide. C'est plus agrable (le nom cadr gauche dans un champ de 20 caractres et la tail
utile pour travailler avec des enregistrements multi-lignes. cadre droite dans un champ de 6 caractres) :
FILENAME nom du chier en cours de traitement ls -alg | awk '{ printf "%-20s %6d\n", $9, $4 }'
FS, OFS et RS sont modiables par le programme.
) Acher les lignes qui contiennent ab ou cde :
13.10.7 Fonctions, oprateurs awk '/ab/ || /cde/'
On peut utiliser des fonctions (de syntaxes semblables aux fonctions du Langage C) ) Acher tous les intervalles de lignes qui sont incluses entre deux lignes gales
dans les slecteurs et les actions. debut et n :
Pour faire des calculs : awk '/^debut$/,/^fin$/'
int, sqrt, log, exp, int,...
Pour travailler avec des cha nes de caractres : ) Acher les lignes dont le premier champ est dirent de celui de la ligne prcdente
substr, length, index,... awk '$1 != prev { print # prev = $1 }'
La fonction getline permet de lire une ligne ou la valeur d'une variable :
getline lit une ligne du chier en cours. ) Voici un chier programme adjacents que l'on peut appeler par
getline variable lit une ligne du chier en cours et met la valeur dans variable. awk -f adjacents fichier
On peut spcier en entre un autre chier pour getline par une redirection de l'entre : pour reprer les mots adjacents identiques dans un chier :
getline variable ] < chier
La valeur lue par getline peut aussi provenir d'une commande Unix : NF>0 {
commande j getline variable ] if ($1 == derniermot)
Pour lancer une commande Unix, on dispose de la fonction system . Par exemple, print "double %s, ligne %s\n", $1, NR
system("rm fichier") for (i=2 # i<=NF # i++)
On peut utiliser aussi des calculs avec les oprateurs du langage C : if ($i == $(i-1))
+, -, *, /, %, ++, ), +=, *=, /= et %= printf "double %s, ligne %s\n", $i, NR
if (NF>0)
Exemple 13.21 derniermot = $NF
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. ) Acher les groupes auxquels l'utilisateur appartient :
awk -F: /:,]`logname`'($|,)/{ printf "%s\n", $1 }' /etc/group
13.11 Exemples de programmes Remarquez l'expression ($|,) qui indique que le nom d'utilisateur est suivi pa
une virgule ou par la n de la ligne.
) Acher le nombre de lignes du chier :
) Plier les lignes qui ont plus de 50 caractres dans un chier (on ajoute un \ droit
awk 'END { print NR }' fichier des lignes plies :
) Acher le premier et le dernier champ de chaque ligne : length($0) > 72 {
awk '{ print $1, $NF }' fichier print substr($0,1,50) "\\"
ligne = substr($0,51)
) Acher le nom et la taille des chiers du rpertoire courant : while (length(ligne) > 50) {
ls -alg | awk '{ print $9, $3 }' print substr(ligne,1,50) "\\"
88 CHAPITRE 13. MANIPULATION DES DONNES DES FICHIERS 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 Troisime partie
toto 300
bibi 150
Le programme achera :
toto 550
Mcanismes d'interprtation du shell
bibi 350
jean 200
Voici le programme :
{ somme$1] += $2 }
END { for (nom in somme) print nom, sommenom] }
Remarquez le
for (nom in somme) qui parcourt le tableau.
On peut utiliser l'lment d'un tableau comme condition d'un if. Dans ce cas, la condi-
tion 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.
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).
fi
# cas ou grep n'a pas trouve une ligne
14.9 Inhiber l'interprtation du shell
On peut inhiber l'interprtation du shell (on dit aussi dpersonnaliser) avec les carac
(b) la commande est excute dans un sous-shell. tres suivants :
n inhibe l'interprtation spciale du caractre suivant.
(c) Attention, si la commande renvoie plusieurs lignes vers la sortie standard, le compor- ' toute interprtation est inhibe pour les portions de lignes entoures de '
tement est dirent selon que l'on travaille sous sh et ksh ou zsh. Par exemple, " dans les portions de lignes entoures de " (guillemets), l'interprtation des e
a=`ls -l` paces, la gnration des noms, la substitution des alias et de ~ sont inhibe
rangera dans a une seule longue ligne sous sh et ksh, ce qui peut tre gnant, mais mais pas la substitution des paramtres ($). Une apostrophe n'est pas interprt
donnera bien plusieurs lignes sous zsh. entre deux guillemets (ce qui permet d'introduire le caractre ' dans une cha n
de caractres.
(d) l'interprtation l'intrieur des ` est complexe et peut donner des rsultats surpre- Exemple 14.10
nants : Essayez cette suite de commandes :
echo \\$HOME
ache \/users/profs/toto , et pourtant a=bonjour
echo $a bc *
echo `echo \\$HOME` echo \$a bc
ache $HOME echo "\$a bc *"
A cause de ce type d'exemple, ksh et zsh ont ajout le nouveau type de substitution echo '$a *'
de commande $(commande) qui n'a pas de telles anomalies : 4. il n'y a pas de g
n
ration des noms de chiers dans l'interpr
tation des parties correspondant au
echo $(echo \\$HOME)
chiers dans les redirections
5. comme pour les redirections, les
tapes suivantes sont aussi trait
es part pour les aectations pa
ache \/users/profs/toto exemple, aucune g
n
ration des noms n'est eectu
e dans a=*
100 CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE 14.11. LANCEMENT DE L'EXCUTION D'UN SHELLSCRIPT 10
14.10 Recherche d'une commande par le shell 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
Lorsque l'utilisateur tape une commande au clavier, voici les direntes tapes qui pour lire et excuter les lignes contenues dans le chier.
conduisent l'excution de la commande : 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
1. Interprtation de la ligne de commande par le shell, ls (dont la zone de code contient le code de l'interprteur) qui lit les lignes du shellscript e
2. Recherche de la commande, 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).
3. Excution de la commande avec redirection pralable des entres-sorties par le shell Il est important de noter que, sauf cas particulier tudi ci-dessous (#!),
si ncessaire. ) 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),
Voici comment s'eectue la recherche de la commande :
) si on travaille sous zsh, l'interprteur lanc implicitement est sh et pas zsh ! Si
) Si la commande correspond une commande interne du shell, cette commande est chier contient des instructions comprises par zsh et pas par sh, il y aura une erreu
excute l'intrieur du shell, l'excution.
) sinon, si la commande correspond une fonction (voir 16.3), cette fonction est ex- Pour que le shellscript soit interprt par zsh, il doit commencer par la ligne :
cute l'intrieur du shell, #! /usr/local/bin/zsh -f
) sinon il ne peut s'agir que d'une commande correspondant un chier de l'arbores- Excution d'un chier dont la premire ligne commence par '#!(
cence. 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 comporte une premire ligne qui commence par #!, Unix lance comm
interprteur non pas le shell habituel, mais le programme dont le nom absolu suit #!
) Si le chier est un shellscript un nouveau shell est cr * il lit les lignes du (avec ventuellement un argument comme -f dans l'exemple ci-dessus), auquel il ap
shellscript et les excute, plique comme arguments la ligne de commande tape par l'utilisateur. Voici des exemple
) si le chier contient du code binaire excutable, un nouveau processus est cr, concrets :
qui excute ce code. Si l'utilisateur tape la commande c1 f1 f2,
) si c1 commence par #! /bin/sh,
la commande excute sera /bin/sh c1 f1 f2.
14.11 Lancement de l'excution d'un shellscript Le shellscript c1 est lu par le shell sh et excut avec les arguments f1 f2.
Un shellscript est un chier qui contient des noms de commandes et des instructions ) si c1 commence par #! /usr/local/bin/zsh -f,
internes au shell. On peut utiliser un shellscript comme toutes les autres commandes. En la commande excute sera /usr/local/bin/zsh -f c1 f1 f2.
particulier un autre shellscript peut l'utiliser. On peut ainsi se construire facilement de Le shellscript c1 est lu par le shell zsh et excut avec les arguments f1 f2. L'optio
nouvelles commandes adaptes sa propre fa'on de travailler. -f indique que le chier d'initialisation .zshenv ne doit pas tre lu * voir 14.11.3
Les instructions internes du shell forment un langage de haut niveau possdant des ) si c1 commence par #! /bin/awk -f,
instructions de tests et de boucles, des variables et des fonctions. la commande excute sera /bin/awk -f c1 f1 f2.
On peut lancer l'excution d'un shellscript de trois manires direntes. Le programme c1 (ncessairement crit avec du code awk) est interprt par aw
sur les chiers f1 et f2 (voir 13.10).
14.11.1 Lancement par le nom du shellscript Remarque 14.5
Si on a l'autorisation de lecture et d'excution sur le shellscript, on peut le lancer en Ce mcanisme ne peut fonctionner qu'avec les interprteurs (tels les shells ou awk
tapant simplement son nom. pour lesquels # introduit des commentaires.
102 CHAPITRE 14. INTERPRTATION DU SHELL. MCANISMES DE BASE 14.12. LANCEMENT EXPLICITE D'UN SHELL 10
14.11.2 Lancement par l'appel de la commande interne . 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
Il reste une autre possibilit pour faire excuter un shellscript. Le nom du shellscript comme shell de dmarrage (voir cours sur les rseaux).
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 14.12 Lancement explicite d'un shell
directement au clavier. Un nouveau processus n'est pas cr. Les modications de l'envi-
ronnement seront donc conserves. zsh -f]
En fait, . est une commande interne du shell qui lit toutes les commandes contenues Les chiers .zshenv, .zshrc et /etc/zshrc sont excuts sauf si le shell est lanc ave
dans le chier et les excute comme si elles avaient t tapes au clavier. 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
Remarque 14.6 xterm .
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.
Chapitre 15
echo $2 $6
Remarque 15.1
set -x abc
Variables, environnement
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
fi
stty dec crt Chapitre 16
Complments sur le shell
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 Ce chapitre donne quelques complments sur des notions dj tudies dans les deu
case $terminal:-2 in chapitre prcdents. Il prsente aussi quelques nouveaux aspects moins essentiels du langag
1) TERM=vt100## du shell.
2) TERM=xterm
echo "Nom du DISPLAY ? "
esac
read DISPLAY## 16.1 Listes de commandes
fi Un pipe est une suite de commandes spares par j. Le code retour d'un pipe est
Remarque 15.8 code retour de la dernire commande excute.
Les chiers utiliss lors de l'criture de chiers de conguration (au moins ceux qui Une liste de commandes est une suite de pipes 9ou de simples commandes * dans l
ne sont pas lis un shell de login) doivent tre dsigns par leur nom absolu car les suite, par commodit, pipe pourra dsigner une simple commande) spares par un de
shells peuvent tre lancs d'un autre rpertoire que le rpertoire de login. signes suivant :
correspond une excution squentielle des pipes
& correspond une excution squentielle des pipes sans attente de la n de l'ex
15.4 Stratgie pour la personnalisation de l'environne- cution du pipe prcdent
&& le pipe suivant n'est excut que si le pipe prcdent renvoie la valeur 0 (drou
ment lement normal du pipe prcdent)
On travaille le plus souvent dans plusieurs domaines bien distincts, par exemple, un jj le pipe suivant n'est excut que si le pipe prcdent ne renvoie pas la valeur
environnement pour le dveloppement en langage Java, un environnement pour le travail (droulement anormal du pipe prcdent)
avec une base de donnes et un autre pour la recherche d'information sur le Web. Exemples 16.1
Dans ce cas, il est prfrable d'avoir des environnements de travail dirents plutt (a) rm fich || echo Suppression impossible !!
que d'avoir un seul environnement alourdi par un grand nombre de variables et avec une
variable PATH contenant de nombreux rpertoires. (b) cat $2 | { write $1 || mail $1 #}
Pour cela le plus simple est d'allger les chiers d'initialisation vus ci-dessus en ne gar- shellscript qui envoie un message sur l'cran ou dans la bo te aux lettres d'un util
dant que les lments qui seront utiles tous les environnements, et de crer un shellscript sateur connect la machine locale.
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 Quelques subtilits (false est une commande qui ne fait que renvoyer un code retou
travail et lancera les programmes ncessaires (par exemple, il ouvrira une nouvelle fentre non nul * true est une commande qui ne fait que renvoyer un code retour nul) :
X Window dans laquelle il lancera un programme pour travailler avec une base de donnes). false && echo 1 && echo 2
n'ache rien
114 CHAPITRE 16. COMPLMENTS SUR LE SHELL 16.4. COMPLMENTS SUR LES REDIRECTIONS 11
true && echo 1 && echo 2 Excution de la fonction
ache 1 et 2 Les commandes de la fonction s'excutent dans le shell dans lequel la fonction a t
false || echo 1 && echo 2
ache 1 et 2 appele. Les $1, $2,... sont remplacs par les paramtres d'appel de la fonction (param
param2,...).
true || echo 1 && echo 2
ache 2 Exemple 16.2
Si la fonction lt est dnie par :
16.2 Ordre de priorit lt () { ls -lt $1 | more }
L'ordre de priorit des dirents signes qui ont une signication particulire pour le on pourra lancer la fonction par :
shell est (par ordre dcroissant) : lt /bin
w sauvegarde le chier en cours d'dition. sortie standard * la commande suivante ferme le chier de descripteur 3 :
3<&-
q quitte ed.
La syntaxe d'appel de ed est : 16.4.4 Redirection vers un chier dsign par son descripteur
ed -s] fichier
o- l'option -s indique que l'on ne veut pas que ed ache certaines informations comme, >&n (resp. <&n)
par exemple, le nombre d'octet enregistrs lors de la commande w. 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
Exemple 16.3 dup() en langage C). Il ne faut pas d'espace entre > et &.
ed -s $3 <<FIN > fichier crase fichier et positonne le pointeur de poistions courante du chie
1,\$s/$1/$2/g au dbut du chier alors que >&n (ou <&n) dsigne un chier sans modier la valeur d
w position courante.
q
FIN Exemples 16.5
(a) Pour acher un message d'erreur :
Le shellscript remplace ci-dessus remplace une cha ne par une autre dans un chier
(par exemple : remplace ch1 ch2 fichier) echo "$0: Erreur ...." >&2
(b) Si on veut faire imprimer les erreurs de syntaxe d'un programme en langage C :
16.4.2 Redirection pour tout un shell (exec) cc pgm.c 2>&1 | lpr
La commande interne exec, outre le lancement d'une comande en remplacement du car les erreurs sont rediriges vers la sortie standard qui est envoye par le pipe l
shell, permet des redirections qui seront valables jusqu' la sortie du shell. La commande commande lpr.
suivante, place dans un shellscript, enregistrera tous les messages d'erreurs du shellscript
dans le chier suivi.err, jusqu' la n du shellscript : 16.4.5 Ordre d'valuation des redirections
exec 2>suivi.err
Les redirections sont values de gauche droite. Par exemple, les deux redirection
16.4.3 Descripteurs de chier suprieurs 2 suivantes
1>fich1 2>&1
On sait que les trois chiers standards sont ouverts avec les descripteurs 0, 1 et 2. Un vont rediriger la sortie standard et le chier standard des erreurs vers ch1. Dans l'ordr
shellscript peut ouvrir d'autres chiers en utilisant les descripteurs suprieurs 2. inverse, seule la sortie standard aurait t redirige vers ch1.
118 CHAPITRE 16. COMPLMENTS SUR LE SHELL 16.5. COMPLMENTS SUR LES VARIABLES 11
16.4.6 Redirection sans commande avec zsh ${var:=val}
donnera la valeur val la variable var si celle-ci est gale la cha ne vide.
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 * 16.5.2 Modier l'environnement d'une commande
c'est la commande cat par dfaut. Si on veut que zsh se comporte comme sh et ksh, on On peut modier l'environnement d'une commande en la prxant d'une ou de plusieur
ajoute les lignes suivantes dans le chier .zshrc : aectations de variables (spares par des espaces).
NULLCMD=:
export NULLCMD
Exemple 16.7
rep=/usr/bin commande arguments...
16.5 Complments sur les variables 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.
16.5.1 Valeurs par dfaut pour les variables
Exemple 16.8
Il est possible de substituer des valeurs aux valeurs des variables ou des paramtres de a=5
position comme suit (les valeurs relles des variables ou paramtres ne sont pas modies a=6 echo $a
par ces substitutions sauf pour =).
On dit qu'une variable est active si elle a re'u une valeur. Un paramtre de position achera 5 et pas 6 car la commande echo est une commande interne au shell.
est activ si la commande a t lance avec au moins autant d'arguments que le numro Erreur ne pas faire : si l'on veut concatner deux valeurs dans une variable (pa
du paramtre. exemple abc et def), en les sparant par un espace, ne pas crire
${variable-mot} a=abc def
si la variable n'est pas active, elle est remplace par la valeur mot. qui serait interprt comme le lancement de la commande def en lui exportant la valeu
${variable?mot} abc de la variable a. Ecrire plutt :
si la variable n'est pas active, mot est ach et l'excution est arrte. Si mot est omis, a="abc def"
un message standard est ach.
${variable+mot}
si la variable est active, elle est remplace par mot, sinon la cha ne vide est substitue. 16.5.3 Facilits de ksh et zsh pour le traitement des valeurs d
${variable=mot} variables
si la variable n'est pas active, sa valeur devient mot. Ne marche pas pour les paramtres
de position. 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 ) :
Remarque 16.1 ${#variable}
mot est interprt par le shell, sauf quand il suit un ?. Il peut ainsi tre une donne la taille du contenu de la variable.
substitution de commande ou dsigner la valeur d'une variable. ${variable#modle}
(o- modle est une cha ne de caractres pouvant contenir les caractres spciaux utilis
Exemples 16.6 par la gnration des noms de chiers par le shell) si modle correspond au dbut de l
(a) cd ${rep=$HOME} 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
(b) var=${2?il manque des parametres}
${variable##modle}
(c) cd ${DIR-$HOME} la mme chose que ci-dessus mais on supprime la plus grande portion de texte du dbu
qui correspond modle.
Si les signes -,?, +, = sont prcds du signe :, le comportement pour une variable ${variable%modle}
gale la cha ne vide est le mme que pour une variable non active. Par exemple, ou
120 CHAPITRE 16. COMPLMENTS SUR LE SHELL 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#*/}
est gal usr/local/bin (sans le / du dbut)
(b) Si on travaille avec ksh, on peut placer
PS1='${PWD#$HOME/}$ '
dans le chier
.profile pour avoir un prompt qui indique le rpertoire courant sans
tre trop long pour les noms de rpertoire qui sont sous le rpertoire courant. Quatrime partie
16.5.4 Modication interactive de la valeur d'une variable sous
zsh (vared) Programmation
zsh ore une facilit pour modier en interactif la valeur d'une variable avec la com-
mande vared ( variable editor ). Par exemple,
vared PATH
permet de modier la valeur de la variable PATH la manire de emacs.
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.
(b) test \( -d fich -o -f fich2 \) -a $var = oui 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.
De plus ksh et zsh orent un mcanisme interne pour tester les expressions condition-
nelles : Remarque 17.2
expression conditionnelle ]] Il faut se mer des constructions des shells qui crent implicitement un sous-she
(des espaces sont ncessaires entre expression conditionnelle et les doubles crochets). (voir 14.3 ou 17.4.7). Si une commande exit s'excute dans un de ces sous-shells, el
Les expressions sont les mmes que pour test mais le et logique se traduit par && et le ne fera sortir que du sous-shell et pas du shellscript.
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 = 17.4 Les structures de contrle
modle est vrai si chane correspond modle qui peut contenir les caractres spciaux
utiliss dans la gnration des noms de chiers (voir 4.5). 17.4.1 if .. then .. else ..
Aucune gnration des noms de chiers n'est eectue par le shell dans expression Les commandes Unix renvoient toute un code retour qui est un nombre entier (voir 14.1
conditionnelle. 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
Exemple 17.2 positif.
$fichier = *.c ]] La commande if prend en compte ce code renvoy par les commandes.
126 CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS 17.4. LES STRUCTURES DE CONTRLE 12
if liste-commandes # then Variantes de if
liste-commandes if liste-commandes # then
else liste-commandes
liste-commandes fi
fi
teste la valeur renvoye par la liste de commande qui suit le if (code de la dernire com- if liste-commandes # then
mande de la liste excute). Si la valeur est nulle, la liste de commandes qui suit le then liste-commandes
est excute, sinon c'est la liste qui suit le else qui est excute. elif liste-commandes # then
liste-commandes
Remarque 17.3 elif ...
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 #. else
La prsentation choisie dans ce cours suit le format couramment utilis en langage liste-commandes
C (else align avec le if ). Le then est plac sur la mme ligne que le if et il est donc fi
prcd d'un #.
Cette structure est un raccourci plus simple et plus lisible pour la structure suivante
Exemples 17.5
(a) if cp rep1/* rep2 # then if liste-commandes # then
: liste-commandes
else else
echo "Impossible de copier les fichiers" >&2 if liste-commandes # then
fi liste-commandes
(b) !crivons un shellscript oui qui pourra tre utilis par d'autres shellscripts. Il ren- else
verra 0 si l'utilisateur rpond oui et il renverra 1 sinon : if ...
...
read reponse ...
if test "$reponse" = oui # then ...
exit 0 else
else liste-commandes
exit 1 fi
fi fi
fi
On peut utiliser ce shellscript dans un autre shellscript comme suit :
echo -n "Confirmez-vous la suppression ? "
if oui # then
rm * Exemple 17.6
fi if test "$reponse" = oui # then
exit 0
Remarque 17.4 elif test "$reponse" = non # then
Puisqu'en l'absence de commande exit, un shellscript sort avec le code retour de exit 1
la dernire commande excute, le shellscript oui pourrait aussi s'crire : else
read reponse exit 2
test "$reponse" = oui fi
128 CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS 17.4. LES STRUCTURES DE CONTRLE 12
17.4.2 case ... esac Exemples 17.8
(a) for i in 1 2 3
case mot in
do
modle1) liste-commandes ##
echo $i
.
done
.
modlen) liste-commandes ## (b) Pour voir la dirence entre $* et $@, excutez le shellscript suivant avec quelque
esac paramtres, remplacez ensuite $* par $@ et excutez le nouveau avec les mme
case est une instruction de choix multiple : le premier modle rencontr qui correspond paramtres. Notez la dirence. Dans la premire version on n'a qu'un seul tour
la valeur de mot indique la liste de commandes excuter. Si mot ne correspond aucun car $* est considr comme un mot unique.
des modles, l'excution se poursuit l'instruction qui suit esac.
Les modles sont de la forme : for i in "$*"
val1 | val2... | valp do
Dans les modles, on peut utiliser les caractres spciaux ? * ] comme dans les echo $i
noms de chiers (voir 4.5). On peut ainsi tester si une valeur commence par un chire par done
le modle 0-9]*. (c) Le shellscript cherche suivant ache les chemins d'accs des chiers donns e
Exemple 17.7 argument :
Le shellscript oui donn en b peut s'crire : for fichier
do
read reponse
find / -name "$fichier" -print
case "$reponse" in
done
o|O|oui|OUI) exit 0 ##
n|N|non|NON) exit 1 ## Il sura de taper
*) exit 2 ##
cherche fich1 fich2 fich3
esac
pour faire acher les chemins d'accs des chiers spcis.
17.4.3 for ... do ... done Si on veut ajouter quelques tests et entrer la racine de la recherche en premier para
mtre, le shellscript cherche devient :
Il est frquent d'avoir un traitement qui se rpte pour chaque paramtre d'une com-
mande (par exemple, lpr ch1 ch2). La commande for permet de traiter successivement if test $# -lt 2 # then
tous les paramtres d'une commande. Elle permet aussi de rpter un traitement pour echo "$0 : Il faut au moins 2 arguments" >&2
plusieurs valeurs direntes. exit 2
for variable in mots...] fi
do if test ! -d $1 # then
liste-commandes echo "$0 : $1 n'est pas un repertoire" >&2
done exit 3
variable prend tour de rle pour valeur chaque mot de la liste mots qui suit in. Pour fi
chaque valeur de variable, liste-commandes est excute. racine=$1
Si in mots... n'est pas prsent, variable prend pour valeur chacun des paramtres de shift
la commande (ce qui est quivalent : for variable in $@ * voir 15.2.6). for fichier
do
Remarque 17.5 find $racine -name "$fichier" -print
Une boucle for sans in ne modie pas les valeurs de $1, $2,... done
130 CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS 17.4. LES STRUCTURES DE CONTRLE 13
(d) Pour excuter un traitement (ici acher le nom) sur tous les chiers d'un rpertoire do
on utilise la substitution de commande : cherche "$1" "$2"
shift 2
for i in `ls -A` done
do
echo $i (d) Lecture ligne ligne d'un chier structur en lignes :
done
while read ligne
17.4.4 while ... do ... done do
echo $ligne
while liste-commandes1
done < fichier
do
liste-commandes2
done 17.4.5 until ... do ... done
excute liste-commandes2 tant que liste-commandes1 renvoie un code 0. Est semblable while mais la sortie de la boucle s'eectue si la liste de commandes qu
Exemples 17.9 suit until renvoie une valeur nulle.
(a) while test "$1"
do
echo $1
17.4.6 Instructions lies aux boucles (continue, break)
shift continue n]
done permet de sauter la n de la boucle et de recommencer une nouvelle boucle.
break n]
ache tous les paramtres, un par ligne. Retenez le test sur $1 pour reprer le dernier
paramtre. provoque la sortie de la boucle en cours d'excution et passe l'instruction qui suit l
boucle.
(b) Si le shellscript coucou contient : 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
while : englobe la boucle dans laquelle cette instruction est crite.
do
echo coucou
sleep 30
17.4.7 Probl
mes avec les boucles rediriges et les pipes
done 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).
Si on tape Ceci implique les deux problmes suivants :
coucou &
) une commande exit ne sortira pas du shellscript mais seulement de la boucle ou d
il s'achera coucou sur l'cran toutes les 30 secondes (ne pas rediriger sur le terminal pipe,
du collgue !). La commande interne : est une commande qui ne fait rien et renvoie
le code retour 0 (voir 17.6). ) les aectations de variables l'intrieur de la boucle ne seront pas connues en dehor
de la boucle ou du pipe.
(c) Pour rechercher dans l'arborescence une liste de chiers ($2) situs sous des rper-
toires dirents ($1), on peut utiliser le shellscript suivant (le shellscript cherche a Remarque 17.6
t crit en c) : 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
while "$1" ] # teste la fin de la liste mme pour la version du shell que vous utilisez).
132 CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS 17.5. INTERCEPTION DES SIGNAUX 13
Voici des mthodes (de type bidouillage) pour contourner ces deux problmes dans le Ces signaux sont pour la plupart des signaux d'interruption pour cause de droulemen
cas d'une boucle redirige : anormal (erreur au niveau du bus, mmoire insusante, etc.) ou d'interruption par l'util
) Pour le problme du exit, il n'y a pas de solution miracle. On doit s'adapter chaque sateur (l'appui sur la touche d'annulation correspond au signal numro 2). La command
cas particulier. On peut envoyer un code retour spcial avec la commande exit kill (tudie en 7.2) permet d'envoyer un signal un processus repr par son numro.
l'intrieur de la boucle (par exemple 5) et on teste le code retour juste la sortie de Exemples 17.10
la boucle. On peut ainsi sortir du shellscript si le code retour lu est le code spcial (a) trap '' 2 # les deux apostrophes designent la chaine vide
choisi. ignore l'interruption par la touche d'annulation
) Pour l'aectation de variable, il n'y a pas non plus de solution simple. On peut (b) trap 2
crire l'aectation dans un chier temporaire que l'on excute avec la commande . rtablit la prise en compte de cette touche
(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), (c) temp=temp$$
trap 'rm -f $temp # exit 2' 1 2 15
echo "var=valeur" > ftemp$$
On peut aussi dans certains cas utiliser la substitution de commande comme il est supprime le chier temporaire dont le nom est compos de la cha ne temp suiv
dcrit ci-dessous pour le pipe. C'est alors la solution la plus propre'. 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
) Pour le pipe, une solution est d'utiliser un chier temporaire qui contient les infor- de l'utilisateur.
mations 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 Porte d'un trap : Le trap est en activit dans un shellscript partir du moment o-
faire acher par ce shellscript les informations que l'on veut rcuprer, et d'utiliser est lu et jusqu' ce qu'un autre trap sur le mme signal soit lu. Les sous-shell n'hriten
une substitution de commande pour rcuprer ces valeurs. Cette dernire solution pas d'un traitement du signal initi par un trap. Cependant, si un shellscript ignore u
est aussi utilisable dans le cas d'une boucle redirige. signal, le signal ne sera pas transmis ses ls.
Exemples 17.11
17.5 Interception des signaux (a) Lancez le programme suivant, tapez sur la touche d'annulation et voyez le messag
s'acher l'cran.
trap liste-commandes] n...
Le plus souvent, un processus s'interrompt quand il re'oit un signal (voir 2.2.1). La com- trap "echo $0 : fin de programme # exit 2" 2
mande trap permet un comportement dirent la rception du signal : liste-commandes coucou
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 o- coucou est le shellscript suivant :
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, while :
la n de l'excution du chier de commande qui contient l'instruction trap) ou la sortie do
de la fonction (voir 16.3) dans laquelle a t dni le trap. echo coucou
Si liste-commandes est la cha ne nulle (indique explicitement par '' : 2 apostrophes sleep 5
accoles), le signal est ignor. done
Si liste-commandes est absente, le signal sera nouveau trait normalement. trap
(sans aucun paramtre) ache la liste des commandes associes chacun des signaux. (b) Le schma ci-dessous permet d'interrompre commande en tapant la touche d'annu
La liste de commandes du trap est lue et interprte une premire fois quand le shell lation, sans interrompre le programme principal * l'excution reprend la suite d
lit la ligne qui comprend la commande trap et le rsultat de la premire interprtation est programme.
interprte une deuxime fois si la liste de commande est excute aprs la rception d'un
signal. trap "trap '' 2" 2 # les guillemets pour entourer la chaine
134 CHAPITRE 17. PROGRAMMATION DES SHELLSCRIPTS 17.7. RCURSIVIT DANS L'EXCUTION DES SHELLSCRIPTS 13
# avec les deux apostrophes Cette commande permet de lancer des processus en arrire-plan et d'en attendre certain
commande avant de continuer une action. Il peut tre utile de conserver le pid d'un processus lanc
trap '' 2 en arrire-plan dans une variable l'aide de la variable spciale $! (voir 15.2.6).
Suite du programme...
Si le premier trap tait trap '' 2, on ne pourrait pas interrompre la commande. 17.7 Rcursivit dans l'excution des shellscripts
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 Un shellscript (ou une fonction) peut s'appeler lui-mme. Par exemple le shellscrip
deuxime trap (plac aprs la commande) : le signal 2 ne serait plus ignor dans la dirr suivant ache tous les sous-rpertoires de l'arborescence d'un rpertoire donn e
suite du programme. paramtre en dcalant les dirents niveaux de sous-rpertoires :
dir=${1-.}