Vous êtes sur la page 1sur 204

UNIX : Généralités – Historique

Chapitre 1 : UNIX : Généralités – Historique

§ 1.1 UNIX, un système d’exploitation

Les missions d’un système d’exploitation sont :

– mise à disposition de ressources matérielles : espace disque, temps d’exécution sur le


microprocesseur central, espace mémoire, etc.
– partage équitable de ces ressources entre les utilisateurs pour atteindre le but de système
multi-utilisateurs

Formation permanente – ARS 1

UNIX : Généralités – Historique UNIX, un système d’exploitation

Terminologie :

Mono utilisateur Une seule personne utilise l’ordinateur

Multi utilisateur Plusieurs personnes peuvent utiliser le système en même


temps. Le système s’assure qu’un utilisateur n’interfére pas sur
un autre.

Mono tâche Un seul processus tourne à un instant.

Multi tâche Plusieurs processus donnent l’impression de tourner en même


temps.

Multi tâche préemptif L’OS détermine quand un processus a eu assez de temps CPU.

Multi tâche non pré- Le processus détermine lui même quand il a eu assez de temps
emptif CPU.

Formation permanente – ARS 2


UNIX : Généralités – Historique UNIX, un système d’exploitation

Exemples :

MS DOS mono utilisateur, mono tâche

Windows 95/98 mono utilisateur, multi tâche non préemptif

Windows NT, 2000, XP mono utilisateur, multi tâche préemptif

OS/2 mono utilisateur, multi tâche préemptif

UNIX multi utilisateur, multi tâche préemptif

Formation permanente – ARS 3

UNIX : Généralités – Historique UNIX, un système d’exploitation

Concepts novateurs d’UNIX :

« UNIX est construit autour d’une idée forte : la puissance d’un système provient plus des relations
entre les programmes que des programmes eux-mêmes. Beaucoup de programmes UNIX font, de
façon isolé des traitements triviaux ; combinés avec d’autres, ils deviennent des outils généraux et
performants.

La solution d’un problème sous UNIX ne passe pas forcément par l’écriture d’un programme
spécifique mais souvent pas une utilisation combinée et élégante des outils standard.»

Formation permanente – ARS 4


UNIX : Généralités – Historique Panorama de quelques UNIX du marché

§ 1.2 Panorama de quelques UNIX du marché

Marque Site web Version d’UNIX Constructeur de hardware

COMPAQ http ://www.digital.com Tru64 Unix 5.1a oui

HP http ://www.hp.com HP-UX 11.x oui

IBM http ://www.ibm.com AIX 5.x oui

SGI http ://www.sgi.com IRIX 6.x.y oui

SUN http ://www.sun.com Solaris 9 oui

CRAY http ://www.cray.com Unicos ?. ? oui

SANTA CRUZ http ://www.sco.com SCO 5.5 ? non

NOVELL http ://www.novell.com Unixware 4.0 ? non

LINUX http ://www.kernel.org noyau 2.x.y non

FREEBSD http ://www.freebsd.org FreeBSD 4.6.2 non

NETBSD http ://www.netbsd.org NetBSD 1.6.x non

OPENBSD http ://www.openbsd.org OpenBSD 3.1 non

L’arbre généalogique d’UNIX est très complexe. Se reporter à l’annexe pour un schéma détaillé.

Formation permanente – ARS 5

UNIX : Généralités – Historique Les différentes familles d’UNIX

§ 1.3 Les différentes familles d’UNIX

Du point de vue de l’utilisateur, les divers UNIX se ressemblent beaucoup.

Du point de vue de l’administration, les divers UNIX ont chacun des spécificités (les
commandes liées au hardware varient, on trouve des extensions propres à chaque constructeur). En
pratique, l’administrateur attend toujours.

Plusieurs tentatives d’unification :

– System V Interface Definition de AT&T (SVID, SVID2, SVID3 en 1989)


– IEEE POSIX (POSIX1003.1 en 1990)
– X/OPEN Portability Guide (XPG4 en 1993) du consortium X/OPEN (créé en 1984)

Mais. . .

Formation permanente – ARS 6


UNIX : Généralités – Historique Les différentes familles d’UNIX

Il reste 2 grandes familles d’UNIX issues d’un schisme :


– la famille System V avec notamment la dernière version connue sous le nom de System V
release 4 (alias SVR4)
– la famille BSD issue de l’université de Berkeley (BSD  Berkeley Software Distribution)

Votre rôle : connaître les principes et les mécanismes d’UNIX afin de savoir s’adapter à n’importe
quel UNIX.

Formation permanente – ARS 7

UNIX : Généralités – Historique Les différentes familles d’UNIX

Ken Thompson et Dennis M. Ritchie, les parents d’Unix


On notera les teletypes 33 !

Formation permanente – ARS 8


Définition du rôle de l’administrateur

Chapitre 2 : Définition du rôle de l’administrateur

Formation permanente – ARS 9

Définition du rôle de l’administrateur Les principales missions de l’administrateur

§ 2.1 Les principales missions de l’administrateur

– gérer les comptes utilisateurs (tâche simple et automatisable)


– assister et éduquer les utilisateurs (réponses à leurs questions, documentation à jour)
– gérer les logiciels (installation, configuration, mise à jour)
– gérer le matériel (panne, remplacement, ajout)
– assurer la sécurité du système et des utilisateurs (sauvegardes fiables et régulières, contrôle
d’accès, utilisations abusives de ressources)
– vérification de l’adéquation du matériel avec son utilisation (identifier les goulets d’étranglement)
– maintenance de premier niveau (diagnostiquer une panne, appel de la maintenance constructeur)
– gestion quotidienne (multiples tâches, petites ou grosses)

Formation permanente – ARS 10


Définition du rôle de l’administrateur Les principales missions de l’administrateur

Autres facettes du métier :

– diplomatie, police
– aspects légaux (chiffrement, etc.)
– enquêtes judiciaires (piratage informatique, articles pédophiles)
– relations commerciales
– politique d’utilisation des machines

Bien sûr, la charge de travail dépend de la taille du site (cf annexe B).

L’administrateur est en première ligne lorsqu’un problème surgit. C’est lui qu’on incrimine
naturellement lorsque quelque chose ne marche pas.

Formation permanente – ARS 11

Définition du rôle de l’administrateur Quelques règles de bon sens

§ 2.2 Quelques règles de bon sens

1. Votre pire ennemi, c’est vous.


rm /tmp *
2. Si vous êtes fatigué, ne faites rien.

3. Pas de modification importante un vendredi après-midi.

4. Soyez sûr de pouvoir revenir en arrière.


mv foo foo.0
cp foo.0 foo
vi foo
5. Documentez ce que vous faites.

6. Faites comme si vous ne pouviez pas venir demain.

7. Attention à l’expansion des caractères génériques.


rm -rf .*

Formation permanente – ARS 12


Définition du rôle de l’administrateur Quelques règles de bon sens

Administrateur système bon sens  technicité  rigueur

Formation permanente – ARS 13

Définition du rôle de l’administrateur Connaissances de base d’un administrateur

§ 2.3 Connaissances de base d’un administrateur

Administrateur d’Unix : d’abord un utilisateur expert d’Unix

– environnement utilisateur
– aide en ligne
– système de fichiers
– utilisation du shell
– utilisation d’un éditeur de texte
– commandes de base
– programmation shell

Formation permanente – ARS 14


Premiers contacts avec UNIX

Chapitre 3 : Premiers contacts avec UNIX

Avant de commencer : n’ayez pas peur d’expérimenter. Le sytème ne vous fera pas de mal.

En mode utilisateur, vous ne pouvez rien abîmer en utilisant le système. UNIX, par conception,
possède des notions de sécurité, afin d’éviter aux utilisateur «normaux» de le déconfigurer.

En mode administrateur, bien sûr, faites attention. On limitera tout travail en mode administrateur
au minimum.
Formation permanente – ARS 15

Premiers contacts avec UNIX Votre compte UNIX : login, mot de passe

§ 3.1 Votre compte UNIX : login, mot de passe

Un utilisateur Unix est equivalent à :

– un identificateur (sur 8 lettres en général), son «nom» au sens informatique ; appelé login ;
– un mot de passe confidentiel ;

Gare aux sanctions en cas d’«amusement» avec le compte d’un autre utilisateur !

Cf la charte informatique en annexe.

Formation permanente – ARS 16


Premiers contacts avec UNIX Principales règles sur les mots de passe

§ 3.2 Principales règles sur les mots de passe

– un mot de passe ne se prête pas !


– un mot de passe ne s’oublie pas !
– un mot de passe n’est pas facile à trouver ! :
– évitez qu’il ne se rapporte pas à vous (nom, voiture, chien)
– évitez les mots dans des dictionnaires
– évitez les prénoms
– il doit comporter au moins 6 caractères, en général 8
– les majuscules et les minuscules sont différenciées
– utiliser des chiffres et des caractères spéciaux : par exemple Kpiten[, &7oubon, etc.

Cf http://www.cru.fr/securite/Cours/mot-de-passe-jplg.html

Formation permanente – ARS 17

Premiers contacts avec UNIX Changer son mot de passe UNIX

§ 3.3 Changer son mot de passe UNIX

La commande standard pour changer son mot de passe sur une machine UNIX est passwd.

Sur les systèmes UNIX qui utilisent un mécanisme de centralisation des mots de passe (appelé NIS),
la commande pour changer son mot de passe est passwd.

C’est le cas de la formation permanente  yppasswd

Cf l’annexe sur les mots de passe pour d’autres renseignements.

Formation permanente – ARS 18


Premiers contacts avec UNIX Connexion sur un terminal texte UNIX

§ 3.4 Connexion sur un terminal texte UNIX

Terminal texte (modèle VT100)

Formation permanente – ARS 19

Premiers contacts avec UNIX Connexion sur un terminal texte UNIX

La demande du login et du mot de passe ressemble globalement à :

Login:
Password:

Login:
Password:

Formation permanente – ARS 20


Premiers contacts avec UNIX Connexion sur un terminal texte UNIX

Attention :

Pour une connexion sur une console, il ne faut pas entrer son nom de login alors que la touche
CAPS LOCK est activée. En effet, si le nom de login est tout en majuscules, l’ordinateur croira que le
terminal ne connait pas les lettres minuscules et vous vous retrouverez dans une session où l’on ne
distinguera pas minuscules des majuscules.

Remèdes :
– se déconnecter (la meilleure méthode)
– ou taper la commande stty -lcase ou STTY -LCASE

Attention bis :

UNIX fait la différence entre les lettres minuscules et majuscules au niveau des noms de
commande et des noms de fichiers.

Formation permanente – ARS 21

Premiers contacts avec UNIX Connexion sur un terminal graphique UNIX

§ 3.5 Connexion sur un terminal graphique UNIX

Station de travail UNIX (SUN Blade 100)

Formation permanente – ARS 22


Premiers contacts avec UNIX Connexion sur un terminal graphique UNIX

La demande du login et du mot de passe ressemble globalement à :

vangogh
login:
Password:
Login:
Password:

Formation permanente – ARS 23

Premiers contacts avec UNIX Connexion sur un terminal graphique UNIX

Une fois connecté via l’interface graphique, on utilisera principalement un programme d’émulation de
terminal de type texte qui fournit dans une fenêtre une connexion comme sur un terminal texte :

L’émulateur de terminal s’appelle xterm.

Formation permanente – ARS 24


Premiers contacts avec UNIX L’interface graphique UNIX

§ 3.6 L’interface graphique UNIX

Unix dispose d’un grand nombre d’interfaces graphiques comparé à des systèmes comme Windows
ou Macintosh :
SunView, NeWS, OpenWindows, View, CDE, KDE, GNOME, Berlin, etc.

Cf le site http://www.plig.org/xwinman/

Formation permanente – ARS 25

Premiers contacts avec UNIX L’interface graphique UNIX

Bureau de travail sous CDE :

Formation permanente – ARS 26


Premiers contacts avec UNIX L’interface graphique UNIX

Bureau de travail sous KDE (http://www.kde.org) :

Formation permanente – ARS 27

Premiers contacts avec UNIX L’interface graphique UNIX

Bureau de travail sous GNOME (http://www.gnome.org) :

Formation permanente – ARS 28


Premiers contacts avec UNIX Les langages de commandes UNIX : les shells

§ 3.7 Les langages de commandes UNIX : les shells

A l’origine, des teletypes puis des consoles texte.

 l’interaction de base se fait au moyen de


phrases à taper sur un clavier (par opposition
aux interfaces graphiques à la Windows ou de
Macintosh).

A gauche, une console texte DIGITAL VT100.

A droite, un teletype DIGITAL (genre de machine à écrire).

Formation permanente – ARS 29

Premiers contacts avec UNIX Les langages de commandes UNIX : les shells

Le shell est un programme qui permet la saisie et l’interprétation de ce qui est tapé. Le shell est juste
une interface avec le système.

MS-DOS comporte un shell aux possibilités restreintes par rapport aux shells Unix.

Le shell est aussi un vrai langage de programmation, interprété (non compilé) offrant les structures
de base de programmation de tout autre langage.

Sous Unix, le shell est un programme au même titre qu’un autre. Le shell de travail est
interchangeable par un autre shell (à la syntaxe près comme de bien entendu).

Formation permanente – ARS 30


Premiers contacts avec UNIX Les langages de commandes UNIX : les shells

Les shells les plus répandus :

Shell Program Description

Bourne shell sh disponible sur toute plateforme Unix

C shell csh shell développé pour BSD

Korn shell ksh Bourne shell amélioré par AT&T

Bourne again shell bash Shell distribué avec linux ; version amé-
liorée de sh et csh

Dans ce cours, on distinguera le shell de programmation (car on peut programmer grâce à un


interpréteur de commandes s’il est bien pensé) du shell de travail lors d’une session interactive. Les
2 shells n’ont pas de raison d’être identiques (cf plus loin sur ce que cela implique).

Formation permanente – ARS 31

Premiers contacts avec UNIX Les langages de commandes UNIX : les shells

Tous les shells se présentent sous la même forme à l’écran lorsqu’ils fonctionnent :
– une chaîne de caractères affiche que le shell attend que l’utilisateur tape quelque chose au
clavier ; c’est le prompt.
– un curseur qui va se déplacer au fur et à mesure de la saisie des commandes

Pour ce cours, on utilisera le caractère % pour désigner le prompt d’un utilisateur normal.

Formation permanente – ARS 32


Premiers contacts avec UNIX Les langages de commandes UNIX : les shells

La suite du support de cours comportera des exemples comme :

% ls

Il ne faudra jamais taper la chaîne de prompt lorsque vous testerez par vous mêmes les
commandes indiquées.

Pour terminer une session shell, on tape la commande commune à tous les shells :
% exit

Formation permanente – ARS 33

Premiers contacts avec UNIX Formes générales des commandes Unix

§ 3.8 Formes générales des commandes Unix

Une commande Unix  un ensemble de mots séparés par des caractères blancs (caractère espace,
tabulation)

Le premier mot : le nom de la commande

Le reste des mots : les paramètres de la commande

Particularités de certains mots : des options qui changent le comportement de la commande

En pratique on trouvera donc écrit :

commande [options] parametres


Les 2 crochets [ et ] indiquent que les options ne sont pas obligatoires. Il ne faut pas taper ces
crochets sur la ligne de commande.

Formation permanente – ARS 34


Premiers contacts avec UNIX Formes générales des commandes Unix

Comment spécifie-t-on une option ?

Une option est quelque chose de prévu par le programme  c’est le programmeur qui aura toujours
le dernier mot.

Il reste une tendance générale : Une option est introduite par le signe - et est souvent constituée
d’une seule lettre comme par exemple -a. (mais attention aux exceptions nombreuses)

Souvent on pourra cumuler des options :

ls -a -l  ls -al

Souvent (mais pas tout le temps), l’ordre des options n’a pas d’importance. (cf getopt(1) ou
getopt(3))
ls -a -l  ls -al  ls -la  ls -l -a

Formation permanente – ARS 35

Premiers contacts avec UNIX Documentation Unix en ligne : man

§ 3.9 Documentation Unix en ligne : man

Il existe une documentation électronique accessible pendant le fonctionnement du système : c’est


l’aide en ligne.

La commande donnant l’aide est man. Elle donne accès aux pages de manuel des commandes Unix
qui sont réparties selon des sections comme suit :

– section 1  commandes normales


– section 2  appels systèmes
– section 3  fonctions de programmation C
– section 4  périphériques et pilotes de périphériques
– section 5  format de fichiers
– section 6  jeux
– section 7  divers
– section 8  commandes de gestion du système

Formation permanente – ARS 36


Premiers contacts avec UNIX Documentation Unix en ligne : man

Les numéros de section apparaissent dans de nombreux exemples.

Lorsque l’on verra getopt(3), il faudra se reporter à la commande getopt de la section 3 du


manuel.

man :
Syntaxe de la commande
man [options] commande
avec en particulier comme option :
man [numero de section] commande
man [-s numero de section] commande

 Inconvénient : il faut connaitre le nom de la commande (nom anglais très souvent)


L’aide est plus là pour se rappeler les nombreuses options des commandes et leurs syntaxes
particulières.

Formation permanente – ARS 37

Premiers contacts avec UNIX Documentation Unix en ligne : man

Exemple : man fortune renvoie :

On remarque :
– affichage page d’écran par page d’écran pour mieux lire la doc
– plusieurs rubriques (NAME, SYNOPSIS, DESCRIPTION, . . .)

Formation permanente – ARS 38


Premiers contacts avec UNIX Documentation Unix en ligne : man

On navigue entre les pages d’écran de la documentation par :


– la touche SPC pour avancer (ou f  forward)
– la touche b pour reculer (b  backward)

Formation permanente – ARS 39

Premiers contacts avec UNIX Documentation Unix en ligne : man

On quitte :
– quand on arrive à la fin de la documentation
– prématurément par la touche q (q  quit)

Formation permanente – ARS 40


Premiers contacts avec UNIX Documentation Unix en ligne : man

Quelques pages de manuel intéressantes :


– la page de la commande man que l’obtient par man man
– les pages d’introduction de chaque section que l’on obtient par man 1 intro,
man 2 intro, man 3 intro, etc.

Formation permanente – ARS 41

Premiers contacts avec UNIX Documentation Unix en ligne : man

Quand on ne connait pas le nom de la commande, on peut demander les noms des commandes
dont le descriptif contient une certaine chaîne de caractères :
man -k chaine

Exemple :

% man -k tune
xvidtune(1) - video mode tuner for XFree86
xvidtune(1) - video mode tuner for XFree86
fortune(6) - print a random, hopefully interesting, adage
tunefs(8) - tune up an existing file system

Formation permanente – ARS 42


Manipulations de fichiers Unix

Chapitre 4 : Manipulations de fichiers Unix

§ 4.1 Arborescence de fichiers

Sur Unix, les fichiers sont identifiés par leur nom de fichier, qui peuvent contenir n’importe quel
caractère (sauf /) et peuvent faire jusqu’à 256 caractères de long, voire plus selon les Unix.

Au concept de fichier est associé la notion de répertoire (en anglais directory). Un répertoire est
simplement une collection de fichiers organisée de manière arborescente.

Un fichier peut être référencé par son chemin d’accès, qui est constitué du nom de fichier, précédé
par le nom de répertoire qui le contient sous la forme :

chemin d’accès = répertoire / nom

Formation permanente – ARS 43

Manipulations de fichiers Unix Arborescence de fichiers

Arborescence

Principe classique de l’arborescence :

– une racine : désignée par "/" (en anglais «slash»)


– nœuds : répertoires
– feuilles : fichiers

bin dev usr tmp

ls include

sys

stat.h

Selon ce schéma, 3 désignations possibles d’un fichier.

Formation permanente – ARS 44


Manipulations de fichiers Unix Arborescence de fichiers

chemin d’accès absolu :

chemin d’accès = répertoire / nom

Si le nom de répertoire commence par /, il s’agit d’une référence absolue par rapport au répertoire
racine /, constituée d’une liste des répertoires à parcourir depuis la racine pour accèder au fichier.

par exemple : /usr/include/sys/stat.h

on regarde
/ depuis ce
point de
reference
bin dev usr tmp

ls include

sys

stat.h

Formation permanente – ARS 45

Manipulations de fichiers Unix Arborescence de fichiers

chemin d’accès relatif :

chemin d’accès = répertoire / nom

Si le nom de répertoire ne commence pas par /, il s’agit d’une référence relative par rapport au
répertoire courant.

Le répertoire courant est noté .

Le répertoire parent du répertoire courant est noté ..

directory père

..

directory courant
.

Formation permanente – ARS 46


Manipulations de fichiers Unix Arborescence de fichiers

par exemple, depuis /usr/include/ : sys/stat.h

bin dev usr tmp


on regarde
ls include depuis ce
point de
reference
sys

stat.h

Formation permanente – ARS 47

Manipulations de fichiers Unix Arborescence de fichiers

par exemple, depuis /usr/include/ : ../../bin/ls

bin dev usr tmp


on regarde
ls include depuis ce
point de
reference
sys

stat.h

Formation permanente – ARS 48


Manipulations de fichiers Unix Arborescence de fichiers

chemin d’accès relatif par rapport à un utilisateur :

Sur le principe identique à un chemin relatif sauf que le point de départ est le répertoire d’un
utilisateur que l’on désigne par le signe ˜ suivi du nom de l’utilisateur :

% ls ~besancon
fichier1 fichier2 rep1

bin dev ... tmp

ls besancon

fichier1 fichier2 rep1

Formation permanente – ARS 49

Manipulations de fichiers Unix Liste des fichiers : ls

§ 4.2 Liste des fichiers : ls

(en anglais list)

Syntaxe : ls [options] fichiers

Principales options (cumulables) :


– option -l : affichage au format long des informations relatives aux fichiers
– option -R : liste récursive
– option -d : affichage des noms des répertoires et non de leur contenu
– option -F : affichage des fichiers avec un suffixe désignant le type du fichier
– option -a : affichage des fichiers dont les noms commencent par ’.’

Formation permanente – ARS 50


Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 1

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls
a b c d e f

Formation permanente – ARS 51

Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 2

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls -l
total 2
drwxr-xr-x 2 besancon 512 Oct 1 16:42 a
-rw-r--r-- 1 besancon 0 Oct 1 16:42 b
-rw-r--r-- 1 besancon 0 Oct 1 16:42 c
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:42 e
-rw-r--r-- 1 besancon 0 Oct 1 16:42 f

Formation permanente – ARS 52


Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 3

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls -R
a b c d e f

a:
y z

e:
t

Formation permanente – ARS 53

Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 4

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls -Rl
total 2
drwxr-xr-x 2 besancon 512 Oct 1 16:43 a
-rw-r--r-- 1 besancon 0 Oct 1 16:42 b
-rw-r--r-- 1 besancon 0 Oct 1 16:42 c
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e
-rw-r--r-- 1 besancon 0 Oct 1 16:42 f

a:
total 0
-rw-r--r-- 1 besancon 0 Oct 1 16:43 y
-rw-r--r-- 1 besancon 0 Oct 1 16:43 z

e:
total 0
-rw-r--r-- 1 besancon 0 Oct 1 16:43 t

Formation permanente – ARS 54


Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 5

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls -F
a/ b c d e/ f

% ls -lF
total 2
drwxr-xr-x 2 besancon 512 Oct 1 16:43 a/
-rw-r--r-- 1 besancon 0 Oct 1 16:42 b
-rw-r--r-- 1 besancon 0 Oct 1 16:42 c
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e/
-rw-r--r-- 1 besancon 0 Oct 1 16:42 f

Formation permanente – ARS 55

Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 6

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls a
y z

% ls -d a
a

% ls -l a
-rw-r--r-- 1 besancon 0 Oct 1 16:43 y
-rw-r--r-- 1 besancon 0 Oct 1 16:43 z

% ls -ld a
drwxr-xr-x 2 besancon 512 Oct 1 16:43 a

Formation permanente – ARS 56


Manipulations de fichiers Unix Liste des fichiers : ls

Exemple 7

% ls -aF ~besancon
./ .lessrc .tvtwmrc
../ .login@ .twmrc
.Xauthority .logout@ .weblink
.Xdefaults .lynxrc .workmandb
.Xresources .mailcap@ .workmanrc

Par défaut, la commande ls n’affiche pas les noms de fichiers commençant par ’.’ qui par convention
sont des fichiers de configuration d’utilitaires.

Formation permanente – ARS 57

Manipulations de fichiers Unix Affichage du contenu d’un fichier texte : cat

§ 4.3 Affichage du contenu d’un fichier texte : cat

(en anglais concatenate)

Syntaxe : cat [options] fichiers

Par exemple :
% cat /etc/motd
SunOS Release 4.1.4 (EXCALIBUR [1.1]): Fri Aug 8 17:43:56 GMT 1997
This system is for the use of authorized users only. Individuals using
this computer system without authority, or in excess of their authority,
are subject to having all of their activities on this system monitored
and recorded by system personnel.

In the course of monitoring individuals improperly using this system, or


in the course of system maintenance, the activities of authorized users
may also be monitored.

Anyone using this system expressly consents to such monitoring and is


advised that if such monitoring reveals possible evidence of criminal
activity, system personnel may provide the evidence of such monitoring
to law enforcement officials.

Formation permanente – ARS 58


Manipulations de fichiers Unix Affichage du contenu d’un fichier texte : more

§ 4.4 Affichage du contenu d’un fichier texte : more

(en anglais more)

En cas de texte très long, la commande cat n’est pas pratique. On lui préférera la commande more
pour son affichage page d’écran par page d’écran.

Syntaxe : more [options] fichiers

– Caractère q pour quitter


– Caractère espace pour avancer d’une page d’écran
– Caractère b pour revenir en arrière d’une page (backward)
– Caractère f pour avancer d’une page d’écran (forward)

La commande man affiche en fait les pages du manuel au moyen de la commande more.

Formation permanente – ARS 59

Manipulations de fichiers Unix Destruction d’un fichier : rm

§ 4.5 Destruction d’un fichier : rm

(en anglais remove)

Syntaxe : rm [options] fichiers

Quelques options :
– option "-i" : confirmation à chaque suppression (garde fou)
– option "-r" : suppression récursive
– option "-f" : suppression en force d’un fichier même si ses droits ne s’y prêtent pas

rm -rf répertoires permet de supprimer récursivement toute une arborescence sans


demande de confirmation. Attention : dangereux.

Formation permanente – ARS 60


Manipulations de fichiers Unix Destruction d’un fichier : rm

on regarde
depuis ce
point de
reference

a b c d e f

y z t

% ls -F
a/ b c d e/ f

% rm f
% ls -F
a/ b c d e/

% rm a
rm: a is a directory

% rmdir a
rmdir: a: Directory not empty
% ls a
y z

% rm -rf a
% ls -F
b c d e/

% rm -i b
rm: remove b? y
% ls -F
c d e/

Formation permanente – ARS 61

Manipulations de fichiers Unix Duplication d’un fichier : cp

§ 4.6 Duplication d’un fichier : cp

(en anglais copy)

Syntaxes :
cp [options] fichier-départ fichier-destination
cp [options] fichiers-départ répertoire-destination

La destination peut être un fichier ou un répertoire.


– Dans le cas d’une destination fichier, on renomme le fichier original.
– Dans le cas d’une destination répertoire, on déplace le fichier original en lui conservant son nom.

Quelques options :

"-i" : confirmation à chaque écrasement de fichier

"-r" : copie récursive

Formation permanente – ARS 62


Manipulations de fichiers Unix Duplication d’un fichier : cp

% ls -lF
total 3
drwxr-xr-x 2 besancon 512 Oct 1 16:43 a/
-rw-r--r-- 1 besancon 0 Oct 1 16:42 b
-rw-r--r-- 1 besancon 0 Oct 1 16:42 c
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e/
-rw-r--r-- 1 besancon 342 Oct 1 17:25 f

% cp f g
% ls -lF
total 4
drwxr-xr-x 2 besancon 512 Oct 1 16:43 a/
-rw-r--r-- 1 besancon 0 Oct 1 16:42 b
-rw-r--r-- 1 besancon 0 Oct 1 16:42 c
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e/
-rw-r--r-- 1 besancon 342 Oct 1 17:25 f
-rw-r--r-- 1 besancon 342 Oct 1 17:25 g

% cp /tmp/motd h
% ls -l h
-rw-r--r-- 1 besancon 752 Oct 1 17:26 h

Formation permanente – ARS 63

Manipulations de fichiers Unix Déplacement et renommage d’un fichier : mv

§ 4.7 Déplacement et renommage d’un fichier : mv

(en anglais move)

Syntaxes :
mv [options] fichier-départ fichier-destination
mv [options] fichiers-départ répertoire-destination
mv [options] répertoire-depart répertoire-destination

Quand source de départ et destination sont du même type (fichier - fichier ou répertoire - répertoire),
on réalise un renommage. Sinon on déplace les objects.

Quelques options :

"-i" : confirmation à chaque écrasement de fichier

Formation permanente – ARS 64


Manipulations de fichiers Unix Déplacement et renommage d’un fichier : mv

% ls -lF
total 3
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e/
-rw-r--r-- 1 besancon 752 Oct 1 17:25 f

% mv f toto
% ls -lF
total 3
-rw-r--r-- 1 besancon 0 Oct 1 16:42 d
drwxr-xr-x 2 besancon 512 Oct 1 16:43 e/
-rw-r--r-- 1 besancon 752 Oct 1 17:25 toto

Formation permanente – ARS 65

Manipulations de fichiers Unix Déplacement et renommage d’un fichier : mv

Dans le cas d’une destination répertoire, on déplace le fichier original en lui conservant son nom.

% mv toto /tmp
% ls -l toto
toto not found
% ls -l /tmp/toto
-rw-r--r-- 1 besancon 752 Oct 1 17:25 /tmp/toto

quelques options :

"-i" : confirmation à chaque écrasement de fichier

% mv -i b c
remove c? y
% ls -l b c
b not found
-rw-r--r-- 1 besancon 752 Oct 1 17:30 c

Formation permanente – ARS 66


Manipulations de fichiers Unix Création de répertoires : mkdir

§ 4.8 Création de répertoires : mkdir

(en anglais make directory)

Syntaxe : mkdir [options] répertoires


% mkdir z
% ls -ldF z
total 1
drwxr-xr-x 2 besancon 512 Oct 1 17:40 z/

Création directe de sous répertoires en cascade :


% mkdir -p repertoire1/ss-repertoire2/ss-ss-repertoire3
% ls -R
repertoire1/

repertoire1:
ss-repertoire2/

repertoire1/ss-repertoire2:
ss-ss-repertoire3/

repertoire1/ss-repertoire2/ss-ss-repertoire3:

Formation permanente – ARS 67

Manipulations de fichiers Unix Suppression de répertoires : rmdir

§ 4.9 Suppression de répertoires : rmdir

(en anglais remove directory)

Syntaxe : rmdir répertoires

% cp /etc/motd z/toto
% rmdir z
rmdir: z: Directory not empty

Pas d’options dignes d’intérêt.

Formation permanente – ARS 68


Manipulations de fichiers Unix Positionnement et position dans les répertoires : cd, pwd

§ 4.10 Positionnement et position dans les répertoires : cd, pwd

Changement de répertoire courant : cd répertoire


(en anglais change directory)

Affichage du répertoire courant : pwd


(en anglais present working directory)

% cd /etc
% pwd
/etc
% cd /usr/include
% pwd
/usr/include
% cd /inexistant
/inexistant: bad directory

Selon le shell, le message d’erreur dans le dernier cas peut changer :


% cd /inexistant
bash: /inexistant: No such file or directory

Formation permanente – ARS 69

Manipulations de fichiers Unix Panorama d’éditeurs de fichier texte

§ 4.11 Panorama d’éditeurs de fichier texte

Il existe beaucoup d’éditeurs de texte sous Unix mais seuls quelques uns sont suffisamment
robustes pour être utilisés efficacement et avec confiance :

– Le seul éditeur de texte standard sous Unix : vi


(cf. http://www.math.fu-berlin.de/~guckes/vi/ pour de la doc)
– emacs. Très puissant, complexe à maîtriser, simple une fois qu’on sait s’en servir. Cf
http://www.emacs.org.
– xemacs. Variante plus graphique d’emacs.
– nedit. Simple et intuitif grâce à ses menus.

Formation permanente – ARS 70


Manipulations de fichiers Unix Editeur de fichier texte : vi

§ 4.12 Editeur de fichier texte : vi

(en anglais visual interface)

C’est l’éditeur de texte standard sur Unix. Il fonctionne sur tout type de terminal texte, sur tout Unix.

Inconvénient :
– il demande de la pratique

Il posséde deux modes de fonctionnement :


– un mode de saisie de commandes à appliquer au texte
– un mode de saisie du texte

Formation permanente – ARS 71

Manipulations de fichiers Unix Editeur de fichier texte : vi

Commande passant en mode édition

Séquence Action

i Insérer à la position courante du curseur

a Insérer à la position suivante du curseur

I Insérer en début de ligne

A Insérer en fin de ligne

o Ouvrir une nouvelle ligne en dessous du curseur

O Ouvrir une nouvelle ligne au dessus du curseur

cw Changer un mot

c$ Changer jusqu’à la fin de ligne

Sortie du mode édition

On passe du mode saisie de texte au mode commande par la touche ESC .

Formation permanente – ARS 72


Manipulations de fichiers Unix Editeur de fichier texte : vi

Commandes principales

Séquence Action

x Détruire le caractère sous le curseur

r Remplacer le caractère sous le curseur

dd Effacer la ligne courante

dw Effacer le mot sous le curseur

. Répéter la dernière commande

J Joindre la ligne suivante avec la ligne courante

/toto Rechercher toto dans le texte

n Répéter la dernière recherche

u Annulation de la dernière commande (undo)

CTRL L Rafraichir l’écran

Formation permanente – ARS 73

Manipulations de fichiers Unix Editeur de fichier texte : vi

Sauvegarde / Sortie de vi

Séquence Action

:w Sauver le fichier édité

:w toto Sauver dans le fichier toto

:q Quitter vi

:q ! Quitter vi sans sauvegarder la moindre chose

:wq Sauver puis quitter vi

:r toto Insérer le contenu du fichier toto

Formation permanente – ARS 74


Manipulations de fichiers Unix Editeur de fichier texte : vi

Commandes de copier/coller

Séquence Action

yy Copier la ligne courante dans la mémoire copier/coller

p Coller dans le texte le contenu de la mémoire précédente

nombre yy Copier «nombre» lignes dans la mémoire copier/coller

Formation permanente – ARS 75

Manipulations de fichiers Unix Editeur de fichier texte : vi

Commandes de substitution

Séquence Action

:s/toto/titi/ Sur la ligne du curseur, remplacer le


premier mot «toto» par «titi»

:s/toto/titi/g Sur la ligne du curseur, remplacer tous


les mots «toto» par «titi»

:1,$s/toto/titi/ De la ligne 1 à la dernière ligne ($), rem-


placer le premier mot «toto» par «titi»

:1,$s/toto/titi/g De la ligne 1 à la dernière ligne ($), rem-


placer tous les mots «toto» par «titi»

Formation permanente – ARS 76


Manipulations de fichiers Unix Editeur de fichier texte : vi

Autres exemples de séquences de substitution :

1. La séquence «:1,$s/toto/titi/g» remplace de la première ligne à la dernière ligne


chaque mot /toto par titi.
2. La séquence «:%s/toto/titi/g» remplace de la première ligne à la dernière ligne
chaque mot /toto par titi.
 On peut employer % à la place de 1,$.

3. La séquence «:1,$s/toto//g» remplace de la première ligne à la dernière ligne chaque


mot toto par rien du tout, c’est-à-dire que l’on supprime de la première ligne à la dernière ligne
chaque mot toto

4. La séquence «:1,$s/\/toto/titi/g» remplace de la première ligne à la dernière ligne


chaque mot /toto par titi.
5. La séquence «:1,$s;/toto;titi;g» remplace de la première ligne à la dernière ligne
chaque mot /toto par titi.
 On peut employer d’autres caractères de séparation que le /.

Formation permanente – ARS 77

Manipulations de fichiers Unix Editeur de fichier texte : vi

6. La séquence «:1,.s/toto/titi/g» remplace de la première ligne à la ligne courante


(désignée par .) chaque mot toto par titi.

7. La séquence «:.,$/toto/titi/g» remplace de la ligne courante (désignée par .) jusqu’à


la dernière ligne (désignée par $) chaque mot toto par titi.

8. La séquence «:.,.+3s/toto/titi/g» remplace de la ligne courante (désignée par .) à


3 lignes plus bas (désignée par .+3) chaque mot toto par titi.

9. La séquence «:.-3,.s/toto/titi/g» remplace de 3 lignes plus haut que la ligne


courante (.-3) à la ligne courante chaque mot toto par titi.

Formation permanente – ARS 78


Manipulations de fichiers Unix Editeur de fichier texte : vi

Principales options

Séquence Action

:set all Afficher toutes les options possibles

:set nu Afficher les numéros de ligne

:set toto Positionner l’option «toto» à vrai

:set no toto Positionner l’option «toto» à faux

Formation permanente – ARS 79

Manipulations de fichiers Unix Droits d’accès d’un fichier

§ 4.13 Droits d’accès d’un fichier

Les droits d’accès à un fichier se voient grâce à la commande ls -l :


% ls -l
total 16
-rw-r--r-- 1 besancon 15524 Sep 15 15:17 droits.idraw
Plus particulièrement, les droits sont indiqués par les 10 premiers caractères de chaque ligne
affichée :

r w x r w x r w x
type du
fichier

user group others

Formation permanente – ARS 80


Manipulations de fichiers Unix Droits d’accès d’un fichier

Il existe trois droits d’accès associés à chaque fichier :

– droits du propriétaire (u  user)


– droits des membres du groupe (g  group)
– droits des autres utilisateurs (o  others)

Il existe trois types de permissions :

– droit en lecture (r  read)


– droit en écriture (w  write )
– droit en exécution (x  execute access)

Formation permanente – ARS 81

Manipulations de fichiers Unix Changements des droits d’accès d’un fichier : chmod

§ 4.14 Changements des droits d’accès d’un fichier : chmod

(en anglais change modes)

Syntaxe : chmod [options] modes fichiers

La précision des modes dans la commande peut prendre deux formes :

– forme symbolique :
"u" (user ), "g" (group), "o" (others) ou "a" (all)
"+" ou "-" ou "="
permissions (r, w ou x)
– forme numérique :
Les permissions sont exprimées en base huit ou octale.
Par exemple : rwx r-x r-x  755

Formation permanente – ARS 82


Manipulations de fichiers Unix Changements des droits d’accès d’un fichier : chmod

Droits Valeur base 2 Valeur base 8

--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7

C’est pourquoi on a par exemple :

rwx r-x r-x  755


rw- r-- r--  644
rw- --- ---  600

Formation permanente – ARS 83

Manipulations de fichiers Unix Changements des droits d’accès d’un fichier : chmod

% ls -l fichier
-rw-r--r-- 1 besancon software 249 Sep 20 22:43 fichier

% chmod g+w fichier


% ls -l fichier
-rw-rw-r-- 1 besancon software 249 Sep 20 22:43 fichier

% chmod o=rw fichier


% ls -l fichier
-rw-rw-rw- 1 besancon software 249 Sep 20 22:43 fichier

% chmod 640 fichier


% ls -l fichier
-rw-r----- 1 besancon software 249 Sep 20 22:43 fichier

Formation permanente – ARS 84


Manipulations de fichiers Unix Attribut spécial de fichier : bit setuid

§ 4.15 Attribut spécial de fichier : bit setuid

Il existe un attribut spécial de fichier réservé à la gestion du système : le bit setuid (4000 en octal).

Avec ce bit positionné, le programme est exécuté avec les droits de l’utilisateur propriétaire.

% ls -lF a b
-rwxr-xr-x 1 besancon software 249 Sep 20 22:43 a
-rwxr-xr-x 1 besancon software 249 Sep 20 22:43 b
% chmod u+s a
% chmod 4711 b
% ls -lF a b
-rwsr-xr-x 1 besancon software 249 Sep 20 22:43 a
-rws--x--x 1 besancon software 249 Sep 20 22:43 b

Formation permanente – ARS 85

Manipulations de fichiers Unix Attribut spécial de fichier : bit setgid

§ 4.16 Attribut spécial de fichier : bit setgid

Il existe un attribut spécial de fichier réservé à la gestion du système : le bit setgid (2000 en octal).

Avec ce bit positionné, le programme est exécuté avec les droits du groupe propriétaire

% ls -lF a b
-rwxr-xr-x 1 besancon software 249 Sep 20 22:43 a
-rwxr-xr-x 1 besancon software 249 Sep 20 22:43 b
% chmod g+s a
% chmod 2711 b
% ls -lF a b
-rwsr-sr-x 1 besancon software 249 Sep 20 22:43 a
-rwx--s--x 1 besancon software 249 Sep 20 22:43 b

Formation permanente – ARS 86


Manipulations de fichiers Unix Attribut spécial de répertoire : sticky bit

§ 4.17 Attribut spécial de répertoire : sticky bit

Il existe un attribut spécial de répertoire réservé à la gestion du système : le sticky bit (1000 en
octal).

Avec ce bit positionné, on ne peut effacer d’un répertoire que ses propres fichiers et pas ceux des
autres.

Exemple d’utilisation sur le répertoire système de stockage des fichiers temporaires

% ls -ld /tmp
drwxrwxrwt 11 amavis amavis 2580 Aug 2 15:40 /tmp
% cd /tmp
% mkdir tmp2
% ls -ld tmp2
drwxr-xr-x 2 besancon adm 117 Aug 2 15:40 tmp2
% chmod 1777 tmp2
% ls -ld tmp2
drwxrwxrwt 2 besancon adm 117 Aug 2 15:40 tmp2
% chmod 777 tmp2
% ls -ld tmp2
drwxrwxrwx 2 besancon adm 117 Aug 2 15:40 tmp2

Formation permanente – ARS 87

Manipulations de fichiers Unix Regular expressions (regexps)

§ 4.18 Regular expressions (regexps)

Besoin pratique : faire des recherches dans des fichiers d’enregistrements de base de données,
d’inventaires, de comptabilité . . . Bref, des fichiers ayant souvent une structure forte.

Pour cela, plusieurs programmes Unix utilisent des critères de reconnaissance de motifs de chaines
de caractères.

Un exemple de motif :

«les lignes commencant par la lettre a»

La regexp est la traduction en langage Unix du motif, ce qui permettra de le reconnaitre au sein d’un
texte dans un fichier.

Ainsi le motif précédent donne la regexp :

ˆa

Formation permanente – ARS 88


Manipulations de fichiers Unix Regular expressions (regexps)

La regexp traduit le motif à rechercher sous la forme d’une suite de contraintes à satisfaire toutes.

Pour construire les contraintes, on dispose des écritures :

caractère désigne la contrainte pour un caractère d’être ce caractère

[caractères] désigne la contrainte pour un caractère d’être parmi la liste indiquée

[ˆcaractères] désigne la contrainte pour un caractère de ne pas figurer dans la liste


indiquée

. désigne la contrainte pour un caractère d’être quelconque

ˆ désigne la contrainte d’être en début de ligne

$ désigne la contrainte d’être en fin de ligne

{m,n} indique que la contrainte mentionnée juste avant doit être satisfaite
entre m et n fois

* indique que la contrainte mentionnée juste avant doit être satisfaite


autant de fois que possible en pratique (de 0 à autant que l’on veut)

Formation permanente – ARS 89

Manipulations de fichiers Unix Regular expressions (regexps)

Application des regexps :

– sélectionner des lignes de fichiers texte qui satisfont la regexp


 c’est l’objet de la commande Unix grep

– faire des remplacements du texte satisfaisant la regexp par un autre texte qui peut-être déduit du
texte initial
 c’est l’objet de la commande Unix sed

Formation permanente – ARS 90


Manipulations de fichiers Unix Regular expressions (regexps)

Exemple 1

Le motif à satisfaire :

la ligne contient le mot elephant

Traduction en regexp :

elephant

En effet, c’est une suite de 8 contraintes à satisfaire toutes :


– contrainte 1 : un caractère doit valoir « e »
– contrainte 2 : un caractère doit valoir « l »
– contrainte 3 : un caractère doit valoir « e »
– contrainte 4 : un caractère doit valoir « p »
– contrainte 5 : un caractère doit valoir « h »
– contrainte 6 : un caractère doit valoir « a »
– contrainte 7 : un caractère doit valoir « n »
– contrainte 8 : un caractère doit valoir « t »

Formation permanente – ARS 91

Manipulations de fichiers Unix Regular expressions (regexps)

Exemple 2

Le motif à satisfaire :

la ligne se termine par 2 caractères en minuscule suivis d’un chiffre

Traduction en regexp :

[a-z][a-z][0-9]$
ou

[a-z]{2}[0-9]$

En effet, c’est une suite de 4 contraintes à satisfaire toutes :


– contrainte 1 : un caractère doit valoir une lettre minuscule, soit [a-z]
– contrainte 2 : un caractère doit valoir une lettre minuscule, soit [a-z]
– contrainte 3 : un caractère doit valoir un chiffre soit [0-9]
– contrainte 4 : être en fin de ligne soit $

Formation permanente – ARS 92


Manipulations de fichiers Unix Regular expressions (regexps)

Exemple 3

Le motif à satisfaire :
mot1:mot2:mot3: en début de ligne où
– mot1 commence par une lettre majuscule
– mot2 se termine par un chiffre
– mot3 est quelconque

Processus de traduction :
1. «en début de ligne»
la regexp est de la forme « ^ »
2. «mot1 commence par une lettre majuscule»
mot1 commence par une lettre majuscule et le reste des lettres est quelconque
mot1 commence par une lettre majuscule et le reste des lettres est quelconque sans pour autant valoir
le caractère : qui sépare les mots
la regexp est de la forme « [A-Z][^:]* »
3. «mot1 :mot2»
la regexp est de la forme « : »

Formation permanente – ARS 93

Manipulations de fichiers Unix Regular expressions (regexps)

4. «mot2 se termine par un chiffre»


mot2 commence par des caractères quelconques et se termine par un chiffre
mot2 commence par des caractères quelconques sans pour autant valoir : qui sépare les mots et se
termine par un chiffre
la regexp est de la forme « [^:]*[0-9] »

5. «mot2 :mot3 :»
la regexp est de la forme « : »

6. «mot3 est quelconque»


mot3 est composé de caractères quelconques
mot3 est composé de caractères quelconques sans pour autant valoir le caractère : qui sépare les mots
la regexp est de la forme « [^:]* »

7. «mot3 :»
la regexp est de la forme « : »

Résultat final, assemblage des résultats intermédiaires :

^[A-Z][^:]*:[^:]*[0-9]:[^:]*:

Formation permanente – ARS 94


Manipulations de fichiers Unix Regular expressions (regexps)

Exemple 4

Soit la regexp :

^[^abc]*
Soit le fichier contenant les lignes suivantes :
ascenceur
berceau
chameau
elephant

La regexp sélectionne les lignes suivantes :


ascenceur
berceau
chameau
elephant
Pourquoi ?

Formation permanente – ARS 95

Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

§ 4.19 Recherche de regexp dans un fichier : grep

Syntaxe : grep [options] regexp fichiers

Quelques options intéressantes :

"-i" : pas de différenciation entre lettres minuscules et majuscules

"-n" : affichage des numéros de ligne

"-l" : n’affiche que les noms de fichiers

"-v" : affichage des lignes ne contenant pas la chaîne précisée

(grep  g/re/p dans vi)

Formation permanente – ARS 96


Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

Exemple 1

Soit le fichier :

Ecrivons toto en minuscules ici.


Et ici ToTo en minuscules et majuscules.
Mais là on ne met pas la regexp de l’exemple.

On voit :
% grep toto fichier
Ecrivons toto en minuscules ici.

Formation permanente – ARS 97

Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

Exemple 2

Soit le fichier :

Ecrivons toto en minuscules ici.


Et ici ToTo en minuscules et majuscules.
Mais là on ne met pas la regexp de l’exemple.

On voit :
% grep -in toto fichier
1:Ecrivons toto en minuscules ici.
2:Et ici ToTo en minuscules et majuscules.

Formation permanente – ARS 98


Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

Exemple 3

Soit le fichier :

Ecrivons toto en minuscules ici.


Et ici ToTo en minuscules et majuscules.
Mais là on ne met pas la regexp de l’exemple.

On voit :
% grep -inv toto fichier
3:Mais là on ne met pas la chaîne de l’exemple.

Formation permanente – ARS 99

Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

Exemple 4

Soit le fichier :

19101259;18111971;LUKOVIC ;DRAGICA
10024113;09051982;LUMINET ;AMANDE
10009175;09051980;LUND ;BRIANA NICOLE
10004978;21041976;LUNDQUIST ;ANNA
10023887;24081983;MEKDJIAN ;SARAH
19404107;19121975;MEKOUAR ;DRISS
19803654;13111975;MEKOUAR ;MOUNA
10003714;22121965;MILON ;NICOLAS
19603414;12101970;MILOSAVLJEVIC ;DRAGANA
19504774;03031977;MILOUDI ;HANAN

On cherche les prénoms qui commencent par DR :


% grep ’;DR[^;]*$’ fichier
19101259;18111971;LUKOVIC ;DRAGICA
19404107;19121975;MEKOUAR ;DRISS
19603414;12101970;MILOSAVLJEVIC ;DRAGANA

Formation permanente – ARS 100


Manipulations de fichiers Unix Recherche de regexp dans un fichier : grep

En pratique, écrire :

– la regexp comprise entre deux apostrophes (l’explication des apostrophes sera vue au niveau du
cours sur la pratique du shell)

– sur l’Unix de SUN, Solaris :


egrep [options] ’regexp’ fichiers

– sur LINUX :
grep -E [options] ’regexp’ fichiers

Formation permanente – ARS 101

Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

§ 4.20 Modification à la volée de contenu de fichiers : sed

(en anglais stream editor )

Syntaxe : sed options fichiers

La commande sed agit sur un flux.

Qu’est qu’un flux ?

Un flux est une quantité de texte envoyé à l’affichage par une commande.

Exemples typiques de flux :


ls
– le résultat d’une commande
– le résultat d’un cat fichier

NB : sed modifie un flux, pas un contenu de fichier : après l’application de la commande, le fichier
appliqué reste inchangé.

Formation permanente – ARS 102


Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Quelques options intéressantes :


– option -e commande : commande à exécuter sur chaque ligne du flux
– option -f script : précision d’un fichier dans lequel prendre les commandes à appliquer sur
chaque ligne de texte

Une commande prend la forme :

[adresse1[,adresse2]]fonction[argument]
(avec les crochets [] désignant l’aspect facultatif de l’objet)

On construit une adresse de ligne grâce à :


– son numéro de ligne
$ pour désigner la dernière ligne
– le caractère
– une regexp que l’on écrit entre /, soit /regexp/

Formation permanente – ARS 103

Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Les fonctions proposées dans sed :


– suppression de ligne : d
– affichage de ligne : p
– substitution au sein des lignes : s/regexp/remplacement/modifiers

Formation permanente – ARS 104


Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Exemple 1

Soit le fichier :
% cat fichier
Ceci est la premiere ligne.
Ceci est la deuxieme ligne.
Ceci est la troisieme ligne.
Ceci est la quatrieme ligne.
Ceci est la cinquieme ligne.

On veut supprimer les 2 premieres lignes du fichier lors de son affichage :


% sed -e ’1,2d’ fichier
Ceci est la troisieme ligne.
Ceci est la quatrieme ligne.
Ceci est la cinquieme ligne.

Formation permanente – ARS 105

Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Exemple 2

Soit le fichier :
% cat fichier
Ceci est la premiere ligne.
Ceci est la deuxieme ligne.
Ceci est la troisieme ligne.
Ceci est la quatrieme ligne.
Ceci est la cinquieme ligne.

On ne veut garder que les 2 premieres lignes du fichier lors de son affichage :
% sed -e ’3,$d’ fichier
Ceci est la premiere ligne.
Ceci est la deuxieme ligne.

Formation permanente – ARS 106


Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Exemple 3

Soit le fichier :
% cat fichier
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise

On veut remplacer le mot «epuise» du fichier par 0 lors de son affichage :


% sed -e ’s/epuise/0/’ fichier
moteur;ferrari;30
moteur;porsche;0
carrosserie;porsche;0
moteur;ford;40
moteur;skoda;0

Formation permanente – ARS 107

Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Exemple 4

Soit le fichier :
% cat fichier
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise

On veut remplacer le mot «epuise» du fichier par 0 pour les lignes parlant de moteur lors de son
affichage :
% sed -e ’/moteur/s/epuise/0/’ fichier
moteur;ferrari;30
moteur;porsche;0
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;0

Formation permanente – ARS 108


Manipulations de fichiers Unix Modification à la volée de contenu de fichiers : sed

Exemple 5

Soit le fichier :
% cat fichier
Les courses de chevals se font a Vincennes.
Les chevals ont 4 jambes. Les chevals sont des equides.

 On veut remplacer le mot «chevals» du fichier par chevaux lors de son affichage :
% sed -e ’s/chevals/chevaux/’ fichier
Les courses de chevaux se font a Vincennes.
Les chevaux ont 4 jambes. Les chevals sont des equides.
 Le remplacement n’a pas lieu sur tous les mots «chevals» au sein d’une ligne !
 On veut remplacer le mot «chevals» du fichier par chevaux lors de son affichage :
% sed -e ’s/chevals/chevaux/g’ fichier
Les courses de chevaux se font a Vincennes.
Les chevaux ont 4 jambes. Les chevaux sont des equides.
 Le remplacement a lieu sur tous les mots «chevals» au sein d’une ligne.

Formation permanente – ARS 109

Manipulations de fichiers Unix Tri d’un fichier : sort

§ 4.21 Tri d’un fichier : sort

Syntaxe : sort [options] fichiers


Quelques options :
– option -n : tri numérique
– option -r : tri par ordre décroissant
– option -t : permet de spécifier le séparateur de mots
– option -k : spécifie la colonne sur laquelle trier
Exemple 1

% cat toto % sort toto


arbre 12
12 2
ascenceur arbre
2 ascenceur
ordinateur ordinateur

Formation permanente – ARS 110


Manipulations de fichiers Unix Tri d’un fichier : sort

Exemple 2

% cat toto % sort toto % sort -n toto % sort -rn toto


12 12 2 33
2 2 3 22
3 22 12 12
33 3 22 3
22 33 33 2

Exemple 3

% cat toto
or:100000
argent:40000
bois:5

% sort toto % sort -t: -k 2 toto % sort -t: -k 2 -n toto


argent:40000 or:100000 bois:5
bois:5 argent:40000 argent:40000
or:100000 bois:5 or:100000

Formation permanente – ARS 111

Manipulations de fichiers Unix Comptage de lignes dans un fichier : wc

§ 4.22 Comptage de lignes dans un fichier : wc

(en anglais word count)

Syntaxe : wc [option] fichiers


Quelques options intéressantes :

"-c" : nombre de caractères uniquement

"-w" : nombre de mots uniquement

"-l" : nombre de lignes uniquement

Par exemple :
% wc fichier
3 16 82 fichier
% wc -l fichier
3 fichier

Formation permanente – ARS 112


Manipulations de fichiers Unix Comparaison de 2 fichiers : diff

§ 4.23 Comparaison de 2 fichiers : diff

(en anglais difference)

Pour réaliser la comparaison ligne à ligne du fichier texte fichier2 par rapport au fichier texte
fichier1 :
diff [-c] fichier1 fichier2

% diff fichier1 fichier2


1c1
< Deux fotes d’ortographe dans cette phrase.
---
> Deux fautes d’orthographe dans cette phrase.

% diff -c fichier1 fichier2


*** fichier1 Sun Sep 9 19:06:13 2001
--- fichier2 Sun Sep 9 19:06:24 2001
***************
*** 1 ****
! Deux fotes d’ortographe dans cette phrase.
--- 1 ----
! Deux fautes d’orthographe dans cette phrase.

Formation permanente – ARS 113

Manipulations de fichiers Unix Extraction des premières lignes de fichiers : head

§ 4.24 Extraction des premières lignes de fichiers : head

(en anglais head)

Syntaxe : head [-N] fichiers

Exemple 1
% head -3 /etc/motd
SunOS Release 4.1.4 (EXCALIBUR.LPS.ENS.FR [1.1]): Fri Aug 8 17:43:56 GMT 1997
This system is for the use of authorized users only. Individuals using
this computer system without authority, or in excess of their authority,

Exemple 2
% head -2 fichier1 fichier2
==> fichier1 <==
Ceci est la premiere ligne.
Ceci est la deuxieme ligne.

==> fichier2 <==


moteur;ferrari;30
moteur;porsche;epuise

Formation permanente – ARS 114


Manipulations de fichiers Unix Extraction des dernières lignes de fichiers : tail

§ 4.25 Extraction des dernières lignes de fichiers : tail

(en anglais tail)

Syntaxes : tail
[-N] fichiers
ou tail [+N] fichiers

Exemple 1
% tail -3 /etc/motd
advised that if such monitoring reveals possible evidence of criminal
activity, system personnel may provide the evidence of such monitoring
to law enforcement officials.

Exemple 2
% tail -2 fichier1 fichier2
==> fichier1 <==
Ceci est la quatrieme ligne.
Ceci est la cinquieme ligne.

==> fichier2 <==


moteur;ford;40
moteur;skoda;epuise

Formation permanente – ARS 115

Manipulations de fichiers Unix Extraction des dernières lignes de fichiers : tail

Exemple 3

% tail +3 /etc/motd
this computer system without authority, or in excess of their authority,
are subject to having all of their activities on this system monitored
and recorded by system personnel.

In the course of monitoring individuals improperly using this system, or


in the course of system maintenance, the activities of authorized users
may also be monitored.

Anyone using this system expressly consents to such monitoring and is


advised that if such monitoring reveals possible evidence of criminal
activity, system personnel may provide the evidence of such monitoring
to law enforcement officials.

Formation permanente – ARS 116


Manipulations de fichiers Unix Extraction des dernières lignes de fichiers : tail

Affichage des dernières lignes en temps réel :


Syntaxe : tail -f fichier

Formation permanente – ARS 117

Manipulations de fichiers Unix Extraction de colonnes : cut

§ 4.26 Extraction de colonnes : cut

Syntaxe : cut [options] fichiers

Plusieurs modes d’utilisation :


– extraction sur chaque ligne de caractères pris isolément :
cut -c 1,8,27 fichier
– extraction sur chaque ligne de caractères d’une position 1 à une position 2 :
cut -c 25-42 fichier
– extraction sur chaque ligne (constituée de mots séparés par un certain délimiteur) de mots pris
isolément :
cut -d: -f 1,5 fichier
– extraction sur chaque ligne (constituée de mots séparés par un certain délimiteur) du mot au mot
 :
cut -d: -f 4-7 fichier
Formation permanente – ARS 118
Manipulations de fichiers Unix Collage de colonnes : paste

§ 4.27 Collage de colonnes : paste

Syntaxe : paste [options] fichiers

Collage simple des colonnes de deux fichiers (TAB comme séparateur de colonnes après collage) :
% cat fichier1
AAA
BBB
% cat fichier2
aaaa
bbbb
cccc
% paste fichier1 fichier2
AAA aaaa
BBB bbbb
cccc

Formation permanente – ARS 119

Manipulations de fichiers Unix Collage de colonnes : paste

Collages complexes :
– Exemple 1
% cat fichier1
AAA
BBB
% cat fichier2
aaaa
bbbb
cccc
% paste -s fichier1 fichier2
AAA BBB
aaaa bbbb cccc
– Exemple 2
% cat fichier
ligne 1
ligne 2
ligne 3
ligne 4
% paste -s -d"\t\n" fichier
ligne 1 ligne 2
ligne 3 ligne 4

Formation permanente – ARS 120


Manipulations de fichiers Unix Manipulation des noms de fichiers : basename

§ 4.28 Manipulation des noms de fichiers : basename

Syntaxe : basename fichier [suffixe]

1. Suppression des composantes du path jusqu’au dernier caractère / :


% basename /users/adm/besancon/esigetel/cours.tex
cours.tex
2. La précision d’un suffixe amène la suppression de ce suffixe également :
% basename /users/adm/besancon/esigetel/cours.tex .tex
cours

Formation permanente – ARS 121

Manipulations de fichiers Unix Recherche de fichiers : find

§ 4.29 Recherche de fichiers : find

Syntaxe : find répertoires expressions


On recherche à partir des répertoires indiqués les fichiers répondant aux critéres exprimés par les
expressions.

Les expressions indiquent :


– des conditions
– des actions à effectuer

Formation permanente – ARS 122


Manipulations de fichiers Unix Recherche de fichiers : find

Quelques expressions :
– critère de nom : -name nom
– critère de droits d’accès : -perm permissions
– critère de type (fichier, répertoire) : -type type (d pour directory, f pour file, etc.)
– critère de taille : -size N
– critère de date récente : -newer fichier
– critère de date : -atime N, -mtime N, -ctime N
– ou logique entre conditions : condition1 -o condition2
– et logique entre conditions : condition1 -a condition2 (en fait le -a est facultatif)
– affichage du nom du fichier trouvé : -print
– exécution d’une commande : -exec commande {} \;

Formation permanente – ARS 123

Manipulations de fichiers Unix Recherche de fichiers : find

Par exemple :
– Recherche des fichiers d’extension ’.c’ :
% find . -name \*.c -print

– Recherche des répertoires :


% find . -type d -print

– Recherche des fichiers de plus de 1000000 caractères :


% find ~ -size +1000000c -print

– Recherche de tous les fichiers s’appelant a.out ou s’appelant avec une extension ’.o’, non
utilisés depuis plus de 7 jours et on appliquera la commande d’effacement aux fichiers trouvés :

% find . \( -name a.out -o -name ’*.o’ \) -atime +7 -exec rm {} \;

Formation permanente – ARS 124


Manipulations de fichiers Unix Compression de fichiers : compress, uncompress, zcat

§ 4.30 Compression de fichiers : compress, uncompress, zcat

Syntaxes de quelques commandes de compression ou décompression :


compress [options] fichier
uncompress [options] fichier.Z
zcat fichier.Z

Le fichier compressé s’appelle après compression fichier.Z.


Le fichier décompressé retrouve son nom fichier.

Formation permanente – ARS 125

Manipulations de fichiers Unix Compression de fichiers : compress, uncompress, zcat

Exemples

% compress fichier1

% compress -v fichier2
fichier2: Compression: 14.70% -- replaced with fichier2.Z

% ls -l fichier1.Z fichier2.Z
-rw-r--r-- 1 besancon adm 97 Aug 3 13:01 fichier1.Z
-rw-r--r-- 1 besancon adm 87 Aug 3 13:06 fichier2.Z

% zcat fichier2.Z
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise

Formation permanente – ARS 126


Manipulations de fichiers Unix Compression de fichiers : gzip, gunzip, gzcat

§ 4.31 Compression de fichiers : gzip, gunzip, gzcat

Cette série de commandes compressent mieux les fichiers que la famille autour de compress.

Syntaxes de quelques commandes de compression ou décompression :


gzip [options] fichier
gunzip [options] fichier.gz
gzcat fichier.gz

Le fichier compressé s’appelle après compression fichier.gz.


Le fichier décompressé retrouve son nom fichier.

Répandu mais non standard. Cf ftp://ftp.lip6.fr/pub/gnu/gzip/

Formation permanente – ARS 127

Manipulations de fichiers Unix Compression de fichiers : gzip, gunzip, gzcat

Exemples

% gzip fichier1

% gzip -v fichier2
fichier2: 35.2% -- replaced with fichier2.gz

% ls -l fichier1.Z fichier2.Z
-rw-r--r-- 1 besancon adm 84 Aug 3 13:01 fichier1.gz
-rw-r--r-- 1 besancon adm 87 Aug 3 13:06 fichier2.gz

% gzcat fichier2.Z
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise

Formation permanente – ARS 128


Manipulations de fichiers Unix Compression de fichiers : bzip2, bunzip2, bzcat

§ 4.32 Compression de fichiers : bzip2, bunzip2, bzcat

Cette série de commandes compressent mieux les fichiers que la famille autour de compress.

Syntaxes de quelques commandes de compression ou décompression :


bzip2 [options] fichier
bunzip2 [options] fichier.bz2
bzcat fichier.bz2

Le fichier compressé s’appelle après compression fichier.bz2.


Le fichier décompressé retrouve son nom fichier.

Pas encore très répandu. Cf ftp://ftp.lip6.fr/pub/gnu/bzip2/ ? ? ? ?

Formation permanente – ARS 129

Manipulations de fichiers Unix Compression de fichiers : bzip2, bunzip2, bzcat

Exemples

% bzip2 fichier1

% bzip2 -v fichier2
fichier2: 1.052:1, 7.608 bits/byte, 4.90% saved, 102 in, 97 out.

% ls -l fichier1.Z fichier2.Z
-rw-r--r-- 1 besancon adm 102 Aug 3 13:01 fichier1.bz2
-rw-r--r-- 1 besancon adm 97 Aug 3 13:06 fichier2.bz2

% bzcat fichier2.bz2
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise

Formation permanente – ARS 130


Manipulations de fichiers Unix Archivage de fichiers/répertoires : tar

§ 4.33 Archivage de fichiers/répertoires : tar

(en anglais tape archive)

La commande tar permet d’archiver dans un seul fichier une arborescence. Conjuguée à une
commande de compression, cela permet de mettre de côté une arborescence dont on n’a plus
besoin. Au passage, on gagne de la place.

Selon l’action que l’on veut faire, la syntaxe est la suivante :


– Création d’une archive : tar cvf archive.tar fichiers
– Affichage du contenu d’une archive : tar tvf archive.tar
– Extraction de l’archive complète : tar xvf archive.tar
– Extraction d’un fichier précis de l’archive : tar xvf archive.tar fichier

Formation permanente – ARS 131

Manipulations de fichiers Unix Archivage de fichiers/répertoires : tar

Vous pouvez selon les systèmes Unix compresser l’archive au fur et à mesure de sa construction :

– Utilisation de compress :
– Création d’une archive : tar cvZf archive.tar.Z fichiers
– Affichage du contenu d’une archive : tar tvZf archive.tar.Z
– Extraction de l’archive complète : tar xvZf archive.tar.Z
– Extraction d’un fichier précis de l’archive : tar xvZf archive.tar.Z fichier

– Utilisation de gzip :
– Création d’une archive : tar cvzf archive.tar.gz fichiers
– Affichage du contenu d’une archive : tar tvzf archive.tar.gz
– Extraction de l’archive complète : tar xvzf archive.tar.gz
– Extraction d’un fichier précis de l’archive : tar xvzf archive.tar.gz fichier

Formation permanente – ARS 132


Manipulations de fichiers Unix Liens sur fichiers : ln, ln -s

§ 4.34 Liens sur fichiers : ln, ln -s

(en anglais link)

A chaque fichier peuvent être associés plusieurs noms.


Chaque nom est un lien.

Il y a un compteur de liens pour chaque fichier :


– incrémenté lors de la création d’un lien
– décrémenté lors de la suppression d’un lien
– le contenu d’un fichier est détruit lorsque le dernier lien est supprimé

Deux types de liens : lien hard, lien symbolique

Formation permanente – ARS 133

Manipulations de fichiers Unix Liens sur fichiers : ln, ln -s

 lien hard : limité au sein d’un même disque dur, où est garantie l’unicité d’un inode («matricule de
fichier»)
La commande à utiliser est : ln original synonyme
Suppression par rm

% ls -l fichier1
-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1

% ln fichier1 fichier2

% ls -l fichier1 fichier2
-rw-r--r-- 2 besancon software 9919 Oct 17 18:25 fichier1
-rw-r--r-- 2 besancon software 9919 Oct 17 18:25 fichier2

% ls -li fichier1 fichier2


689357 -rw-r--r-- 2 besancon software 9919 Oct 17 18:25 fichier1
689357 -rw-r--r-- 2 besancon software 9919 Oct 17 18:25 fichier2

% rm fichier1

% ls -li fichier2
689357 -rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier2

Formation permanente – ARS 134


Manipulations de fichiers Unix Liens sur fichiers : ln, ln -s
 lien symbolique : non limité à un disque parce qu’utilisant le nom d’un fichier et non pas son
«matricule»
En fait, c’est un fichier contenant le nom du fichier source.
La commande à utiliser est : ln -s original synonyme
Suppression par rm

% ls -l fichier1
-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1
% ln -s fichier1 fichier2

% ls -liF fichier1 fichier2


689357 -rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1
689358 lrwxr-xr-x 1 besancon software 8 Oct 17 18:26 fichier2@ -> fichier1

% ls -lL fichier1 fichier2


-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1
-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier2

% rm fichier1
% ls -liL fichier2
689358 lrwxr-xr-x 1 besancon software 8 Oct 17 18:26 fichier2@ -> fichier1

% cat fichier2
cat: fichier2: No such file or directory

Formation permanente – ARS 135

Manipulations de fichiers Unix Liens sur fichiers : ln, ln -s

Les systèmes Unix imposent les droits lrwxr-xr-x sur le lien (selon l’Unix cela pourra être à la
place lrwxrwxrwx).
Ils ne peuvent pas être modifiés.

On ne peut que changer les droits d’un fichier pointé par un lien symbolique :

% ls -l fichier1 fichier2
-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1
lrwxr-xr-x 1 besancon software 8 Oct 17 18:26 fichier2 -> fichier1

% chmod 600 fichier2


% ls -l fichier2
lrwxr-xr-x 1 besancon software 8 Oct 17 18:26 fichier2 -> fichier1

% ls -l fichier1
-rw------- 1 besancon software 9919 Oct 17 18:25 fichier1

% ls -lL fichier1 fichier2


-rw------- 1 besancon software 9919 Oct 17 18:25 fichier1
-rw------- 1 besancon software 9919 Oct 17 18:25 fichier2

Formation permanente – ARS 136


Manipulations de fichiers Unix Transfert de fichiers depuis et vers une disquette PC : mcopy

§ 4.35 Transfert de fichiers depuis et vers une disquette PC : mcopy

Sur des machines équipées de lecteur de disquettes, on peut transférer des fichiers depuis et vers
leur lecteur de disquette. Un logiciel appelé mtools permet d’utiliser les disquettes en offrant des
commandes Unix avec la logique des commandes connues du DOS.

La commande de base à utiliser est mcopy.


– Transfert depuis Unix vers la disquette : mcopyfichier a:
– Transfert de la disquette vers Unix : mcopy a:fichier .
– Affichage du contenu de la disquette : mdir a:

Se reporter à l’URL http://www.loria.fr/~giese/doc/mtools.html pour plus


de détails sur les commandes disponibles.

Formation permanente – ARS 137

Manipulations de fichiers Unix Affichage hexadecimal, octal d’un fichier : od

§ 4.36 Affichage hexadecimal, octal d’un fichier : od

(en anglais octal dump)

Syntaxe : od [options] fichier

Pour afficher en ascii un fichier :


% od -c fichier
0000000 e s s a i \nl
0000006
Pour afficher en octal un fichier :
% od -t o1 fichier
0000000 145 163 163 141 151 012
0000006
Pour afficher en hexadécimal un fichier :
% od -t x1 fichier
0000000 65 73 73 61 69 0a
0000006

Formation permanente – ARS 138


Manipulations de fichiers Unix Nature d’un fichier : file

§ 4.37 Nature d’un fichier : file

Syntaxe : file fichier


Cette commande permet d’intuiter à quelle application est lié le fichier. Elle s’appuie pour rendre un
avis sur la reconnaissance de motifs connus dans le contenu du fichier (pour voir les motifs, se
reporter au fichier /etc/magic).

Version améliorée de la commande :


ftp://ftp.astron.com/pub/file/file-3.37.tar.gz

Formation permanente – ARS 139

Manipulations de fichiers Unix Nature d’un fichier : file

Quelques exemples non exhaustifs :

% file inconnu
inconnu: JPEG image data, JFIF standard 1.02, resolution (DPI), 72 x 72

% file inconnu
inconnu: ASCII text

% file inconnu
inconnu: TeX DVI file (TeX output 2002.08.10:1903)

% file inconnu
inconnu: PostScript document text conforming at level 2.0

% file /usr/bin/ls
/usr/bin/ls: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), \\
dynamically linked (uses shared libs), stripped

% file /usr/lib/libc.a
/usr/lib/libc.a: current ar archive

% file /usr/lib/libc.so.1
/usr/lib/libc.so.1: ELF 32-bit MSB shared object, SPARC, version 1 (SYSV), \\
not stripped

Formation permanente – ARS 140


Manipulations de fichiers Unix Codage des fins de ligne d’un fichier texte

§ 4.38 Codage des fins de ligne d’un fichier texte

Un simple fichier texte ne se partage pas facilement entre les 3 OS que sont Unix, Windows et
Macintosh car :
– une fin de ligne sous Unix est codée par un ^J
– une fin de ligne sous Windows est codée par un ^M^J
– une fin de ligne sous Macintosh est codée par un ^M

Passer un fichier texte ascii d’un système à l’autre nécessitera de convertir les fins de ligne.

Sous Unix, on dispose de quelques utilitaires de conversion de caractères :


– commande tr
– commande recode
– commande iconv
– commande unix2dos et dos2unix

Formation permanente – ARS 141

Manipulations de fichiers Unix Commande de traduction de caractères : tr

§ 4.39 Commande de traduction de caractères : tr

(en anglais translate)

Commande de base sur tous les Unix.

Syntaxe : tr [options] jeu1 jeu2


où jeu1 désigne le jeu de caractères à remplacer à raison de un pour un par le jeu de caractères
jeu2.

Soit le fichier contenant les lignes suivantes :


toto
cheval

Formation permanente – ARS 142


Manipulations de fichiers Unix Commande de traduction de caractères : tr

1. On veut convertir les lettres o en lettres e :


% tr ’o’ ’e’ < fichier
tete
cheval
2. On veut convertir les lettres minusucules en lettres majuscules :
% tr ’[a-z]’ ’[A-Z]’ < fichier
TOTO
CHEVAL
3. On veut convertir les lettres o en passage à la ligne :
% tr ’o’ ’\012’ < fichier
t
t

cheval

Formation permanente – ARS 143

Manipulations de fichiers Unix Commande de traduction de caractères : tr

4. On veut convertir un fichier Unix en fichier Macintosh :


% tr ’\012’ ’\015’ < fichier
5. On veut convertir un fichier PC en fichier Unix :
% tr -d ’\015’ < fichier
6. On ne peut pas convertir avec tr un fichier Unix en un fichier PC car il faudrait pour cela ajouter
le caractère ^M (soit \015) avant le caractère ^J (soit \012) ce que ne sait pas faire la
commande tr.

Formation permanente – ARS 144


Manipulations de fichiers Unix Commande de traduction de caractères : recode

§ 4.40 Commande de traduction de caractères : recode

Commande non standard. Cf ftp://ftp.lip6.fr/pub/gnu/recode/

La commande recode convertit des jeux entiers de caractères en d’autres jeux de caractères. Sa
justification vient que pleins d’utilitaires ou de systèmes codent les caractères différemment.

Par exemple un é sera codé :


– sous la forme «\’e» en LaTEX
– sous la forme «&eacute;» en HTML
– sous la forme «\351» en ascii ISO-8859-1
– sous la forme «\216» sur macintosh
– sous la forme «\202» sur Windows
– sous la forme «\303\251» en UTF8

La commande recode connait beaucoup de jeux de codage (au contraire de la commande tr). Cf
recode --list

Formation permanente – ARS 145

Manipulations de fichiers Unix Commande de traduction de caractères : recode

Exemples :
1. On veut convertir un fichier Unix en fichier Windows :
% recode latin1..dos/CR-LF < fichier1 > fichier2
% od -c fichier1
0000000 t o t o \r c h e v a l \r
0000014
% od -c fichier2
0000000 t o t o \r \n c h e v a l \r \n
0000016
2. On veut convertir un fichier Unix en fichier Macintosh :
% recode latin1..macintosh < fichier1 > fichier2
% od -c fichier1
0000000 t o t o \r c h e v a l \r
0000014
% od -c fichier2
0000000 t o t o \n c h e v a l \n
0000014

Et vice-versa. . .

Formation permanente – ARS 146


Manipulations de fichiers Unix Commande de traduction de caractères : iconv

§ 4.41 Commande de traduction de caractères : iconv

Commande non standard. Cf ftp://ftp.lip6.fr/pub/gnu/libiconv/

Formation permanente – ARS 147


Autres commandes Unix pratiques

Chapitre 5 : Autres commandes Unix pratiques

§ 5.1 Remplissage du disque : df

La commande df vous indiquera le taux de remplissage des disques durs locaux de l’ordinateur
ainsi que des disques durs réseau qui stockent vos fichiers.

Par exemple (exemple pris sur une machine du réseau de la formation permanente) :

%df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 1143208 693050 391091 64% /
serveur:/net/serveur/home
1015695 783819 170935 82% /.automount/serveur/net/serveur/home
serveur:/var/mail 246167 84838 136713 38% /.automount/serveur/var/mail

Formation permanente – ARS 148

Autres commandes Unix pratiques Calcul de la place disque occupée : du

§ 5.2 Calcul de la place disque occupée : du

Vous ne devez pas laisser votre compte se remplir de fichiers. Les disques durs n’ont pas une
capacité infinie et hors de question de stocker toute la documentation disponible sur Internet chez
vous !

La commande «du -k $HOME» vous donnera la taille disque que votre homedirectory occupe.
La commande passe en revue tous les répertoires et en affiche la taille.

Le résultat affiché est exprimé en kilo octets (1 ko = 1024 octets).

% du
372 ./csi
107 ./cru
1793

Formation permanente – ARS 149


Autres commandes Unix pratiques Impression : lpr, lpq, lprm

§ 5.3 Impression : lpr, lpq, lprm

Une impression nécessite de connaitre le nom de l’imprimante et d’avoir un fichier au bon format à
imprimer.

Pour imprimer, utiliser la commande lpr -Pimprimante fichier

Pour consulter la queue d’impression, utiliser la commande lpq -Pimprimante

Pour retirer un fichier de la queue d’impression, utiliser la commande


lprm -Pimprimante numéro-dans-la-queue-renvoyé-par-lpq

A la formation permanente, le nom de l’imprimane est hpars.

Formation permanente – ARS 150

Autres commandes Unix pratiques Nom de machine : uname, hostname

§ 5.4 Nom de machine : uname, hostname

Une machine Unix a un nom qui permet de la désigner simplement dans des commandes de
connexion réseau.

Pour connaitre le nom de votre machine, vous pouvez employer :

– la commande hostname
% hostname
choc.unix.fr
– la comannde uname -n
cette commande renvoit aussi le nom de la version d’Unix utilisé : lancer uname -a
% uname -n
choc.unix.fr
% uname -a
SunOS choc.unix.fr 4.1.4 7 sun4m unknown

Formation permanente – ARS 151


Autres commandes Unix pratiques Tests de connectivité : ping

§ 5.5 Tests de connectivité : ping

Les machines distantes ne sont pas toujours disponibles :


– Elles peuvent être en panne.
– Le réseau qui permet de les joindre peut être en panne.
– etc.

La commande permet de tester si une machine est joignable.

Syntaxe : ping machine

% ping vangogh
sendto: Network is unreachable
% ping elvis
elvis is alive

Formation permanente – ARS 152

Autres commandes Unix pratiques Tests de connectivité : traceroute

§ 5.6 Tests de connectivité : traceroute

La commande traceroute permet de tester si une machine est joignable. Elle renvoit les
intermédiaires réseau qui route notre acheminement vers la machine distante.

Syntaxe : traceroute machine

% traceroute ftp.lip6.fr
traceroute to nephtys.lip6.fr (195.83.118.1), 30 hops max, 40 byte packets
1 yacht (129.199.96.254) 0 ms 0 ms 0 ms
2 renater (129.199.1.10) 2 ms 1 ms 1 ms
3 195.221.127.61 (195.221.127.61) 3 ms 1 ms 1 ms
4 195.221.126.1 (195.221.126.1) 2 ms 1 ms 1 ms
5 195.221.126.78 (195.221.126.78) 2 ms 1 ms 1 ms
6 jussieu.rap.prd.fr (195.221.126.33) 2 ms 2 ms 2 ms
7 nephtys.lip6.fr (195.83.118.1) 2 ms 2 ms 2 ms

Le nombre d’intermédiaires n’est pas proportionnel à l’éloignement géographique de la machine


destination.

Formation permanente – ARS 153


Autres commandes Unix pratiques Tests de connectivité : traceroute

En cas de soucis :

% traceroute serveur.formation.jussieu.fr
traceroute to serveur.formation.jussieu.fr (134.157.46.129), 30 hops max, 40 byte packets
1 yacht (129.199.96.254) 0 ms 0 ms 0 ms
2 renater (129.199.1.10) 2 ms 1 ms 1 ms
3 195.221.127.61 (195.221.127.61) 2 ms 2 ms 1 ms
4 195.221.126.1 (195.221.126.1) 2 ms 1 ms 1 ms
5 195.221.126.78 (195.221.126.78) 2 ms 1 ms 2 ms
6 jussieu.rap.prd.fr (195.221.126.33) 3 ms 2 ms 2 ms
7 134.157.254.123 (134.157.254.123) 3 ms 2 ms 2 ms
8 * * *
^C

Formation permanente – ARS 154

Autres commandes Unix pratiques Transfert de fichiers entre machines : ftp

§ 5.7 Transfert de fichiers entre machines : ftp

(en anglais file transfer protocol)

Syntaxe : ftp machine

put
get
ftp machineB ftp machineA
get

put

Formation permanente – ARS 155


Autres commandes Unix pratiques Transfert de fichiers entre machines : ftp

Sous commandes de ftp

La commande ftp vous place dans une espèce de shell dans lequel vous disposez des
commandes suivantes (ce sont les plus importantes à votre niveau) :
– commande binary : à utiliser si le fichier à transmettre contient des caractères non texte
– commande dir : pour lister les fichiers sur la machine distante
– commande cd directory : pour changer de répertoire sur la machine distante
– commande lcd directory : pour changer de répertoire sur la machine locale
– commande get fichier : pour récupérer sur la machine distante un fichier
– commande put fichier : pour déposer sur la machine distante un fichier
– commande quit : pour se déconnecter

Formation permanente – ARS 156

Autres commandes Unix pratiques Transfert de fichiers entre machines : ftp

% ftp choc
Connected to choc.unix.fr.
220 choc.unix.fr FTP server (SunOS 4.1) ready.
Name (choc:besancon):
331 Password required for besancon.
Password:
230 User besancon logged in.
ftp> dir
200 PORT command successful.
150 ASCII data connection for /bin/ls (192.168.0.1,3945) (0 bytes).
total 307
-rw-r--r-- 1 besancon software 69 Mar 20 1995 .Xdefaults
...
ftp> get fichier [nouveau nom]
...
ftp> put fichier [nouveau nom]
200 PORT command successful.
150 ASCII data connection for fichier (192.168.0.1,3947).
226 ASCII Transfer complete.
local: fichier remote: fichier
802 bytes sent in 0.0042 seconds (1.9e+02 Kbytes/s)
ftp> quit
221 Goodbye.

Formation permanente – ARS 157


Autres commandes Unix pratiques Connexion shell sur des machines distantes : telnet, ssh

§ 5.8 Connexion shell sur des machines distantes : telnet, ssh

Quelques commandes permettent d’ouvrir une session shell sur une machine distante.

– Commande ssh machine.


C’est une commande très pratique car elle chiffre la communication avec la machine distante
évitant ainsi les piratages du type mouchard réseau qui récupére les mots de passe :
% ssh dmi
besancon@dmi’s password:
Last login: Sat Sep 15 22:00:11 2001 from ppp-2
Sun Microsystems Inc. SunOS 5.5 Generic November 1995
No mail.
dmi%

Formation permanente – ARS 158

Autres commandes Unix pratiques Connexion shell sur des machines distantes : telnet, ssh

– Commande telnet machine.


% telnet dmi
Trying 129.199.96.11...
Connected to dmi.ens.fr.
Escape character is ’^]’.

SunOS 5.7

login: besancon
Password:
Last login: Sat Sep 15 21:54:15 from ppp-2
Sun Microsystems Inc. SunOS 5.5 Generic November 1995
dmi%

A chaque fois que ce sera possible, préférer une connexion shell distante en utilisant ssh.

Formation permanente – ARS 159


Autres commandes Unix pratiques Liste d’utilisateurs connectés : users, who, w

§ 5.9 Liste d’utilisateurs connectés : users, who, w

Plusieurs commandes permettent d’avoir la liste des personnes connectées sur un système Unix :

– commande users
– commande who
– commande w

Les renseignements renvoyés ne sont pas de la même forme selon la commande utilisée.

Formation permanente – ARS 160

Autres commandes Unix pratiques Courrier électronique, adresse, mutt, netscape

§ 5.10 Courrier électronique, adresse, mutt, netscape

Votre adresse de courrier électronique est du type


Prenom.Nom@formation.jussieu.fr.
Pour lire son courrier, vous disposez des utilitaires :
– mutt
Affichage en mode texte de vos mails. Gére autant de son mieux les pièces attachées.
– netscape
Affichage graphique de vos mails. Plus consommateur de ressources. Attention, il fait «exploser»
certains terminaux sous configurés. Ce genre de logiciels est la tendance du monde Windows...

Formation permanente – ARS 161


Autres commandes Unix pratiques Web, URL, lynx, netscape

§ 5.11 Web, URL, lynx, netscape

Comment consulter une documentation sur Internet ?

Les renseignements sont indiqués par un URL, Universal Resource Locator :

Dénomination unique à caractère universel qui permet de localiser une ressource, un document, sur
l’Internet, et qui indique la méthode pour y accéder, le nom du serveur et le chemin à l’intérieur du
serveur.

Typiquement :

protocole://serveur/chemin
Les types les plus répandus :

http://www.lemonde.fr/
mailto:Thierry.Besancon@formation.jussieu.fr
ftp://ftp.jussieu.fr/

Formation permanente – ARS 162

Autres commandes Unix pratiques Web, URL, lynx, netscape

Pour consulter un URL, on utiliser un browser Web. Les plus connus :


– Netscape (sur Unix, Macintosh et Windows) ; fonctionne en mode graphique
– Internet Explorer (sur Macintosh et Windows) ; fonctionne en mode graphique
– lynx (sur Unix) ; fonctionne en mode texte

Il suffit alors d’entrer l’URL à consulter et on se retrouve connecté au serveur (si on peut le joindre)

Formation permanente – ARS 163


Autres commandes Unix pratiques Web, URL, lynx, netscape

Formation permanente – ARS 164

Autres commandes Unix pratiques Web, URL, lynx, netscape

Formation permanente – ARS 165


Pratique du Bourne shell

Chapitre 6 : Pratique du Bourne shell

§ 6.1 Principe d’exécution d’une commande

1. attente d’une entrée de commande ;

2. traitement des caractères spéciaux de la commande ;

3. recherche de l’exécutable ; s’il n’est pas trouvé, on affiche un message d’erreur et le shell
reprend à l’étape 1 ;

4. fork() + exec() de la commande à lancer ;


5. le shell fait un wait() de la commande ;

6. une fois la commande terminée, le shell reprend à l’étape 1.

Formation permanente – ARS 166

Pratique du Bourne shell Caractères spéciaux du shell : métacaractères

§ 6.2 Caractères spéciaux du shell : métacaractères

Caractères Signification

tabulation, espace appelés white characters ; délimiteurs des mots ; un tel


caractère au minimum

retour charriot fin de la commande à exécuter

& lance une commande en tâche de fond

’ " \ appelés quote characters ; changent la façon dont le


shell interpréte les caractères spéciaux

< > << >> ‘ | caractères de redirection d’entrées/sorties

* ? [ ] [^ ] caractères de substitution de noms de fichiers

$ valeur d’une variable

; séparateur de commandes sur une seule ligne

Formation permanente – ARS 167


Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

§ 6.3 Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

Avant plan

Lorsqu’une commande est en train de s’exécuter, le shell ne rend pas la main et attend que la
commande se termine (correctement ou incorrectement).

Pour interrompre prématurément une commande : taper sur la touche Control et aussi sur la
touche C du clavier. Cela tue la commande qui tournait.
On notera l’appui sur ces 2 touches par Ctrl C ou par ^C.
Arrière plan

Si l’on veut une lancer une commande et récupérer la main tout de suite, avant même que la
commande ait fini de s’exécuter, il faut lancer la commande par :
% commande &
Le signe & signifie de lancer en tâche de fond, en background la commande. Sans ce signe, la
commande est lancée en premier plan, en foreground.

Formation permanente – ARS 168

Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

Passage en arrière plan

Pour passer en background une commande lancée en foreground :

1. Figer la commande en cours


Taper sur la touche Control et aussi sur la touche Z, soit Ctrl-Z ou ^Z :
% commande
...
^Z
[1]+ Stopped commande
2. Indiquer de l’exécuter dorénavant en background
Taper la commande bg :
% bg
[1]+ commande &

D’une fa¸con générale, un débutant Unix doit proscrire l’utilisation de Ctrl Z . Dans 9 cas sur
10, c’est Ctrl C qu’il doit employer. On évitera ainsi une saturation de la machine avec des
commandes suspendues et en attente d’être tuées ou relancées.

Formation permanente – ARS 169


Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

Passage au premier plan

Pour passer en foreground une commande lancée en background :

1. La commande est lancée


On a la main :
% commande &
...
2. Indiquer de l’exécuter dorénavant en foreground
Taper la commande fg :
% fg

Formation permanente – ARS 170

Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

En résumé

Programme arrete bg programme en cours

arriere plan fg fg arriere plan

Ctrl−Z avant plan &

programme en cours

Ctrl−C
pour detruire

Formation permanente – ARS 171


Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

Liste des processus en arrière plan

Pour connaitre la liste des commandes en background :


% jobs
[1]+ Running commande
On peut avoir plusieurs commandes en background. D’où une numérotation des commandes qui
sont affichées. Ce numéro peut être repris dans les commandes fg et bg ainsi que dans la
commande suivante, kill.

Formation permanente – ARS 172

Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ

Tuer un processus en arrière plan

Pour tuer une commande en background :


% jobs
[1]+ Running commande
% kill %1
[1]+ Terminated commande

Formation permanente – ARS 173


Pratique du Bourne shell Contrôle des processus : ps, kill, top

§ 6.4 Contrôle des processus : ps, kill, top

Les commandes fg, bg, jobs ne fonctionnent que sur les processus lancés par le shell courant.
Les commandes vues précédemment peuvent donc être inutilisables sii vosu avez quitté votre shell.

Commande ps

La commande ps plus générale permet d’avoir des informations sur tous les processus de la
machine.

2 syntaxes selon l’Unix de la machine.

Formation permanente – ARS 174

Pratique du Bourne shell Contrôle des processus : ps, kill, top

 Syntaxe de la famille d’Unix BSD


– les processus associés à son terminal : ps
– tous ses processus : ps -x
– tous les processus de la machine : ps -ax
– tous les processus de la machine avec les noms de login associés : ps -aux

Exemple (partiel) de ps -axu :

% ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1120 52 ? S Oct23 0:06 init
root 2 0.0 0.0 0 0 ? SW Oct23 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Oct23 0:01 [kupdate]
...
nobody 476 0.0 0.1 1300 44 ? S Oct23 0:01 [identd]
daemon 490 0.0 0.0 1144 0 ? SW Oct23 0:00 [atd]
xfs 636 0.0 0.3 2820 120 ? S Oct23 0:18 xfs -droppriv -da
root 14703 0.0 0.0 2256 0 tty1 SW Oct25 0:00 [login]
root 9813 0.0 0.0 6912 0 ? SW Oct31 0:09 [kdm]
idiri 20810 0.0 0.0 6552 0 ? SW 15:13 0:01 [kwm]
idiri 20863 0.0 0.0 1996 0 pts/0 SW 15:13 0:00 [tcsh]
besancon 21785 0.0 1.3 1732 416 pts/1 S 15:25 0:00 -bash
idiri 23660 0.2 1.5 1860 472 tty2 S 16:39 0:01 vi probleme6.c
...

Formation permanente – ARS 175


Pratique du Bourne shell Contrôle des processus : ps, kill, top

 Syntaxe de la famille d’Unix System-V


– les processus associés à son terminal : ps
– tous les processus de la machine avec les noms de login associés : ps -edf

Exemple (partiel) de ps -edf :

% ps -edf
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 09:09:47 ? 0:01 sched
root 1 0 0 09:09:47 ? 0:02 /etc/init -
root 2 0 0 09:09:47 ? 0:00 pageout
root 3 0 0 09:09:47 ? 0:52 fsflush
root 181 1 0 09:12:07 ? 0:06 /usr/lib/autofs/automountd
...
daemon 283 1 0 09:12:12 ? 0:11 /usr/sbin/lpd
root 291 1 0 09:12:13 ? 0:00 /usr/local/apache/bin/httpd
root 296 1 0 09:12:14 ? 0:00 /usr/local/admin/lib/idled
nobody 15130 291 0 23:30:56 ? 0:00 /usr/local/apache/bin/httpd
besancon 16463 16461 0 00:12:26 pts/0 0:00 -csh
...

Formation permanente – ARS 176

Pratique du Bourne shell Contrôle des processus : ps, kill, top

Commande kill

La commande kill sert à communiquer avec des processus :

– arrêt de processus
– demande au processus de se reconfigurer
– passage en mode verbeux du processus
– etc.

La commande kill existe sur tous les Unix et il n’y a pas de différence de fonctionnement selon les
Unix.

Formation permanente – ARS 177


Pratique du Bourne shell Contrôle des processus : ps, kill, top

Syntaxe :
NAME
kill - terminate or signal a process

SYNOPSIS
kill [-s signal_name] pid ...
kill -l [exit_status]
kill -signal_name pid ...
kill -signal_number pid ...

Avec :
Some of the more commonly used signals:
1 HUP (hang up)
2 INT (interrupt)
3 QUIT (quit)
6 ABRT (abort)
9 KILL (non-catchable, non-ignorable kill)
14 ALRM (alarm clock)
15 TERM (software termination signal)

Par exemple, les 2 formes suivantes sont équivalentes :


kill -9 2878
kill -KILL 2878

Formation permanente – ARS 178

Pratique du Bourne shell Contrôle des processus : ps, kill, top

Les signaux les plus utiles sont :


– SIGHUP
Cela envoit l’équivalent du Ctrl C du clavier.
– SIGKILL
Cela envoit un signal que le processus est obligé de suivre et qui se traduira inélectablement par la
mort du processus.

Formation permanente – ARS 179


Pratique du Bourne shell Contrôle des processus : ps, kill, top

Commande top

Inconvénient de ps : c’est la liste des processus à un instant .

On ne pourra jamais sous Unix avoir la liste des processus en cours : «principe de Heidelberg», le
temps de chercher les processus et de faire le rapport, certains processus peuvent avoir disparu.

Amélioration de ps : la commande "top" qui n’est cependant pas standard sur tous les Unix.

Son intérêt : elle affiche une liste des processus toutes les  secondes

Formation permanente – ARS 180

Pratique du Bourne shell Contrôle des processus : ps, kill, top

Formation permanente – ARS 181


Pratique du Bourne shell Quote characters : ’, ", 
§ 6.5 Quote characters : ’, ", 

Caractères Nom Description

’ single quote le shell n’interprète aucun caractère spécial entre deux



" double quote le shell n’interprète aucun caractère spécial à l’excep-
tion de $ ‘ et \
\ backslash le shell n’interprète pas le caractère spécial suivant le
backslash

Formation permanente – ARS 182

Pratique du Bourne shell Quote characters : ’, ", 


Exemples :

1. # echo "$HOME"
/root
2. # echo ’$HOME’
$HOME
3. # echo "\$HOME"
$HOME
4. # echo ’\$HOME’
\$HOME
5. % echo fichier = ; ls
fichier =
fichier1 fichier2
6. % echo fichier = \; ls
fichier = ; ls

Formation permanente – ARS 183


Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

§ 6.6 Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

Toutes les entrées/sorties d’Unix sont réalisées au moyen de fichiers.

Chaque processus ouvre donc un certain nombre de fichiers. Ces fichiers sont référencés en interne
par une table d’entiers dits file descriptors.

Nom File descriptor Destination par défaut

standard input (stdin) 0 clavier

standard output (stdout) 1 écran

standard error (stderr) 2 écran

Les file descriptors existent en langage C et sont profondément ancrés dans le fonctionnement
même d’UNIX.

Formation permanente – ARS 184

Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

Le fichier système de programmation C /usr/include/stdio.h indique :


#define stdin (&__sF[0])
#define stdout (&__sF[1])
#define stderr (&__sF[2])

Quelques petits programmes C de démonstration :


– exemple d’utilisation de stdin
#include<stdio.h>
main()
{
char line[1024];
(void)fgets(line, 1024, stdin);
}
– exemple d’utilisation de stdout
#include<stdio.h>
main()
{
fprintf(stdout, "Bonjour !\n");
}
– exemple d’utilisation de stderr
#include<stdio.h>
main()
{
fprintf(stderr, "Enfer et damnation !\n");
}

Formation permanente – ARS 185


Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

Format Description

command < fichier stdin de command provient de fichier

command > fichier stdout de command placé dans fichier dont le


contenu précédent est écrasé

command >> fichier stdout de command placé en fin de fichier

command << label stdin de command provient des lignes de com-


mande suivantes jusqu’à la ligne ne contenant que
label
‘command‘ remplace ‘command‘ par le résultat de l’exécu-
tion de command

command1 | command2 passe le stdout de command1 comme stdin de


command2
command 2> fichier redirige stderr de command dans fichier

command >& file-descriptor redirige la sortie de command vers un certain fi-


chier descriptor

Formation permanente – ARS 186

Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

Exemples :

1. % ls > /tmp/foo

2. % ls /etc >> /tmp/foo

3. % cat <<EOF > /dev/null


>>jghsfdgkfdhgkdjh
>>gd
>>EOF

Formation permanente – ARS 187


Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

4. % n=‘wc -l /etc/passwd‘
% echo $n
170 /etc/passwd

% echo ‘wc -l /etc/passwd‘


170 /etc/passwd

5. % cat /etc/group | more

qui équivaut à

more /etc/group

Formation permanente – ARS 188

Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&

6. % ls xx
ls: xx: No such file or directory

% ls xx > errors
ls: xx: No such file or directory

% ls xx 2> errors
% cat errors
ls: xx: No such file or directory

Formation permanente – ARS 189


Pratique du Bourne shell Désignation des fichiers par leurs noms : *, ?, [], [ˆ]

§ 6.7 Désignation des fichiers par leurs noms : *, ?, [], [ˆ]

Caractère Description

* 0 ou plus caractères

? 1 caractère exactement

[ ] 1 caractère dans l’ensemble entre crochets

[^ ] 1 caractère non énuméré dans l’ensemble entre crochets

Formation permanente – ARS 190

Pratique du Bourne shell Désignation des fichiers par leurs noms : *, ?, [], [ˆ]

Exemples :

1. % ls *
cours.tex
2. % ls /etc/*.??
/etc/locate.rc /etc/pwd.db /etc/spwd.db
/etc/mail.rc /etc/sendmail.cf
3. % ls /var/log/[lp]*
/var/log/lastlog /var/log/lpd-errs /var/log/ppp.log
4. % ls /var/log/[^mw]*
/var/log/dmesg /var/log/ppp.log
/var/log/dmesg.today /var/log/sendmail.st
/var/log/dmesg.yesterday /var/log/setuid.today
/var/log/lastlog /var/log/setuid.yesterday
/var/log/lpd-errs /var/log/slip.log

Formation permanente – ARS 191


Pratique du Bourne shell Variables

§ 6.8 Variables

A un shell est associé un environnement dans lequel sont affectées des variables.

– Assignation de variable
variable=valeur
Rappel : l’espace est un caractère spécial donc pas d’espaces de part et d’autre du signe =
– Consultation de variable
$variable ou ${variable}
– Suppression de variable
unset variable
– Liste des variables définies dans l’environnement
set
– Protection en écriture
readonly variable
readonly

Formation permanente – ARS 192

Pratique du Bourne shell Variables

– Variables de type numérique


Ca n’existe pas en Bourne shell. Les variables sont de type alphanumériques.
 Il est donc impossible de faire :
count=1
count=$count + 1
La bonne façon de faire est d’utiliser la commande Unix expr :
count=1
count=‘expr $count + 1‘
Se reporter à la page de manuel de expr.

Formation permanente – ARS 193


Pratique du Bourne shell Variables d’environnement

§ 6.9 Variables d’environnement

% foo=3
% sh
% echo $foo

% exit
% echo $foo
3

 Les variables ne sont pas héritées par défaut par les commandes lancées par le shell.

Formation permanente – ARS 194

Pratique du Bourne shell Variables d’environnement

La solution consiste à utiliser export (son contraire est unset) :

% FOO=33
% export FOO
% sh
% echo $FOO
33
% exit
% echo $FOO
33

NB : traditionnellement, les variables d’environnement sont écrites en lettres majuscules

Formation permanente – ARS 195


Pratique du Bourne shell Variables d’environnement

ATTENTION ! ! ! :

% FOO=33
% export FOO
% sh
% echo $FOO
33
% FOO=32
% echo $FOO
32
% exit
% echo $FOO
33

L’environnement est hérité en accès en lecture uniquement.

Formation permanente – ARS 196

Pratique du Bourne shell Variables d’environnement

Voici la liste des variables d’environnement standard :

Variable Description

HOME homedirectory

USER username

SHELL path du shell utilisé

PATH liste des directories dans lesquels cher-


cher des commandes

TERM type du terminal utilisé

Les autres variables d’environnement ne sont pas standard.

Formation permanente – ARS 197


Pratique du Bourne shell Ordre d’évaluation de la ligne de commande

§ 6.10 Ordre d’évaluation de la ligne de commande

1. Redirection des entrées/sorties

2. Substitution des variables

3. Substitution des noms de fichiers

Formation permanente – ARS 198

Pratique du Bourne shell Ordre d’évaluation de la ligne de commande

Exemples :

1. % pipe=\|
% echo $pipe
|

Explications :

(a) pas de caractères de redirection des entrées/sorties ;


la commande est "echo $pipe"
(b) remplacement de la variable par son contenu ;
la commande est "echo |"

(c) pas de caractères de substitution de noms de fichiers ;


la commande est "echo |"

Formation permanente – ARS 199


Pratique du Bourne shell Ordre d’évaluation de la ligne de commande

2. % star=\*
% echo $star
cours.aux cours.dvi cours.log cours.ps cours.tex

Explications :

(a) pas de caractères de redirection des entrées/sorties ;


la commande est "echo $star"
(b) remplacement de la variable par son contenu ;
la commande est "echo *"
(c) remplacement du caractère * par la liste des fichiers ;
la commande est
"echo cours.aux cours.dvi cours.log cours.ps cours.tex"

Formation permanente – ARS 200

Pratique du Bourne shell Quitter un shell : exit, Ctrl-D

§ 6.11 Quitter un shell : exit, Ctrl-D

Pour finir : taper exit ou Ctrl-D

Formation permanente – ARS 201


Programmation en Bourne shell

Chapitre 7 : Programmation en Bourne shell

Le shell propose un langage de programmation interprété.

Son utilité :
– automatisation d’actions
– utilisation de structures plus avancées :
– boucles
– tests
– ...
– scripts d’installation de logiciels à adapter

Formation permanente – ARS 202

Programmation en Bourne shell Caractéristiques d’un shell script

§ 7.1 Caractéristiques d’un shell script

Caractéristiques :
– C’est un programme écrit en langage shell.

– Il est écrit pour un shell particulier, à la syntaxe bien particulière. Un shell script ne peut pas être
exécuté par un autre shell en général.

– Il est exécutable :
% file /usr/bin/true
/usr/bin/true: executable shell script
% ls -lF /usr/bin/true
-rwxr-xr-x 1 root staff 63 Oct 14 1994 /usr/bin/true*

Formation permanente – ARS 203


Programmation en Bourne shell Structure d’un shell script

§ 7.2 Structure d’un shell script

Désignation du shell utilisé


La première ligne du shell script commence par #! suivi du path du shell utilisé et de ses
arguments éventuels.

Commentaires
Un commentaire est introduit par le caractère # et se poursuit jusqu’à la fin de la ligne.
Un commentaire peut être placé n’importe où.
La première ligne du script est un commentaire très particulier.

Code
Traditionnelles lignes de code respectant la syntaxe du shell utilisé.

Exemple :
#! /bin/sh
#
# @(#)true.sh 1.5 88/02/07 SMI; from UCB
#
exit 0

Formation permanente – ARS 204

Programmation en Bourne shell Structure d’un shell script

ATTENTION ! ! !

Ceci est faux (pas uniquement à cause de l’orthographe) :

###########################################################################
# #
# ARS 1999/2000
# AUTEUR : BERGOUGNOUX YVES #
# DATE DE CREATION : 07/01/2000 #
# DATE DE MODIFICATION : 07/01/2000 #
# THEME : enrgitre l’expiration d’un compte de stagiaire ayant les memes #
# droit que sont parain pour géré la fin du compte dans le fichier cpt_sta#
# NOM DE LA COMMANDE : hda5/home/yves/projet/set-deadline (disque UNIX) #
# #
###########################################################################

#!/bin/sh

...

Pourquoi ?
A cause de la position de la ligne #!/bin/sh

Formation permanente – ARS 205


Programmation en Bourne shell Structure d’un shell script

En l’absence d’indication de l’interpréteur de commandes en première ligne du script, le


script est exécuté par le shell courant de la session de l’utilisateur.

Attention aux systèmes comme Linux où le shell par défaut est compatible avec le Bourne
shell, masquant ainsi l’erreur ! ! !

Preuve :
Soit le script suivant que j’appelerai "script-foireux" :

# Je suis un commentaire qui n’a rien a faire ici

#!/bin/sh

for i in *
do
echo $i
done

Formation permanente – ARS 206

Programmation en Bourne shell Structure d’un shell script

Si l’on exécute ce script, on obtient selon le shell de la session :

% echo $SHELL % echo $SHELL


/bin/csh /bin/bash

% ./script-foireux % ./script-foireux
for: Command not found. a
do: Command not found. repertoire1
i: Undefined variable. script-foireux

LA PREMIERE LIGNE DU SCRIPT DOIT ETRE CELLE EN


#!/bin/sh

Formation permanente – ARS 207


Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

§ 7.3 Passage de paramètres à un shell script : $1 à $9

Comme tout programme, on peut passer des paramètres à un shell script.

Variable Description

$0 Nom du shell script

$1 à $9 Les 9 premiers paramètres

$# Le nombre de paramètres

$* Tous les paramètres passés au shell script sous la


forme de mots individuels séparés

$@ Tous les paramètres passés au shell script

Formation permanente – ARS 208

Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

Exemple de script appelé foo :

#!/bin/sh
VAL=‘expr ${1:-0} + ${2:-0} + ${3:-0}‘
echo $VAL

% ./foo 12 3 8
23
% ./foo 5 7
12
% ./foo 13
13

Formation permanente – ARS 209


Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

Comment accéder à tous les paramètres ?

Soit le script wrong suivant :

#!/bin/sh
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12

% ./wrong a b c d e f g h i j k l
./wrong a b c d e f g h i a0 a1 a2

 comment faire ?

Formation permanente – ARS 210

Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

La solution consiste à utiliser la commande shift :

arg1 arg2 arg3 arg4 arg5 arg6

arg1 arg2 arg3 arg4 arg5 arg6

Soit le script good % ./good a b c d


#!/bin/sh a b c
echo $1 $2 $3 b c d
shift
echo $1 $2 $3

Formation permanente – ARS 211


Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

Attention !

A chaque emploi de shift, le paramètre $1 précédent est perdu. Du même coup, ce paramètre
est supprimé de $* et $@, $# est décrémenté de 1.

#!/bin/sh % ./show a b c d
echo "$# ; $1 $2 $3 ; $@" 4 ; a b c ; a b c d
shift 3 ; b c d ; b c d
echo "$# ; $1 $2 $3 ; $@" 2 ; c d ; c d
shift 1 ; d ; d
echo "$# ; $1 $2 $3 ; $@" 0 ; ;
shift
echo "$# ; $1 $2 $3 ; $@"
shift
echo "$# ; $1 $2 $3 ; $@"

Formation permanente – ARS 212

Programmation en Bourne shell Passage de paramètres à un shell script : $1 à $9

Attention !

L’emploi de shift nécessite que le shell script ait au moins un paramètre :

Soit le script good : % ./good <pas de paramètres>


#!/bin/sh
echo $1 $2 $3 shift: can’t shift that many
shift
echo $1 $2 $3

Formation permanente – ARS 213


Programmation en Bourne shell Liste des paramètres d’un shell script : $*, $@

§ 7.4 Liste des paramètres d’un shell script : $*, $@

$* Tous les paramètres passés au shell script sous la forme de mots individuels séparés

$@ Tous les paramètres passés au shell script

Soit un shell script que l’on appelle ainsi :


% ./foo "arg1" "deux mots" "arg3"
Alors :

$* est une liste de 4 éléments : $@ est une liste de 3 éléments :


1. "arg1" 1. "arg1"
2. "deux" 2. "deux mots"
3. "mots" 3. "arg3"
4. "arg3"

Formation permanente – ARS 214

Programmation en Bourne shell Variables prédéfinies : $ ?, $ !, $$

§ 7.5 Variables prédéfinies : $ ?, $ !, $$

$?
Contient le code de retour de la dernière commande exécutée.

$!
Contient le PID de la dernière commande lancée en tâche de fond depuis le shell script.

$$
Contient le PID du shell script qui est en train de s’exécuter.

On ne peut que consulter ces variables.

Formation permanente – ARS 215


Programmation en Bourne shell Commandes internes du shell : builtins, type

§ 7.6 Commandes internes du shell : builtins, type

Le shell dispose de commandes internes (dites aussi builtins) : cd, set. . .

Une méthode pour les identifier est d’utiliser la commande du Bourne Shell type (which en C
shell).

% type cd
cd is a shell builtin
% type echo
echo is a shell builtin
% type ls
ls is /bin/ls

Formation permanente – ARS 216

Programmation en Bourne shell Commande d’affichage : echo

§ 7.7 Commande d’affichage : echo

La commande d’affichage de caractères est echo.

Attention !

La commande echo peut ne pas être un builtin du shell. En Bourne Shell, c’est toujours le cas.
Ainsi souvent il existe une vraie commande Unix echo :

% ls -l /bin/echo
-r-xr-xr-x 1 bin bin 32768 May 20 12:30 /bin/echo
Le comportement du builtin peut être différent de celui de la commande Unix.

Formation permanente – ARS 217


Programmation en Bourne shell Commande d’affichage : echo

La commande echo comprend des séquences semblables à celles de printf() :

Séquence Description

\b Backspace

\c Pas de newline envoyé

\n Newline

\r Carriage return

\t Tabulation horizontale

\v Tabulation verticale

\\ Backslash

\nnn Caractère dont le code octal ASCII est donné

Formation permanente – ARS 218

Programmation en Bourne shell Commande d’affichage : echo

Exemples :

1. #!/bin/sh
echo -n "Il y a "
n=‘ls | wc -l‘
echo "$n fichiers ici"
2. #!/bin/sh
echo "Il y a \c"
n=‘ls | wc -l‘
echo "$n fichiers ici"

Formation permanente – ARS 219


Programmation en Bourne shell Entrée interactive : read

§ 7.8 Entrée interactive : read

La commande read permet de lire au clavier et de placer les mots lus dans une liste de variables.

Syntaxe :

read variable-list

Le premier mot va dans la première variable, le deuxième mot va dans la deuxième variable. . .Tous
les mots en trop sont stockés dans la dernière variable mentionnée.

Formation permanente – ARS 220

Programmation en Bourne shell Entrée interactive : read

Exemples :

1. % cat foo
#!/bin/sh
read var1 var2
echo "Premier mot : $var1"
echo "Le reste : $var2"

% ./foo
Unix MS-DOS Windows 95 Windows NT MacOS
Premier mot : Unix
Le reste : MS-DOS Windows 95 Windows NT MacOS

Formation permanente – ARS 221


Programmation en Bourne shell Entrée interactive : read

2. % cat foo
#! /bin/sh -
while read line
do
echo "$line"
done

% ./foo < /etc/motd


FreeBSD 2.2.2-RELEASE (TOURNESOL.LPS.ENS.FR) #3: ...

Welcome to FreeBSD!
%

Formation permanente – ARS 222

Programmation en Bourne shell Structure if – then – else

§ 7.9 Structure if – then – else

Syntaxes :

1. if condition 2. if condition 3. if condition


then then then
commands1 commands1 commands1
fi else elif condition2
commands2 commands2
fi fi

La condition (booléenne) est en général le code de retour d’une commande UNIX. Le code de retour
de la commande détermine le test if :

– Code de retour valant zéro :


Le test if est vrai.
– Code de retour non nul :
Le test if est faux.

Formation permanente – ARS 223


Programmation en Bourne shell Structure if – then – else

Exemple :

#!/bin/sh
if ls > /dev/null
then
echo Il y a des fichiers
fi

C’est-à-dire sous sa forme générique :

#!/bin/sh
if commande [options] parametres
then
...
else
...
fi

Formation permanente – ARS 224

Programmation en Bourne shell Structure if – then – else

Autres formes de if : les opérateurs logiques du shell

ET logique : OU logique :

command1 && command2 command1 || command2

if command1 if ! command1
then then
command2 command2
fi fi

Avantage : forme compacte et élégante

Formation permanente – ARS 225


Programmation en Bourne shell Structure if – then – else

Exemples :

1. #!/bin/sh
ls foo && cat foo

2. #!/bin/sh
ls foo 2> /dev/null || echo "foo n’existe pas"

Formation permanente – ARS 226

Programmation en Bourne shell Structure case

§ 7.10 Structure case

La commande case permet de tester une chaîne de caractères par rapport à un certain nombre
d’autres chaînes prédéfinies :

case value in
pattern1) commands1
;;
pattern2) commands2
;;
esac

Formation permanente – ARS 227


Programmation en Bourne shell Structure case

Exemple :

#!/bin/sh
echo -n "Quitter ? --> "
read answer
case "$answer" in
Y* | y* ) ANSWER="YES" ;;
N* | n* ) ANSWER="NO" ;;
b?? ) ANSWER="BOF" ;;
* ) ANSWER="MAYBE" ;;
esac
echo $ANSWER

Formation permanente – ARS 228

Programmation en Bourne shell Commande test

§ 7.11 Commande test

Dans de nombreuses structures shell, on teste une condition.

La commande test permet de réaliser divers tests.

Format Description

-f fichier True if fichier exists and is a regular file.

-s fichier True if fichier exists and has a size greater than zero.

-w fichier True if fichier exists and has write flag on.

-x fichier True if fichier exists and has execute flag on.

Formation permanente – ARS 229


Programmation en Bourne shell Commande test

Format Description

-n string True if the length of string is nonzero.


s1 = s2 True if the strings s1 and s2 are identical.

s1 != s2 True if the strings s1 and s2 are not identical.

n1 -eq n2 True if the integers n1 and n2 are algebraically equal.


n1 -ne n2 True if the integers n1 and n2 are not algebraically equal.
n1 -gt n2 True if the integer n1 is algebraically greater than the integer n2.
n1 -ge n2 True if the integer n1 is algebraically greater than or equal to the integer
n2.

n1 -lt n2 True if the integer n1 is algebraically less than the integer n2.
n1 -le n2 True if the integer n1 is algebraically less than or equal to the integer
n2.

Formation permanente – ARS 230

Programmation en Bourne shell Commande test

Format Description

! expression True if expression is false.

expression1 -a expression2 True if both expression1 and ex-


pression2 are true.

expression1 -o expression2 True if either expression1 or expres-


sion2 are true.

Attention à ne pas écrire une commande test à vous. La commande test du système pourrait avoir
priorité selon le PATH.

Formation permanente – ARS 231


Programmation en Bourne shell Commande test

Double forme de la commande test :

1. forme normale : 2. forme crochet :

#!/bin/sh #!/bin/sh
if test $1 = hello if [ $1 = hello ]
then then
echo hello world echo hello world
fi fi

% ls -liF /bin/[ /bin/test


15422 -r-xr-xr-x 2 bin bin 45056 May 20 12:31 /bin/[*
15422 -r-xr-xr-x 2 bin bin 45056 May 20 12:31 /bin/test*

Par contre pas de commande Unix "]", bien sûr.

Formation permanente – ARS 232

Programmation en Bourne shell Commande test

Exemples :

1. #!/bin/sh
if test $1 = hello
then
echo hello world
fi
2. if [ $1 -gt $2 -o $1 -eq $2 ]
then
echo $1 is greater than or equal to $2
fi
3. #!/bin/sh
[ $# -eq 0 ] && echo You entered no parameters

Formation permanente – ARS 233


Programmation en Bourne shell Structure de boucles : while, for, until

§ 7.12 Structure de boucles : while, for, until

Syntaxes :

while condition for variable in list until condition


do do do
commands1 commands1 commands1
done done done

Formation permanente – ARS 234

Programmation en Bourne shell Structure de boucles : while, for, until

Exemples :

1a) #!/bin/sh % ./foo a b "deux mots" d e


while [ "$1" ] a
do b
echo $1 deux mots
shift d
done e

1b) #!/bin/sh % ./foo


compteur=5 5
while [ $compteur -ge 0 ] 4
do 3
echo $compteur 2
compteur=‘expr $compteur - 1‘ 1
done 0

Formation permanente – ARS 235


Programmation en Bourne shell Structure de boucles : while, for, until

2a) #!/bin/sh % ./foo a "deux mots" d


echo $# 3
for VAR in $* a
do deux
echo $VAR mots
done d

2b) #!/bin/sh % ./foo a b "deux mots" d e


compteur=0 argv[1]=a
for i in "$@" argv[2]=b
do argv[3]=deux mots
compteur=‘expr $compteur + 1‘ argv[4]=d
echo "argv[$compteur]=$i" argv[5]=e
done

Formation permanente – ARS 236

Programmation en Bourne shell Structure de boucles : while, for, until

3a) #!/bin/sh % ./foo a b "deux mots" d e


until [ "$1" = "" ] a
do b
echo $1 deux mots
shift d
done e

3b) #!/bin/sh % ./foo


compteur=5 5
until [ $compteur -lt 0 ] 4
do 3
echo $compteur 2
compteur=‘expr $compteur - 1‘ 1
done 0

Formation permanente – ARS 237


Programmation en Bourne shell Contrôle du flux d’exécution : break, continue

§ 7.13 Contrôle du flux d’exécution : break, continue

Deux commandes du shell permettent de contrôler le flux d’exécution du code :


– break ou break n
Cela permet de sortir prématurément d’un niveau de boucle ou de n niveaux de boucles.
#!/bin/sh
compteur=5
while :
do
[ $compteur -lt 0 ] && break
echo $compteur
compteur=‘expr $compteur - 1‘
done
On notera l’expression while :. Le caractère " :" correspond à une instruction builtin du shell dont
le code de retour est toujours 0.

Formation permanente – ARS 238

Programmation en Bourne shell Contrôle du flux d’exécution : break, continue

– continue ou continue n
Cela permet de retourner à la boucle sans finir le code de la boucle.
#!/bin/sh
for i in "$@"
do
[ -d $i ] && continue
echo "$i n’est pas un directory"
done

Formation permanente – ARS 239


Programmation en Bourne shell Redirection dans les boucles

§ 7.14 Redirection dans les boucles

On peut réaliser des redirections au niveau des commandes if, while, until du shell et pas
uniquement au niveau des commandes Unix.

1) #!/bin/sh
if true
then
read line1
read line2
read line3
fi < $1

Formation permanente – ARS 240

Programmation en Bourne shell Redirection dans les boucles

2a) #!/bin/sh
for file in "$@"
do
while read word1 rest_of_line
do
[ "$word1" = "Subject:" ] && \
{ echo "$file $word1 $rest_of_line" ; break; }
done < $file
done

Formation permanente – ARS 241


Programmation en Bourne shell Redirection dans les boucles

2b) #!/bin/sh
compteur=0
while read BUFFER
do
compteur=‘expr $compteur + 1‘
echo "$compteur $BUFFER"
done < $1

Formation permanente – ARS 242

Programmation en Bourne shell Redirection dans les boucles

3) #!/bin/sh
until [ "$word1" = ABORT ]
do
read word1 rest
done < $1

Formation permanente – ARS 243


Programmation en Bourne shell Fonctions shell

§ 7.15 Fonctions shell

On peut écrire des fonctions au sein d’un shell scritpt (sauf avec /bin/sh d’Ultrix, lui préférer
/bin/sh5) :

#!/bin/sh

fonction()
{
commands
}

Formation permanente – ARS 244

Programmation en Bourne shell Fonctions shell

Particularités :

– $1, $2 . . .désignent dans une fonction les paramètres passées à la fonction et non pas au shell
script
– $0 désigne toujours le nom du shell script qui tourne
– $* et $@ désignent les listes des paramètres passés à la fonction, avec toujours les mêmes
subtilités entre les deux.

– Il n’y a qu’un environnement de


#! /bin/sh % ./foo
variables au sein d’un shell foobar() a=
script. Une variable créée au sein { b=2
d’une fonction peut donc être a=33 ; echo "b=$b" ; a=33
}
accédée en dehors du corps de
echo "a=$a"
cette fonction. Il n’y a pas de b=2
notion de variable locale en foobar
général. echo "a=$a"

Formation permanente – ARS 245


Programmation en Bourne shell Fonctions shell

Code de retour d’une fonction :

La commande return renvoie une valeur de retour pour la fonction shell.

#!/bin/sh Le code de retour d’une fonction shell suit la


même convention que pour les commandes
foobar() Unix :
{
return 1 code de retour nul
}
la fonction s’est exécutée correctement

if foobar
then
code de retour non nul
echo Test positif
la fonction a rencontré une condition logique
else
echo Test negatif d’erreur
fi

Formation permanente – ARS 246

Programmation en Bourne shell Code de retour d’un shell script : exit

§ 7.16 Code de retour d’un shell script : exit

La commande exit renvoie une valeur de retour pour le shell script.

Le code de retour d’un shell script suit la même convention que pour les commandes Unix :
– code de retour nul
le script s’est exécuté correctement
– code de retour non nul
le script a rencontré une condition logique d’erreur

#! /bin/sh
# @(#)true.sh 1.5 88/02/07 SMI; from UCB
exit 0

Formation permanente – ARS 247


Programmation en Bourne shell Debugging d’un shell script : set -x

§ 7.17 Debugging d’un shell script : set -x

2 méthodes :

1. The most effective debugging tool is still careful thought, coupled with judiciously placed print
statements. (Brian Kernighan [1978])

2. Placer en début de script la ligne


set -x
Exemple :

% cat foo % ./foo


#!/bin/sh + echo besancon
set -x besancon
echo $USER

Formation permanente – ARS 248


Panorama de fichiers de configuration

Chapitre 8 : Panorama de fichiers de configuration

§ 8.1 Introduction

Lors de la création des comptes, il y a des fichiers de configuration à déposer chez l’utilisateur.

Cf ls -a $HOME

Lesquels ? Que font-ils ? Quels utilitaires les utilisent-ils ?

Formation permanente – ARS 249

Panorama de fichiers de configuration Shell de login

§ 8.2 Shell de login

La commande login lance un shell de login.


Le nom du shell est alors précédé d’un signe moins :
% ps -edf | grep bash
besancon 1773 1 0 Aug 24 console 0:00 -bash
besancon 1959 1949 0 Aug 24 pts/3 0:09 bash
besancon 8300 8299 0 Aug 26 pts/5 0:00 bash

Le shell sait alors qu’il est un shell de login (via argv[0])


 le shell exécute les fichiers de configuration de login
Un shell non de login n’exécutera pas les fichiers de configuration de login et sera initialisé plus
simplement.

On peut forcer le mode shell de login :


– avec bash : bash --login
– avec tcsh : tcsh -l
– avec xterm : xterm -ls ou xterm -xrm ’*loginShell: true’

Formation permanente – ARS 250


Panorama de fichiers de configuration Shell interactif – Shell non interactif

§ 8.3 Shell interactif – Shell non interactif

Un shell est interactif si les commandes sont saisies sur un terminal.


Un shell est non interactif si les commandes sont lues dans un fichier.

Si le shell est non interactif, on n’exécutera pas les fichiers de commandes interactives et le shell
sera initialisé plus simplement.

La commande tty -s permet de tester si l’on est en mode interactif ou pas :


– code de retour 0 : mode interactif
– code de retour 1 : mode non interactif

On peut forcer le mode shell interactif :


– avec bash : bash -i
– avec bash : sh -i
– avec tcsh : tcsh -i
– avec tcsh : csh -i

Formation permanente – ARS 251

Panorama de fichiers de configuration Fichiers d’initialisation pour bash

§ 8.4 Fichiers d’initialisation pour bash

En mode shell de login interactif (sauf option contraire --noprofile) :


1. on exécute /etc/profile

2. on exécute le premier et seulement le premier fichier existant parmi


$HOME/.bash_profile, $HOME/.bash_login, $HOME/.profile

En mode shell non interactif mais avec l’option --login (sauf option contraire --noprofile) :
1. on exécute /etc/profile

2. on exécute le premier et seulement le premier fichier existant parmi


$HOME/.bash_profile, $HOME/.bash_login, $HOME/.profile

En mode shell non de login interactif :

1. on exécute $HOME/.bashrc (sauf option contraire --norc)

Formation permanente – ARS 252


Panorama de fichiers de configuration Fichiers d’initialisation pour bash

En mode shell non de login non interactif :

1. on exécute le fichier mentionné par $BASH_ENV

Quand un shell de login se termine :

1. on exécute $HOME/.bash_logout

Non recommandé :
Before you can type international characters (éèà. . .) in bash, you must add the following lines to your
$HOME/.inputrc file :
set meta-flag on
set convert-meta off
set output-meta on

These are options to the readline library, which you can read about in the bash(1) man page.

Formation permanente – ARS 253

Panorama de fichiers de configuration Fichiers d’initialisation pour sh

§ 8.5 Fichiers d’initialisation pour sh

En mode shell de login :

1. on exécute /etc/profile

2. on exécute $HOME/.profile

En mode autre : on n’exécute aucun fichier !

Formation permanente – ARS 254


Panorama de fichiers de configuration Fichiers d’initialisation pour tcsh

§ 8.6 Fichiers d’initialisation pour tcsh

En mode shell de login :

1. on exécute /etc/csh.cshrc

2. on exécute /etc/csh.login

3. on exécute $HOME/.tcshrc (ou $HOME/.cshrc à la place si non existant)

4. on exécute $HOME/.history

5. on exécute $HOME/.login

6. on exécute $HOME/.cshdirs

En mode shell non de login ou en mode non interactif :

1. on exécute /etc/csh.cshrc

2. on exécute $HOME/.tcshrc (ou $HOME/.cshrc à la place si non existant)

Formation permanente – ARS 255

Panorama de fichiers de configuration Fichiers d’initialisation pour tcsh

Quand un shell de login se termine :

1. on exécute /etc/csh.logout

2. on exécute $HOME/.logout

Formation permanente – ARS 256


Panorama de fichiers de configuration Fichiers d’initialisation pour csh

§ 8.7 Fichiers d’initialisation pour csh

En mode shell de login :

1. on exécute /etc/.login

2. on exécute $HOME/.cshrc

3. on exécute $HOME/.login

4. on exécute $HOME/.cshdirs

Quand un shell de login se termine :

1. on exécute $HOME/.logout

Formation permanente – ARS 257

Panorama de fichiers de configuration Fichiers d’initialisation pour le courrier électronique

§ 8.8 Fichiers d’initialisation pour le courrier électronique

Le fichier $HOME/.forward sert au renvoi du courrier électronique vers une autre adresse. On y
précise les adresses vers lesquelles renvoyer.

Pour garder une copie locale (par exemple je suis


Thierry.Besancon@formation.jussieu.fr) et quand même renvoyer vers une
autre adresse (par exemple Thierry.Besancon@paris4.sorbonne.fr), mettre :
\Thierry.Besancon@formation.jussieu.fr, Thierry.Besancon@paris4.sorbonne.fr

Le fichier $HOME/.mailrc sert à configurer l’utilitaire de base Mail du courrier. On peut y


préciser des alias de noms.

D’autres utilitaires auront leur propre fichier de configuration. Cf les documentations de ces utilitaires.

Formation permanente – ARS 258


Panorama de fichiers de configuration Fichiers de configuration pour l’environnement graphique X

§ 8.9 Fichiers de configuration pour l’environnement graphique X

Pour l’environnement graphique de base sous Unix (ni CDE, ni KDE, ni GNOME) :
– fichier $HOME/.xsession : script de démarrage donnant la liste des applications à lancer par
défaut sous l’environnement graphique
– fichier $HOME/.xinitrc : le mieux est que ce fichier soit un lien symbolique vers
$HOME/.xsession ; si ce n’est pas le cas, effacer le fichier et faire le lien
– fichier $HOME/.Xresources : pseudo base de registres personnels pour le système de
fenêtrage
– fichier $HOME/.Xdefaults : le mieux est que ce fichier soit un lien symbolique vers
$HOME/.Xresources ; si ce n’est pas le cas, effacer le fichier et faire le lien

Les environnements graphiques CDE, KDE, GNOME utilisent plusieurs fichiers de configuration
regroupés dans plusieurs répertoires. En fait, on ne modifie pas manuellement ces fichiers. On passe
par les outils graphiques de configuration qui se chargent de modifier les fichiers ad-hoc.

Formation permanente – ARS 259


Réglages de terminal texte

Chapitre 9 : Réglages de terminal texte

Le terminal texte peut être une vraie console texte ou bien être un terminal genre xterm du
système de multifenêtrage graphique.

Un terminal texte est caractérisé par certains paramètres (nombre de lignes, nombre de colonnes,
etc.) qui sont utilisés par plusieurs utilitaires :
– éditeurs de texte
– shells
– jeux en mode texte
– etc.
Il est donc important que le terminal soit bien configuré par l’utilisateur.

Formation permanente – ARS 260

Réglages de terminal texte Variable TERM, TERMCAP, TERMINFO

§ 9.1 Variable TERM, TERMCAP, TERMINFO

La variable d’environnement TERM définit le modèle de terminal texte utilisé.


Dans le passé, il y avait pléthore de console de terminaux texte.
 base de données des modèles de terminaux :
– Implémentation système BSD : base de données au format TERMCAP stockée dans le fichier
/etc/termcap
– Implémentation système System-V : base de données au format TERMINFO stockée dans
l’arborescence /usr/share/lib/terminfo/
Par exemple pour le minitel : /usr/share/lib/terminfo/m/minitel
Base à jour disponible à http://www.tuxedo.org/~esr/terminfo
Utilitaires tic (terminfo compiler), captoinfo pour convertir les fichiers de description de
terminaux de termcap à terminfo

Variable d’environnement TERM au niveau du shell.


Variable term pour les C shells.

Formation permanente – ARS 261


Réglages de terminal texte Commande stty

§ 9.2 Commande stty

La commande stty donne les caractéristiques bas niveau du terminal.


Dans les résultats renvoyés on trouve les configurations de certaines séquences de touches utilisées
interactivement.
Par exemple l’effacement du caractère précédent de la ligne via la touche Del ou Backspace .

Il y a 2 versions de la commande selon la famille d’Unix. L’affichage des données est différent mais
on manipule la même chose au final.

Attention à ne pas confondre ce que permet la gestion du terminal texte et ce que permet le shell (par
exemple bash offre des possibilités de déplacement du curseur au sein de la ligne de commande).

Formation permanente – ARS 262

Réglages de terminal texte Commande stty

Principales noms de séquences utiles :


– séquence erase : effacement du caractère précédent
– séquence werase : effacement du mot précédent
– séquence kill : effacement de la ligne compléte
– séquence intr : envoi du signal SIGINT
– séquence quit : envoi du signal SIGABRT
– séquence susp : envoi du signal SIGTSTP
– séquence eof : End Of File
– séquence start : relance le flux de l’affichage texte
– séquence stop : arrête le flux de l’affichage texte
– séquence lnext : permet la saisie de la séquence suivante sans l’interpréter

Formation permanente – ARS 263


Réglages de terminal texte Commande stty

Exemple de stty sur Solaris

% /usr/bin/stty -a
speed 9600 baud;
rows = 55; columns = 80; ypixels = 719; xpixels = 579;
csdata ?
eucw 1:0:0:0, scrw 1:0:0:0
intr = ^c; quit = ^\; erase = ^?; kill = ^u;
eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;
-parenb -parodd cs8 -cstopb hupcl cread -clocal -loblk -crtscts -crtsxoff -parext
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff imaxbel
isig icanon -xcase echo echoe echok -echonl -noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel

Formation permanente – ARS 264

Réglages de terminal texte Commande stty

Modification de séquence via stty

Reprenons les séquences précédentes :

intr = ^c; quit = ^\; erase = ^?; kill = ^u;


eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;

Le shell standard sous Linux est bash qui permet de revenir en début de ligne tapée par ^e.

Pour changer intr de ^c en ^e, on tapera donc en pratique :


stty intr ^v^e
Le ^v annule l’effet de ^e (sous bash retour en début de ligne) lorsqu’on le tape.
Le ^v est indiqué par la séquence lnext de stty.

Formation permanente – ARS 265


Langage awk

Chapitre 10 : Langage awk

(déduit des noms des auteurs Aho, Weinberger, Kernighan)

C’est un utilitaire recherchant des motifs dans un fichier et réalisant des opérations sur les lignes
répondant aux critères.

C’est plus généralement un mini langage de programmation à la syntaxe proche du langage C.

Il est très souvent utilisé pour réaliser des filtres sur des fichiers.

Se reporter à un manuel disponible en français :


ftp://ftp.imag.fr/pub/DOC.UNIX/AWK/awk.pdf
ftp://ftp.imag.fr/pub/DOC.UNIX/AWK/awk.ps.gz

Formation permanente – ARS 266

Langage awk Syntaxe de la commande awk

§ 10.1 Syntaxe de la commande awk

Syntaxe : awk [options] [fichiers]


Options intéressantes :

– option -FC où C est le caractère séparateur de champs


– option -f fichier pour indiquer fichier contenant le programme awk à exécuter
Un programme awk peut être composé de :
– définition de fonctions
– instructions

Formation permanente – ARS 267


Langage awk Syntaxe de la commande awk

Définition d’une fonction

function nom(paramêtres) instructions

Format des instructions :

[masque] instructions

Variables utilisables :

– champs : $0, $1, $2, . . .


– variables prédéfinies
– variables utilisateur

Formation permanente – ARS 268

Langage awk Variables de awk

§ 10.2 Variables de awk

FS caractère séparateur de champs

NF nombre de champs sur la ligne courante

NR numéro d’ordre de la ligne courante

RS caractère séparateur de lignes

OFS caractère séparateur de champs, en sortie

ORS caractère séparateur de lignes, en sortie

FILENAME nom du fichier en cours de traitement

ENVIRON[] variables d’environnement

Formation permanente – ARS 269


Langage awk Masques sous awk

§ 10.3 Masques sous awk

Les masques conditionnent les instructions à exécuter sur chaque ligne.

Les masques sont évalués lors de la lecture de chaque ligne.

Seuls les instructions associées aux masques actifs sont exécutées pour chaque ligne.

Principaux masques :
– BEGIN
– END
– /expression rationnelle/

Formation permanente – ARS 270

Langage awk Opérateurs de awk

§ 10.4 Opérateurs de awk

++ incrémentation

– décrémentation

! négation logique

/ < > <= >= infériorité, supériorité

== != égalité, différence

&& ET logique

|| OU logique

Formation permanente – ARS 271


Langage awk Instructions de awk

§ 10.5 Instructions de awk

Test

if (condition) instruction [ else instruction]


Boucles

while (condition) instruction


do instruction
while(condition)
for (expr1; expr2; expr3) instruction
Contrôle de boucles

break
continue

Formation permanente – ARS 272

Langage awk Instructions de awk

Terminaison

exit [code_de_retour]
Passage à la ligne suivante

next
Affichage de données

print [expressions] [>fichier]


printf format, expressions [>fichier]

Formation permanente – ARS 273


Langage awk Principales fonctions prédéfinies

§ 10.6 Principales fonctions prédéfinies

Longueur d’une chaine

length (chaine)
Valeur entière d’une expression

int(expression)
Recherche d’une chaie dans une autre

index(chaine1, chaine2)
Extraction d’une sous-chaine

substr(chaine, position, longueur)

Formation permanente – ARS 274

Langage awk Exemples

§ 10.7 Exemples

1. Affichage de tous les noms d’utilisateur


awk -F: ’{ print $1 }’ < /etc/passwd
2. Inversion des champs 3 et 4
awk ’{ print $1, $2, $4, $3 }’
3. Affichage du contenu d’un fichier avec numérotation des lignes
awk ’{ print NR, $0 }’
4. Cumul des sommes présentes en troisième colonne
awk ’{ s += $3 } END { print s }’
5. Suppression de toutes les lignes dont le premier champ est égal à celui de la ligne précédente

awk ’{if ( $1 != prev ) { print; prev = $1; } }’

Formation permanente – ARS 275


Langage awk Exemples

6. Vérification que toutes les lignes ont le même nombre de champs que la première

BEGIN { nberr = 0}
{ if (NR == 1)
nb = NF;
else
if ( nb != NF )
nberr++;
}
END {
if ( nberr != 0 )
print nberr , " enregistrements incorrects ";
}

7. Tuer tous les processus Unix appartenant à l’utilisateur thb :


% ps aux | awk ’$1=="thb" {print "kill " $2}’ | sh

Formation permanente – ARS 276


Langage perl

Chapitre 11 : Langage perl

PERL  Practical Extraction and Report Language

Cf http://www.cpan.org

Langage de script :

#!/usr/bin/perl -wall
# exemple de "hello world!"
print " hello world! ";
Comme pour le langage C, une instruction se termine toujours par un point-virgule ;.

Formation permanente – ARS 277

Langage perl Les nombres Perl

§ 11.1 Les nombres Perl

Pas de distinction entre nombres entiers et nombres flottants.

Tous les calculs internes sont faits en nombres flottants.

Formation permanente – ARS 278


Langage perl Les chaines de caractères Perl

§ 11.2 Les chaines de caractères Perl

2 types de chaines de caractères :


– les simple-quote ; aucun traitement sur le contenu
– les doubles-quote ; remplacement des caractères de formatage ainsi que des variables.
Les caractères de formatage (proches du langage C) :
Caractère Action

\n Nouvelle ligne

\r Retour

\t Tabulation

\b Backspace

\v Tabulation verticale

\e Escape

\\ Backslash

\" Double quote

\a Bruit d’une cloche

Formation permanente – ARS 279

Langage perl Les variables Perl

§ 11.3 Les variables Perl

Caractère dollar $ pour spécifier une variable.


Caractères autorisés : lettres, nombres, underscore _
Le premier caractère ne peut pas être un chiffre.

Exemples :
$i = 10;
$i2 = 20;
$string = "hello world!";
$string_2 = "je dis : ${string}";

Formation permanente – ARS 280


Langage perl Les variables Perl

 Opérations sur les variables scalaires :  Opérations sur les chaines :


– Assignement d’une valeur : – Assignement d’une chaine :
$a = 10; $string = "Hello world!";
– Opérations sur les variables : – Concaténation de 2 chaines
$a = $a + 1; $string = "${string_a}${string_b}";
$a += 10; # équivalent à $a=$a+10; – Suppression du dernier caractère d’une chaine
$a /= 20; chop($string);
$c = $a * $b; – Suppression du dernier newline d’une chaine
– Incrément automatique chomp($string);
$a++; # incrément de 1
$a = $b++;
$b--;

Formation permanente – ARS 281

Langage perl Les listes simples

§ 11.4 Les listes simples

Le caractère @ sert à désigner une liste simple.


@foo = ("un", "deux", "trois");
@foo = (@list, 6, 7);
$elt = @test[4];

Liste prédéfinie @ARGV ($ARGV[0], $ARGV[1], etc.)

Formation permanente – ARS 282


Langage perl Les listes simples

Opérations sur les listes simples :

– Assignement d’une liste – Supprimer le dernier élément de la liste


@foo = ("un", "deux", "trois"); $elt = pop(@test);
@list = (1, 2, 3, 4, 5); – Ajouter un ou plusieurs éléments en début de
– Taille d’une liste liste
$taille = @list; @test = (1, 2, 3);
– Accès en absolu sur un élément de la liste unshift(@test, 4,5);
@test = (1,2,3,4,5,6,7,8,9); – Supprimer le premier élément de la liste
$elt = @test[4]; # ->valeur 5 $elt = shift(@test);
$test[4] = 0; # on remplace 5 par 0 – Duplication d’une liste
– Ajout d’un ou plusieurs éléments dans une @liste2 = @liste;
liste – Inverser l’ordre des éléments d’une liste
@foo = (@list, "6", "7"); @new_liste = reverse(@liste);
@list = ("0", @list); – Trier une liste
– Ajouter un ou plusieurs éléments en fin de liste @new_liste = sort(@liste);
@test = (1, 2, 3);
push(@test, 4,5);

Formation permanente – ARS 283

Langage perl Les listes associatives

§ 11.5 Les listes associatives

Les listes simples utilisent des valeurs numérique pour référencer les données (on peut adresser le
quatrième élément d’une liste avec @test[4]).

Les listes associatives utilisent une notion de clef arbitraire pour indexer les données.

C’est le caractère % qui va désigner une liste associative.

Un élément d’une liste associative sera représenté comme : $nom_liste{$clef}

Par exemple :

$test{2001} = "hello world";


$linux{linus} = "torwalds";
$linux{tux} = "pingouin";
$data = $linux{linux};

Formation permanente – ARS 284


Langage perl Les listes associatives

Si on utilise une liste associative comme une liste simple avec des clefs d’index numériques, par
exemple :

$data{1} = "un";
$data{2} = "deux";
...
$data{9} = "neuf";

alors on va pouvoir translater une liste associative en liste simple (clef,valeur) :

@liste_simple = %data ;

ce qui nous donne :

@liste_simple = (1, "un", 2, "deux", ..., 9, "neuf");

ou inversement :

@liste_simple = { "un", "deux, ... "neuf");


%data = @liste_simple;

Formation permanente – ARS 285

Langage perl Les listes associatives

Opérations sur les listes associatives :


– Assignement d’un élément
$test{1} = "un";
$test{un} = 1;
– Suppression d’un élément dans une liste
delete $test{1};
– Taille d’une liste
$taille = %list;
– Accés en absolu à un élément de la liste
print $test{un};
– Duplication d’une liste
%list_dup = %list;
– Pour récupérer les clefs d’une liste
@liste_clefs = keys(%test);
– Pour récupérer les valeurs d’une liste
@liste_valeurs = values(%test);
– Pour parcourir une liste
while ( ($clef, $valeur) = each(%test) )
{ print "$clef ; $valeur\n"; }

Formation permanente – ARS 286


Langage perl Structure de contrôle if / else

§ 11.6 Structure de contrôle if / else

La structure if / else est identique à celles des langages évolués :

if (expression) if (expression) if (expression)


{ { {
lignes; lignes; lignes;
} } }
else elseif (expression)
{ {
lignes; lignes;
} }
else
{
lignes;
}

Formation permanente – ARS 287

Langage perl Structure de contrôle if / else

Autre syntaxe possible :

commande if expression;

Formation permanente – ARS 288


Langage perl Struture de controle while, until, for

§ 11.7 Struture de controle while, until, for

Tant que l’expression est vraie alors on exécute le code :

while (expression)
{
lignes;
}

Jusqu’à ce que l’expression soit vraie, on exécute le code :


until (expression)
{
lignes;
}
Très proche du langage C. On initialise une variable, on l’incrémente et on teste la valeur de la
variable à chaque itération :
for ( initialisation ; test; increment )
{
lignes;
}

Formation permanente – ARS 289

Langage perl Structure de controle foreach

§ 11.8 Structure de controle foreach

Prends une liste de données en entrée et en assigne une dans une variable à chaque itération
jusqu’à ce que la liste soit vide :
foreach $var (@liste)
{
lignes;
}

Formation permanente – ARS 290


Langage perl Opérateurs de comparaison / Opérateurs logiques

§ 11.9 Opérateurs de comparaison / Opérateurs logiques

Opérateur Numérique Chaines

Egalité == eq
Pas d’égalité != ne
Plus petit que < lt
plus grand que > gt
Plus petit ou égal à <= le
Plus grand ou égal à >= ge

Opérateur et logique : and


Opérateur ou logique : or
Opérateur de négation : !

Formation permanente – ARS 291

Langage perl Entrées/sorties : flux

§ 11.10 Entrées/sorties : flux

Notion de file descripteur tout comme en C

Un descripteur est représenté par une variable.

Conventionnellement écrit en lettres majuscules :


– entrée standard STDIN
– sortie standard STDOUT
– sortie erreur STDERR

Formation permanente – ARS 292


Langage perl Entrées/sorties : entrée standard, STDIN

§ 11.11 Entrées/sorties : entrée standard, STDIN

Descripteur STDIN

Pour récupérer une ligne


$ligne = <STDIN> ;
$ligne = <> ;

Pour récupérer plusieurs lignes


@texte = <STDIN> ;
@texte = <> ;

Formation permanente – ARS 293

Langage perl Entrées/sorties : sortie standard, STDOUT

§ 11.12 Entrées/sorties : sortie standard, STDOUT

Commandes print et printf pour écrire sur la sortie standard STDOUT du terminal.
Il n’est pas nécessaire de spécifier le descripteur STDOUT car celui-ci est pris en compte par défaut :

Exemples d’utilisation de la commande print :


$toto=10;
print $toto; # print STDOUT $toto;
print "$toto\n"; # print STDOUT "$toto\n";
print 10+20;
print "coucou tout le monde\n";

Exemple d’utilisation de la commande printf :


$foo=35;
$string="Thierry";
printf "Mon nom est %s ; j’ai %d ans !\n", $foo, $string;
qui donnera :
Mon nom est Thierry ; j’ai 35 ans !

Formation permanente – ARS 294


Langage perl Entrées/sorties : sortie erreur, STDERR

§ 11.13 Entrées/sorties : sortie erreur, STDERR

De la même manière que la sortie standard, on va utiliser le descripteur STDERR.

Formation permanente – ARS 295

Langage perl Créer, ouvrir et fermer un fichier, open(), close(), eof(), die()

§ 11.14 Créer, ouvrir et fermer un fichier, open(), close(), eof(), die()

Pour lire un fichier


open( FILE, "nom_du_fichier" );
open( FILE, "<nom_du_fichier" );
Pour créer ou écraser un fichier
open( FILE, ">nom_du_fichier" );
Pour écrire à la fin d’un fichier
open( FILE, ">>nom_du_fichier" );
Pour fermer un fichier
close( FILE );
Tester la fin du d’un fichier
eof( FILE );
Manière élégante de tester la réussite de l’appel à open() via la fonction die() :
open( FILE, "foo.txt" ) || die "Impossible d’ouvrir fichier.txt!\n";

Formation permanente – ARS 296


Langage perl Lire et écrire dans un fichier

§ 11.15 Lire et écrire dans un fichier

On utilise les mêmes techniques que celles utilisées dans les flux d’entrées/sorties STDOUT,
STDIN et STDERR mais en remplacant le descripteur par celui du fichier.
open( FILE, ">foo.txt" ) || die "Impossible d’ouvrir fichier.txt!\n";
print FILE "Hello world!";
close( FILE );

open( FILE, "foo.txt" ) || die "Impossible d’ouvrir fichier.txt!\n";


$string = <FILE>;
print $string;
close( FILE );

Formation permanente – ARS 297

Langage perl Supprimer un fichier, unlink()

§ 11.16 Supprimer un fichier, unlink()

Pour supprimer un fichier :


unlink( "fichier.txt" );

Pour supprimer plusieurs fichiers à la fois :


unlink( "foo1.txt", "foo2.txt",... );

Formation permanente – ARS 298


Langage perl Renommer un fichier, rename()

§ 11.17 Renommer un fichier, rename()

Dans l’exemple suivant, on renomme le fichier trace.log en old_trace.old :


rename( "trace.log", "old_trace.log" );

Formation permanente – ARS 299

Langage perl Créer un lien symbolique, symlink(), readlink()

§ 11.18 Créer un lien symbolique, symlink(), readlink()

Dans l’exemple suivant, on met en place le lien symbolique verb !toto ! sur le fichier data.log :
symlink( "data.log", "toto" );

Nota : Il est possible d’obtenir le lien pointé par un lien symbolique en utilisant la fonction
readlink().

Formation permanente – ARS 300


Langage perl Modifier les propriétés d’un fichier, chmod(), chown(), chgrp()

§ 11.19 Modifier les propriétés d’un fichier, chmod(), chown(), chgrp()

chmod( 0744, "fichier.txt" );


chmod( 0700, 4740, ..., "fichier1.txt", "fichier2.txt", ... );
chown( 456, "foo.txt" );
chgrp( 65600, "foo.txt" );

Formation permanente – ARS 301

Langage perl Créer et supprimer un répertoire, mkdir(), rmdir()

§ 11.20 Créer et supprimer un répertoire, mkdir(), rmdir()

mkdir( "/tmp/rep_tempo", 0744 );


rmdir( "/tmp/rep_tempo" );

Formation permanente – ARS 302


Langage perl Exécuter un programme, exec(), open()

§ 11.21 Exécuter un programme, exec(), open()

Commande exec() pour exécuter un programme :


exec("ls -la");

De la même manière, Perl vous autorise à exécuter un programme de votre système et à lui
transmettre des informations. Dans l’exemple suivant nous allons envoyer un mail en utilisant un
serveur smtp local (sendmail) :

open( MAIL, "| /usr/bin/sendmail -oi -n -t" );


print MAIL << __MAIL__;
To:root@localhost.localdomain
From:root
Hello world!
__MAIL__
close( MAIL );

Formation permanente – ARS 303

Langage perl Exécuter un programme, exec(), open()

Même exemple mais cette fois ci pour récupérer une sortie standard :
open( MESSAGES, "| tail -f /var/log/messages" );
while(!eof(MESSAGES ))
{
$str = ;
print $str;
}
close( MESSAGES );

Formation permanente – ARS 304


Langage perl Expressions régulières, $_

§ 11.22 Expressions régulières, $_

Vous pouvez tester facilement une chaine avec une expression régulière en l’entourant de 2
caractères slash /. Le test se fera sur la variable $_.
$_ = "hello world";
if (/[Hh]ello[ ]*world/)
{
# teste la variable $_
print "Hello world\n";
}

Formation permanente – ARS 305

Langage perl Expressions régulières : substitution dans une chaine, s///, ˜=

§ 11.23 Expressions régulières : substitution dans une chaine, s///, ˜=

Pour cela on va utiliser l’opérateur de substitution :


s/expression_régulière/chaine_de_remplacement/
$_ = "hello world! hello all! ";
s/hello/Hello/; # devient "Hello world! hello all!"

On peut aussi utiliser l’option g pour que la substitution se passe sur toutes les occurences de la
ligne.

$_ = "Je m’appelle gordie, gordie Lachance.";


s/gordie/jerome/g; # devient "Je m’appelle jerome, jerome Lachance."

On peut aussi vouloir appliquer une substitution sur une variable autre que $_ :

$str = "Je m’appelle gordie, gordie Lachance.";


$str ~= s/gordie/jerome/g;

Formation permanente – ARS 306


Langage perl Expressions régulières : split(), join()

§ 11.24 Expressions régulières : split(), join()

Pour découper vos chaines de caractères suivant une expression régulière :


$str = "un deux trois quatre";
@liste = split(/ /, $str); # découpe par rapport aux espaces
# @liste = ( "un", "deux", "trois", "quatre" );

Pour joindre vos chaines de caractères suivant une expression régulière :


@liste = ( "un", "deux", "trois", "quatre" );
$str = join(/-/, @liste);
# $str = "un-deux-trois-quatre";

Formation permanente – ARS 307

Langage perl Les fonctions

§ 11.25 Les fonctions

Déclaration d’une fonction :

sub nom_fonction
{
ligne_1;
ligne_2;
...
ligne_n;
}

Invoquer une fonction :

Pour invoquer une fonction, faire précéder le nom de la fonction du caractère &:
&foo;
&call_fonction(12,13);

Il est possible aussi de passer des paramêtres à la fonction : dans ce cas, tous les arguments seront
disponibles sous la forme d’une liste simple dans la variable @_

Formation permanente – ARS 308


Langage perl Les fonctions

Déclaration d’une variable locale dans une fonction :

Pour déclarer une variable locale dans une fonction Perl, vous devez utiliser la fonction local().
sub foo
{
local($toto); # déclaration locale d’une variable
...
}

La durée de vie de votre variable sera ainsi limitée à l’appel de la fonction.

Code de retour :

Le code retourné par une fonction est la valeur de la dernière expression évaluée.

De préférence, utiliser la commande return :


sub foo
{
local($code_retour); # déclaration locale d’une variable
...
return $code_retour; # code de retour
}

Formation permanente – ARS 309


Langage python

Chapitre 12 : Langage python

Cf http://www.python.org

Pour ARS 2003-2004...

Formation permanente – ARS 310


Langage SQL

Chapitre 13 : Langage SQL

SQL  Structured Query Language

SQL permet :
– la définition et la modification du schéma de la base de données
– la manipulation des données
– l’interrogation des données
– le contrôle des accès à la base

Formation permanente – ARS 311

Langage SQL Définition des exemples

§ 13.1 Définition des exemples

Voici les relations qui seront utilisées dans ce cours :

Table AVION

Numav Capacite Type Entrepot


14 25 A400 Garches

345 75 B200 Maubeuge

Table PILOTE

Matricule Nom Ville Age Salaire


1 Figue Cannes 45 28004

2 Lavande Touquet 24 11758

Table PASSAGER

Numtab Nomab
1 Nifance

2 Tearice

Formation permanente – ARS 312


Langage SQL Définition des exemples

Table VOL

Numvol Heure_depart Heure_arrivee Ville_depart Ville_arrivee


AL12 08-18 09-12 Paris Lilles

AF8 11-20 23-54 Vaux Rio

Table DEPART

Numvol Date_dep Numav Matricule


AL12 31-DEC-95 14 1

AL12 19-DEC-95 342 2

Table RESERVATION

Numab Numvol Date_sep


1 AL12 31-DEC-95

2 AL12 31-DEC-95

Formation permanente – ARS 313

Langage SQL Description des données

§ 13.2 Description des données

Création d’une relation

CREATE TABLE Pilote (


pl# Number(4),
plnom char(20),
adresse char(30)
) ;

Création d’une relation avec contraintes d’intégrité

CREATE TABLE Pilote (


pl# Number(4) not null,
plnom char(20),
adresse char(30)
) ;

Formation permanente – ARS 314


Langage SQL Description des données

Création d’index

CREATE UNIQUE INDEX IPL#


ON Pilote(pl#);

Suppression d’une relation

DROP TABLE Pilote ;

Modification du schéma d’une relation

ALTER TABLE Pilote ADD ( age number(2) );


ALTER TABLE Pilote MODIFY ( adresse char(50) );
ALTER TABLE Pilote MODIFY ( pl# not null );

Création d’une vue

CREATE VIEW VoldeParis AS (


SELECT vol#, va, hd, ha
FROM Vol
WHERE vd=’Paris’
) ;

Formation permanente – ARS 315

Langage SQL Manipulation des données

§ 13.3 Manipulation des données

Insertion des données

INSERT INTO Pilote values (1, ’Antoine’, ’Annecy’) ;


INSERT INTO Pilote values (2, ’Arthur’, ’Adge’) ;
INSERT INTO Pilote values (3, ’Jean’, null) ;

Suppression des données

DELETE FROM Pilote WHERE pl# = 1 ;

Modification des données

UPDATE Pilote
SET adresse = ’Aurillac’
WHERE pl#=2 ;

Formation permanente – ARS 316


Langage SQL Contrôle des accès

§ 13.4 Contrôle des accès

Fin normale (validation) d’une transaction

COMMIT ;
L’instruction commit rend effectifs les changements effectués sur la base. Ils deviennent visibles aux
autres utilisateurs.

Annulation d’une transaction

ROLLBACK ;
L’instruction rollback défait toutes les modifications effectuées sur la base depuis le début de la
transaction.

Formation permanente – ARS 317

Langage SQL Projection, Restriction

§ 13.5 Projection, Restriction

Principe

SELECT AVION.numav
FROM AVION
WHERE AVION.capacite > 200 ;

Projection seule :
SELECT AVION.numav
FROM AVION ;
Restriction seule :
SELECT AVION.*
FROM AVION
WHERE AVION.capacite > 200 ;

Exercice 1 : Quel est l’âge du pilote de matricule 15 ?

Exercice 2 : Quels sont les pilotes de cette compagnie aérienne ? (leur matricule, leur nom, leur ville,
leur âge et leur salaire)

Formation permanente – ARS 318


Langage SQL Projection, Restriction

Tri

Tri croissant : ORDER BY... ASC


Tri décroissant : ORDER BY... DESC

SELECT AVION.numav
FROM AVION
WHERE AVION.capacite > 200
ORDER BY AVION.numav DESC ;

Suppression des doubles

SELECT DISTINCT AVION.numav


FROM AVION
WHERE AVION.capacite > 200 ;

Omission du préfixe

SELECT numav
FROM AVION
WHERE capacite > 200 ;

Formation permanente – ARS 319

Langage SQL Projection, Restriction

Emploi de variables

SELECT A.numav
FROM AVION A
WHERE A.capacite > 200 ;

Exercice 3 : Quels sont les types d’avions entreposés à Tarascon, avec leur capacité, par ordre de
capacités croissantes ?

Prédicats dans le critère de sélection

Les prédicats disponibles :

=, !=, >, <, >=, <=


OR, AND, LIKE, NOT NULL, IN, NOT, BETWEEN X AND Y

Formation permanente – ARS 320


Langage SQL Projection, Restriction

SELECT numav
FROM AVION
WHERE capacite > 200
AND ( (ENTREPOT = ’Saint nom la Breteche’)
OR (ENTREPOT = ’Mantes la jolie’)
)
AND numav != 300 ;

SELECT numav
FROM AVION
WHERE entrepot in (’Saint nom la Breteche’, ’Mantes la jolie’)
AND capacite BETWEEN 200 AND 210
AND TYPE LIKE ’B_EING%’;

Exercice 4 : Quelles sont les villes ayant un nom commencant par ’L’ et où un pilote de moins de 20
ans gagne plus de 20000 F ?

Exercice 5 : Quels sont les numéros d’avions, avec leut entrepôt, ne résidant pas à
Marolles-en-Hurepoix, ayant une capacité supérieure à 200 ? (donnés par ordre de numéros
décroissants)

Formation permanente – ARS 321

Langage SQL Projection, Restriction

Les fonctions

Quelques fonctions disponibles :

– fonction lower(a) – fonction sqrt(a)


– fonction soundex(a) – fonction length(a)
– fonction abs(a) – etc.

SELECT numav
FROM AVION
WHERE LOWER(ENTREPOT) = ’le vesiney’;

SELECT MATRICULE, NOM


FROM PILOTE
WHERE SOUNDEX(NOM) = SOUNDEX(’SINTEXUPERI’) ;

SELECT UPPER(NOM)
FROM PILOTE
WHERE ADRESSE = ’Cordillère des Andes’ ;

Formation permanente – ARS 322


Langage SQL Projection, Restriction

Exercice 6 : Quelles sont les villes d’où part un vol pour Ajaccio ? (donner les résultats en majuscule)

Formation permanente – ARS 323

Langage SQL Projection, Restriction

Les agrégats

Quelques agrégats disponibles :

– agrégat avg() – agrégat sum()


– agrégat count() – agrégat stddev()
– agrégat max() – agrégat variance()
– agrégat min() – etc.

Exemple : Quel est le nombre d’avions ayant une capacité supérieure à 200 ?

SELECT COUNT(NUMAV)
FROM AVION
WHERE CAPACITE > 200 ;

SELECT COUNT(DISTINCT NUMAV)


FROM AVION
WHERE CAPACITE > 200 ;

Formation permanente – ARS 324


Langage SQL Projection, Restriction

Exercice 7 : Quel est le nombre d’avions en service (ie dans la relation DEPART), le 19 décembre
1995 ?

Exercice 8 : Quelle est la capacité moyenne des avions entreposés à Pogo Togo ?

Formation permanente – ARS 325

Langage SQL Les requêtes imbriquées

§ 13.6 Les requêtes imbriquées

Prédicat d’existence

SELECT
FROM
WHERE EXISTS ( SELECT
FROM
WHERE
) ;

Exemple : Quels sont les pilotes qui habitent dans une ville où n’est basé aucun avion ?

SELECT PILOTE.NOM
FROM PILOTE
WHERE NOT EXISTS ( SELECT AVION.*
FROM AVION
WHERE AVION.ENTREPOT = PILOTE.VILLE
) ;

Formation permanente – ARS 326


Langage SQL Les requêtes imbriquées

Requête à l’intérieur du IN

Exemple : Quels sont les noms des pilotes qui habitent dans une ville où sont localisés des avions de
capacité supérieure à 250 ?

SELECT PILOTE.NOM
FROM PILOTE
WHERE VILLE IN ( SELECT ENTREPOT
FROM AVION
WHERE CAPACITE > 250
) ;

Exercice 9 : Exprimer la requête suivante avec un EXISTS : Quels sont les noms des pilotes qui
habitent dans une ville où sont localisés des avions de capacité supérieure à 250 ?

Exercice 10 : Exprimer la requête suivante avec un IN : Quels sont les noms des passagers ayant
réservé pour le 1er avril 1996 ?

Formation permanente – ARS 327

Langage SQL La jointure

§ 13.7 La jointure
2 méthodes principales :
– prédicative
– requêtes imbriquées
Exemple : Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre 1996 ?

Prédicative :
SELECT PILOTE.NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DAPE_SEP = ’13-10-95’;

Imbrication :
SELECT NOM
FROM PILOTE
WHERE MATRICULE IN ( SELECT DEPART.MATRICULE
FROM MATRICULE
WHERE DATE_SEP = ’13-10-95’
) ;

Formation permanente – ARS 328


Langage SQL La jointure

Il y a de nombreuses autres façons d’exprimer une jointure.

Par exemple :

SELECT PILOTE.NOM
FROM PILOTE
WHERE EXISTS ( SELECT *
FROM DEPART
WHERE
PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DATE_DEP = ’13-10-95’
) ;

Exercice 11 : Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre 1995, sur un
avion de capacité supérieure à 250 ?
– de manière prédicative
– à l’aide de requêtes imbriquées
Exercice 12 : Quelles sont les paires de pilotes (matricules) habitant dans la même ville ?

Exercice 13 : Quels sont les noms des pilotes qui conduisent l’avion de numéro 666 ?

Exercice 14 : Quels sont les noms des pilotes qui habitent dans la ville où est entreposé l’avion 666 ?

Formation permanente – ARS 329

Langage SQL L’union

§ 13.8 L’union

Quels sont les pilotes qui conduisent l’avion de numéro 666 OU qui habitent dans la ville où est
entreposé l’avion 666 ?

SELECT NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.NUMAV = 666
UNION
SELECT NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = 666 ;

Formation permanente – ARS 330


Langage SQL L’intersection

§ 13.9 L’intersection

Quels sont les pilotes qui conduisent l’avion de numéro 666 ET qui habitent dans la ville où est
entreposé l’avion 666 ?

SELECT NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.NUMAV = 666
INTERSECT
SELECT NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = 666 ;

Formation permanente – ARS 331

Langage SQL La différence

§ 13.10 La différence

Quels sont les pilotes qui conduisent l’avion de numéro 666 SAUF ceux qui habitent dans la ville où
est entreposé l’avion 666 ?

SELECT NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.NUMAV = 666
MINUS
SELECT NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = 666 ;

Formation permanente – ARS 332


Langage SQL La division

§ 13.11 La division

Quels sont les pilotes qui conduisent tous les avions ?


 Quels sont les pilotes tels que, quel que soit l’avion, ils le conduisent ?
 Quels sont les pilotes tels que, quel que soit l’avion, il existe un départ assuré par ce pilote sur cet
avion ?
 Quels sont les pilotes tels qu’il n’existe pas d’avion tel qu’il n’existe pas départ de ce pilote sur cet
avion ?

SELECT MATRICULE
FROM PILOTE
WHERE NOT EXISTS ( SELECT *
FROM AVION
WHERE NOT EXISTS ( SELECT *
FROM DEPART
WHERE DEPART.MATRICULE = PILOTE.MATRICULE
AND DEPART.NUMAV = AVION.NUMAV
)
) ;

Formation permanente – ARS 333

Langage SQL La division

Exercice 15 : Quels sont les passagers qui ont réservé sur tous les vols ?

Exercice 16 : Quel est le nombre de pilotes qui conduisent des avions en service ? (ie dans la
relation DEPART)

Formation permanente – ARS 334


Langage SQL Group by

§ 13.12 Group by

L’opérateur GROUP BY partitionne la table.

Exemple : Quel est le nombre de pilotes qui conduisent des avions en service, par avion ?

SELECT NUMAV, COUNT(DISTINCT DEPART.MATRICULE)


FROM DEPART
GROUP BY NUMAV ;

Exercice 17 : Quelle est la capacité moyenne des avions, par entrepôt et part type ?

Formation permanente – ARS 335

Langage SQL Group by . . . HAVING

§ 13.13 Group by . . . HAVING

L’opérateur HAVING permet d’introduire une qualification sur les sous-tables issues du GROUP BY.

Le HAVING est au GROUP BY ce que le WHERE est au FROM.

Exemple : quels sont les avions qui assurent plus de 3 départ ?

SELECT DEPART.NUMAV
FROM DEPART
GROUP BY NUMAV
HAVING COUNT(*) > 3 ;

Exercice 18 : Quelles sont les villes où sont entreposés plus de 2 avions de type ICBM ?

Formation permanente – ARS 336


Langage SQL Conclusion

§ 13.14 Conclusion

SQL est un langage d’interrogation très lisible, par tous les utilisateurs.

SQL est un langage dans lequel il est relativement facile d’écrire, pour un programmeur, à condition
de bien visualiser l’ordre d’application des instructions :

1. From

2. Where

3. Group By

4. Having

5. Select

6. Order By

Formation permanente – ARS 337

Langage SQL Correction des exercices

§ 13.15 Correction des exercices

Exercice 1

Quel est l’âge du pilote de matricule 15 ?

SELECT PILOTE.AGE
FROM PILOTE
WHERE MATRICULE = 15 ;

Exercice 2

Quels sont les pilotes de cette compagnie aérienne (leur matricule, leur nom leur ville, leur âge et
leur salaire)

SELECT *
FROM PILOTE ;

Formation permanente – ARS 338


Langage SQL Correction des exercices

Exercice 3

Quels sont les types d’avions entreposés à Tarascon, avec leur capacité, par ordre de capacité
croissantes ?

SELECT DISTINCT TYPE, CAPACITE


FROM AVION
WHERE ENTREPOT = ’Tarascon’
ORDER BY CAPACITE ASC ;

Exercice 4

Quelles sont les villes ayant un nom commençant par L et où un pilote de moins de 20 ans gagne
plus de 200000 F ?

SELECT VILLE
FROM PILOTE
WHERE AGE < 20
AND SALAIRE > 200000
AND VILLE LIKE ’L%’;

Formation permanente – ARS 339

Langage SQL Correction des exercices

Exercice 5

Quels sont les numéros d’avions, avec leur entrepôt, ne résidant pas à Marolles-en-Hurepoix, ayant
une capacité supérieure à 200 ? (donnés par ordre de numéros décroissants)

SELECT NUMAV, ENTREPOT


FROM AVION
WHERE ENTREPOT != ’Marolles-en-Hurepoix’
AND CAPACITE > 200
ORDER BY NUMAV DESC ;

Exercice 6

Quelles sont les villes d’où part un vol pour Ajaccio ? (donner les résultats en majuscules)

SELECT UPPER(VILLE_DEPART)
FROM VOL
WHERE VILLE_ARRIVEE = ’Ajaccio’;

Formation permanente – ARS 340


Langage SQL Correction des exercices

Exercice 7

Quel est le nombre d’avions en service (ie dans la relation DEPART), le 19 décembre 1995 ?

SELECT COUNT(DISTINCT NUMAV)


FROM DEPART
WHERE DATE_DEP = ’19-12-95’ ;

Exercice 8

Quelle est la capacité moyenne des avions entreposés à Pogo Togo ?

SELECT AVG(ALL CAPACITE)


FROM AVION
WHERE AVION.ENTREPOT = ’Pogo Togo’;

Formation permanente – ARS 341

Langage SQL Correction des exercices

Exercice 9

Exprimer la requête suivante avec un EXISTS :

Quels sont les noms des pilotes qui habitent dans une ville où sont localisés des avions de capacité
supérieure à 250 ?

SELECT PILOTE.NOM
FROM PILOTE
WHERE EXISTS ( SELECT *
FROM AVION
WHERE CAPACITE > 250
AND AVION.ENTREPOT = PILOTE.VILLE
) ;

Formation permanente – ARS 342


Langage SQL Correction des exercices

Exercice 10

Quels sont les noms des passagers ayant réservé pour le 1er avril 1996 ? (avec un IN)

SELECT PASSAGER.NOMAB
FROM PASSAGER
WHERE NUMAB IN ( SELECT RESERVATION.NUMAB
FROM RESERVATION
WHERE RESERVATION.DATE_DEP = ’01-04-96’
) ;

Formation permanente – ARS 343

Langage SQL Correction des exercices

Exercice 11 a

Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre 1995, sur un avion de
capacité supérieure à 250 ?

De manière prédicative :

SELECT PILOTE.NOM
FROM PILOTE, DEPART, AVION
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DATE_DEP = ’13-10-95’
AND DEPART.NUMAV = AVION.NUMAV
AND AVION.CAPACITE > 250 ;

Formation permanente – ARS 344


Langage SQL Correction des exercices

Exercice 11 b

Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre 1995, sur un avion de
capacité supérieure à 250 ?

A l’aide de requêtes imbriquées :

SELECT NOM
FROM PILOTE
WHERE MATRICULE IN ( SELECT DEPART.MATRICULE
FROM DEPART
WHERE DATE_DEP = ’13-10-95’
AND NUMAV IN ( SELECT AVION.NUMAV
FROM AVION
WHERE CAPACITE > 250
)
) ;

Formation permanente – ARS 345

Langage SQL Correction des exercices

Exercice 12

Quelles sont les paires de pilotes (matricules) habitant dans la même ville ?

SELECT P1.MATRICULE, P2.MATRICULE


FROM PILOTE P1, PILOTE P2
WHERE P1.VILLE = P2.VILLE
AND P1.MATRICULE > P2.MATRICULE ;

(il s’agit d’une auto jointure)

Exercice 13

Quels sont les noms des pilotes qui conduisent l’avion de numéro 666 ?

SELECT NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.NUMAV = ’666’ ;

Formation permanente – ARS 346


Langage SQL Correction des exercices

Exercice 14

Quels sont les noms des pilotes qui habitent dans la ville où est entreposé l’avion 666 ?

SELECT NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = ’666’;

Exercice 15

Quels sont les passagers qui ont réservé sur tous les vols ?

SELECT NUMAB
FROM PASSAGER
WHERE NOT EXISTS ( SELECT *
FROM VOL
WHERE NOT EXISTS ( SELECT *
FROM RESERVATION
WHERE RESERVATION.NUMAB = PASSAGER.NUMAB
AND RESERVATION.NUMVOL = VOL.NUMVOL
)
) ;

Formation permanente – ARS 347

Langage SQL Correction des exercices

Exercice 16

Quel est le nombre de pilotes qui conduisent des avions en service ? (ie dans la relation DEPART)

SELECT COUNT(DISTINCT DEPART.MATRICULE)


FROM DEPART ;

Exercice 17

Quelle est la capacité moyenne des avions, par entrepôt et par type ?

SELECT ENTREPOT, TYPE, AVG(CAPACITE)


FROM AVION
GROUP BY ENTREPOT, TYPE ;

Formation permanente – ARS 348


Langage SQL Correction des exercices

Exercice 18

Quelles sont les villes où sont entreposés plus de 2 avions de type ICBM ?

SELECT ENTREPOT
FROM AVION
WHERE TYPE = ’ICBM’
GROUP BY ENTREPOT
HAVING COUNT(*) > 2 ;

Formation permanente – ARS 349


Moteurs SQL

Chapitre 14 : Moteurs SQL

§ 14.1 Oracle

C’est la référence en bases de données.

Cf http://www.oracle.com

A noter qu’Oracle diffuse maintenant des versions gratuites 100% fonctionnelles pour Linux et pour
Solaris.

Version disponible au moment de l’écriture de ce document : 9i

A noter le livre «Oracle 9i sous Linux» par Gilles Briard, éditeur Eyrolles, prix 50 euros, livré avec la
distribution Oracle 9i complète pour Linux. (je n’ai pas lu le livre)

Formation permanente – ARS 350

Moteurs SQL MySQL

§ 14.2 MySQL

Logiciel libre.

C’est la référence en bases de données dans le monde Linux.

Cf http://www.mysql.com

Version disponible au moment de l’écriture de ce document : 3.23.52 (2 septembre 2002)

A noter un interface WWW de configuration et d’administration : phpmyadmin


Cf http://www.phpmyadmin.net/

Formation permanente – ARS 351


Moteurs SQL PostgreSQL

§ 14.3 PostgreSQL

Logiciel libre.

Dans l’absolu, postgresql semble mieux que MySQL. Mais il est moins répandu.

Cf http://www.postgresql.org

Version disponible au moment de l’écriture de ce document : 7.2.3 (4 octobre 2002)

A noter un interface WWW de configuration et d’administration : phppgadmin


Cf sourceforge.net/projects/phppgadmin/

Formation permanente – ARS 352


Système de multifenêtrage : X

Chapitre 15 : Système de multifenêtrage : X

Système de multifenêtrage (Window System) :


ensemble de programmes, de bibliothèques de programmation réalisant une interface homme /
machine bâtie sur l’utilisation de divers équipements :

– clavier
– souris
– écran graphique
– autres périphériques (spaceball, plaquette graphique, . . .)

L’écran tente de réaliser un modèle de bureau.

L’idée vient des travaux de Xerox, repris par Apple, repris par le projet Athena du MIT.

Pour Unix, le système de multi fenêtrage est un système appelé X ou X Window System ou X11. Ce
n’est pas "X Windows" ! Greuh ! ! !

Formation permanente – ARS 353

Système de multifenêtrage : X

Sites de distribution gratuite :


– http://www.x.org
– ftp://ftp.x.org
– ftp://ftp.lip6.fr/pub/X11 (site miroir)

Newsgroups :
– comp.windows.x
– comp.windows.x.announce
– comp.windows.x.apps
– comp.windows.x.i386unix
– comp.windows.x.intrinsics
– comp.windows.x.motif
– comp.windows.x.openlook
– comp.windows.x.pex

Formation permanente – ARS 354


Système de multifenêtrage : X Caractéristiques de X

§ 15.1 Caractéristiques de X

C’est un peu plus qu’un système de multifenêtrage : il est réparti.

L’interface homme / machine permet de travailler sur plusieurs systèmes à la fois :

Formation permanente – ARS 355

Système de multifenêtrage : X Caractéristiques de X

X est constitué des parties suivantes :

– un serveur X
C’est un programme gérant le matériel (le plus souvent triplet écran – clavier – souris) et les autres
composantes logicielles : applications graphiques
– des clients X
Ce sont des applications utilisant un serveur X.
Deux applications X essentielles : émulation graphique d’un terminal xterm, gestionnaire de
fenêtres
Ce sont les clients qui réalisent l’interface homme / machine de X (contrairement à Windows,
à Mac OS où l’interface est intégrée au système d’exploitation).
– le protocole X
Il fait communiquer les clients et le serveur.
– des bibliothèques graphiques pour X
Elles réalisent le protocole et l’interface des clients

Formation permanente – ARS 356


Système de multifenêtrage : X Clavier

§ 15.2 Clavier

Plusieurs modificateurs :
– Control
– Shift
– Meta
– CapsLock
– ...
Tous les types de claviers sont supportés.

Au pire, on peut configurer un clavier hors du commun via la commande "xmodmap".

Formation permanente – ARS 357

Système de multifenêtrage : X Souris

§ 15.3 Souris

C’est un outil de désignation ayant de 1 à 3 boutons.

La position est suivie à l’écran par un curseur.

Le curseur est toujours affiché au premier plan.

Formation permanente – ARS 358


Système de multifenêtrage : X Souris

Formation permanente – ARS 359

Système de multifenêtrage : X Ecran

§ 15.4 Ecran

Il est de type bitmap (affichage point).

L’image est obtenue par balayage d’une mémoire d’écran (frame buffer) contenant une valeur par
point à l’écran (pixel).

Formation permanente – ARS 360


Système de multifenêtrage : X Fenêtre / Icône

§ 15.5 Fenêtre / Icône

x
h

Une fenêtre est un rectangle à l’écran caractérisé par un emplacement, une bordure, ses dimensions.

Une icône est la trace visible à l’écran d’une fenêtre temporairement non affichée.

Les fenêtres sont organisées en arbre au niveau interne dans le serveur X. La racine de l’arbre est la
root window créée à l’initialisation du serveur et couvrant tout l’écran. Vulgairement, c’est le fond
d’écran.

Formation permanente – ARS 361

Système de multifenêtrage : X DISPLAY

§ 15.6 DISPLAY

C’est un triplet écran – clavier – souris

Le cas le plus courant : une station de travail Unix, un terminal X, un Mac ou un PC avec le bon
logiciel.

Un display a un nom et une adresse.

L’adresse est une adresse IP.

Son nom est du type "ars01.formation.jussieu.fr:0.0".

0.0 désigne l’écran 0 de la machine. X permet de gérer des machines avec plusieurs écrans (on dit
multicéphales).

Formation permanente – ARS 362


Système de multifenêtrage : X Spécification des options aux clients X

§ 15.7 Spécification des options aux clients X

Il y a des options standard pour la plupart des clients (tout au moins ceux reposant sur l’emploi de la
bibliothèque Xt) :

– couleur des caractères :


"-fg couleur"
– couleur de fond des fenêtres :
"-bg couleur"
– caractères :
"-fn font"

Formation permanente – ARS 363

Système de multifenêtrage : X Spécification des options aux clients X

– dimensions et emplacement de la fenêtre :


"-geometry WIDTHHEIGHTXOFFYOFF"

+0+0 -0+0

X X

+100+100 +600+100
-450+150 -200+150

Y Y

Y
Y

-450-200 -200-200

+100-100 +600-100

X X

+0-0 -0-0

Formation permanente – ARS 364


Système de multifenêtrage : X Spécification des couleurs aux clients X

§ 15.8 Spécification des couleurs aux clients X

On peut désigner une couleur sous un nom symbolique : cf


/usr/X11R6/lib/X11/rgb.txt
On peut aussi donner une couleur via ses composantes Rouge Vert Bleu (RGB en anglais) sous la
forme rgb:red/green/blue

Ancienne syntaxe supportée pour compatibilité :

#RGB (4 bits each)


#RRGGBB (8 bits each)
#RRRGGGBBB (12 bits each)
#RRRRGGGGBBBB (16 bits each)

Formation permanente – ARS 365

Système de multifenêtrage : X Spécification des couleurs aux clients X

Formation permanente – ARS 366


Système de multifenêtrage : X Spécification des polices de caractères

§ 15.9 Spécification des polices de caractères

Les fontes ont des noms bien précis :

-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1

(marque, nom, graisse, angle, largeur, style, taille en pixels, taille en 1/10 points, resolution X,
resolution Y, approche, taille moyenne, ensemble)

On peut utiliser la commande xlsfonts pour avoir la liste des fontes utilisables sur son poste X.

Plusieurs formats sont possibles : BDF (Bitmap Distribution Format), SNF (Server Natural Font), PCF
(Portable Compiled Font), Type1 PostScript depuis X11R6, True Type
(http://www.freetype.org/), PEX, Speedo

Formation permanente – ARS 367

Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

§ 15.10 Personnalisation, Ressources X, xrdb, $HOME/.Xresources

Tous les clients X sont personnalisables au moyen de ressources X.

Analogie : base des registres de Windows ou ressources Macintosh

Il y a 2 types de ressources :

– Ressources standard
Héritées de la bibliothèque de programmation Xt Intrinsics très utilisée.
Spécification de fontes, géométrie, background, foreground, borderwidth, display, . . .
– Ressources particulières à l’application
Par exemple, dans xterm, la possibilité d’afficher ou pas un ascenceur (ressource "scrollBar") ou
de spécifier le nombre de lignes à garder en mémoire à l’affichage (ressource "saveLines").
Cf page de manuel de chaque application.

Formation permanente – ARS 368


Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

Les ressources par défaut pour les applications sont enregistrées dans des fichiers dans
/usr/X11R6/lib/X11/app-defaults/ par exemple sur Linux :
% ls /usr/X11R6/lib/X11/app-defaults/
Beforelight XClock XbmBrowser-color
Bitmap XConsole Xditview
Bitmap-color XFontSel Xditview-chrtr
Chooser XLoad Xedit
Clock-color XLogo Xfd
Editres XLogo-color Xgc
Editres-color XPaint Xmag
Viewres XSm Xman
XCalc XTerm Xmessage
XCalc-color XTerm-color Xmh
XClipboard XbmBrowser Xvidtune

On notera les majuscules !

Formation permanente – ARS 369

Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

En ce qui concerne les ressources personnalisées par l’utilisateur, le fichier chez l’utilisateur les
contenant est $HOME/.Xresources

On trouve aussi $HOME/.Xdefaults.

En pratique, faire un lien de $HOME/.Xdefaults vers $HOME/.Xresources.

La commande xrdb permet de manipuler les ressources chargées dans le serveur :

% xrdb -query > $HOME/ressources


% vi $HOME/ressources
% xrdb -load $HOME/ressources

Formation permanente – ARS 370


Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

A quoi ressemble une ressource ?

Exemple :

% xterm -fg red -sb -ls -bw 4 -fn 10x20


xterm*scrollBar: True
xterm*foreground: red
xterm*loginShell: True
xterm*borderWidth: 4
xterm*font: 10x20

Formation permanente – ARS 371

Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

Un client X est construit autour d’un arbre de widgets fournis par les bibliothèques :

Formation permanente – ARS 372


Système de multifenêtrage : X Personnalisation, Ressources X, xrdb, $HOME/.Xresources

Une ressource désigne donc, via une sorte de PATH, un élément dans l’arbre à personnaliser.

Les composantes du path de la ressouce peuvent être séparées par «.» ou «*» :

Clock*Background: grey
Clock*BorderColor: light blue
Clock*hour: yellow
Clock*jewel: yellow
Clock*minute: yellow

XTerm.JoinSession: False
XTerm*mainMenu*quit*Label: Quit

Le caractère «*» permet de sauter la spécification de composantes intermédiaires.

On peut aussi préciser des ressources via la ligne de commande :

% xterm -xrm ’XTerm*mainMenu*quit*Label: Quit’

Formation permanente – ARS 373

Système de multifenêtrage : X Gestionnaire de fenêtres, window manager

§ 15.11 Gestionnaire de fenêtres, window manager

Gestionnaire de fenêtres  Window Manager

C’est un client X, au même titre que les autres.

Il permet de réaliser les choses suivantes :

– déplacer ou redimensionner une fenêtre


– iconifier ou non une fenêtre
– faire passer au premier ou au dernier plan une fenêtre
– décorer les fenêtres
– créer ou détruire les fenêtres
– lancer ou terminer des applications

L’emploi d’un gestionnaire de fenêtres n’a rien d’obligatoire mais ce serait se priver de beaucoup de
fonctionnalités.

Il ne faut pas confondre le gestionnaire de fenêtres avec le serveur X.

Formation permanente – ARS 374


Système de multifenêtrage : X Gestionnaire de fenêtres, window manager

Quelques exemples de fenêtres décorées par des window managers :

Formation permanente – ARS 375

Système de multifenêtrage : X Configuration de la session X, $HOME/.xsession, FAILSAFE

§ 15.12 Configuration de la session X, $HOME/.xsession, FAILSAFE

Sur une station avec une mire d’accueil graphique, le script $HOME/.xsession est lancé lors de
la connexion et il configure l’environnement graphique de l’utilisateur.

La durée de vie de la session sous X est celle du script $HOME/.xsession

Forme générale du script $HOME/.xsession :


#!/bin/sh
appliX1 &
appliX2 &
...
appliXn &
appliX
Le dernier client X n’est pas lancé en tâche de fond (sinon le script s’arrête tout de suite et la session
se ferme brutalement).
En général, le dernier client est un window manager.

Formation permanente – ARS 376


Système de multifenêtrage : X Configuration de la session X, $HOME/.xsession, FAILSAFE

S’il y a des erreurs, les messages de celles-ci sont écrits dans le fichier
$HOME/.xsession-errors.

En cas d’erreur grave dans $HOME/.xsession empêchant le démarrage de la session X,


utiliser le mode FailSafe :
– disponible via les menus de la fenêtre d’accueil de KDE
– disponible via les menus de la fenêtre d’accueil de GNOME
– dans l’environnement de base X :
1. entrer le nom de login
2. valider par la touche Retour
3. entrer le mot de passe
4. valider par la touche F1 et non pas par la touche Retour
Il apparait alors un simple xterm sans window manager. L’utiliser pour corriger les erreurs indiquées
dans le fichier $HOME/.xsession-errors.

Formation permanente – ARS 377

Système de multifenêtrage : X Configuration de la session X, $HOME/.xsession, FAILSAFE

Pour lancer KDE, mettre au minimum dans son fichier $HOME/.xsession


#!/bin/sh
PATH=/usr/X11R6/bin:/usr/local/bin:$PATH
export PATH
startkde

Pour lancer GNOME, mettre au minimum dans son fichier $HOME/.xsession


#!/bin/sh
PATH=/usr/X11R6/bin:/usr/local/bin:$PATH
export PATH
enlightment &
gnome-session

Formation permanente – ARS 378


Système de multifenêtrage : X Environnements CDE, KDE, GNOME

§ 15.13 Environnements CDE, KDE, GNOME

Objectif avoué : fournir aux utilisateurs un environnement comparable au bureau de Windows,


pratique, configurable à souhait

Plusieurs environnements «sympatiques» :


– CDE : cf http://www.cde.com
– KDE : cf http://www.kde.org
– GNOME : cf http://www.gnome.org

CDE quasi mort. Guerre entre KDE et GNOME. SUN a adopté GNOME.

Enjeu de la bataille ? ? ?

Formation permanente – ARS 379

Système de multifenêtrage : X Environnements CDE, KDE, GNOME

CDE :

Formation permanente – ARS 380


Système de multifenêtrage : X Environnements CDE, KDE, GNOME

KDE :

Formation permanente – ARS 381

Système de multifenêtrage : X Environnements CDE, KDE, GNOME

GNOME :

Formation permanente – ARS 382


Système de multifenêtrage : X Environnements CDE, KDE, GNOME

Revers de la médaille : complexité de l’environnement par rapport à ce que l’on faisait avant.
 Impossible de configurer manuellement l’environnement.

Par exemple l’environnement graphique GNOME utilise une arborescence complexe de fichiers
utilisateur :

% du $HOME/.gnome*
22 .gnome/accels
18 .gnome/panel.d/default/launchers
38 .gnome/panel.d/default
40 .gnome/panel.d
2 .gnome/apps
2 .gnome/application-info
132 .gnome
14 .gnome-desktop
6 .gnome_private/panel.d/default
8 .gnome_private/panel.d
10 .gnome_private
2 .gnomerc-errors

Formation permanente – ARS 383

Système de multifenêtrage : X Environnements CDE, KDE, GNOME

Par exemple l’environnement graphique GNOME lance de nombreux process lors d’une session X :
% ps -ax
PID TT STAT TIME COMMAND
...
203 ?? R 53:03.26 X :0 -nolisten tcp (XFree86)
214 ?? Ss 0:00.85 gnome-smproxy --sm-config-prefix /.gnome-smproxy-kumf
226 ?? Ss 0:05.55 /usr/X11R6/bin/sawfish --sm-client-id default2 --sm-p
228 ?? S 0:03.47 xscreensaver -nosplash
275 ?? Ss 0:18.31 panel --sm-config-prefix /panel.d/default-tZvCrQ/ --s
277 ?? Ss 0:18.97 nautilus --sm-config-prefix /nautilus-DXsk2u/ --sm-cl
280 ?? Is 0:00.02 gnome-name-service
282 ?? I 0:00.28 /usr/X11R6/bin/gconfd-1 12
285 ?? Is 0:00.85 oafd --ac-activate --ior-output-fd=16
290 ?? Ss 0:01.16 tasklist_applet --activate-goad-server tasklist_apple
292 ?? Ss 0:01.24 deskguide_applet --activate-goad-server deskguide_app
300 ?? Is 0:00.01 /bin/sh -c gnome-terminal --use-factory --start-facto
301 ?? R 0:13.20 gnome-terminal --use-factory --start-factory-server
303 ?? I 0:00.01 gnome-pty-helper
1047 ?? Is 0:00.22 oafd --ac-activate --ior-output-fd=22
191 v0 I+ 0:00.00 /bin/sh /usr/X11R6/bin/startx
202 v0 I+ 0:00.00 xinit /users/sri/besancon/.xinitrc -- -nolisten tcp
208 v0 I 0:00.00 /bin/sh /users/sri/besancon/.xinitrc
209 v0 I 0:00.40 gnome-session
...

Formation permanente – ARS 384


Système de multifenêtrage : X Environnements CDE, KDE, GNOME

Le recours à un Control Center est indispensable :

Formation permanente – ARS 385

Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

§ 15.14 Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

Principe client / serveur :

On doit pouvoir contrôler quels clients X peuvent se connecter au serveur X.

Formation permanente – ARS 386


Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

La commande xhost permet de gérer de façon basique les accès au serveur X :

% xhost
access control enabled, only authorized clients can connect

% xhost + peterpan
peterpan being added to access control list

% xhost
access control enabled, only authorized clients can connect
INET:peterpan

% xhost - peterpan
peterpan being removed from access control list

Formation permanente – ARS 387

Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

En pratique :

% echo $DISPLAY
machinedepart:0.0
% xhost + machinedistante

% rlogin machinedistante

$ DISPLAY=machinedepart:0.0
$ export DISPLAY

$ clientX <--- affichage des fenetres du client X distant


...
$ exit

% xhost - machinedistante

Formation permanente – ARS 388


Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

Défauts de la commande xhost :


– Le principal défaut de la commande xhost est d’autoriser une machine et donc tout
utilisateur y étant connecté.

– L’utilisateur faisant «xhost +»  tout client X peut se connecter ! Par exemple :


– lecture / espionnage du clavier  récupération de mots de passe lors de «su root»
Cf ftp://ftp.giga.or.at/pub/hacker/unix/xscan.tar.gz
– destruction de fenêtres par l’utilisation de xkill par exemple
– capture d’écran par l’utilisation de xwd -root

Formation permanente – ARS 389

Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

Solution : emploi d’un cookie, pseudo secret connu du serveur à rappeler lors d’une demande de
connexion au serveur X.

transmission du cookie copie du cookie

au demarrage

gestion du
xdm $HOME/.Xauthority
display

reseau

Serveur X

Formation permanente – ARS 390


Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

Qui peut connaître le cookie ?


Celui qui peut accèder au contenu du fichier $HOME/.Xauthority !

magic cookie A

Transmission magic cookie A CLIENT X 1


ACCEPTE ~alice/.Xauthority

Transmission magic cookie B


REFUSE ~bob/.Xauthority
CLIENT X 2

reseau

Serveur X

 La sécurité de X repose dans ce cas sur la sécurité du filesystem. D’où :


% ls -l $HOME/.Xauthority
-rw------- 1 besancon software 1510 Dec 17 19:12 $HOME/.Xauthority

Formation permanente – ARS 391

Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

Défauts du mécanisme du MAGIC-COOKIE :

1. Le cookie transite en clair sur le réseau et peut donc être récupéré par un mouchard
 Pas de réponse simple à ce problème

2. Que faire si $HOME/.Xauthority n’est pas disponible sur la machine distante ?


 Utiliser la commande xauth
Extrait de la page de manuel :

The most common use for xauth is to extract the entry for
the current display, copy it to another machine, and merge
it into the user’s authority file on the remote machine:

% xauth extract - $DISPLAY | rsh otherhost xauth merge -

Formation permanente – ARS 392


Système de multifenêtrage : X Autorisation d’accès, xhost, MAGIC-COOKIE, xauth, ssh

SSH (voir http://www.openssh.org) : transmission automatique du DISPLAY avec son


cookie associé et sécurisation de la liaison par chiffrement légal de la communication :

Chiffrement S Chiffrement
Dechiffrement S Dechiffrement
S
client X PSEUDO CLIENT X H S
Pseudo Serveur X

H PSEUDO DISPLAY
"stationB:11.0"

DISPLAY "stationA:0.0"

client X

Formation permanente – ARS 393


Sources de documentation

Chapitre 16 : Sources de documentation

Beaucoup de documentation disponible.

Souvent en anglais.

Formation permanente – ARS 394

Sources de documentation

Formats les plus répandus (en vrac) :


– format PDF ; à lire avec
– Acrobat Reader ; http://www.acrobat.com/ ou
http://www.adobe.com/products/acrobat/
– Ghostscript ; http://www.ghostscript.com/
– xpdf ; http://www.foolabs.com/xpdf/
– format Postscript ; à lire avec
– Ghostscript ; http://www.ghostscript.com/
– ghostview ; ftp://ftp.lip6.fr/pub/gnu/ghostview/
– gv ; http://wwwthep.physik.uni-mainz.de/~plass/gv/
– format Microsoft Word ; à lire avec
– Microsoft Word ; http://www.microsoft.com/office/word/
– Microsoft Word viewer ; http://www.microsoft.com/???/
– Star Office ; http://wwws.sun.com/software/star/staroffice/6.0/
– antiword ; http://www.antiword.org/
– format texte ; n’importe quel éditeur de texte
– format HTML ; n’importe quel browser web

Formation permanente – ARS 395


Sources de documentation Pages de manuel

§ 16.1 Pages de manuel

Consultable via la commande man.

§ 16.2 RFC, Internet drafts

Documents de référence en anglais récupérables aux adresses :


– ftp://ftp.lip6.fr/pub/rfc/rfc/
– ftp://ftp.lip6.fr/pub/rfc/internet-drafts/

Formation permanente – ARS 396

Sources de documentation FAQ

§ 16.3 FAQ

Documents en anglais récupérables aux adresses :


– ftp://ftp.lip6.fr/pub/doc/faqs/

§ 16.4 HOWTO Linux

Documents en anglais récupérables aux adresses :


– ftp://ftp.lip6.fr/pub/linux/french/docs/

Formation permanente – ARS 397


Sources de documentation Newsgroups

§ 16.5 Newsgroups

Les newsgroups sont des forums de discussion sur internet.

Les thèmes en sont variés. Certains forums sont dans une langue autre que l’anglais.

Sur jussieu, le serveur de news est news.jussieu.fr

Le protocole réseau des news s’appelle NNTP

§ 16.6 Service Google

Le site http://www.google.com offre un moteur de recherche très efficace.

Formation permanente – ARS 398

Sources de documentation Documentations constructeur online

§ 16.7 Documentations constructeur online

Certains constructeurs Unix mettent des documentations et documents online. SUN par exemple.

Se reporter à :
– http://docs.sun.com/

Formation permanente – ARS 399

Vous aimerez peut-être aussi