Académique Documents
Professionnel Documents
Culture Documents
Terminologie :
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.
Exemples :
« 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.»
L’arbre généalogique d’UNIX est très complexe. Se reporter à l’annexe pour un schéma détaillé.
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.
Mais. . .
Votre rôle : connaître les principes et les mécanismes d’UNIX afin de savoir s’adapter à n’importe
quel UNIX.
– 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.
– environnement utilisateur
– aide en ligne
– système de fichiers
– utilisation du shell
– utilisation d’un éditeur de texte
– commandes de base
– programmation shell
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
– 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 http://www.cru.fr/securite/Cours/mot-de-passe-jplg.html
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.
Login:
Password:
Login:
Password:
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.
vangogh
login:
Password:
Login:
Password:
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 :
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/
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).
Bourne again shell bash Shell distribué avec linux ; version amé-
liorée de sh et csh
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.
% 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
Une commande Unix un ensemble de mots séparés par des caractères blancs (caractère espace,
tabulation)
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)
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
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 :
man :
Syntaxe de la commande
man [options] commande
avec en particulier comme option :
man [numero de section] commande
man [-s numero de section] commande
On remarque :
– affichage page d’écran par page d’écran pour mieux lire la doc
– plusieurs rubriques (NAME, SYNOPSIS, DESCRIPTION, . . .)
On quitte :
– quand on arrive à la fin de la documentation
– prématurément par la touche q (q quit)
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
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 :
Arborescence
ls include
sys
stat.h
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.
on regarde
/ depuis ce
point de
reference
bin dev usr tmp
ls include
sys
stat.h
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.
directory père
..
directory courant
.
stat.h
stat.h
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
ls besancon
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
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
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
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
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
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
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.
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.
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.
La commande man affiche en fait les pages du manuel au moyen de la commande more.
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
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/
Syntaxes :
cp [options] fichier-départ fichier-destination
cp [options] fichiers-départ répertoire-destination
Quelques options :
% 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
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 :
% 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
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 :
% 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
repertoire1:
ss-repertoire2/
repertoire1/ss-repertoire2:
ss-ss-repertoire3/
repertoire1/ss-repertoire2/ss-ss-repertoire3:
% cp /etc/motd z/toto
% rmdir z
rmdir: z: Directory not empty
% cd /etc
% pwd
/etc
% cd /usr/include
% pwd
/usr/include
% cd /inexistant
/inexistant: bad directory
Il existe beaucoup d’éditeurs de texte sous Unix mais seuls quelques uns sont suffisamment
robustes pour être utilisés efficacement et avec confiance :
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
Séquence Action
cw Changer un mot
Commandes principales
Séquence Action
Sauvegarde / Sortie de vi
Séquence Action
:q Quitter vi
Commandes de copier/coller
Séquence Action
Commandes de substitution
Séquence Action
Principales options
Séquence Action
r w x r w x r w x
type du
fichier
Manipulations de fichiers Unix Changements des droits d’accès d’un fichier : chmod
– 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
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
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
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
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
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.
% 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
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 :
La regexp est la traduction en langage Unix du motif, ce qui permettra de le reconnaitre au sein d’un
texte dans un fichier.
ˆa
La regexp traduit le motif à rechercher sous la forme d’une suite de contraintes à satisfaire toutes.
{m,n} indique que la contrainte mentionnée juste avant doit être satisfaite
entre m et n fois
– 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
Exemple 1
Le motif à satisfaire :
Traduction en regexp :
elephant
Exemple 2
Le motif à satisfaire :
Traduction en regexp :
[a-z][a-z][0-9]$
ou
[a-z]{2}[0-9]$
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 « : »
5. «mot2 :mot3 :»
la regexp est de la forme « : »
7. «mot3 :»
la regexp est de la forme « : »
^[A-Z][^:]*:[^:]*[0-9]:[^:]*:
Exemple 4
Soit la regexp :
^[^abc]*
Soit le fichier contenant les lignes suivantes :
ascenceur
berceau
chameau
elephant
Exemple 1
Soit le fichier :
On voit :
% grep toto fichier
Ecrivons toto en minuscules ici.
Exemple 2
Soit le fichier :
On voit :
% grep -in toto fichier
1:Ecrivons toto en minuscules ici.
2:Et ici ToTo en minuscules et majuscules.
Exemple 3
Soit le fichier :
On voit :
% grep -inv toto fichier
3:Mais là on ne met pas la chaîne de l’exemple.
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
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 LINUX :
grep -E [options] ’regexp’ fichiers
Un flux est une quantité de texte envoyé à l’affichage par une commande.
NB : sed modifie un flux, pas un contenu de fichier : après l’application de la commande, le fichier
appliqué reste inchangé.
[adresse1[,adresse2]]fonction[argument]
(avec les crochets [] désignant l’aspect facultatif de l’objet)
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.
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.
Exemple 3
Soit le fichier :
% cat fichier
moteur;ferrari;30
moteur;porsche;epuise
carrosserie;porsche;epuise
moteur;ford;40
moteur;skoda;epuise
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
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.
Exemple 2
Exemple 3
% cat toto
or:100000
argent:40000
bois:5
Par exemple :
% wc fichier
3 16 82 fichier
% wc -l fichier
3 fichier
Pour réaliser la comparaison ligne à ligne du fichier texte fichier2 par rapport au fichier texte
fichier1 :
diff [-c] fichier1 fichier2
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.
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.
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.
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
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
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 {} \;
Par exemple :
– Recherche des fichiers d’extension ’.c’ :
% find . -name \*.c -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 :
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
Cette série de commandes compressent mieux les fichiers que la famille autour de compress.
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
Cette série de commandes compressent mieux les fichiers que la famille autour de compress.
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
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.
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
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
% rm fichier1
% ls -li fichier2
689357 -rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier2
% ls -l fichier1
-rw-r--r-- 1 besancon software 9919 Oct 17 18:25 fichier1
% ln -s fichier1 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
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
% ls -l fichier1
-rw------- 1 besancon software 9919 Oct 17 18:25 fichier1
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.
% 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
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.
cheval
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.
La commande recode connait beaucoup de jeux de codage (au contraire de la commande tr). Cf
recode --list
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. . .
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
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.
% du
372 ./csi
107 ./cru
1793
Une impression nécessite de connaitre le nom de l’imprimante et d’avoir un fichier au bon format à
imprimer.
Une machine Unix a un nom qui permet de la désigner simplement dans des commandes de
connexion réseau.
– 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
% ping vangogh
sendto: Network is unreachable
% ping elvis
elvis is alive
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.
% 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
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
put
get
ftp machineB ftp machineA
get
put
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
% 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.
Quelques commandes permettent d’ouvrir une session shell sur une machine distante.
Autres commandes Unix pratiques Connexion shell sur des machines distantes : telnet, ssh
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.
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.
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/
Il suffit alors d’entrer l’URL à consulter et on se retrouve connecté au serveur (si on peut le joindre)
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 ;
Caractères Signification
§ 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.
Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ
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.
Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ
En résumé
programme en cours
Ctrl−C
pour detruire
Pratique du Bourne shell Contrôle des commandes lancées : &, fg, bg, kill, ˆC, ˆZ
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.
% 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
...
% 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
...
Commande kill
– 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.
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)
Commande top
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
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
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.
Les file descriptors existent en langage C et sont profondément ancrés dans le fonctionnement
même d’UNIX.
Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&
Format Description
Pratique du Bourne shell Caractères de redirection : <, >, >>, <<, ‘, |, 2>, >&
Exemples :
1. % ls > /tmp/foo
4. % n=‘wc -l /etc/passwd‘
% echo $n
170 /etc/passwd
qui équivaut à
more /etc/group
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
Caractère Description
* 0 ou plus caractères
? 1 caractère exactement
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
§ 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
% 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.
% FOO=33
% export FOO
% sh
% echo $FOO
33
% exit
% echo $FOO
33
ATTENTION ! ! ! :
% FOO=33
% export FOO
% sh
% echo $FOO
33
% FOO=32
% echo $FOO
32
% exit
% echo $FOO
33
Variable Description
HOME homedirectory
USER username
Exemples :
1. % pipe=\|
% echo $pipe
|
Explications :
2. % star=\*
% echo $star
cours.aux cours.dvi cours.log cours.ps cours.tex
Explications :
Son utilité :
– automatisation d’actions
– utilisation de structures plus avancées :
– boucles
– tests
– ...
– scripts d’installation de logiciels à adapter
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*
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
ATTENTION ! ! !
###########################################################################
# #
# 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
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" :
#!/bin/sh
for i in *
do
echo $i
done
% ./script-foireux % ./script-foireux
for: Command not found. a
do: Command not found. repertoire1
i: Undefined variable. script-foireux
Variable Description
$# Le nombre de paramètres
#!/bin/sh
VAL=‘expr ${1:-0} + ${2:-0} + ${3:-0}‘
echo $VAL
% ./foo 12 3 8
23
% ./foo 5 7
12
% ./foo 13
13
#!/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 ?
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 ; $@"
Attention !
$* Tous les paramètres passés au shell script sous la forme de mots individuels séparés
$?
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.
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
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.
Séquence Description
\b Backspace
\n Newline
\r Carriage return
\t Tabulation horizontale
\v Tabulation verticale
\\ Backslash
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"
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.
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
2. % cat foo
#! /bin/sh -
while read line
do
echo "$line"
done
Welcome to FreeBSD!
%
Syntaxes :
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 :
Exemple :
#!/bin/sh
if ls > /dev/null
then
echo Il y a des fichiers
fi
#!/bin/sh
if commande [options] parametres
then
...
else
...
fi
ET logique : OU logique :
if command1 if ! command1
then then
command2 command2
fi fi
Exemples :
1. #!/bin/sh
ls foo && cat foo
2. #!/bin/sh
ls foo 2> /dev/null || echo "foo n’existe pas"
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
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
Format Description
-s fichier True if fichier exists and has a size greater than zero.
Format Description
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.
Format Description
Attention à ne pas écrire une commande test à vous. La commande test du système pourrait avoir
priorité selon le PATH.
#!/bin/sh #!/bin/sh
if test $1 = hello if [ $1 = hello ]
then then
echo hello world echo hello world
fi fi
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
Syntaxes :
Exemples :
– 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
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
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
2b) #!/bin/sh
compteur=0
while read BUFFER
do
compteur=‘expr $compteur + 1‘
echo "$compteur $BUFFER"
done < $1
3) #!/bin/sh
until [ "$word1" = ABORT ]
do
read word1 rest
done < $1
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
}
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.
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
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
2 méthodes :
1. The most effective debugging tool is still careful thought, coupled with judiciously placed print
statements. (Brian Kernighan [1978])
§ 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
Si le shell est non interactif, on n’exécutera pas les fichiers de commandes interactives et le shell
sera initialisé plus simplement.
En mode shell non interactif mais avec l’option --login (sauf option contraire --noprofile) :
1. on exécute /etc/profile
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.
1. on exécute /etc/profile
2. on exécute $HOME/.profile
1. on exécute /etc/csh.cshrc
2. on exécute /etc/csh.login
4. on exécute $HOME/.history
5. on exécute $HOME/.login
6. on exécute $HOME/.cshdirs
1. on exécute /etc/csh.cshrc
1. on exécute /etc/csh.logout
2. on exécute $HOME/.logout
1. on exécute /etc/.login
2. on exécute $HOME/.cshrc
3. on exécute $HOME/.login
4. on exécute $HOME/.cshdirs
1. on exécute $HOME/.logout
Le fichier $HOME/.forward sert au renvoi du courrier électronique vers une autre adresse. On y
précise les adresses vers lesquelles renvoyer.
D’autres utilitaires auront leur propre fichier de configuration. Cf les documentations de ces utilitaires.
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.
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.
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).
% /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
Le shell standard sous Linux est bash qui permet de revenir en début de ligne tapée par ^e.
C’est un utilitaire recherchant des motifs dans un fichier et réalisant des opérations sur les lignes
répondant aux critères.
Il est très souvent utilisé pour réaliser des filtres sur des fichiers.
[masque] instructions
Variables utilisables :
Seuls les instructions associées aux masques actifs sont exécutées pour chaque ligne.
Principaux masques :
– BEGIN
– END
– /expression rationnelle/
++ incrémentation
– décrémentation
! négation logique
== != égalité, différence
&& ET logique
|| OU logique
Test
break
continue
Terminaison
exit [code_de_retour]
Passage à la ligne suivante
next
Affichage de données
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
§ 10.7 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 ";
}
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 ;.
\n Nouvelle ligne
\r Retour
\t Tabulation
\b Backspace
\v Tabulation verticale
\e Escape
\\ Backslash
Exemples :
$i = 10;
$i2 = 20;
$string = "hello world!";
$string_2 = "je dis : ${string}";
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.
Par exemple :
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";
@liste_simple = %data ;
ou inversement :
commande if expression;
while (expression)
{
lignes;
}
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;
}
Egalité == eq
Pas d’égalité != ne
Plus petit que < lt
plus grand que > gt
Plus petit ou égal à <= le
Plus grand ou égal à >= ge
Descripteur STDIN
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 :
Langage perl Créer, ouvrir et fermer un fichier, open(), close(), eof(), die()
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 );
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().
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) :
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 );
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";
}
On peut aussi utiliser l’option g pour que la substitution se passe sur toutes les occurences de la
ligne.
On peut aussi vouloir appliquer une substitution sur une variable autre que $_ :
sub nom_fonction
{
ligne_1;
ligne_2;
...
ligne_n;
}
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 @_
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
...
}
Code de retour :
Le code retourné par une fonction est la valeur de la dernière expression évaluée.
Cf http://www.python.org
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
Table AVION
Table PILOTE
Table PASSAGER
Numtab Nomab
1 Nifance
2 Tearice
Table VOL
Table DEPART
Table RESERVATION
2 AL12 31-DEC-95
Création d’index
UPDATE Pilote
SET adresse = ’Aurillac’
WHERE pl#=2 ;
COMMIT ;
L’instruction commit rend effectifs les changements effectués sur la base. Ils deviennent visibles aux
autres utilisateurs.
ROLLBACK ;
L’instruction rollback défait toutes les modifications effectuées sur la base depuis le début de la
transaction.
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 2 : Quels sont les pilotes de cette compagnie aérienne ? (leur matricule, leur nom, leur ville,
leur âge et leur salaire)
Tri
SELECT AVION.numav
FROM AVION
WHERE AVION.capacite > 200
ORDER BY AVION.numav DESC ;
Omission du préfixe
SELECT numav
FROM AVION
WHERE capacite > 200 ;
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 ?
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)
Les fonctions
SELECT numav
FROM AVION
WHERE LOWER(ENTREPOT) = ’le vesiney’;
SELECT UPPER(NOM)
FROM PILOTE
WHERE ADRESSE = ’Cordillère des Andes’ ;
Exercice 6 : Quelles sont les villes d’où part un vol pour Ajaccio ? (donner les résultats en majuscule)
Les agrégats
Exemple : Quel est le nombre d’avions ayant une capacité supérieure à 200 ?
SELECT COUNT(NUMAV)
FROM AVION
WHERE CAPACITE > 200 ;
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 ?
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
) ;
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 ?
§ 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’
) ;
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 ?
§ 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 ;
§ 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 ;
§ 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 ;
§ 13.11 La division
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
)
) ;
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)
§ 13.12 Group by
Exemple : Quel est le nombre de pilotes qui conduisent des avions en service, par avion ?
Exercice 17 : Quelle est la capacité moyenne des avions, par entrepôt et part type ?
L’opérateur HAVING permet d’introduire une qualification sur les sous-tables issues du GROUP BY.
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 ?
§ 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
Exercice 1
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 ;
Exercice 3
Quels sont les types d’avions entreposés à Tarascon, avec leur capacité, par ordre de capacité
croissantes ?
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%’;
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)
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’;
Exercice 7
Quel est le nombre d’avions en service (ie dans la relation DEPART), le 19 décembre 1995 ?
Exercice 8
Exercice 9
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
) ;
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’
) ;
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 ;
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 ?
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
)
) ;
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 ?
SELECT NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.NUMAV = ’666’ ;
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
)
) ;
Exercice 16
Quel est le nombre de pilotes qui conduisent des avions en service ? (ie dans la relation DEPART)
Exercice 17
Quelle est la capacité moyenne des avions, par entrepôt et par type ?
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 ;
§ 14.1 Oracle
Cf http://www.oracle.com
A noter qu’Oracle diffuse maintenant des versions gratuites 100% fonctionnelles pour Linux et pour
Solaris.
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)
§ 14.2 MySQL
Logiciel libre.
Cf http://www.mysql.com
§ 14.3 PostgreSQL
Logiciel libre.
Dans l’absolu, postgresql semble mieux que MySQL. Mais il est moins répandu.
Cf http://www.postgresql.org
– clavier
– souris
– écran graphique
– autres périphériques (spaceball, plaquette graphique, . . .)
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 ! ! !
Système de multifenêtrage : X
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
§ 15.1 Caractéristiques de X
– 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
§ 15.2 Clavier
Plusieurs modificateurs :
– Control
– Shift
– Meta
– CapsLock
– ...
Tous les types de claviers sont supportés.
§ 15.3 Souris
§ 15.4 Ecran
L’image est obtenue par balayage d’une mémoire d’écran (frame buffer) contenant une valeur par
point à l’écran (pixel).
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.
§ 15.6 DISPLAY
Le cas le plus courant : une station de travail Unix, un terminal X, un Mac ou un PC avec le bon
logiciel.
0.0 désigne l’écran 0 de la machine. X permet de gérer des machines avec plusieurs écrans (on dit
multicéphales).
Il y a des options standard pour la plupart des clients (tout au moins ceux reposant sur l’emploi de la
bibliothèque Xt) :
+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
-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
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.
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
En ce qui concerne les ressources personnalisées par l’utilisateur, le fichier chez l’utilisateur les
contenant est $HOME/.Xresources
Exemple :
xterm*scrollBar: True
xterm*foreground: red
xterm*loginShell: True
xterm*borderWidth: 4
xterm*font: 10x20
Un client X est construit autour d’un arbre de widgets fournis par les bibliothèques :
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
L’emploi d’un gestionnaire de fenêtres n’a rien d’obligatoire mais ce serait se priver de beaucoup de
fonctionnalités.
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.
S’il y a des erreurs, les messages de celles-ci sont écrits dans le fichier
$HOME/.xsession-errors.
CDE quasi mort. Guerre entre KDE et GNOME. SUN a adopté GNOME.
Enjeu de la bataille ? ? ?
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
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
...
% 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
En pratique :
% echo $DISPLAY
machinedepart:0.0
% xhost + machinedistante
% rlogin machinedistante
$ DISPLAY=machinedepart:0.0
$ export DISPLAY
% xhost - machinedistante
Solution : emploi d’un cookie, pseudo secret connu du serveur à rappeler lors d’une demande de
connexion au serveur X.
au demarrage
gestion du
xdm $HOME/.Xauthority
display
reseau
Serveur X
magic cookie A
reseau
Serveur X
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
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:
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
Souvent en anglais.
Sources de documentation
§ 16.3 FAQ
§ 16.5 Newsgroups
Les thèmes en sont variés. Certains forums sont dans une langue autre que l’anglais.
Certains constructeurs Unix mettent des documentations et documents online. SUN par exemple.
Se reporter à :
– http://docs.sun.com/