0% ont trouvé ce document utile (0 vote)
101 vues185 pages

Guide Complet sur le Système UNIX

Le document présente une introduction au système UNIX, abordant son architecture, ses versions, et le fonctionnement de son shell. Il décrit les composants essentiels d'UNIX, tels que le noyau, les interpréteurs de commandes, et les utilitaires, ainsi que les différents types de fichiers et la structure des répertoires. Enfin, il explique les concepts de chemins absolus et relatifs pour la gestion des fichiers dans UNIX.

Transféré par

junior
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
101 vues185 pages

Guide Complet sur le Système UNIX

Le document présente une introduction au système UNIX, abordant son architecture, ses versions, et le fonctionnement de son shell. Il décrit les composants essentiels d'UNIX, tels que le noyau, les interpréteurs de commandes, et les utilitaires, ainsi que les différents types de fichiers et la structure des répertoires. Enfin, il explique les concepts de chemins absolus et relatifs pour la gestion des fichiers dans UNIX.

Transféré par

junior
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction au Système UNIX

[Link]

September 3, 2018

Basé sur le cours de Van Dat Cung

[Link] Introduction au Système UNIX September 3, 2018 1 / 185


Plan du Cours

6 Langages de Commandes 71
1 Le Système UNIX 3
7 Processus 92
2 Système de Fichiers Unix 16
8 Langage de Scripts 118
3 Gallery de Commandes 39
9 Le monde d’Unix 147
4 Editeur vi 45
10 Le Monde du Shell 147
5 Expressions Régulières 55
11 Annexes 175

[Link] Introduction au Système UNIX September 3, 2018 2 / 185


Le Système UNIX

SECTION: Le Système UNIX

Architecture d’Unix 4
Versions d’UNIX 8
Le Shell 12

[Link] Introduction au Système UNIX September 3, 2018 3 / 185


Le Système UNIX Architecture d’Unix

Un Système d’Exploitation

Programme qui permet aux utilisateurs d’interagir avec un ordinateur:


pour accéder à ses ressources (disques, . . . );
pour lancer d’autres programmes.
⇒ programme fondamental qui existe sur tout ordinateur:
MS-DOS, VMS, Unix, Multics, MS-Windows, Android, . . .

[Link] Introduction au Système UNIX September 3, 2018 4 / 185


Le Système UNIX Architecture d’Unix

Objectifs Dénéraux du Système UNIX

UNIX = Noyau + Interpréteurs de commandes + Utilitaires


Noyau réalise les fonctions primitives
Exemple: Allouer de la mémoire à un processus (programme)
Interpréteur de commandes
Interactions avec l’utilisateur
Utilitaires
Ex: Outil d’impression (lp)

Caractéristiques
d’usage général et interactif,
multi-tâches, multi-utilisateurs, en temps partagé

[Link] Introduction au Système UNIX September 3, 2018 5 / 185


Le Système UNIX Architecture d’Unix

Le Noyau Unix

Noyau Unix est basé sur deux concepts :


Un système de fichier hiérarchisé:
Différents types de fichiers pour réaliser les différentes taches:
uniformité des E/S entre : périphériques, fichiers ou processus,
Organisation de la mémoire secondaire (disque)
Gestion de processus
Un processus = exécution d’un programme
la possibilité d’exécution de processus (exécution multi-tâches) avec
contrôle synchrone ou asynchrone

Fournit des services aux utilitaires conçus au-dessus


Exemple man (Manuel d’une commande).

[Link] Introduction au Système UNIX September 3, 2018 6 / 185


Le Système UNIX Architecture d’Unix

Interpréteur de Commandes vs. Utilitaires

Interpréteur de commandes
Interface utilisateur qui lit, puis interpréte et d’exécute les commandes
demandées par l’utilisateur.
Exemples:
$ date
dimanche 4 septembre 2016, [Link] (UTC+0200)

Appelé le SHELL
N’appartient pas au noyau
Des milliers d’utilitaires
D’outils de gestions de fichiers: ex: tar, . . .
D’éditeurs de textes: ex vi, gedit
D’outils de programmation: ex. gcc
Fabriqué par vous ! Appelé des scripts (voir cours correspondant)

[Link] Introduction au Système UNIX September 3, 2018 7 / 185


Le Système UNIX Versions d’UNIX

Historique

1969 début d’Unix avec le projet Multics (Echec). Ken THOMSON,


Denis RITCHIE (BELL) développe un système mono-utilisateur,
interactif en assembleur sur PDP-7 (DEC), puis PDP-9.
1971 Version multi-programme/temps partagé sur PDP-11.
1973 1ère version d’UNIX en C.
1975 UNIX version 6, sortie des laboratoires BELL (PDP-11).

[Link] Introduction au Système UNIX September 3, 2018 8 / 185


Le Système UNIX Versions d’UNIX

Versions d’UNIX

UNIX V7 (1978) 1ère version commerciale.


Effort pour la portabilité : compilateur C portable, noyau UNIX
découpé en isolant les parties dépendantes de la machine.
Nouveaux utilitaires.
UNIX System III (1982)
Fichiers FIFO pour la communication entre processus.
Outils d’atelier logiciel.
UNIX system V (1983)
Éditeur de texte plain écran vi.
Depots des versions: [Link]

[Link] Introduction au Système UNIX September 3, 2018 9 / 185


Le Système UNIX Versions d’UNIX

UNIX Berkeley

Seconde grande branche


UNIX BSD 4.1 Version VAX avec gestion de mémoire virtuelle.
UNIX BSD 4.2
Gestion (les périphériques VAX).
Outils de communication (réseaux).
Version free: FreeBSD

[Link] Introduction au Système UNIX September 3, 2018 10 / 185


Le Système UNIX Versions d’UNIX

Autres versions d’UNIX

UNIX-like, réécriture d’UNIX (Solaris, IDRIS, Xenix, Linux, ...


Portages d’UNIX (XENIX) par Microsoft.
Versions free:
Linux (RedHat, Debian, . . . )
Sur Debian: Ubuntu, Mint, ...
cygwin ([Link]) sous windows
Version Retravaillé en profondeur:
MacOs
Android,

[Link] Introduction au Système UNIX September 3, 2018 11 / 185


Le Système UNIX Le Shell

Objectifs d’un Shell”

Un ”shell” est un langage :


Interprété (vs. compiler)
de commandes qui permettent à un utilisateur de lancer depuis le
terminal l’exécution de programmes.
de script qui permet d’écrire des enchaı̂nements de commandes
paramétrables,
avec l’utilisation de variables et des structures de contrôle riches
(affectations, séquences, conditions, itérations).

Notez:
Le but est d’assembler des commandes pour réaliser
des taches plus complexes.
Il se distingue ainsi d’un langage de programmation
comme le C, Java,...

Différents dialectes: sh, bash, csh, ksh, ...


[Link] Introduction au Système UNIX September 3, 2018 12 / 185
Le Système UNIX Le Shell

Prise de contact avec UNIX

Ouverture d’une session


Session = Une séquence de dialogues (commandes) échangée avec
l’ordinateur pour le compte d’un utilisateur.
login et password
Mettre le terminal sous tension. Le prompt login : doit apparaı̂tre.
Au message login : répondre par nom d’utilisateur <CR>.
Si vous avez défini un mot de passe, au message passwd : répondre le
mot de passe <CR>.
Tapez une suite de commandes (décrites par la suite)
Fin de la session: exit ou ctrl-D

[Link] Introduction au Système UNIX September 3, 2018 13 / 185


Le Système UNIX Le Shell

Forme générale des commandes d’UNIX sous SHELL

Au prompt $, tapez une commande du shell.


Forme générale: $ < commande > [< param > ...] < CR >

Exemple
$ man zcat
$ cp toto titi

Remarque :
En Shell, distingue les majuscules et les minuscules.

[Link] Introduction au Système UNIX September 3, 2018 14 / 185


Le Système UNIX Le Shell

En résumé

Pour maitriser le monde Unix, il faut apprendre:


les mécanismes du système
des commandes !!!, connaı̂tre des commandes de base !
Savoir écrire des scripts
Comment trouver une commande dont on a besoin ?
Si on devine approximativement le nom: Exemple: $ man -k date
Google
Ce cours qui vous montre les commandes de base

[Link] Introduction au Système UNIX September 3, 2018 15 / 185


Système de Fichiers Unix

SECTION: Système de Fichiers Unix

Fichiers Unix 17
Répertoires 19
Fichiers Spéciaux 22
Chemins Absolue/Relatif 23
Gestion des Fichiers 30

[Link] Introduction au Système UNIX September 3, 2018 16 / 185


Système de Fichiers Unix Fichiers Unix

Un Fichier sous Unix

Un fichier = suite de caractères ou d’octets.


Son contenu peut traduire différents objets: ex. Image, scripte, roman.
La création des fichiers est assurée par des utilitaires (ed, vi, cp, cat, ...
), cf. plus loin.
La destruction est assurée par la commande rm <fichier>.

[Link] Introduction au Système UNIX September 3, 2018 17 / 185


Système de Fichiers Unix Fichiers Unix

Quatre Fypes de Fichiers

Le noyau Unix connaı̂t quatre types de fichier. Les fichiers:


ordinaires (texte);
Seul ce fichier est modifiable directement par l’utilisateur.
répertoires;
spéciaux (souvent connectés à un périphérique). Divisés en des fichiers:
en mode caractère (pour les E/S). Ex. Modem
en mode bloc (pour les E/S). Ex. Disque
tubes (pipe en anglais).

[Link] Introduction au Système UNIX September 3, 2018 18 / 185


Système de Fichiers Unix Répertoires

Notions de Répertoires

Pour l’utilisateur un répertoire


(”directory”) est un fichier
contenant d’autres fichiers ou
répertoires.
L’ensemble des répertoires est
organisé en une hiérarchie
ressemblant à un arbre inversé.
Existe un répertoire racine /
unique.
Les feuilles sont des fichiers
ordinaires ou spéciaux
(documents).
Les nœuds intermédiaires sont
des répertoires
(dossiers/chemises).
[Link] Introduction au Système UNIX September 3, 2018 19 / 185
Système de Fichiers Unix Répertoires

Principaux Répertoires

Organisation typique

[Link] Introduction au Système UNIX September 3, 2018 20 / 185


Système de Fichiers Unix Répertoires

Rôle des Principaux Répertoires

/bin, /usr/bin et /usr/ucb : les utilitaires du système (rechercher ls).


/etc : commandes et fichiers de maintenance du système.
/lib et /usr/lib : les bibliothèques de fonctions (.so .a, ex. libm.a).
/usr/adm : fichiers de comptabilité.
/usr/src : codes sources du système.
/tmp et /usr/tmp : fichiers temporaires.
/usr/include : fichiers en-têtes pour les programmes.
/dev : fichiers qui représentent les périphériques d’entrée/sortie (a
voir).
/users ou autres

[Link] Introduction au Système UNIX September 3, 2018 21 / 185


Système de Fichiers Unix Fichiers Spéciaux

Le répertoire /dev

Contient les fichiers spéciaux


Contient l’ensemble des périphériques attachés à l’ordinateur
Souris, le disque dur, etc. (voir la visite guidée)
Un fichier particulier: null

[Link] Introduction au Système UNIX September 3, 2018 22 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Désignation des Fichiers: Chemin Absolu

Objectif: Pouvoir désigner un fichier


Chemin absolu/relatif
Désigner un fichier par son ”nom de base”
Associé à tout fichier : chaı̂ne de caractères (Conseil: se limiter aux
caractères alphanumériques et aux ’ ’ et ”.”)
Ex. : programme.c , mon programme.c
Chemin d’accès absolu
Position précise dans l’arborescence des répertoires depuis la racine.
Reconnaissable car commence par ’/’
La liste successive des répertoires à traverser en partant de la racine est
séparée par des ”/”.
ex/[Link]

[Link] Introduction au Système UNIX September 3, 2018 23 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Désignation des Fichiers: Chemin Relatif

A tout instant pour un utilisateur est défini un répertoire courant.


ex/[Link]
Où suis-je ?: pwd
Toute désignation de fichier peut être définie relativement à ce
répertoire en donnant un nom relatif
ne commence pas par ”/”
le <nom absolu> = <répertoire courant> + <chemin relatif>
Exemple:
Si le répertoire courant est /home/user
Si l’utilisateur désigne un fichier dans : projet/toto.c (chemin relatif)
Le chemin absolue est : /home/user/projet/toto.c

[Link] Introduction au Système UNIX September 3, 2018 24 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Exemples Chemins absolus/relatifs

Chemins absolus:
Pour atteindre un répertoire:
/ , /a/d, /a/c/h, ...
Pour atteindre un fichier
contenu dans un répertoire:
/a/d/f2
Chemins relatifs:
Si répertoire courant est /a/c
Pour atteindre le fichier f3 se
trouvant dans h,
⇒ ...
Car: ??

[Link] Introduction au Système UNIX September 3, 2018 25 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Nommage de Fichiers Spéciaux (. et ..)

Par définition:
. (point) désigne le répertoire courant.
.. (point point) désigne le père du répertoire courant.
Ex. :ex/[Link]

[Link] Introduction au Système UNIX September 3, 2018 26 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Génération de Noms de Fichier (joker/wildcard)

* remplace n’importe quelle chaı̂ne.


regarde dans le répertoire courant, les fichiers qui peuvent correspondre
Ex. ls test*.txt
? remplace un caractère quelconque.
remplace l’un quelconque des caractères entre crochets.
Ex. : *ce? [0-9] désigne tous les fichiers comportant dans leur
terminaison la chaı̂ne ce suivi d’un caractère quelconque et d’un
chiffre décimal (0 à 9). ex/[Link]

[Link] Introduction au Système UNIX September 3, 2018 27 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Commandes de Parcours du Système de Fichiers: cd

Changement de répertoire : cd
Si le répertoire courant est
/a/c
cd h permet d’aller dans le
répertoire h fils du répertoire
courant.
Le répertoire courant est:
???
cd /a/b/e permet d’aller à
répertoire par un chemin
absolu.
en tapant simplement cd, la
commande renvoie l’utilisateur
directement à son répertoire
par ”défaut/initial/home”

[Link] Introduction au Système UNIX September 3, 2018 28 / 185


Système de Fichiers Unix Chemins Absolue/Relatif

Manipulations de Répertoires: pwd/ls/mkdir/rmdir

Répertoire courant : pwd


Contenu d’un répertoire : ls
ls donne la liste des fichiers contenus dans le répertoire courant.
ls <chemin> donne la liste de fichiers pour le répertoire ¡chemin¿.
Remarque 1 : -l donne les attributs des fichiers.
Remarque 2 : -a donne tous les fichiers, y compris les fichiers de
configuration commençant par un ”.”.ex.: .kshrc

mkdir <chemin>
Exemple mkdir h/i
⇒ ??
rmdir <chemin>

[Link] Introduction au Système UNIX September 3, 2018 29 / 185


Système de Fichiers Unix Gestion des Fichiers

Gestion des Fichiers


Un fichier est constitué:
D’un descriptif
Un nom
Un i-node (descriptif) qui comporte : taille, propriétaire, groupe, droits
d’accès, type de fichier, compteur de références (nombre de liens
établis), adresse des blocs occupés,
Éventuellement d’un stockage
Ex. Fichier tty
Exemple
bash-2.05b$ ls -l
total 6
drwxr-xr-x 4 Administ Aucun 0 Dec 11 2002 cache
drwxr-xr-x 3 Administ Aucun 0 Nov 20 2002 log
drwxr-xr-x 2 Administ Aucun 0 Nov 20 2002 run
drwxr-xr-x 2 Administ Aucun 0 Nov 20 2002 tmp
drwxr-xr-x 5 Administ Aucun 0 Dec 11 2002 www
-rw-r--r-- 1 Administ Aucun 5336 Aug 27 12:07 [Link]
bash-2.05b$
[Link] Introduction au Système UNIX September 3, 2018 30 / 185
Système de Fichiers Unix Gestion des Fichiers

Protection des Fichiers

Exemple
bash-2.05b$ ls -l
total 6
drwxr-xr-x 4 Administ Aucun 0 Dec 11 2002 cache
-rw-r--r-- 1 Administ Aucun 5336 Aug 27 12:07 [Link]
bash-2.05b$

Classes d’utilisateurs. On distingue:

le propriétaire ”user”,
les utilisateurs du même groupe que le propriétaire ”group”,
tous les utilisateurs des autres groupes ”other”.
Droits d’accès
Pour chaque classe d’utilisateur, on attribue le droit : r=lecture,
w=écriture, x=exéc.

[Link] Introduction au Système UNIX September 3, 2018 31 / 185


Système de Fichiers Unix Gestion des Fichiers

Protection des Fichiers: chmod/chgrp/chown

Exemple
bash-2.05b$ ls -l
total 6
drwxr-xr-x 4 Administ Aucun 0 Dec 11 2002 cache
-rw-r--r-- 1 Administ Aucun 5336 Aug 27 12:07 [Link]
bash-2.05b$

Commandes de modification des protections (utilisez man)


chmod {u,g,o,a}{+/-}{r,w,x} <fichier>.
chgrp <group> <fichier>.
chown <nom> <fichier>.
Exemple: chmod g-r [Link]

[Link] Introduction au Système UNIX September 3, 2018 32 / 185


Système de Fichiers Unix Gestion des Fichiers

Répertoire & Inode

Un répertoire
Est un fichier
Associe un nom à un Inode
Chaque Inode est associé les
descriptifs d’un fichier:
Physique
Virtuel périph.
Virtuel Tube (pipe)

[Link] Introduction au Système UNIX September 3, 2018 33 / 185


Système de Fichiers Unix Gestion des Fichiers

Liens

Objectif: Accéder à un fichier


depuis plusieurs répertoires.
Pas de correspondance
bi-univoque entre le nom absolu
d’un fichier et son implantation
physique.
Un lien = relation entre un nom
(descriptif) et le stockage
physique d’un fichier.

[Link] Introduction au Système UNIX September 3, 2018 34 / 185


Système de Fichiers Unix Gestion des Fichiers

Commande ln
Lien symbolique et physique
Création de liens (symboliques) ln [-s] <source> <lien>
II y a création d’une nouvelle entrée dans le catalogue de fichiers qui
correspond au nom lien. Le fichier physique est le même (pie celui du
fichier d’origine.
Exemple Illustration EAL
Exemple ex/ln2
Restriction :
II ne peut y avoir plusieurs liens ”durs” sur un répertoire.
Pas de liens ”durs” à travers les frontières de volumes.
⇒ peuvent être levées par l’utilisation des liens ”symboliques”.

[Link] Introduction au Système UNIX September 3, 2018 35 / 185


Système de Fichiers Unix Gestion des Fichiers

Les commandes find/grep

find <nom de rép.> <expression>


Rechercher dans différents répertoires des fichiers
Utilisation de nombreux paramétrage (voir man find).
Exemple: find / -name [Link] {print

grep [options] <expression> <fichier(s)>


Rechercher dans un fichier d’une chaı̂ne donnée,
Ex. : grep -c [Link]
Donner le nombre de lignes contenant la chaı̂ne toto dans le fichier a.
Une variante egrep ou grep -e

[Link] Introduction au Système UNIX September 3, 2018 36 / 185


Système de Fichiers Unix Gestion des Fichiers

Commandes cp/mv/cat

Copier un fichier
cp <chemin source> <chemin destination>
Ex. : cp /a/b/f1 a Illustration et ex/[Link]
Renommer/déplacer un fichier
mv <source> <nouveau/destination>
mv déplace et/ou change le nom d’un fichier.
Exemple: mv /a/d/f1 /a. mv /a/d/f1 f4

Recopie le fichier sur l’écran (sortie standard) cat <fichier>


ex/[Link]
Concaténation
cat [Link] [Link]
voir Exemple CAT

[Link] Introduction au Système UNIX September 3, 2018 37 / 185


Système de Fichiers Unix Gestion des Fichiers

Conclusion sur le Système de Fichiers

Tout n’est que fichier! Uniformisation de la vision


⇒ simplification
Une arborescence pouvant devenir un graphe avec les liens
symboliques.
Connaitre les commandes de bases: cd, pwd, mkdir, rmdir, rm
...

[Link] Introduction au Système UNIX September 3, 2018 38 / 185


Gallery de Commandes

SECTION: Gallery de Commandes

Commandes de Base: echo, passwd et man 40


Manipulation de Contenu de Fichiers: cat, more, head, tail, od, tr 41
Les commandes date, who, file, filetype, finger et id 42
Utilitaires d’édition: lp 43
Utilitaires d’archivage/compression 44

[Link] Introduction au Système UNIX September 3, 2018 39 / 185


Gallery de Commandes Commandes de Base: echo, passwd et man

Commandes de Base: echo, passwd et man

echo <cha^ıne de caractères> ; imprime son argument sur


l’écran.
Exemple: $ echo bon
bon
passwd créer ou change le mot de passe.
man <commande> explication d’une commande.
Très utile: $ man -k date

[Link] Introduction au Système UNIX September 3, 2018 40 / 185


Gallery de Commandes Manipulation de Contenu de Fichiers: cat, more, head, tail, od, tr

Manipulation de Contenu de Fichiers: cat, more, head,


tail, od, tr
cat <Fichier> ; imprime le contenu du fichier sur l’écran.
more <fic> affichage du contenu d’un fichier page par page.
head <fic> affichage les n premières lignes d’un fichier.
tail <fic> affichage les n dernières lignes d’un fichier.
od [-o/c/d/x] <fichier> Editer un fichier en (o)ctal, as(c)ii,
(d)écimal ou hé(x)adécimal.
tr <fic> translate ou efface des caractere dans un fichiers.
wc compte le nombre caractères/mots/lignes.
Utilitaires de comparaison de contenu de fichiers
cmp [options] <fichierl> <fichier2>
Comparer et arrêt, à la 1ère différence constatée sinon rien.
diff [options] <fichierl> <fichier2>
Donner toutes les différences sous la forme de commandes d’éditeur
permettant de passer de l’un à l’autre.
[Link] Introduction au Système UNIX September 3, 2018 41 / 185
Gallery de Commandes Les commandes date, who, file, filetype, finger et id

Les commandes date, who, file, filetype, finger et id

date donne la date et l’heure. voir exemple/[Link]


who donne la liste des utilisateurs en session sur votre serveur.
file détermine le type de fichier
filetype détermine le type de fichier
finger <user> user information
id <user> user information

[Link] Introduction au Système UNIX September 3, 2018 42 / 185


Gallery de Commandes Utilitaires d’édition: lp

Utilitaires d’édition: lp

Imprimantes:
lpr [-h] [-P<nom imprimante>] <fichier>
Impression du fichier sur imprimante <nom imprimante> (en utilisant
le système d’impression).
lp <fichier> impression d’un fichier.
pr <fichier>
Recopier le fichier sur la sortie standard après avoir effectué une mise
en page,

[Link] Introduction au Système UNIX September 3, 2018 43 / 185


Gallery de Commandes Utilitaires d’archivage/compression

Utilitaires d’archivage/compression

tar [options] <fichier archive> <fichier(s)>


Archivage de fichiers sur fichier, bande ou autres.
Exemple: tar cvf mes [Link] *.txt
(un)compress/g(un)zip <fichier(s)>
(Dé)compresser la taille des fichiers.
Exemple: gzip [Link] donne [Link]
tar cvfz mes [Link] *.txt
tar xvfz mes [Link]

[Link] Introduction au Système UNIX September 3, 2018 44 / 185


Editeur vi

SECTION: Editeur vi

L’éditeur de texte vi 46
Bascule Entre Plusieurs Modes 48
Commandes en Lignes 50
Désigner une ou plusieurs lignes d’un document 51
Commandes Utiles à Savoir 52

[Link] Introduction au Système UNIX September 3, 2018 45 / 185


Editeur vi L’éditeur de texte vi

Pourquoi vi ?

Editeur de texte de dernier recours


Une installation sans X-Windows
Panne Système
Éditeur de l’administrateur système
aussi pour les developpeurs de logiciel, car très puissant !
Un éditeur pour les nulles nano.
Notez:
Important de connaı̂tre dans le monde Unix si on n’utilise pas Unix que
comme un outil bureautique !

[Link] Introduction au Système UNIX September 3, 2018 46 / 185


Editeur vi L’éditeur de texte vi

L’éditeur de texte vi

vi (prononcez Vihaille)
Plus populaire avec emacs dans le monde Unix.
Entièrement mode texte
Peu pratique, mais très puissant, et très utile en cas de grève X-Window
Exécution de vi en introduisant la ligne suivante

$ vi <nom-de-fichier>

Caractéristiques de vi
Utilisela notion de fenêtre
Notion de mot, phrase et paragraphe (exemple, effacer un mot ...)
vi possède ses propres commandes
Ne pas confondre avec les commandes Shell

[Link] Introduction au Système UNIX September 3, 2018 47 / 185


Editeur vi Bascule Entre Plusieurs Modes

Bascule Entre Plusieurs Modes


On peut basculer entre le mode Direct ou le mode Commande
Dans le mode Direct, on a deux sous modes: Normal ou Insertion
En mode Normal, on peut déplacer le curseur à l’aide d’une lettre,
indiquer si l’on veut insérer des caractères, effacer caractères, lignes,
etc:
Mode à l’ouverture du fichier. vi se met en attente de commandes.
Exemples, tapez:
h, j, k, et l pour déplacer le curseur
a ajouter du texte après le curseur,
x efface le caractère actuellement sous le curseur
dd efface la ligne actuellement sous le curseur...
Voir l’annexe pour plus d’info.
On bascule vers le mode
Insertion en tapant ’a’,’A’,’i’,...
Commande (voir ci-après) en tapant ’:’
En mode Insertion, vous permet d’insérer des caractères
On peut revenir en mode Normal en tapant ESC
[Link] Introduction au Système UNIX September 3, 2018 48 / 185
Editeur vi Bascule Entre Plusieurs Modes

Bascule Entre Plusieurs Modes (2)

Dans le mode Commande, on peut exprimer des commandes


complexes.
En mode commande direct, taper ’:’ pour basculer vers ce mode
On peut revenir au mode Direct Normal en tapant <cr>
Exemples d’expressions en mode commande:
Remplacer toutes les mots toto en titi.
Exemple: 1,$s/toto/titi/g
Effacer une sous partie du document texte.
Exemple: 10,20d
Recopier un bloc de textes puis coller ailleurs (copier coller).
Exemple: 10,20y ; recopie
Puis aller à l’endroit et tapez ’p’ pour coller le morceau de textes.

[Link] Introduction au Système UNIX September 3, 2018 49 / 185


Editeur vi Commandes en Lignes

Commandes en Lignes

Autres exemples:
:wq Enregistrer et puis quitter vi.
:w [file ] Enregistrer le tampon d’édition dans un fichier appelé file .
Sans argument, enregistrer sur le fichier courant.
:sh Invoquer shell temporairement pour exécuter qq commandes. Ctrl-d
Finir le shell temporaire et revenir à vi.
:u pour défaire une action
:q Quitter vi.
:q! Quitter vi sans enregistrer.

[Link] Introduction au Système UNIX September 3, 2018 50 / 185


Editeur vi Désigner une ou plusieurs lignes d’un document

Désigner une ou plusieurs lignes d’un document


Dans le mode Commande, désigner des lignes permet de se déplacer
ou d’appliquer des actions sur un ensemble de lignes.
Désigner une ligne permet
Pour se déplacer:
:n Placer le curseur à la ligne numéro n.
:$ Déplacer à la dernière ligne du tampon. De manière générale, $
désigne la dernière ligne.
Pour une action
:3d – efface la ligne 3 en mode commande
Désigner plusieurs lignes pour des actions
:3,5d– efface les lignes 3 à 5
Autres exemples:
:3,9w file Enregistrer les lignes de 3 à 9 dans le fichier file .
:.,$d Effacer jusqu’à la dernière ligne à partir de la ligne courante.
: 10,$s/old/new/ Remplacer la première occurrence de old par new
depuis la ligne 10 jusqu’à la fin
Ici old peut être une expression régulière (à voir cours suivant)
[Link] Introduction au Système UNIX September 3, 2018 51 / 185
Editeur vi Commandes Utiles à Savoir

Commandes Utiles à Savoir

Copier coller de lignes


Sur la ligne, tapez ¡n¿ yy pour n lignes, ou bien yy pour une ligne. Les
lignes sont mises dans un tas.
Pour coller, aller à la ligne cible, puis tapez pp.
Variables d’environnement
Pour permettre de paramétrer l’éditeur
:set
:set all
⇒ Pour activer des variables
Exemples:
Set number ( ou set nu)
Set nonumber

La commande :help

[Link] Introduction au Système UNIX September 3, 2018 52 / 185


Editeur vi Commandes Utiles à Savoir

et vim ?

sur-ensemble de vi
coloriage syntaxique
éditer via des protocoles réseaux (SSH and HTTP)
découpage fenêtre en sous fenêtres
peut éditer un fichier compressé en gzip, zip, tar, etc.
admet des plugins.
vimscript via des langages comme python, perl, shell
...

[Link] Introduction au Système UNIX September 3, 2018 53 / 185


Editeur vi Commandes Utiles à Savoir

vi en résumé

Un editeur puissant
Demande de la pratique pour sa maitrise
Peut être un premier pas vers emacs !
Un éditeur plus simple: nano

[Link] Introduction au Système UNIX September 3, 2018 54 / 185


Expressions Régulières

SECTION: Expressions Régulières

C’est quoi ”Expressions Régulières” ? 56


Les méta caractères ., *, +, ? 57
Le contre-oblique, classe de caractères 60
Méta-caractères Positionnels 63
Group Pattern 65
Exemple 67

[Link] Introduction au Système UNIX September 3, 2018 55 / 185


Expressions Régulières C’est quoi ”Expressions Régulières” ?

C’est quoi ”Expressions Régulières” ?


Objectif:
Permettre de spécifier un motif pour rechercher des occurrences dans un
flot de texte.

Exemple: ecouter un flux de texte et trouver les mots password


Utilisée par des outils comme: vi, sed, grep,find, ...
Très puissant pour manipuler du texte
Exemple: egrep ’Chapitre [1-6]’ [Link]
Existe des méta-caractères: [ . ? ^ etc.
Qui ont chacune une signification précise
Ne pas confondre avec les expressions de jokers !
Qui sont utilisées au niveau du Shell
Exemple: * en Shell signifie l’ensemble des fichiers du répertoire
courant, et * en expression régulière signifie répétition d’occurrence.
[Link] Introduction au Système UNIX September 3, 2018 56 / 185
Expressions Régulières Les méta caractères ., *, +, ?

Un Caractère Quelconque. Le (.)

Le point (.)
Dans une expression régulière, le point (.) est un méta caractère qui
représente n’importe quel caractère sauf ”aller à la ligne”.

Exemple :
Chercher toutes les lignes concernant la seconde génération des
processeurs d’Intel.
grep -e ’80.86’ histoire-micro
Donne ”80286” et au ”80386”. grep-point

Excercice:
Exprimer sous vi le remplacement dans le texte entier de la phrase
”processeur 80X86” par le mot ”CPU processor”.

[Link] Introduction au Système UNIX September 3, 2018 57 / 185


Expressions Régulières Les méta caractères ., *, +, ?

Répétitions d’un Caractère

Le méta caractère astérisque (*)


indique que l’expression régulière précédente peut apparaı̂tre zéro ou
plusieurs fois.
Exemple:
[15]0∗
[15]00∗
Valident 1 5 10 50 100 500 1000
grep ’< /∗ >’ liste-entete
Le méta caractère (+)
indique que l’expression régulière précédente peut apparaı̂tre au moins
une fois.
Résultat pour les même exemples

[Link] Introduction au Système UNIX September 3, 2018 58 / 185


Expressions Régulières Les méta caractères ., *, +, ?

Accolades

Indique un nombre de répétitions.


Possible que dans les expressions régulières étendues.
Exemples:
a{1,3}
⇒ a, aa, aaa et rien d’autre
abc{2,4}d
⇒ abccd, abcccd, abccccd et rien d’autre
a.{2,2}z ou a.{2}z
⇒ abcz, aXXz, ak0z, ...

[Link] Introduction au Système UNIX September 3, 2018 59 / 185


Expressions Régulières Le contre-oblique, classe de caractères

L’omniprésente contre-oblique & Ce qu’on recherche

Le méta caractère contre-oblique (\)


transforme les méta caractères en caractères normaux.
Ex: grep -e ’\.’ [Link]
Exemple: comment trouver \f dans un texte ?
grep -e ’\f’ [Link]

Ce qu’on recherche
Difficulté
⇒ Décrire le bon motif de recherche.
Exemple de problème:
Rechercher Qui et qui
Utiliser ”ui” ne produit pas un résultat satisfaisant
Plus on utilise de méta-caractères
⇒ plus c’est précis.

[Link] Introduction au Système UNIX September 3, 2018 60 / 185


Expressions Régulières Le contre-oblique, classe de caractères

Classes de Caractères

Définit par les méta-caractères [ ]


Choix d’un caractère dans l’ensemble
Une classe de caractères est un raffinement du méta caractère (.) .
Exemple
grep ’H[12]’ [Link]
Voir le résultat: ex\[Link]
Comment faire pour trouver Qui/qui ?

Excercice:
Exprimer sous vi l’effacement de toutes les voyelles dans les 10 premières
lignes du texte.

Question:
Comment faire dans un éditeur sans expression régulière ?
[Link] Introduction au Système UNIX September 3, 2018 61 / 185
Expressions Régulières Le contre-oblique, classe de caractères

Intervalle de Caractères & exclusion

Exemple:
Chercher toutes les entêtes comprises entre 0 et 9:
On peut utiliser des intervalles de caractères
Syntaxe exemple: [0-9] [a-z]
Exemple: grep ’[cC]hapitre [0-6]’ mon_roman.txt‘
Exemple
Occurence [cmt]an
⇒ can, man, tan mais ne trouve pas pan, ...
a[a-d]z
⇒ aaz, abz, acz, adz et rien d’autre

Exclusion d’une classe de caractères


L’accent circonflexe ’^’ en première position de la classe exclut de la
concordance tous les caractères repris dans la classe.
[^aeiou]

[Link] Introduction au Système UNIX September 3, 2018 62 / 185


Expressions Régulières Méta-caractères Positionnels

Méta-caractères positionnels

Permet de désigner le début ou la fin d’une ligne.


^ indique le début de ligne
Exemple: grep "^
chapitre" [Link]
$ indique la fin d’une ligne
Exemple: \grep "\.\$" [Link]
Compte le nombre de lignes vides
grep -c ’^$’ [Link]
Debut et fin d’un mot
grep ‘\<b’ [Link]
grep ‘s\>’ [Link]
grep ‘\<i\>’ [Link] ext (i=10
\<.*\> [Link]!

[Link] Introduction au Système UNIX September 3, 2018 63 / 185


Expressions Régulières Méta-caractères Positionnels

L’alternative

| barre verticale marque l’alternative


Alternative a|b
⇒ a, b (a|b)+
⇒ a, b, ab, abb, bbbbbb, ababb, ...
Exemple: ^ (De|Sujet|Date) : @ reconnaı̂t tout ce qui commence par
De:@ ou Sujet:@ ou Date:@

[Link] Introduction au Système UNIX September 3, 2018 64 / 185


Expressions Régulières Group Pattern

Group Pattern

Utile dans les expressions de substitution. Ce qu’on trouve dans la


partie recherche, on peut le rappeler dans la partie remplacement.
Pour isoler un groupe: \(pattern\)
Pour rappeler un groupe : \number
Exemples:
Exemple: Rajouter à chaque numéro de téléphone, l’indicatif 33 sous vi
1,$s/\([0-9]*\)/33 \1/g

Différences entre sed et vi ?


vi
⇒ un fichier
sed sur un flot (ligne par ligne)
L’exemple précédent s’exprime en: s/\([0-9]*\)/33 \1/
[Link] Introduction au Système UNIX September 3, 2018 65 / 185
Expressions Régulières Group Pattern

Group Pattern (2)

Autres Exemples:
s/^\(.*\):.*/\1/g
Yeh:234
⇒ Yeh
1,$s/key=\([0-9]+\)/cle=0\1 3x/ key=345 rego rfrg
Frrf key=677 reddef
s/\(.*\):\(.*\)/\2:\1/g

Question:
Dans l’exemple du no de téléphone, comment faire pour rajouter 33 entre
parenthèses?

[Link] Introduction au Système UNIX September 3, 2018 66 / 185


Expressions Régulières Exemple

Un mot

(tipo|adp)+
Exemple:
abcabcd
deux acb k
donc abc
adp action
abt dic
$ egrep ’(abc)+’ txt1
abcabcd
donc abc

[Link] Introduction au Système UNIX September 3, 2018 67 / 185


Expressions Régulières Exemple

Expressions Régulières Étendues


\w A-Za-z0-9_
\W ^A-Za-z0-9_
\a A-Za-z
\a A-Za-z
\s \t
\b Positions de début et fin de mots
\B Positions ne correspondant pas à un début ou une fin de mot
\d 0-9
\D ^0-9
\l a-z
\p \x20-\x7E
\_s \t\r\n\v\f
\S ^ \t\r\n\v\f
\u A-Z
\x A-Fa-f0-9
[Link] Introduction au Système UNIX September 3, 2018 68 / 185
Expressions Régulières Exemple

Expressions Régulières Étendues

expr{n} Exactement n occurrences de l’expression précédant les acc


expr{n,} Au moins n occurrences de l’expression précédant les accola
expr\{m,n\} m à n occurrences de ce qui précède,

[Link] Introduction au Système UNIX September 3, 2018 69 / 185


Expressions Régulières Exemple

En Résumé des Expressions Régulières

Un langage pour identifier des chaines de caractères très puissant


colades
Beaucoup d’outils l’utilise et même un langage (perl)
ades
Interfacer dans beaucoup de langage de programmation

[Link] Introduction au Système UNIX September 3, 2018 70 / 185


Langages de Commandes

SECTION: Langages de Commandes

Modes d’exécution 73
Les Scripts 76
Variables d’Environnement 79
bash, Extraction de Sous Chaı̂nes 86
Les tableaux 88

[Link] Introduction au Système UNIX September 3, 2018 71 / 185


Langages de Commandes

Langage de Commande Shell

Shell (coquillage) : enveloppe externe du système UNIX,


Deux/trois versions importantes :
.shell de base fourni par ATT, Bourne shell /bin/sh
⇒ prompt : $
C-shell /bin/csh de l’université de Berkeley disponible principalement
avec UNIX BSD 4.2.X. Compatible avec la version de base, mais
présentant des fonctions plus riches (historiques de commande, alias,
contrôles de travaux)
⇒ prompt : %

Variantes plus récentes: /bin/bash, /bin/ksh, /bin/tcsh,


/bin/zsh, ...

[Link] Introduction au Système UNIX September 3, 2018 72 / 185


Langages de Commandes Modes d’exécution

Les Modes d’Exécutions


On peut lancer une série des commandes, mais il faut les synchroniser
Si une commande dépend du résultat de la commande précédente,
alors il faut l’exécuter en synchrone.
dans le cas contraire, on peut exécuter en asynchrone
Bénéfique, surtout si l’une des commandes attends des traitements qui
n’occupent pas entièrement le processeur.
Meilleur utilisation des ressources.
Exemple: d’un script utilisé plus tard qui fait:
Je compte les moutons durant X seconde(s)
il sommeille X seconde(s)
if affiche: J’ai fini de compter et je ne suis toujours pas endormi !

Exemple:
$ mouton 6
Je compte les moutons durant 6 seconde(s)
J’ai fini de compter et je ne suis toujours pas endormi !

[Link] Introduction au Système UNIX September 3, 2018 73 / 185


Langages de Commandes Modes d’exécution

Modes d’exécution Synchrones

Chaque commande est achevée avant le lancement de la suivante.


Cas d’une commande qui doit attendre qu’un autre ait terminé
l’exécution avant de commande.
Terminées par < CR > ou
séparées par un ”;” pour en mettre plusieurs sur une même ligne.
Exemple:
mouton 6
ls
# Equivaut
mouton 6 ; ls

le ; permet d’exécuter des commandes en mode synchrone

[Link] Introduction au Système UNIX September 3, 2018 74 / 185


Langages de Commandes Modes d’exécution

Modes d’exécution Asynchrones

Commandes simples ”asynchrones” ou ( arrière plan )


si une commande est déterminée par &, n’attend pas sa terminaison
pour lancer la suivante.
Exemple: mouton 6 & ls

[Link] Introduction au Système UNIX September 3, 2018 75 / 185


Langages de Commandes Les Scripts

Les Scripts
Scriptes (procédure programmé)
Liste de commandes enregistrées dans un fichier
Exécution de la liste de commandes en évoquant le nom du script.
Cette liste de commandes devient à son tour une commande.
Utilisation des scripts pour écrire des programmes/commandes

Exemple:
$ cat mouton
echo "Je compte les moutons durant $1 seconde(s)"
sleep $1
echo "J’ai fini de compter et je ne suis toujours pas endormi !"

Sous un shell, l’invocation d’un nom de script lance un autre


programme (processus)
Un script (père) peut lancer un ou plusieurs autres scripts (fils)
Un graphe d’exécution en forme d’arbre
[Link] Introduction au Système UNIX September 3, 2018 76 / 185
Langages de Commandes Les Scripts

Un Script Exécutable

La ligne magique !
#!/usr/bin/bash
En première ligne
Ce qu’il faut faire pour le rendre exécutable
chmod u+x monprog

Exemple:

1 #! / b i n / b a s h
2 echo ” Je ( $2 ) compte l e s moutons d u r a n t $1 s e c o n d e ( s ) ,
p i d=$$ ”
3 s l e e p $1
4 echo ”J ’ a i ( $2 ) f i n i de c o m p t e r e t j e ne s u i s t o u j o u r s
pas endormi ! ”

[Link] Introduction au Système UNIX September 3, 2018 77 / 185


Langages de Commandes Les Scripts

Utilisation des Scriptes

Automatisation de taches
Exemple: Synchronisation de disques
Développement de programme
Automatisation de la séquence dans un script
Exemple
extraire tm.c
doc tm.c
cc {o tm.o tm.c
ld ....
ar

[Link] Introduction au Système UNIX September 3, 2018 78 / 185


Langages de Commandes Variables d’Environnement

Variables d’Environnement

Rendre persistant certaines informations d’un environnement


(préférence utilisateur)
Exemple, quel est mon répertoire de base. echo $HOME
Exemple: Comment vérifier qu’un script est bien lancé depuis un
répertoire précis ?
Variables
Pour contenir une donnée
Un seul type : les chaı̂nes de caractères.
Nom de variable : une chaı̂ne alphanumérique.
Remarque: Toujours en majuscule par convention

[Link] Introduction au Système UNIX September 3, 2018 79 / 185


Langages de Commandes Variables d’Environnement

Définir le Contenu d’une Variable

Définir (suivant les shells):


var=valeur
export var=valeur
setenv var valeur
definit dans (t)csh, en bash c’est équivalent à export
il sera exposé plus tard les différences entre ces affectations
Définir des variables positionnelles :
set var ma valeur
alors echo $1 $2 $3 contient ?

[Link] Introduction au Système UNIX September 3, 2018 80 / 185


Langages de Commandes Variables d’Environnement

Détruire/Afficher une Variable

Détruire:
unset var
unsetenv var
Afficher les variables:
echo $<var>
exemple: echo $HOME
Affiche le contenu d’une variable
Notez le $ avant le nom de la variable
env ou printenv
affiche l’ensemble des variables

Par la suite, nous verrons l’usage des variables dans les scriptes.

[Link] Introduction au Système UNIX September 3, 2018 81 / 185


Langages de Commandes Variables d’Environnement

Variables Connues

Le Shell pour son fonctionnement, pour la personalisation, pour ...


utilisent un ensemble de variables qu’il faut connaı̂tre

HOME nom du répertoire par défaut de l’utilisateur.


PATH répertoires dans lesquels le shell va chercher les commandes.
MAIL nom absolu de la boı̂te aux lettres del’utilisateur.
TERM modèle du terminal utilisateur.
PS1 prompt principal.
PS2 prompt secondaire.
IFS liste des caractères reconnus comme séparateur.

[Link] Introduction au Système UNIX September 3, 2018 82 / 185


Langages de Commandes Variables d’Environnement

Utilisations des Variables dans les Scripts

Affectation: < variables >=< valeur >


Exemple: VAR2=bon
Les guillemets/quottes sont nécessaires que si la valeur contient des
espaces.
Accéder au CONTENU d’une variable: ${variables}
Exemple: echo $var2
⇒ bon
Opération de concaténation : suite de variables
Exemple : echo $var2 "!"
⇒ bon !
Affectation multiple par clavier : read < variables >

[Link] Introduction au Système UNIX September 3, 2018 83 / 185


Langages de Commandes Variables d’Environnement

Utilisations des Variables dans les Scripts (2)


Exemple
$ read v1 v2 v3
Voici un texte
$ echo $v3
texte

Remarque :
Pour indiquer clairement la substitution à réaliser, il faut
éventuellement parenthèser (avec des accolades).
Ex.: echo ${var2}jour = bonjour
Variable avec séparateur :
Exemple: echo $var2 jour = bon jour
Variable sans séparateur :
Pour indiquer clairement la substitution à réaliser, il faut
éventuellement parenthèser (avec des accolades).
Exemple: echo ${var2}jour = bonjour
[Link] Introduction au Système UNIX September 3, 2018 84 / 185
Langages de Commandes Variables d’Environnement

Visibilité des Variables

Variables locales (au shell), elles sont perdues lorsque l’on passe d’un
script/Shell père au script/Shell fils.
Variables d’environnement : export <variable(s)>
Permet de rendre globale une variable pour tous les Shells descendants.
Exemple: export V1=‘toto’
Remarquer qu’il n’y a pas d’espace après V1

Variables pré-définies :
fichier .profile
exécute au login permet d’initialiser des variables d’environnement
connues de tous les processus descendants du shell initial.

[Link] Introduction au Système UNIX September 3, 2018 85 / 185


Langages de Commandes bash, Extraction de Sous Chaı̂nes

bash, Extraction de Sous Chaı̂nes

Longueur Remplacement
v="yeh laurent" ${var/motif/rempl}
echo ${#v} echo ${PWD/$HOME/Maison}
Par défaut Sous-chaine
echo ${var:-defaut} ${var:début:lg}
echo ${v:5:2} ⇒ la
Invocation cmd echo ${v:5} ⇒ ?
v=$(ls {l)
Supprime à gauche
Calculs et boolean echo ${v#yeh } ⇒ laurent
echo $(( 2 * ( 4 + 1) )) echo ${v#*u} ⇒ rent
echo ${v#*[le]} ⇒ h
laurent

[Link] Introduction au Système UNIX September 3, 2018 86 / 185


Langages de Commandes bash, Extraction de Sous Chaı̂nes

bash, Extraction de Sous Chaı̂nes (2)

v="yeh laurent"
Plus long préfixe
echo ${v##*e}⇒ nt
Garde le préfixe
echo ${v%l*}⇒ yeh
echo ${v%[tn]*}⇒yeh lauren
Plus grand prefixe
v=yeh@[Link]
echo ${v%.*}‘⇒ yeh@[Link]
echo ${v%%.*}⇒ yeh@prism

[Link] Introduction au Système UNIX September 3, 2018 87 / 185


Langages de Commandes Les tableaux

Les tableaux
Exemple:
$ arr=(Bonjour "Laurent Y")
$ echo ${arr[0]} et ${arr[1]}
Bonjour et Laurent Y

Exemple:
$ echo $arr
Bonjour
$ echo ${arr[*]} # Tous les items du tableau
Bonjour Laurent Y
$ echo ${!arr[*]} # Tous les indices du tableau
0 1
$ echo ${#arr[*]} # Nb d’elements du tableau
2
$ echo ${#arr[0]} # Taille de l’item 0
[Link] Introduction au Système UNIX September 3, 2018 88 / 185
Langages de Commandes Les tableaux

Les tableaux
Exemple d’utilisation:
$ for index in ${!arr[*]}
> do
> printf "%4d: %s\n" $index "${arr[$index]}"
> done
0: Bonjour
1: Laurent Y

Après décotage, que vaut echo ${#arr1[*]} ?


$ arr1=(${arr[*]})
$ for ix in ${!arr1[*]} ; do printf " %s\n" "${arr1[$ix]}"
> done
Bonjour
Laurent
Y
[Link] Introduction au Système UNIX September 3, 2018 89 / 185
Langages de Commandes Les tableaux

Les tableaux

Exemple après quote expansion:


$ arr2=("${arr[*]}")
$ echo ${arr2[*]}
Bonjour Laurent Y
$ echo ${#arr2[*]}
1
$ arr3=("${arr[@]}")
$ echo ${arr3[*]}
Bonjour Laurent Y
$ echo ${#arr3[*]}
2

[Link] Introduction au Système UNIX September 3, 2018 90 / 185


Langages de Commandes Les tableaux

En Résumé Langage Commandes

Savoir:
contrôler l’exécution de commandes en synchrone ou asynchrone,
les inscrire dans un fichier qui devient exécutable (script)
définir des variables
permets d’exploiter un système pour des taches...

[Link] Introduction au Système UNIX September 3, 2018 91 / 185


Processus

SECTION: Processus

Gérer les Processus 94


Entrées Sorties & Redirections des Processus 100
Paramètres d’une Commande (processus) 111
Contrôle d’une Séquence de Processus 115

[Link] Introduction au Système UNIX September 3, 2018 92 / 185


Processus

Les processus

Définition : un processus est fondamentalement un programme qui


s’exécute (Tanenbaum).
Programme exécutable, avec ses données et sa pile d’exécution, son
compteur ordinal, son pointeur de pile et autres registres, ainsi que
toutes les autres informations nécessaires à l’exécution du programme!!!
Environnement d’exécution
Un processus comporte schématiquement une zone de code exécutable
et une zone de données,

[Link] Introduction au Système UNIX September 3, 2018 93 / 185


Processus Gérer les Processus

Gestion des Processus

Un serveur Unix = un ensemble de processus


Exemple:
Un processus d’accueil (cron)
Un shell

Tape le nom d’une commande


Création d’un processus
Shell qui lance le processus

[Link] Introduction au Système UNIX September 3, 2018 94 / 185


Processus Gérer les Processus

Commande de Gestion de Processus: ps/kill/sleep/nice

ps [options]
liste de processus actifs.
Exemple: ps -aux
kill <processus>
destruction d’un processus.
Exemple: kill -9 5209
sleep -n
suspend l’exécution pour n secondes d’une commande.
Exemple ex/[Link]
nice -n <commande>
exécute la commande avec une priorité n donnée.

[Link] Introduction au Système UNIX September 3, 2018 95 / 185


Processus Gérer les Processus

Commande de Gestion de Processus: at/wait/exec/exit

at <heure>
lancement d’une commande à une date absolue.
Exemple: at llam ps {aux
wait <processus>
attente de la fin d’exécution d’un processus défini par son numéro.
exec <commande>
la commande donnée est exécutée sans créer un nouveau processus à la
place du shell. A la fin de la commande, on est donc déloguer.
exit n
termine une suite de commande avec un code de retour n.

[Link] Introduction au Système UNIX September 3, 2018 96 / 185


Processus Gérer les Processus

Transition d’état d’un processus

[Link] Introduction au Système UNIX September 3, 2018 97 / 185


Processus Gérer les Processus

Vie des processus

Les processus sont manipulés par 4 (opérations) primitives offertes par


le noyau :
fork permet pour un processus père de créer un processus fils qui est sa
copie conforme (même texte, même données) au moment de la
création, Le fils peut ensuite selon ses branchements modifier son
comportement.
exec permet à un processus de remplacer le code et les données qu’il
exécute par un autre correspondant à un autre programme. Des
arguments peuvent être communiqués. Le nouveau processus s’exécute
dans le même contexte (fichiers, répertoires courants, ... )
exit fin normale d’un processus.
wait attente de la terminaison d’un fils

[Link] Introduction au Système UNIX September 3, 2018 98 / 185


Processus Gérer les Processus

Job

Chaque liste de commandes séparées par des ’;’ est considérée comme
un job et est attribuée un numéro par le shell.
Un ”job” peut être arrêté provisoirement en utilisant le signal TSTP
(généré par le caractère susp de la commande stty). (Ctrl-Z)
jobs: commande interne permet d’avoir la liste de tous les jobs y
compris ceux en arrière plan ou bien arrêtés.
Par exemple, un job de numéro j arrêté peut reprendre l’exécution en
tapant: %j
Un job qui tourne en arrière plan est arrêté quand il tente de lire le
terminal. Par contre, il peut écrire sur le terminal à moins que la
commande stty tostop ait été utilisée.
Un ensemble de commandes internes permet de manipuler les jobs.
Ce sont les commandes bg, fg, kill, et % .

[Link] Introduction au Système UNIX September 3, 2018 99 / 185


Processus Entrées Sorties & Redirections des Processus

Entrées Sorties des Processus

Fichiers standards Entrée/Sortie (E/S)


Toute exécution de commande (plus généralement de processus)
s’effectue avec assignation par défaut de 3 unités standards E/S.
Par défaut, les trois flux de données précédents sont assignés au
terminal de l’utilisateur /dev/tty..., un flux associé à un élément :
d’affichage (écran en général)
de saisie (le clavier en général)
d’affichage des messages d’erreurs

[Link] Introduction au Système UNIX September 3, 2018 100 / 185


Processus Entrées Sorties & Redirections des Processus

Redirections Simples: <>>>

Par défaut, un processus est connecté aux trois flux E/S.


On peut pour la durée de l’exécution d’un processus changer les flux
E/S par des directives.
> fichier prend un fichier comme sortie standard.
Exemple: ls > t voir ex/[Link]
< fichier prend un fichier comme entrée standard
Exemple: wc < t voir ex/[Link]
>> fichier comme >, mais ajoute à la suite du fichier existant.
Exemple: ls >>t
Avec t existant déjà voir ex/ls-redirect [Link]

[Link] Introduction au Système UNIX September 3, 2018 101 / 185


Processus Entrées Sorties & Redirections des Processus

Rediriger la Sortie Standard ”erreur”

Utilité: Séparer la sortie standard de la sortie erreur.


Exemple: Un programme analyse des données et produit des résultats
dans un fichier normal. Toutes les erreurs sont redirigées vers un autre
programme (exemple mail) qui prévient l’utilisateur.
Exemple: cc toto.c 2>t
Redirige les erreurs (sortie standard 2) vers le fichier t
echo "ooo" >&2
do something 2>&1
some command >[Link] 2>&1
rm -f $(find / -name core) &> /dev/null
exec monprog 3>&1

[Link] Introduction au Système UNIX September 3, 2018 102 / 185


Processus Entrées Sorties & Redirections des Processus

Connexion des E/S Entre Commandes

Exemple
$ who > tmp
$ wc -l < tmp
Equivalent (presque) à
$ who | wc -l

[Link] Introduction au Système UNIX September 3, 2018 103 / 185


Processus Entrées Sorties & Redirections des Processus

Redirection entre processus: tubes (pipes)

Définition:
Connecte la sortie standard d’un processus (programme) sur l’entrée d’un
autre.

<commande 1> | <commande 2>


Les processus s’exécutent en parallèle
Chaque partie séparée par ’|’ est de la forme ¡cmd¿ ¡arguments¿....

[Link] Introduction au Système UNIX September 3, 2018 104 / 185


Processus Entrées Sorties & Redirections des Processus

Redirection entre processus: tubes (pipes)

Fonctionnement: Le noyau créé un fichier virtuel appelé tube de qq


Ko (dans /dev).
La commande de gauche envoie les données de sa sortie standard à
l’intérieur.
Si le tube est plein, la commande à gauche est bloquée en attente.
du côté de la commande à droite, il lit les données au fur et à mesure
sur son entrée standard.
Si il n’y a plus de données, il se met en attente.
Un tube est un fichier en mémoire. Il n’y a pas d’E/S disque.

[Link] Introduction au Système UNIX September 3, 2018 105 / 185


Processus Entrées Sorties & Redirections des Processus

Redirection entre processus: tubes (pipes)

Exemple 1 : rechercher le nombre de lignes dans un répertoire


ls | wc -1
ls donne les noms des utilisateurs sur une lignes.
wc -1 compte le nom de lignes d’un fichier. @n voir ex/[Link]
Exemple 2: rechercher tous les processus de caillou
ps -elf | grep caillou

[Link] Introduction au Système UNIX September 3, 2018 106 / 185


Processus Entrées Sorties & Redirections des Processus

Enchaı̂nement de processus par les tubes

Propriété fondamentale
Combine des commandes pour obtenir un résultat
Exemple
$ capture | filtre_immo | sort | tail 10
$ capture | avg_compute

[Link] Introduction au Système UNIX September 3, 2018 107 / 185


Processus Entrées Sorties & Redirections des Processus

Re-direction en T

Problème
On ne peut rediriger un flux qu’une seule fois, comment rediriger la sortie
standard vers la sortie standard et simultanément vers un fichier.

Re-direction en T
La commande tee permet de recopier son entrée standard vers sa
sortie standard et également vers un fichier dont le nom est passé en
argument.
Exemple: who | tee liste | wc -l > nombre
Fournit d’une part la liste des utilisateurs dans le fichier liste et leur
nombre dans le fichier nombre.
Équivalent (presque) à who > liste ; cat liste | wc -l >
nombre

[Link] Introduction au Système UNIX September 3, 2018 108 / 185


Processus Entrées Sorties & Redirections des Processus

La Sortie Standard Vers Arguments: xargs

Prendre les données de l’entrée standard et le placer en argument


d’une document
Entrée standard redirigée en argument
Exemple
$ find . | xargs ex/find-xargs
Difference ? : ex/find-xargs ‘find .‘
Difference ? : for i in ‘find .‘
do ex/find-xargs $i
done

[Link] Introduction au Système UNIX September 3, 2018 109 / 185


Processus Entrées Sorties & Redirections des Processus

Un outil sur les flux: l’outil sed

Pour modifier un flux de texte, pour modifier le contenu d’un fichier


par une commande, il y a sed.
Autrement, il faut taper avec un éditeur comme vi.
Éditeur de flot de textes
Utilise les expressions régulières
Exemple: $ sed {e ’s/80.86/processeur Intel’
note né[Link]

[Link] Introduction au Système UNIX September 3, 2018 110 / 185


Processus Paramètres d’une Commande (processus)

Paramètres Positionnels

Paramètres
Exemple
$ cat exemple
echo $1 est égal $2 ?
$ exemple toto titi
toto est égal titi ?

Paramètres positionnels :
les paramètres d’appel sont accessibles au moyen des noms réservés $n,
où n est la position du paramètre (1 <:).
Tester la présence d’un paramètre echo ${1:?"1er param.
absent"}

[Link] Introduction au Système UNIX September 3, 2018 111 / 185


Processus Paramètres d’une Commande (processus)

Paramètres (2)

Autres variables accessibles ;


$0 le nom de la procédure.
$* la liste des paramètres positionnels.
”$*” equivaut à ”$1,$2,... ${n}”
$@ la liste des paramètres positionnels.
”$@” equivaut à ”$1”,”$2”,... ”${n}”
$# le nombre des paramètres.
if [ $# -ne 3 ] ; then echo "Veut 3 args et non $#" ; fi
$$ le numéro du processus qui exécute la procédure.
$? code retour après exécution d’une procédure.

[Link] Introduction au Système UNIX September 3, 2018 112 / 185


Processus Paramètres d’une Commande (processus)

set
Définition
Assigne les paramètres positionnels

Exemple: ex/[Link]
set a=‘ls ex*‘
echo a= $a
echo "positionnel " $*

Résultat
$ ./set
a=
positionnel a=ex [Link] exemples_run.tex exemples

Cas de $-
[Link] Introduction au Système UNIX September 3, 2018 113 / 185
Processus Paramètres d’une Commande (processus)

shift

Décalage des paramètres positionnels vers la gauche

Exemple: ex/[Link] Résultat


while [ $# -gt 0 ] $ ./shift un deux trois
do un deux trois
echo $* deux trois
shift trois
done

soit
[Link] $1 ⇐ $2, $2 ⇐ $3 etc.
Exemple: ex/[Link]

[Link] Introduction au Système UNIX September 3, 2018 114 / 185


Processus Contrôle d’une Séquence de Processus

Contrôle d’une Séquence de Processus

Permet d’aligner des traitements plus complexe qu’une simple


séquence de commandes.
Exemple: un script lance l’exécution d’une impression, si ça s’est bien
passé, il lance une autre tache, sinon envoie un message.
Rappel:
exit < n >
Normalement 0 si ok, sinon code d’erreur.

[Link] Introduction au Système UNIX September 3, 2018 115 / 185


Processus Contrôle d’une Séquence de Processus

Code de retour & Conditions logiques

Outre ;, il existe d’autres modes de contrôle d’enchaı̂nements de


commandes
commande1 && commande2
Si la commande1, se termine mal alors commande2 n’est, pas activée.
Si la commande1 se termine bien alors commande2 est exécutée et son
code retour est celui de l’ensemble.
commande1 || commande2
N’exécute la seconde commande2 que si la commande1 se termine mal.
Sinon commande2 n’est pas exécutée.

[Link] Introduction au Système UNIX September 3, 2018 116 / 185


Processus Contrôle d’une Séquence de Processus

Conclusion des Processus

La gestion des processus,:


c’est les créer, les détruire, les arrêter, ...
c’est de connaı̂tre son état de fonctionnement
c’est de les connecter entre eux, et/ou au fichier

[Link] Introduction au Système UNIX September 3, 2018 117 / 185


Langage de Scripts

SECTION: Langage de Scripts

Quoting, Double Quoting et Back Quoting 119


Résultat d’une commande 123
Structure de Contrôles: expr, if, case 124
Instructions répétitives (for, while) 134
Fonctions 137

[Link] Introduction au Système UNIX September 3, 2018 118 / 185


Langage de Scripts Quoting, Double Quoting et Back Quoting

Quoting & Double Quoting

Le Quoting & Double Quoting servent à isoler un ensemble de mots


représentant un seul argument
Le Quoting & Double Quoting se distinguent par la substitution de
variable ou non
Exemple
$ NB=10
$ echo ’nombre = $NB’
nombre = $NB
$ echo "nombre = $NB"
nombre = 10

[Link] Introduction au Système UNIX September 3, 2018 119 / 185


Langage de Scripts Quoting, Double Quoting et Back Quoting

Back-quoting: Substitutions de Commandes


Objectif: Récupérer le résultat d’une exécution d’une commande
Fonctionnement:
N’importe quelle commande shell peut être placée entre ‘
(back-quoting)
Appelé (quote à l’envers, ”back quotes”).
Le résultat de l’exécution peut être affecté à une variable.
Forme equivalente en bash: $(...)
Exemple 1:
$ sudo chown ‘id -u‘ /somedir

Exemple 2:
$ NB-UTIL=‘ls | wc -l‘
$ echo $NB-UTIL
$ 2
En bash, équivalent $(ls | wc -l)
[Link] Introduction au Système UNIX September 3, 2018 120 / 185
Langage de Scripts Quoting, Double Quoting et Back Quoting

Ordre de Substitutions de Commandes


Fondamental pour comprendre le fonctionnement du Shell
En cela, se distingue d’un langage de programmation.
L’ordre de substitution est le suivant ;
substitutions des variables,
substitutions des commandes,
séparation des arguments,
génération des noms de fichiers.
Exemple:
cmd=’ls -l’; list="ficl fic2"
$cmd $list part* ‘echo fic3‘

Subs. variables ls -l ficl fic2 part* ‘echo fic3‘


Subs. commandes ls -l ficl fic2 part* fic3
Séparation des paramètres
Génération, si part*=parta partb
⇒ ls -l ficl fic2 parta partb fic3
[Link] Introduction au Système UNIX September 3, 2018 121 / 185
Langage de Scripts Quoting, Double Quoting et Back Quoting

Ordre de Substitutions de Commandes

Exemple:

1 s e t a=‘ l s e x ∗ ‘
2 echo $a
3 echo ” p o s i t i o n n e l ” $ ∗

Exemple:

1 echo ” v o t r e r e p e r t o i r e e s t ‘ pwd ‘ . ”
2 echo ” Vous t r a v a i l l e r s u r l a machine ‘ uname −n ‘ . ”

[Link] Introduction au Système UNIX September 3, 2018 122 / 185


Langage de Scripts Résultat d’une commande

Résultat d’une commande

Toute commande doit fournir un état de son fonctionnement.


La convention sous Unix est de retourner:
0 si tout est ok.
une valeur comprise entre 1..255 si problème, et le code identifie le
problème.
le code de retour d’une commande (i.e. script) est donnée par la
commande exit <no>
Shell utilise cette valeur pour enchainer les commandes
Rappel:
<cmd1> || <cmd2>
<cmd1> && <cmd2>.
mais aussi dans les structures de contrôles comme if, while,
étudiés plus loin.

[Link] Introduction au Système UNIX September 3, 2018 123 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Commande expr

Commande qui fournir la capacité de manipulations et de comparaisons de


chaı̂nes ou d’expressions arithmétiques.

Définition
expr <expression arithmétique>

Donc, de base le langage Shell ne sais pas calculer des expressions


arithmetiques !
C’est le cas, car c’est un langage d’orchestration de commandes!
Tout peut se compenser par de nouvelles commandes !
echo ‘expr 2 + 3‘

[Link] Introduction au Système UNIX September 3, 2018 124 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: if

Instructions conditionnelles Exemple:


Syntaxe then
if <condition> rm $1
then else
<commandes> echo $1 inexistant
[else fi
<commandes> ]
fi
Remarque ligne If
<condition> ; then

[Link] Introduction au Système UNIX September 3, 2018 125 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: if

Exemple:
1 echo ” V o t r e age ? ” 11 i f [ $age − l t 8 ]
2 read age 12 then
3 echo ” Vous a v e z $age an ( 13 echo ” oh un bebe ! ”
s )” 14 else
4 i f [ ” $age ” − l t 0 \ 15 i f [ $age −g t 79 ]
5 −o ” $age ” −g t 100 ] 16 then
6 then 17 echo ”oh , un v i e u x ”
7 echo ” Age i n c o r e c t e ! ” 18 else
8 exit 19 echo ” P r o f i t e z en ! ”
9 fi 20 fi
10 21 fi

[Link] Introduction au Système UNIX September 3, 2018 126 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: if

Exemple:

1 for f i l e in ∗ # Empty word l i s t


2 do
3 i f [ −f $ f i l e −a ! −x $ f i l e ]
4 then
5 echo $ f i l e n ’ e s t p a s e x e c u t a b l e
6 fi
7 done

[Link] Introduction au Système UNIX September 3, 2018 127 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Erreurs d’Espaces: Cas d’école

Erreur 1: Les espaces dans les chaı̂nes


a="bon jour"
b="ok"
if test $a = $b
...
⇒ if test bon jour = ok
if test "$a" = "$b"
If [ "$a" = "$b" ]

Erreur 2: Les espaces


if test $a= $b
test equivaux: if [ $a = $b ]
if [ -f $fic ] equivaux if test {f $fic

[Link] Introduction au Système UNIX September 3, 2018 128 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Erreurs Fréquentes: Cas d’école

if test $1 = toto
Pourquoi ça peut ne pas fonctionner ?
Explication
if test = toto
if test "$1" = toto

[Link] Introduction au Système UNIX September 3, 2018 129 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: case

Commande UNIX construite Exemple:


pour fournir les capacités de
case $TERM in
manipulation de chaı̂nes ou
hp*) echo terminal hp
d’expressions arithmétiques.
echo bon ;;
Syntaxe: [oO]*) echo Oui ;;
case <chaine> in vt*|Vt*) echo terminal dec;;
<motifi>) *) echo terminal inconnu ;;
<commande 1>.. ;; esac
<motif2>)
<commande2>..;;
<motifn>)
<commande n>;;
*)
<cmd defaut>;;
esac
[Link] Introduction au Système UNIX September 3, 2018 130 / 185
Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: case

Exemple:

1 echo −n ” e s t c e c o r r e c t e ? [O/N ] ”
2 read a n s w e r
3 case ” $answer ” i n
4 [ Oo ] ∗ )
5 echo ”En e t e s v o u s s u r ? ” ; ;
6 [ Nn ] ∗ )
7 echo ”Ne s o y e z p a s n e g a t i f ! ” ; ;
8 ∗)
9 echo ” Pas d ’ a v i s ? ”
10 ;;
11 esac

[Link] Introduction au Système UNIX September 3, 2018 131 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Instructions répétitives for

Syntaxe
for <variable> in <liste>
do
<commandes>
done

Exemple:
for i in part*
do
mv $i $i_old
done

[Link] Introduction au Système UNIX September 3, 2018 132 / 185


Langage de Scripts Structure de Contrôles: expr, if, case

Structure de Contrôles: expr, if, case

Exemple:

1 f o r name i n a b c d
2 do
3 echo ” b i e n $name”
4 done
5
6 f o r name i n $ ∗ o r f o r name i n $@
7 do
8 echo Hi $name
9 done

[Link] Introduction au Système UNIX September 3, 2018 133 / 185


Langage de Scripts Instructions répétitives (for, while)

Instructions répétitives: while

Syntaxe Exemple
while <condition> until
do do
<commandes> sleep 5
done done

Syntaxe Exemple:
do
1 num=0 # I n i t i a l i z e num
<commandes> 2 while [ $num − l t 10 ] #
done T e s t num w i t h t e s t
until <condition> command
3 do
4 echo $num
5 num=‘ e x p r $num + 1 ‘ #
I n c r e m e n t num
6 done
[Link] Introduction au Système UNIX September 3, 2018 134 / 185
Langage de Scripts Instructions répétitives (for, while)

Instructions répétitives: while

Exemple: break [n] permet de


sortie de il boucles
1 #! / b i n / b a s h englobantes.
2
3 num=0 # I n i t i a l i z e num
continue [n] reprend la
4 while [ $num − l t 10 ] # T e s t nième boucle englobante
num w i t h t e s t command à l’itération suivante.
5 do
6 echo $num
7 num=‘ e x p r $num + 1 ‘ #
I n c r e m e n t num
8 i f [ $num −eq 4 ]
9 then echo ” V r a i ”
10 break
11 f i
12 echo ” B l a b l a ”
13 done

[Link] Introduction au Système UNIX September 3, 2018 135 / 185


Langage de Scripts Instructions répétitives (for, while)

Instructions répétitives: while, Cas d’école

Lecture d’un fichier


Exemple
while read i
do
echo $i
done < [Link]

[Link] Introduction au Système UNIX September 3, 2018 136 / 185


Langage de Scripts Fonctions

Fonctions

Permet de découper un programme en unité ”logique”


Exemples:

Exemple
bon () {
echo "Bonjour"
}

Fonctions: Résultat
$ bon
Bonjour
$ bon
Bonjour

[Link] Introduction au Système UNIX September 3, 2018 137 / 185


Langage de Scripts Fonctions

Fonctions

Une fonction peut aussi être vue comme un script


Si un script s’appel S et une fonction porte le même nom, lorsqu’on
invoque S, c’est la fonction qui prime.
A l’aide des fonctions, on peut surcharger des commandes de base.
Exemple: Redéfinir la fonction rm avec sauvegarde dans une poubelle

[Link] Introduction au Système UNIX September 3, 2018 138 / 185


Langage de Scripts Fonctions

Paramètre des fonctions

Chaque fonction peut recevoir des paramètres


Paramètres positionnels $1, $2, ...
Exemple
function bon() { echo "Bonjour $1, ca va ? "; }
$ bon John
$ Bonjour John, ca va ?

[Link] Introduction au Système UNIX September 3, 2018 139 / 185


Langage de Scripts Fonctions

Paramètres d’une fonction


Définition d’une fonction comme procedure:
function bon() { echo "Bonjour $1, ca va $2 ? "; }
Appel de la fonction
bon toto titi
Ne pas confondre $1 du script et $1 d’une fonction
Exemple du script paramScriptFct
echo "Script = $1"
function bon () { echo "Fonction = $1" }
bon toto

Résultat
$ paramScriptFct jour
Script = jour
Fonction = toto

Prédominance du paramètre de la fonction sur celui du script


[Link] Introduction au Système UNIX September 3, 2018 140 / 185
Langage de Scripts Fonctions

Fonctions

Exemple:

1 table ()
2 {
3 echo ” T a b l e de $1 ”
4 num=0 # I n i t i a l i z e num
5 while [ $num − l t 10 ] # T e s t num w i t h t e s t command
6 do
7 r e s =‘ e x p r $1 \∗ $num ‘
8 echo $1 ” f o i s ” $num ” = $ r e s ”
9 num=‘ e x p r $num + 1 ‘ #I n c r e m e n t num
10 done
11 }
12 table 4
13 table 6

[Link] Introduction au Système UNIX September 3, 2018 141 / 185


Langage de Scripts Fonctions

Argument variable et retour d’une valeur

Passage d’une valeur par variable globale

$ r=1
$ function plus_un() { r=‘expr $r + 1‘; }
$ plus_un
$ echo $r

[Link] Introduction au Système UNIX September 3, 2018 142 / 185


Langage de Scripts Fonctions

L’instruction return
Équivalent à un exit du Shell.
soit une valeur de 0 à 255
ne peut retourner une chaine de caractères
Exemple
function plus_un() { return $1+1 }
r=1
plus_un $r # b=plus_un ne marche pas
echo $?, $r

$? contient la valeur du return, soit une valeur de 0 à 255


Exemple
function maFct() { return 0 }
maFct
if [ "$?" == 0 ]
then ...
[Link] Introduction au Système UNIX September 3, 2018 143 / 185
Langage de Scripts Fonctions

Comment Retourner une Chaı̂ne de Caractères ?


Une fonctionne peut que retourner une valeur de 0 à 255
Plusieurs solutions possibles
echo d’une chaine
Exemple echo d’une chaine
function maFct() { echo "maValeur" }
retval=$( maFct )
if [ "$retval" == "true" ]
then ...
Partage d’une variable
Exemple
varPartage=""
function maFct() { varPartage="maValeur" }
maFct
if [ "$varPartage" == "true" ]
then ...
[Link] Introduction au Système UNIX September 3, 2018 144 / 185
Langage de Scripts Fonctions

Exemple de surcharge de la fonction rm

Redefinition de la fonction:
function rm() {
if [ "$PWD" == "/storeU/poubelle" ]; then
echo "Poubelle Vidée"
$(which rm) $*
else
for word in "$@"
do mv -n "$word" /storeU/poubelle/; done
echo "-> /storeU/poubelle"
fi
}

[Link] Introduction au Système UNIX September 3, 2018 145 / 185


Langage de Scripts Fonctions

En Résume du Langage de Script

Un langage complet pour orchestrer les commandes


Souvenez-vous, une commande par ligne, sinon il faut ;
Attention aux espaces dans les instructions car interprète chaque
instruction comme une commande. Chaque argument doit être séparé
par des espaces !
Souvenez-vous qu’un ensemble de mot est considéré comme un
argument si on utilise les ” ou ’

[Link] Introduction au Système UNIX September 3, 2018 146 / 185


Le Monde du Shell

SECTION: Le Monde du Shell

Efficacité Sous Shell 148


Historique des Commandes 149
Les ‘alias’ 150
Développer sous Unix 151
La communication sous Unix: Les Réseaux 158
X-Windows, le fenêtrage 170
sudo 173

[Link] Introduction au Système UNIX September 3, 2018 147 / 185


Le Monde du Shell Efficacité Sous Shell

Efficacité Sous Shell

Certes Shell demande de taper des commandes. Mais on devient très


efficace si l’on maı̂trise:
L’utilisation des alias
L’écriture de scripts
L’utilisation des flèches du clavier. Rappel les précédentes commandes.
L’utilisation de ”l’historique des commandes”. Rappel d’anciennes
commandes.

[Link] Introduction au Système UNIX September 3, 2018 148 / 185


Le Monde du Shell Historique des Commandes

Historique des Commandes

Objectif: Rappeler une commande antérieure ou voir l’historique.


Une ligne constitue un événement dans la liste ”historique” et ces
événements sont numérotés.
Pour voir la liste, tapez history.
Les commandes utiles:
!! Remplace l’événement précédent (rappel la commande précédente).
! n Remplace l’événement numéro n.
!str Remplace l’événement le plus récent contenant str.
Exemple: !cc la dernière commande débutant par cc

[Link] Introduction au Système UNIX September 3, 2018 149 / 185


Le Monde du Shell Les ‘alias’

Les ‘alias’

Alias: Utilisé pour abréger la longueur des commandes et


personnaliser des commandes selon l’habitude de l’utilisateur.
La commande interne alias:
sans arguments, il permet d’afficher la liste des alias. Le premier mot
d’une commande est testé contre cette liste pour faire une substitution
d’alias.
Exemple 1: alias ff=’find / -name * -print’
Exemple 2: alias ll=’ls -l’

Supprimer la définition d’un alias: unalias

[Link] Introduction au Système UNIX September 3, 2018 150 / 185


Le Monde du Shell Développer sous Unix

Développer sous Unix

Ecrire une nouvelle application:


Utiliser un langage comme Java et un IDE pour écrire complètement
une application.
Ecrire que ce qui est nécessaire (Shell, VBA, etc.)
Sous Shell, c’est :
Utiliser des commandes existants
Chaque commande est très générique.
Il faut très bien uniquement sa fonction.
Ecrire les commandes manquants (éventuellement)
Utilisation d’un langage approprié (ex. C)
Ecrire le script qui combine l’ensemble de ces commandes

[Link] Introduction au Système UNIX September 3, 2018 151 / 185


Le Monde du Shell Développer sous Unix

Développer sous Unix

Tout faire en Shell ?


Shell vise l’intégration de commandes: Lancer des commandes avec un
type de synchronisation.
Hors de ce cadre, possible, mais mieux vaut utiliser des outils spécialisés
Exemple: awk pour filtrer du texte
Exemple: sed manipule des flux de textes
Existe d’autres langages
Exemple: awk, Tcl, Perl, Python, Ruby, . . .

[Link] Introduction au Système UNIX September 3, 2018 152 / 185


Le Monde du Shell Développer sous Unix

Inclusion d’Autres Interpreteurs dans un Script

Il existe beaucoup d’autres interpréteurs: awk, sed, gnuplot, ...


Le langage doit être interprété
L’inclusion permet de mixer les possibilités

Exemple
echo "bonjour"
export A=’toto’
python - << FINI
from pdb import set_trace
reserve=out=’’
...
print out
FINI

[Link] Introduction au Système UNIX September 3, 2018 153 / 185


Le Monde du Shell Développer sous Unix

Outils pour Développer sous Unix

Les compilateurs
Langage de programmation: gcc, pascal, java, . . .
De textes: Latex, troff etc.
De courbe: gnuplot, etc.
De gestions d’un developpement
git, cvs, svn,... synchronisation de plusieurs version de sources
permet de developpement collaboratif
ddd/gdb/ . . . débugger
profile
make
Se base sur une description dans Makefile
...

[Link] Introduction au Système UNIX September 3, 2018 154 / 185


Le Monde du Shell Développer sous Unix

Makefile

Idée: Commandei qui transforme des données pour la Commandei+1 .


Donc un flot de transformations.
Un document passe par une succession de transformations.
Comment se souvenir d’appliqué une chaı̂ne de commande à chaque
modification du document source ?
L’outil make fait ca:
Le principe: Compare les dates du document source et du document
cible.
Si la date du document est postérieur au document cible, alors
appliquer la ou les commandes pour produire le document cible.

Syntaxe
<cible>: <depend>
<commande à appliquer>

[Link] Introduction au Système UNIX September 3, 2018 155 / 185


Le Monde du Shell Développer sous Unix

Exemple de Makefile

all: [Link] lecteur


[Link]: [Link]
latex exam
dvidvi -m "2:0,1(14.85cm,0cm)" [Link] [Link]
mv -f [Link] [Link]
[Link]: [Link]
dvips -t landscape -f [Link] > [Link]
lecteur: lecteur.o util.o
$(CC) $(CFLAGS) -o lecteur lecteur.o util.o $(LFLAGS)
clean:
cleantex -a exam
rm -f [Link] core *.o [Link] *.ps lecteur serveur posteur

[Link] Introduction au Système UNIX September 3, 2018 156 / 185


Le Monde du Shell Développer sous Unix

Makefile

en tapant:
en tapant make, il recherche par défaut un fichier appelé Makefile
il applique la première cible
on peut déclencher une cible en tapant: make <nom de la cible>
Sur le principe de make, il existe de nombreux nouveaux outils

[Link] Introduction au Système UNIX September 3, 2018 157 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

La communication sous Unix

Unix/connectivité
Internet
Réseau temps réel (ou connecté)
Offre de nombreux services
Composé de milliers de sous réseau
Historique
Initialement Universitaire aux Etats-Unis
Actuellement planétaire
TCP/IP
Protocole: packet-switched readline
Noeud à Noeud
Des routeurs

[Link] Introduction au Système UNIX September 3, 2018 158 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Services Interactifs

FTP Transfert de fichiers interactif


Gopher Banques d’informations textuelles distribuées.
IRC Discussion de type CB distribuée
MUD Jeux multi-utilisateurs distribués.
NFS Partage de fichiers.
NNTP Lecture de news sur serveur distant,
POP Lecture de mail sur serveur distant.
TALK Discussion interactive.
TELNET Appel de système distant.
WWW Services multimédia interactifs distribués

[Link] Introduction au Système UNIX September 3, 2018 159 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Services non interactifs

mail Courrier électronique privé. Permet d’échanger des messages


avec des correspondants du monde entier.
news Forums de discussion. Permet d’échanger des points de vue
dans des conférences à thèmes spécifiques avec d’autres utilisateurs.
uucp Transmission de fichiers.
mailservers Serveurs d’informations via courrier électronique
Exemple: faxserv@[Link] permet d’envoyer des fax par courrier
électronique.
...

[Link] Introduction au Système UNIX September 3, 2018 160 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Mail

Le système mail sert à l’échange de courrier électronique privé entre


correspondants connectés au réseau ALPHANET, Internet, CBMNET.
FidoNet, Compu$erve, X.400, UUCP et divers autres réseaux.
L’interface utilisateur comprend les commandes mail et elm. Il est
également possible d’utiliser ce service pour créer des listes de
distributions permettant, d’atteindre des personnes aux intérêts ciblés
(mailing list).
mail
Interface ligne. Très simplifié
Se termine par . en début de ligne.
elm:
Interface VT100

Transfert de mail sous le standard multi-plate-forme MINE

[Link] Introduction au Système UNIX September 3, 2018 161 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Spécification d’adresses

Le routage mail sur ALPHANET est très simple. Toute adresse


soumise au système de message doit être de la forme générale
suivante: user@[Link]
[Link]@[Link]
Le nombre de sous-domaines peut être quelconque.
TOP domaines
Les TOP domaines sont les domaines terminant une adresse mail. Il
existe énormément de TOP domaines, dont par exemple:
edu Education aux Etats-Unis (universités).
gov Gouvernement des Etats-Unis.
com Organisations à, but lucratif ou général.
org Organisations à but non lucratif.
net Organisations de réseaux.
ch, us, fr, ..

[Link] Introduction au Système UNIX September 3, 2018 162 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

News (forums de discussions)

Messagerie électronique publique


Forum d’échanges qui sont regroupés en newsgroups
Exemple: [Link]
Plus de 1GB par jours
Parle de serveur NNTP
Exemple de catégories
Misc sujets divers
Comp forums concernant l’informatique
sci sciences
...
tin
knews, logiciel commercial, www

[Link] Introduction au Système UNIX September 3, 2018 163 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Communication à distance

ping permet de savoir si un site distant est atteignable et en combien


de temps.
traceroute trace le parcours de paquets IP jusqu’à un site distant.
netstat permet de connaı̂tre les session TCP ouvertes sur la
machine courante.
whois permet d’obtenir des informations sur des domaines internet.

[Link] Introduction au Système UNIX September 3, 2018 164 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Communication entre utilisateurs

finger permet de connaı̂tre les utilisateurs connectés actuellement


au système. Exemple:
who ermet de connaı̂tre les utilisateurs en ligne.
write <nom de login> permet de dialoguer en temps réel avec un
autre utilisateur en session si celui-ci accepte le message, (mesg n:
refus, mesg y : acceptation).
talk <nom de login>

[Link] Introduction au Système UNIX September 3, 2018 165 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Transférer d’un compte vers un autre

Généralement sur des machines distantes


ftp (File Transfert Protocol)
Permet d’échanger des fichiers entre sites distants
De nombreux versions ftptool,
Exemples de sites ([Link], [Link], . . . )
xarchie
Base de données mondiale pour rechercher des fichiers
telnet [Link]
scp <source> <destination>
Remplace rcp
Exemple: scp [Link] yeh@[Link]:/home/yeh/arc

[Link] Introduction au Système UNIX September 3, 2018 166 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Synchronisation d’arborescences de fichiers

But: synchroniser une arborescence A avec une arborescence B de


fichiers
Ne recopie vers B que les fichiers de A qui ont été modifies
Basé sur une comparaison de dates de modifications
Exemple
rsync -av rep1/ yeh@[Link]:rep2/

S’appuie sur ssh, donc securisé

[Link] Introduction au Système UNIX September 3, 2018 167 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

Session à distance

Commandes permettant d’ouvrir des sessions sur des systèmes


distants (réseau local ou réseau Internet).
ssh <nom de machine> comme telnet, ouvre une session. Mais
plus sur. A l’heure actuelle ssh.
permet d’exécuter des commandes shell à distance.
Remplace: rlogin, telnet, rsh
Exemple
ssh yeh@[Link]

Possibilité d’authentification par clé RSA/DSA

[Link] Introduction au Système UNIX September 3, 2018 168 / 185


Le Monde du Shell La communication sous Unix: Les Réseaux

X-Windows (X11 X-Windows System)

Développe au MIT 1984


Objectifs:
Rend indépendant plusieurs aspects d’un système de fenêtrage.
Indépendant:
Matériel
Du Système d’Eploitation
De la localisation
Du ”look-and-feel”
Exemple demo fiat en cours
Affichage de "clients" en provenance de plusieurs machines sur un écran un

[Link] Introduction au Système UNIX September 3, 2018 169 / 185


Le Monde du Shell X-Windows, le fenêtrage

Architecture X-Windows

Client/Serveur
Exemple: Machine serveur puissant servant plusieurs clients. Affichage
chaque résultat sur l’ordinateur de bureau d’un client.
Serveur
Exécute un noyau (ex. XFree86)
Plusieurs instances exécutées
Communication codée avec un client
Désigné par la variable d’environnement DISPLAY
Exemple: DISPLAY=[Link].0

Client
ni
Window-managers (gestionnaire d’interface)
Gère l’aspect pour l’utilisateur
Mode d’interaction (ex, aspect des fenêtres)

[Link] Introduction au Système UNIX September 3, 2018 170 / 185


Le Monde du Shell X-Windows, le fenêtrage

Architecture X-Windows

Copier Coler à la X-Windows


Double bouton de la souris ou troisième bouton.
S’effectue au niveau du client X-Windows
Travailler sur une session à distance avec XWindows
SSH -X yeh@[Link]
Si ca ne marche pas, mauvaise configuration, voir solution du
transparent suivant

[Link] Introduction au Système UNIX September 3, 2018 171 / 185


Le Monde du Shell X-Windows, le fenêtrage

Travailler en X-Windows sur une machine distante non


sécurisée

Normalement, ssh -X yeh@[Link] permet de travailler en


X windows à distance
Si ce n’est pas le cas, voici un déroulé (non securisté)
Exemple
$ xhost +[Link] # J’authorise persee à afficher
$ ssh yeh@[Link] # Je suis sur le serveur
export DISPLAY=[Link]:0.0
# Je tape Ctrl-D pour quiter la session distante
gedit # J’essaye !
# Normalement, la fenetre est ouverte sur ma machine

Les programmes s’executent sur le serveur, mais l’affichage est redirigé


vers $DISPLAY.
[Link] Introduction au Système UNIX September 3, 2018 172 / 185
Le Monde du Shell sudo

Super Utilisateur

Pour protéger l’utilisateur lambda contre la casse du système unix, il


existe deux niveaux d’exécution: Normal et Super utilisateur
Normal qui ne peut tout faire
Super utilisateur (root) qui peut administrer le système et donc le
casser !
Pour être super utilisateur, il faut:
1 appartenir au groupe sudo.
Exemple: $ sudo usermod -a -G sudo yeh
2 simplement précéder une commande par sudo
Exemple: $ sudo mkdir /monroot
3 taper Exemple: $ sudo su pour continuer une session en super
utilisateur

[Link] Introduction au Système UNIX September 3, 2018 173 / 185


Le Monde du Shell sudo

Conclusion

Communiquer et utiliser un environnement de fenêtrage est possible


dans le monde Unix.:
C’est:
simple et naturel de travailler à distance !
avoir un environnement bureautique équivalent à MacOS ou Windows
Un système:
très solide qui n’a pas besoin d’un rachat d’une machine plus puissante
tout les X années ! Même de très vielles machines peuvent booster !
qui ne dégrade pas ses performances au cours du temps
où tout est gratuit
pour développer ...

[Link] Introduction au Système UNIX September 3, 2018 174 / 185


Annexes

SECTION: Annexes

printf 176
Utilisation de expr en Expression régulière 178
Calculer sur une Colonne 179
Tracer une exécution 182

[Link] Introduction au Système UNIX September 3, 2018 175 / 185


Annexes printf

printf
Définition
printf <cha^
ıne format> <arg>...

Plus puissant que echo, permet de formater les arguments


les types connus: s, c, f, d, x
Exemple
$ printf "[%s]\n" "Laurent Y"
[Laurent Y]
$ printf "[%20s]\n" "Laurent Y"
[ Laurent Y]
$ printf "[%.2f]\n" "28,987665"
[28,99]
$ printf "[%8.2f]\n" "28,987665"
[ 28,99]
$ printf "[%x]\n" "28"
[1c]
[Link] Introduction au Système UNIX September 3, 2018 176 / 185
Annexes printf

printf

Définition
printf <cha^
ıne format> <arg>...

placer des caractères de contrôles: \n, \t


Exemple
$ printf "[%s]\tenseigne\t%s\n" "Laurent Y" "Intro Unix"
[Laurent Y] enseigne Intro Unix

répétition du format jusqu’à épuisement des arguments


Exemple
$ printf "%s\t%s\n" "1" "2 3" "4" "5"
1 2 3
4 5

[Link] Introduction au Système UNIX September 3, 2018 177 / 185


Annexes Utilisation de expr en Expression régulière

Commande expr pour expressions régulières

Définition
expr <cha^ ıne> : <expression-régulière>

teste si la chaı̂ne correspond à l’expression régulière fournie.


Exemple: if expr "$1" : [0-9]+
Exemple:

$ string="yeh laurent 2 16.5 Algo"


$ expr "$string" : ’.*[0-9].[0-9]’
18
$ expr "$string" : ’.* \([0-9]*.[0-9]\)’
16.5

[Link] Introduction au Système UNIX September 3, 2018 178 / 185


Annexes Calculer sur une Colonne

Calculer sur une Colonne

Le probleme
Comment prendre les valeurs d’une colonne. Exemple de l’exercice donné
en cours sur le disk free d’un étudiant

Le plus naturel est d’utiliser sed


Le plus simple est d’utiliser la commande cut.
awk commande qui permet de faire des traitements encore plus
complexes

Solution 1: Basé sur une commande


for i in ‘df -k | awk ’{print $3}’‘
do echo $i
done

[Link] Introduction au Système UNIX September 3, 2018 179 / 185


Annexes Calculer sur une Colonne

Utilisation d’une commande

Solution 2: Utilisation du Set


df -k | while read line
do set $line
echo $2
done

[Link] Introduction au Système UNIX September 3, 2018 180 / 185


Annexes Calculer sur une Colonne

Utilisation d’un tableau

Bash sait manipuler des tableaux


Exemple: $ t=(un deux trois)
Exemple: $ echo ${t[1]}

Solution 3: Basé sur les tableaux


df -k |
while read line ;
do
lineCols=( $line ) ; # Split suivant espace
echo "$lineCols[1]"
done

[Link] Introduction au Système UNIX September 3, 2018 181 / 185


Annexes Tracer une exécution

Tracer une exécution


Mise au point d’un programme bash
Peut se faire par des echo
mais plus simple en utilisant l’option -x
Exemple du fichier split lines
df -k | while read line ; do
lineCols=( $line ) ;
echo "$lineCols[1]"
done

Résultat
$ bash -x split_lines
+ df -k
+ read line
+ lineCols=($line)
+ echo de
de [Link] Introduction au Système UNIX September 3, 2018 182 / 185
Annexes Tracer une exécution

Tracer une exécution


On peut tracer une sous partie grace à set -x pour activer et set
+x pour desactiver
Exemple du fichier split lines
df -k | while read line ; do
set -x
lineCols=( $line ) ; echo "$lineCols[1]"
set +x
done

Résultat
$ bash -x split_lines
+ df -k
+ read line
+ lineCols=($line)
+ echo de
de [Link] Introduction au Système UNIX September 3, 2018 183 / 185
Annexes Tracer une exécution

Conclusion

UNIX shell est fondamental pour travailler avec un système.


Beaucoup à découvrir
Beaucoup d’extensions ou d’améliorations: csh, tcsh, ksh, bash,
Forte adaptation au noyau UNIX et à la production de programmes C.

[Link] Introduction au Système UNIX September 3, 2018 184 / 185


Annexes Tracer une exécution

Bibliographie

Christophe Blaess, Langage de scripts sous UNIX, Eyrolles.


W. Richard Stevens, Advanced programming in the UNIX
Environnement, Addison-Wesley Profession al Computing Séries,
1992.

[Link] Introduction au Système UNIX September 3, 2018 185 / 185

Vous aimerez peut-être aussi