Académique Documents
Professionnel Documents
Culture Documents
notes de cours
Alain Jacquemard
Professeur des Universités
IMB UMR 5584 CNRS
DIJON
FRANCE
Janvier 2009
2
Chapitre 1
Commandes et
environnement du shell bash
Sortie
standard
Entrée
COMMANDE
standard Erreur
standard
3
4 CHAPITRE 1. COMMANDES ET ENVIRONNEMENT DU SHELL BASH
Ex :
$ ls NomFic
NomFic not found
Sortie
standard
Entrée
COMMANDE
standard Erreur
standard
Il est possible de rediriger ces entrée et sortie standards vers des fichiers.
FicSortie
Entrée
COMMANDE
standard Erreur
standard
Pour que le résultat d’une commande soit rangé dans un fichier FicSortie
au lieu d’apparaı̂tre à l’écran, il faut utiliser la syntaxe :
Ex :
ls -l * > Fic
(enregistre les noms de fichiers à un moment donné)
Ex :
ls -l * >> Fic
(on enregistre les fichiers présents à un moment donné)
Dans ce cas:
$ ls NomFic1 NomFic2
NomFic2 not found
NomFic1
Preuve :
Redirigeons la sortie standard vers un fichier Resultat
$ cat Resultat
NomFic1
Sortie
standard
FicEntrée COMMANDE
Erreur
standard
1.1. REDIRECTIONS DES ENTRÉES-SORTIES 7
Au lieu de fournir des données en les entrant au clavier, ces données peuvent
être lues dans un fichier FicEntrée avec la syntaxe :
Ex :
aa bb ccc
ddd eee
ou
Composition de commandes
Composer deux commandes, c’est faire opérer une commande sur le résultat
fourni par une autre.
On pourrait :
Tubes
Le mécanisme de tube (pipe) permet de :
prendre la sortie standard d’une première commande
et de la rediriger sur l’entrée standard d’une deuxième commande.
Sortie
standard
Entrée
COMMANDE 1 COMMANDE 2
standard Erreur Erreur
standard standard
Exemples
ls /etc | more
ls -a | head
Aspect chronologique
Les commandes liées par un tube sont concurrentes :
Ceci veut dire que la deuxième commande est lancée en même temps que la
première,
la deuxième commande est alors bloquée jusqu’à ce que la première ait fini
le remplissage du tube.
Généralisation
On peut écrire une cascade de commandes :
1.1. REDIRECTIONS DES ENTRÉES-SORTIES 9
Cela ne présente de l’intérêt que si les N-1 premières écrivent sur leur sortie
et les N-1 dernières lisent sur leur entrée.
Une commande qui lit sur l’entrée standard et écrit sur la sortie standard
est appelée un filtre.
Par exemple :
Enchaı̂nement de commandes
On peut enchaı̂ner des commandes, qui vont se réaliser de manière indépendante.
Ex :
$ date ; echo "Bonjour, je suis :" ; who am i
Wed Oct 1 14:26:02 MET 2004
Bonjour, je suis :
johndoe ttyp1 Oct 1 14:26
Parenthèsage et enchaı̂nement
Ne pas confondre :
$ ( echo debut; date; echo "fin" ) > FicP
qui n’affiche rien et qui va construire le fichier FicP de contenu
debut
Wed Oct 1 14:26:02 MET 2004
fin
et
$ echo debut ; date; echo "fin" > FicSP
qui va afficher
debut
Wed Oct 1 14:26:02 MET 2004
et construire le fichier FicSP de contenu
fin
10 CHAPITRE 1. COMMANDES ET ENVIRONNEMENT DU SHELL BASH
Si on veut éliminer les messages d’erreur, on peut les rediriger vers le fichier
’trou noir’ /dev/null
Ex :
Redirections simultanées
ou
On emploie la syntaxe :
Exemple
On emploie la syntaxe :
Comm1 || Comm2
Exemple
Recopie d’un fichier sur un autre à condition que l’identificateur n’existe pas
déjà :
Lancement en arrière-plan
Si on veut exécuter une commande sans attendre la fin de son exécution pour
lancer d’autres commandes, on peut la lancer en arrière-plan (background).
Exemple
$ date > FicRésultats
$ maple < FicEntrée >> FicRésultats & [1]
12812
$ xclock & [2]
12827
$
$ echo $NomVar
valeurDeNomVar
$
Exemples
$ echo $LOGNAME
alceste
$ echo $HOME
/home/users/etud/iq1/alceste
$ echo $PATH
/usr/bin:/usr/openwin/bin:/usr/local/bin:
/users/etud/iq1/alceste/bin
$ echo $SHELL
/bin/bash
$ echo $PS1
$
$ echo $EDITOR
vi
$ echo $TERM
xterm
Assignation de valeur
On peut assigner une valeur à une variable NomVar par :
NomVar=Valeur
unset Nomvar
Ex :
14 CHAPITRE 1. COMMANDES ET ENVIRONNEMENT DU SHELL BASH
$ PS1=’\u\<\$’
alceste<$
permet de changer l’invite système.
Chapitre 2
2.1 Initiation
Les scripts
Un script est un fichier texte qui va comporter des instructions élémentaires
interprétables par l’interpréteur de commande (shell).
Les scripts
$ rm -f /home/Ut1/.rhosts
$ rm -f /home/Ut2/.rhosts
$ rm -f /home/Ut3/.rhosts
$ rm -f /home/Ut4/.rhosts
15
16 CHAPITRE 2. LANGAGE DE COMMANDE BASH
#!/bin/bash
# enleverRhosts
# usage : enleverRhosts NomUtilisateur
rm -f /home/$1/.rhosts
#!/bin/bash
# enleverRhostsListe
# usage : enleverRhostsListe ListeNoms
for Util in $*
do
rm -f /home/$Util/.rhosts
done
#!/bin/bash
# usage : changerExt Fichier Ext
if ! [ -a $1 ]
then echo "le fichier $1 n’existe pas !!!" ; exit 1
fi
NouveauNom=‘echo $1 | cut -d’.’ -f1‘.$2
mv $1 $NouveauNom
#!/bin/bash
# ce script effectue....
Terminaison impérative
La fin d’exécution par exit permet de transmettre en même temps un code de
retour.
(comme dans le cas d’une sortie par la dernière commande du script in-
terprétée avec succès)
Messages de sortie
On peut utiliser echo (avec option e pour les traitements spéciaux de lignes)
Ex :
#!/bin/bash
echo Bonjour
echo -e "\nSur 3 lignes\n"
echo -e "Sur une seule\c"
echo "ligne"
echo -e "\aErreur\a"
On peut utiliser aussi print avec une syntaxe différente (voir man).
Ce script est supposé opérer sur deux arguments : un fichier et une extension
Au lancement,
une variable de nom 1 sera instanciée à LeFic
et
une variable de nom 2 sera instanciée à Ext.
Lors de l’exécution du script, la valeur $1 coincidera avec LeFic et la valeur
$2 coincidera avec Ext.
On peut aussi définir des variables locales au script avec des identificateurs
choisis par l’utilisateur.
• sont désignées par $1,$2,...,$9 les valeurs des neuf premiers arguments
de la commande correspondant au script
Expressions conditionnelles
Les expressions conditionnelles sont les éléments de base des structures alterna-
tives.
Lorsque cette commande est interprétée elle donne un code de retour nul ou
non nul.
On dit que cette commande prend la valeur VRAI si le code de retour est
nul.
20 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Exemple
test -a Fic
ou bien
[ -a Fic ]
ExprTest Vraie si
-f Fic Fic désigne un fichier régulier
-d Rep Rep désigne un répertoire
-s Fic Fic existe et est de taille non nulle
Fic1 -nt Fic2 Fic1 est plus récent que Fic2
Fic1 -ot Fic2 Fic1 est plus ancien que Fic2
ExprTest Vraie si
Nbre1 -eq Nbre2 égalité numérique
Nbre1 -ne Nbre2 inégalité numérique
Nbre1 -gt Nbre2 plus grand numérique
Nbre1 -ge Nbre2 plus grand ou égal numérique
Nbre1 -lt Nbre2 plus petit numérique
Nbre1 -le Nbre2 plus petit ou égal numérique
ExprTest Vraie si
-n Cha^
ıne Cha^ ıne de longueur non nulle
-z Cha^
ıne Cha^ ıne de longueur nulle
Cha^
ıne = Motif Cha^ ıne satisfait le Motif shell
Cha^
ıne != Motif inégalité
2.1. INITIATION 21
ExprTest Vraie si
! Bool Bool faux (négation)
Bool1 -a Bool2 conjonction logique (et)
Bool1 -o Bool2 disjonction logique (ou)
Par exemple :
Moyen de le vérifier :
$ Var1="dijon" ; Var2=""
$ [ $Var1 != $Var2 ]
/bin/bash : test : argument expected
Ceci peut se produire à chaque fois qu’un des arguments de test a comme
valeur la chaı̂ne vide, ou n’a pas de valeur (si par exemple une variable Var n’est
pas initialisée).
$ Var1="dijon" ; Var2=""
$ [ $Var1 != $Var2 ]
/bin/bash : test : argument expected
Exemples
Combinaisons de conditions
Il y a deux manières de procéder :
Combinaison Interprétation
! CommTest négation
CommTest1 && CommTest2 conjonction logique (et)
CommTest1 || CommTest2 disjonction logique (ou)
Exemples
CommPred1 est évaluée. Si son code de retour est nul, alors Instr1 est
évaluée, sinon on est ramené à une forme identique, mais de longueur réduite.
24 CHAPITRE 2. LANGAGE DE COMMANDE BASH
case Cha^ıne in
Motif1) Instr1 ;;
Motif2) Instr2 ;;
Motif3) Instr3 ;;
...
...
MotifN) InstrN ;;
esac
Les motifs sont très souvent des entiers, et généralement le dernier motif
MotifN est le motif par défaut *
Ex :
#!/bin/bash
echo -e "Donnez votre nom et votre prénom\c"
echo -e "s’il vous pla^
ıt :\c"
read Nom Prenom
echo Bonjour $Prenom $Nom
Exemple
La structure d’aiguillage est utile pour des menus :
#!/bin/bash
echo "quel éditeur souhaitez-vous ?"
echo -e "1->emacs,2->xedit,3->vi,\c"
echo "autre->ed"
read Choix
case $Choix in
1) EDITOR=emacs ;;
2) EDITOR=xedit ;;
3) EDITOR=vi ;;
2.1. INITIATION 25
*) EDITOR=ed ;;
esac
echo $EDITOR "est votre éditeur"
Remarque :
une forme plus courte omet in ... quand la liste des Mots coı̈ncide avec
$* (liste des arguments de la commande associée au script).
Exemple
Supposons que Rep ne contienne que des fichiers texte avec extension .txt .
Remarque :
ceci ne fonctionne que si le mécanisme d’expansion (remplacement de *) n’est pas
désactivé.
while CommPred
do Instr
done
until CommPred
do Instr
done
Ejection d’itérative
• break
éjecte de la structure itérative dans laquelle elle figure
• break Nbre
éjecte de Nbre structures itératives successivement imbriquées.
2.2 Approfondissement
Métacaractères
Les métacaractères (ou caractères spéciaux) interviennent dans les mécanismes
suivants :
• délimitation de chaı̂nes :
’ (quote) " (doublequote) ‘ (antiquote)
• historique
Ex :
*.c est une notation génératrice de la liste de tous les fichiers du type
ıne peut être vide, mais ne comporte pas de \ et ne peut
ıne.c où Cha^
Cha^
commencer par .
• les /
Délimiteurs de chaı̂nes
Ils sont de trois types :
• caractère ’ (quote)
• caractère ‘ (antiquote)
28 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Délimiteur quote
caractère ’ (quote) :
Ex :
$ Var="john"
$ echo $Var
john
$ echo ’$Var’
$Var
Délimiteur doublequote
caractère " (doublequote) :
On peut utiliser le caractère " dans une telle chaı̂ne, mais il faut le protéger
en l’écrivant \" .
Délimiteur antiquote
caractère ‘ (antiquote) :
toute chaı̂ne délimitée par antiquotes est interprétée comme une commande
opérant sur des arguments :
• les valeurs des arguments sont évalués,
• la commande est réalisée,
• et le résultat de la commande est substitué à la chaı̂ne entre antiquotes.
2.2. APPROFONDISSEMENT 29
Exemples
A la chaı̂ne ‘date‘ sera substituée la chaı̂ne
Lun Oct 3 08:42:35 MET 2004
$ echo date
date
$ echo "date"
date
$ echo ‘date‘
Lun Oct 3 08:42:35 MET 2004
$ ‘echo date‘
Lun Oct 3 08:42:35 MET 2004
Rappelons que pour toute commande, les arguments doivent être séparés
par des espaces.
Les chaı̂nes comportant des espaces doivent donc être délimitées par quotes
’ ou doublequotes " .
Calculs
Pour évaluer une expression arithmétique, il est nécessaire de faire appel à la
commande expr
Syntaxe :
expr [arguments]
Ex :
$ expr 1 + 2
3
$ expr 2 + 3 \* 5
17
$ expr \( 2 + 3 \) \* 5
25
30 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Arithmétique entière
Syntaxe Opération
Nbre1 + Nbre2 somme
Nbre1 - Nbre2 différence
Nbre1 \* Nbre2 produit
Nbre1 / Nbre2 quotient
Nbre1 % Nbre2 reste
Lorsqu’un des opérandes n’est pas numérique, un message d’erreur est af-
fiché.
Incrément, décrément
Une variable NomVar doit être
• incrémentée par :
NomVar=‘expr $NomVar + 1‘
• décrémentée par :
NomVar=‘expr $NomVar - 1‘
Décalage d’arguments
La commande
shift
permet de substituer à la liste des arguments d’un script la liste des argu-
ments privée de son premier élément.
Généralisation :
shift Nbre
Exemple
#!/bin/bash
# testerShift
echo "liste des argts :" $*
shift
echo "après un shift :" $*
shift
echo "après deux shifts :" $*
echo ’$1’ "est maintenant :" $1
Exemple, suite
#!/bin/bash
# testerShift
echo "liste des argts :" $*
shift
echo "après un shift :" $*
shift
echo "après deux shifts :" $*
echo ’$1’ "est maintenant :" $1
Exécutons :
$ testerShift a b c
liste des argts : a b c
après un shift : b c
après deux shifts : c
$1 est maintenant : c
Fonctions
On a vu qu’on pouvait regrouper des séquences de commandes avec des accolades
(de manière à exécuter des commandes dans le contexte courant).
Les fonctions utilisent aussi les notations $1, $2, ... pour leurs argu-
ments.
32 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Exemple
On souhaite écrire un script afficher2P2DArgts qui, lorsqu’on lui présente une
liste d’arguments, affiche les deux premiers et les deux derniers.
• elle affiche un message dans lequel une chaı̂ne est modifiable (ce sera soit
”premiers”, soit ”derniers” dans le cas qui nous concerne)
cette chaı̂ne modifiable sera placée en troisième position dans la liste des
arguments
Exemple
#!/bin/bash
# afficher2P2DArgts
function funcAfficheDeuxArgts
{
echo -e "les deux $3 argts sont \c"
echo $1 "et" $2
}
funcAfficheDeuxArgts $1 $2 "premiers"
Exemple, suite
#!/bin/bash
# afficher2P2DArgts
function funcAfficheDeuxArgts
{
echo -e "les deux $3 argts sont \c"
echo $1 "et" $2
}
funcAfficheDeuxArgts $1 $2 "premiers"
# accès aux 2 derniers argts
NbreDeShifts=‘expr $# - 2‘
2.2. APPROFONDISSEMENT 33
shift $NbreDeShifts
# $1 et $2 pointent sur les 2 derniers argts
funcAfficheDeuxArgts $1 $2 "derniers"
$ Afficher2P2DArgts a b c d e f g h
les deux premiers argts sont a et b
les deux derniers argts sont g et h
Variables de position
Les paramètres d’une commande correspondant à un script sont aussi appelés
variables de position.
Les accolades ne sont pas nécessaires pour les neuf premiers arguments.
Rappel :
$0 référence le nom de la commande
Substitutions conditionnelles :-
On peut substituer une valeur à un identificateur de variable de manière condi-
tionnelle :
• ${Var:-AutreCha^
ıne}
si Var est définie et n’est pas la chaı̂ne vide, l’expression ci-dessus vaut
$Var, sinon elle vaut AutreCha^ ıne
34 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Ex :
positionner automatiquement la variable TERM en cas de connexion depuis
un terminal non graphique :
• ${Var:+AutreCha^
ıne}
si Var est définie et n’est pas la chaı̂ne vide, l’expression ci-dessus vaut
$Var, sinon AutreCha^ ıne est imprimé par le shell, qui se termine (sauf s’il
est interactif).
• ${Var:?AutreCha^
ıne}
si Var est définie et n’est pas la chaı̂ne vide, l’expression ci-dessus vaut
AutreCha^ ıne, sinon elle vaut la chaı̂ne vide.
[[ ExprTest ]]
Exemples
$ [[ "alain" > "albert" ]] ; echo $?
0
$ [[ "albin" > "albert" ]] ; echo $?
1
2.2. APPROFONDISSEMENT 35
Ex : pré-incrément et post-incrément
Classes de caractères
Les intervalles de caractères de type a-z ne fonctionnent pas de même manière
sur toutes les configurations.
Pour une meilleure portabilité des scripts, il vaut toujours mieux utiliser les
notations de classes.
• les variables locales au shell dont les applications lancées depuis ce shell
ne peuvent connaı̂tre la valeur
Une variable NomVar peut devenir une variable exportée via la commande
export NomVar
Exportation
$ VarExportée="VE" ; export VarExportée
$ VarNonExportée="VNE"
$ echo $LOGNAME $VarExportée $VarNonExportée
john VE VNE
#!/bin/bash
VarLocale="VL"
echo $LOGNAME $VarExportée $VarNonExportée
echo $VarLocale "fin_script"
$ afficherVariables
john VE
VL fin_script
$ echo $VarLocale
Manipulation de variables
• typeset ±Options NomVar=Valeur
(+ pour attribuer, − pour désactiver), permet d’affecter une valeur ainsi
qu’un attribut
Option Attribut
i variable de type entier
l majuscules transformées en minuscules
r variable accessible seulement en lecture
u minuscules transformées en majuscules
x variable exportée
Initialisation de l’Environnement
Il y a deux niveaux d’initialisation de l’environnement :
– d’abord le fichier
/etc/profile (environnement public)
38 CHAPITRE 2. LANGAGE DE COMMANDE BASH
Initialisation de l’Environnement
• un shell qui n’est pas de login examine le fichier $HOME/.bashrc et exécute
les commandes qui s’y trouvent.
Lors de l’exécution d’un script :
• si la variable BASH ENV est définie (i.e. a été définie par un shell de login),
• et s’il existe un fichier référencé par BASH ENV, par exemple $HOME/.bashrc,
ce fichier est interprété par le shell.
Définition de synonymes
Il est possible de définir des alias (synonymes, abbréviations ou surnoms) de
commandes.
Syntaxe :
alias NomAlias=Cha^
ıne
alias NomAlias
Fichier d’alias
Généralement les définitions d’alias sont regroupées dans un fichier lu à chaque
ouverture de shell interactif, par exemple un fichier $HOME/.bashrc
Exemples d’alias :
2.3. COMPLÉMENTS SUR L’ENVIRONNEMENT 39
Le répertoire utilisateur
Le répertoire utilisateur (ou répertoire privé) est référencé par la chaı̂ne
$HOME
$PWD
$ echo $PATH
/usr/bin:/usr/local/bin:/home/jcm/bin::
Le répertoire courant apparaı̂t soit avec la syntaxe ., soit comme chaı̂ne vide
entre deux :.
Recherche de commande
Il peut arriver que deux commandes de même nom LaCommande soient présentes
dans deux répertoires disctincts référencés par $PATH
which LaCommande
$ which ls
/usr/bin/ls
40 CHAPITRE 2. LANGAGE DE COMMANDE BASH
L’écriture
PATH=$HOME/bin:$PATH:.
Exemple de .profile
$ cat .bash_profile
# .bash_profile
PATH=$PATH:$HOME/bin::
export PATH
unset USERNAME
Chapitre 3
Expressions régulières et
applications
Elles sont aussi utilisées hors du monde Unix par certaines applications (con-
struction de filtres dans des systèmes de courrier comme Thunderbird par ex-
emple).
Par exemple :
Les caractères [ . * sont spéciaux sauf lorsqu’ils figurent dans la liste des
caractères définissant un ensemble de caractères (délimitée par [ et ]).
Ex :
dans l’expression
41
42 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
[.*[!:]
(qui désigne l’un des caractères [ . * ! :),
seuls les caractères en rouge sont spéciaux.
Caractère spécial [
• le caractère [ indique un début de définition d’un ensemble de caractères
Ex : [acd AE]
Caractère spécial .
• le caractère . désigne un caractère quelconque excepté le caractère de fin
de ligne
Caractère spécial *
• le caractère * indique l’itération d’un nombre quelconque de fois,
sauf
s’il est en premier caractère d’une expression
ou
immédiatement après une séquence \( ouvrant la définition d’un champ
Ex :
Caractère spécial *
Soit le fichier Fic :
$ cat Fic
*aba
a*ba*c
*****
aaaaa
3.1. LES EXPRESSIONS RÉGULIÈRES BASIQUES 43
Caractère spécial ]
Ce caractère a une interprétation spéciale dans le contexte particulier indiqué :
Caractère spécial -
• le caractère - permet dans une définition d’ensemble de spécifier l’intervalle
de tous les caractères compris entre le caractère précédent et le caractère
suivant - dans l’expression.
Caractère spécial ^
• le caractère ^ signifie
Caractère spécial ^
Soit le fichier Fic :
$ cat Fic
*aba
a*ba*c
*****
aaaaa
44 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
Caractères spéciaux $ et \
• le caractère $ signifie la fin de ligne lorsqu’il est le dernier caractère d’une
expression
• le caractère \ précédant un caractère spécial lui enlève son interprétation
particulière (sauf à l’intérieur de la définition d’un ensemble).
Exemple :
pour désigner une ligne qui commence par . , on peut utiliser une des deux
expressions :
• ^\.
• ^[.]
LaClasse signification
digit chiffres décimaux
xdigit chiffres hexadécimaux
alpha lettres majuscules et minuscules
upper lettres majuscules
lower lettres minuscules
alnum caractères alphanumériques (lettres et chiffres)
space caractères d’espacement
cntrl caractères de contrôle
print caractères imprimables
punct caractères de ponctuation
• régulière atomique
Ex :
A[ac]*A
désigne des chaı̂nes contenant un motif constitué de deux lettres A séparées
par des lettres a ou c (éventuellement aucune).
• toute expression dont le premier caractère est ^ indique que les motifs
désignés doivent être en début de ligne
Ex :
^AAAAA : lignes commençant par AAAAA
• toute expression dont le dernier caractère est $ indique que les motifs
désignés doivent être en fin de ligne
46 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
Ex :
ZZZZZ$ : lignes se terminant par ZZZZZ
Ex :
\(.*\)\1\1
\(.*\)-\(.*\)-\1-\2
Quelques règles :
où les nombres entiers sont donnés sous une forme décimale et sont compris
entre 0 et 255
Exemples
• ^\..*$ ou ^\. ou ^[.].*$ ou ^[.]
désigne les lignes qui commencent par .
• [a-zA-ZO-9]
est l’ensemble de tous les caractères alphanumériques (équivalent dans la
plupart des cas à [[:alnum:]] )
• [^a-zA-ZO-9]
est l’ensemble complémentaire du précédent (ensemble des caractères qui
ne sont ni une lettre majuscule ou minuscule, ni un chiffre)
• [-^[]
est l’ensemble des trois caractères - [ et ^
• ^[a-z]*$
désigne les lignes qui sont vides ou bien qui ne contiennent que des lettres
minuscules
• ^[a-z]\{3\}[^a-z]\{3\}$
désigne les lignes qui commencent par 3 lettres minuscules et finissent par
3 caractères qui n’en sont pas et ne contiennent aucun autre caractère
• ^*\**$ ou ^\*\**$ ou ^*[*]*$
désigne les lignes non vides qui ne contiennent que des caractères *
• ^.*[[:space:]].*$
désigne les lignes qui contiennent au moins un espace ou une tabulation
• ^.*[[:space:]].*$
désigne les lignes qui contiennent au moins un espace ou une tabulation
• ^.*[[:space:]]\{3\}.*$
désigne les lignes qui contiennent au moins un bloc de trois espaces/tabulations
• ^[[:space:]][[:space:]]*$
désigne les lignes qui ne contiennent que des espaces ou tabulations (mais
au moins un)
3.1. LES EXPRESSIONS RÉGULIÈRES BASIQUES 49
• ^[[:space:]]*$
désigne les lignes qui ne contiennent que des espaces ou tabulations (mais
éventuellement aucun : ligne vide)
• ^[[:upper:]]\{10,\}.*$
désigne les lignes qui contiennent en début de ligne au moins dix lettres
majuscules consécutives
• ^\(ab\)\{2\}.*$
désigne les lignes qui contiennent deux répétitions du motif ab en début
de ligne
• ^.*\(ab\)\{2\}$
désigne les lignes qui contiennent deux répétitions du motif ab en fin de
ligne
• ^\(ab\)\{2\}.*\(ab\)\{2\}$
désigne les lignes qui contiennent deux répétitions du motif ab au début
et en fin de ligne
Exemples
On souhaite envoyer directement à la poubelle les mèls provenant des adresses
qui comportent au moins quatre chiffres consécutifs.
^.*[[:digit:]]\{4,\}.*$
Exemples
comment éliminer les trames NMEA erratiques d’un GPS, i.e celles qui ne sont
pas du type :
Ou encore :
A l’aide de sed on peut appliquer une commande sur chaque ligne d’un
fichier (ceci permet de traiter des fichiers énormes).
Exemple :
la commande de substitution d’une chaı̂ne par une autre permet l’utilisation
des expressions régulières :
Substitution simple
Substitution simple de la première occurence de chaque ligne :
$ cat Fic
ababa
abaddaba
baba
$ sed ’s/aba/BAB/’ Fic
BABba
BABddaba
bBAB
Tampons d’édition
sed possède deux tampons :
Algorithme de sed
sed réalise un cycle d’instructions sur chaque ligne du fichier édité, de la première
à la dernière.
Après chaque cycle, le tampon actif est vidé, sauf si une commande spécifique
pour l’interdire est émise.
5. chaque commande peut être munie d’une adresse associée (une forme con-
ditionnelle)
6. l’objet L”, transformé par l’action de sed, et envoyé en flux de sortie (sur
la sortie standard)
7. un caractère de fin de ligne est ajouté dans le cas où un caractère de fin
de ligne avait été enlevé
Substitution globale
L’option g de la commande s permet la substitution simple de chaque occurence
de chaque ligne :
$ cat Fic
ababa
abaddaba
baba
$ sed ’s/aba/BAB/g’ Fic
BABba
BABddBAB
bBAB
52 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
$ cat Fic
aba
EFE
cfc
$ sed ’s/\(.\)\(.\)\1/\2\1\2/’ Fic
bab
FEF
fcf
Destruction de lignes
On utilise la commande d.
$ cat Fic
a
Destruction de lignes
$ cat Fic
a
Sélection de motifs
Récupération des 3 derniers caractères de chaque ligne :
$ cat Fic
abcdef
12345678
abc
$ sed ’s/^\(.*\)\(.\{3\}\)$/\2/’ Fic
def
678
abc
Sélection de motifs
La commande who donne :
$ who
vahjaj pts/1 Oct 15 17:24 (math.u-bourgogne.fr)
jcm pts/2 Oct 24 14:06 (adijon-152-1-33-66.w83-194.abo.wnd.fr)
Remplacement de caractères
On utilise la commande y .
$ cat Fic
a
b
a
d
$ sed ’y/abcd/XYZT/’ Fic
X
Y
X
T
54 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
• Pour supprimer un bloc compris entre deux lignes contenant ces deux
expressions régulières :
$ cat Fic
a
b
c
d
$ sed ’=’ Fic
1
a
2
b
3
c
4
d
Négation
$ cat Lefic
xyxy
xyxz
3.2. APPLICATION À L’ÉDITION DE FLUX 57
ababxy
$ sed ’/\(.\)\(.\)\1\2/d’ LeFic
xyxz
58 CHAPITRE 3. EXPRESSIONS RÉGULIÈRES ET APPLICATIONS
Chapitre 4
– les terminaux,
– les imprimantes,
– les disques physiques,
– les disques logiques (partitions logiques des disques physiques),
– la mémoire physique ou la kernel memory (qui contient les tables du
noyau)
i-nœuds
À chaque fichier correspond une entrée dans une table contenant l’ensemble des
attributs de ce fichier
(par exemple son type, ses propriétaires ou ses droits d’accès).
59
60 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
ls -li
Le numéro 1 a souvent été utilisé pour référencer des mauvais blocs d’information.
L’accès aux fichiers des différents types est réalisé au travers d’un ensemble
de primitives système (points d’accès dans le noyau), de noms génériques (par
exemple open, read, write et close)
Catégories de fichiers
En première approximation, on peut classifier les différents types de fichiers en
deux grandes catégories selon qu’ils ont :
Répertoires
Les répertoires jouent un rôle privilégié car leur contenu est interprété par un
certain nombre de fonctions du système :
Question :
ls -l
le premier caractère de la ligne correspondant à l’identification du répertoire
étant un d
Répertoires
$ ls -l
-rw-r--r-- 1 jac pr 454232 nov 8 11:44 bash.pdf
drwxr-xr-x 2 jac pr 4096 nov 15 11:10 TDsys/
drwx------ 2 jac pr 4096 sep 30 2002 tmp/
Référençage
Le mécanisme de référençage repose sur l’association réalisée dans les répertoires
entre
• chaı̂nes de caractères (appelées liens physiques)
• numéros d’index des fichiers.
Les différentes arborescences peuvent être reliées entre elles par le mécanisme
de montage :
Montage
L’une des arborescences, correspondant au disque système, est privilégiée car
• les montages des autres se font par rapport à elle
• sa racine est la racine absolue du système de gestion de fichiers complet.
La commande mount
Cette commande permet de faire correspondre des parties de l’arborescence
avec des partitions, et aussi d’affecter un système extérieur (clé usb, répertoire
réseau, cdrom, etc..) à un répertoire créé dans l’arborescence.
mount /dev/cdrom
Montage NFS
Le mécanisme de montage peut être étendu afin de permettre l’accès aux fichiers
appartenant à des systèmes distants de manière transparente :
le protocole le plus répandu qui autorise de tels accès est le protocole NFS
(Network File System).
Pour tout fichier d’un disque monté, il existe (si le système est consistant),
au moins un chemin de la racine vers ce fichier.
La liste des noms étiquetant les arrêtes d’un tel chemin identifie sans aucune
ambiguı̈té ce fichier :
64 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
Répertoires de travail
Afin de faciliter les repérages, à tout instant, à tout processus (activité dans le
système) est associé un répertoire privilégié appelé
par rapport auquel il lui est possible de réaliser des repérages relatifs.
Références relatives
Une désignation par rapport à un répertoire de travail est appelée référence
relative.
Elle s’écrit sous la forme d’une suite de liens, séparés par le caractère / et
ne commençant pas par le caractère /.
Elle correspond à un chemin allant du répertoire de travail à un fichier.
Question :
Références relatives
Une désignation par rapport à un répertoire de travail est appelée référence
relative.
Elle s’écrit sous la forme d’une suite de liens, séparés par le caractère / et
ne commençant pas par le caractère /.
Elle correspond à un chemin allant du répertoire de travail à un fichier.
4.2. LES RÉFÉRENCES 65
Les liens .. et .
Le lien .. contenu dans un répertoire est toujours associé au répertoire unique
dont le répertoire est le descendant.
Par ailleurs, un répertoire peut utiliser le lien . pour se désigner dans lui-
même.
.. correspond à /home/Etud/IQ1/Letudiant/
Répertoire privé
Chaque utilisateur possède un répertoire particulier, appelé répertoire privé
(home directory)
qui devient automatiquement le répertoire de travail du processus shell lancé
à sa connexion au système (opération login).
66 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
Question :
comment calcule-t-on cette longueur ?
Cette longueur est obtenue par wc -c
Les contenus de tels fichiers peuvent être des programmes (binaires ou sources)
ou des données de programmes utilisateurs ou systèmes.
Répertoires principaux que l’on trouve (directement ou via des liens sym-
boliques) sur tous les systèmes :
• /bin et /usr/bin contiennent les noms des commandes UNIX non internes
aux différents langages de commandes
• /usr/lbin ou /usr/local/bin contiennent les noms des commandes par-
ticulières à un site donné
Répertoire /bin
Exemple d’un système openWRT flashé sur un Linksys WRT54GL :
$ ls /bin
ash dd grep login netmsg rmdir umount
busybox df gunzip ls netstat sed uname
cat dmesg gzip mkdir pidof sh vi
4.3. LES DIFFÉRENTS TYPES DE FICHIERS 67
• /tmp contient les références de fichiers temporaires utilisés par les appli-
cations système
Répertoire /etc
Exemple d’un système openWRT flashé sur un Linksys WRT54GL :
$ ls /etc
TZ firewall.user ipkg.conf profile
banner functions.sh modules protocols
config group modules.d rc.common
crontabs hosts openwrt_version resolv.conf
cryptokeys hotplug.d passwd serverTun.ovpn
dnsmasq.conf httpd.conf passwd- shells
dropbear init.d ppp ssh
ethers inittab preinit sysctl.conf
L’utilisateur ne voit pas de différence entre les fichiers ordinaires, les répertoires
et les organes périphériques du point de vue de leur référençage.
Les fichiers spéciaux sont traités par le système comme des fichiers sur disque
ordinaires, mais les opérations de lecture ou d’écriture sur ces fichiers activent
les dispositifs physiques associés.
68 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
• les fichiers spéciaux en mode bloc comme les disques où les entrées-sorties
sont réalisées par bloc (la taille des blocs étant en général de 512 ou 1 024
caractères) et transitent par des caches du système d’entrées-sorties
• les fichiers spéciaux en mode caractère comme les terminaux pour lesquels
les entrées-sorties sont réalisées caractère par caractère et ne transitent
pas par ces caches.
• les tubes nommés ou fifo (first in first out) qui permettent la communi-
cation entre processus,
• les liens symboliques, qui sont des fichiers sur disque dont le contenu est
interprété comme un nom de fichier.
• l’adresse des blocs utilisés sur le disque pour ce fichier (uniquement pour
les fichiers sur disque)
groupe
z}|{
-|{z}
rwx rwx |{z}
rwx ... LeFic
utilisateur autres
groupe
z}|{
d|{z}
rwx rwx |{z}
rwx ... LeRep
utilisateur autres
Répertoires en mode x
Ex :
Considérons le répertoire ReP x en mode x pour l’utilisateur jac qui effectue
les commandes suivantes :
$ ls -la | grep ’ReP__x’
d--xrwxrwx 2 jac pr 4096 nov 30 15:44 ReP__x/
$ cd ReP__x
$ ls
ls: .: Permission non accordée
$ cd .. ; ls ReP__x
4.4. LES DROITS D’ACCÈS AUX FICHIERS 71
Répertoires en mode rw
Ex :
Considérons le répertoire RePrw en mode r,w pour l’utilisateur jac qui
effectue les commandes suivantes :
$ ls -la | grep ’RePrw_’
drw-rwxrwx 3 jac pr 4096 nov 30 15:20 RePrw_/
$ cd RePrw_
bash: cd: RePrw_: Permission non accordée
$ ls RePrw_/*
ls: RePrw_/a.b: Permission non accordée
$ cp RePrw_/a.b .
cp: Ne peut évaluer ‘RePrw_/a.b’ par stat():
Permission non accordée
$ date > RePrw_/aa.b
bash: RePrw_/aa.b: Permission non accordée
Les liens du répertoire sont donc visibles, mais on ne peut opérer dessus. On
ne peut pas écrire malgré le w, ni lire les caractéristiques des fichiers malgré le
r.
Répertoires et modes
Règle à retenir :
Répertoires en mode wx
Ex :
Considérons le répertoire ReP wx en mode w,x pour l’utilisateur jac qui
effectue les commandes suivantes :
$ ls -la | grep ’ReP_wx’
d-wxrwxrwx 2 jac pr 4096 nov 30 16:00 ReP_wx/
$ ls ReP_wx/
ls: ReP_wx/: Permission non accordée
$ date > ReP_wx/a.b
$ rm ReP_wx/a.b
rm: détruire ‘ReP_wx/a.b’? o
$
On peut donc enregistrer des fichiers, les détruire, mais on ne peut les lister.
Répertoires en mode rx
Ex :
Considérons le répertoire RePr x en mode r,x pour l’utilisateur jac qui
effectue les commandes suivantes :
$ ls -la | grep ’RePr_x’
dr-xrwxrwx 2 jac pr 4096 nov 30 19:55 RePr_x/
$ ls RePr_x/
a.b
$ date > RePr_x/b.b
bash: RePr_x/b.b: Permission non accordée
$ cat RePr_x/a.b
Voici les caractères du contenu du fichier a.b
$ rm RePr_x/a.b
rm: détruire ‘RePr_x/a.b’? o
$
On peut donc supprimer le lien par rm, mais seulement après confirmation.
Remarques
• Le droit d’accès en écriture donne aussi droit à la destruction de noms de
fichier.
Cette destruction pourra avoir lieu par exemple par une des commandes
rm, cp, mv ou encore par redirection >
4.4. LES DROITS D’ACCÈS AUX FICHIERS 73
rm -f NomFic
ExprTest Vraie si
-r Fic Fic lisible par le processus
-w Fic Fic modifiable par le processus
-x Fic Fic exécutable par le processus
Le super-utilisateur
Il existe un utilisateur privilégié disposant de tous les droits :
le super-utilisateur, dont l’UID est 0, le GID est 0, et dont l’un des noms de
connexion est root.
La commande su
La commande su LeNom permet de lancer un shell avec une identification arbi-
traire LeNom.
Remarques :
chmod en détail
Plus précisément :
chmod ugo±rwx Lobjet
Bits spéciaux
Pour assurer les protections, le système utilise 9 bits du i-nœud du fichier
indiquant pour chaque catégorie d’utilisateurs et chacune des opérations si
l’opération est réalisable.
• le set-uid bit
• le set-gid bit
• le sticky bit
Le set-uid bit
Le set-uid bit concerne les fichiers binaires exécutables.
Le set-uid bit
Le set-uid bit concerne les fichiers binaires exécutables.
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 352 oct 23 2004 /etc/passwd
$ which passwd
/bin/passwd
$ ls -l /bin/passwd
-r-s--x--x 1 root root 14256 fév 2 2002 /bin/passwd
Le set-gid bit
Le sticky bit
Le sticky bit assure le maintien (collage) d’un programme en zone de swap même
lorsqu’aucun processus actif ne correspond à une exécution du programme.
78 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
Le sticky bit
Le sticky bit assure le maintien (collage) d’un programme en zone de swap même
lorsqu’aucun processus actif ne correspond à une exécution du programme.
• il y a 4 chiffres
– set-uid (valeur 4)
– set-gid (valeur 2)
– sticky bit (valeur 1)
ExprTest Vraie si
-r Fic Fic lisible par le processus
-w Fic Fic modifiable par le processus
-x Fic Fic exécutable par le processus
-u Fic Fic a le set-uid bit positionné
-g Fic Fic a le set-gid bit positionné
-k Fic Fic a le sticky bit positionné
-O Fic Fic a comme propriétaire celui du processus
-G Fic Fic a comme groupe celui du processus
• l : affichage long :
• t : trie par date (du plus nouveau au plus vieux) (inverse avec r)
Ex :
liste des fichiers .LeNom˜ et des fichiers LeNom.bak
$ ls .*~ *.bak
80 CHAPITRE 4. LES SYSTÈMES DE FICHIERS
La commande cp
Elle réalise la copie physique d’un fichier dans un autre.
$ cp a.a a.b
$ ls -il a.[ab]
850 -rwxrwxrwx 1 jac pr 29 nov 3 20:19 a.a
878 -rwxr-xr-x 1 jac pr 29 déc 7 23:54 a.b
La commande mv
La commande mv change l’identificateur d’un lien physique.
$ ls -il a.b
878 -rwxr-xr-x 1 jac pr 29 déc 7 23:54 a.b
$ mv a.b a.c
$ ls -il a.[a-c]
850 -rwxrwxrwx 1 jac pr 29 nov 3 20:19 a.a
878 -rwxr-xr-x 1 jac pr 29 déc 7 23:54 a.c
La commande rm
La commande rm supprime un lien de fichier.
Pour qu’un fichier soit réellement supprimé sur le disque, il est nécessaire
qu’il n’existe plus aucun lien correspondant à ce fichier.
Règles à respecter :
• les fichiers sur lesquels ces liens physiques sont créés ne peuvent pas être
des répertoires
• les répertoires dans lesquels les liens sont créés doivent appartenir au même
disque logique que les fichiers.
Liens physiques
$ ln LeFic LeLienPhy ; cp LeFic LaCopie
$ cat LeFic
Voici le contenu du fichier LeFic
$ cat LeLienPhy
Voici le contenu du fichier LeFic
$ ls -il LeFic LeLienPhy LaCopie
879 -rw-r--r-- 1 jac pr 34 déc 7 22:53 LaCopie
880 -rw-r--r-- 2 jac pr 34 déc 7 22:51 LeFic
880 -rw-r--r-- 2 jac pr 34 déc 7 22:51 LeLienPhy
-> On a donc deux liens qui correspondent au même i-nœud, donc au même
fichier physique.
Liens symboliques
On peut créer un fichier de type lien symbolique dont le contenu est l’identificateur
passé en paramètre.
On utilise l’option -s de ln :
ln -s LeFic LeLienSymb
ou bien
ln -s LeRep LeLienSymb
Liens symboliques
$ ln -s LeFic LeLienSymb
$ cat LeFic
Voici le contenu du fichier LeFic
$ cat LeLienSymb
Voici le contenu du fichier LeFic
$ ls -il L[ae]*
879 -rw-r--r-- 1 jac pr 34 déc 7 22:56 LaCopie
880 -rw-r--r-- 2 jac pr 34 déc 7 22:51 LeFic
880 -rw-r--r-- 2 jac pr 34 déc 7 22:51 LeLienPhy
881 lrwxrwxrwx 1 jac pr 5 déc 7 22:57 LeLienSymb -> LeFic
La commande tar
tar -LaClé LeRep
• c : création d’une archive
• f : le mot Unix qui suit sera le nom de l’archive (si f est suivi de -, alors
tar lit ou écrit sur l’entrée ou la sortie standard)
• v : mode bavard
$ tar -cvf - LeRep | gzip > /tmp/LeFic.tar.gz
$ tar -cvf - . | gzip > /tmp/RepCourant.tar.gz
(la deuxième ligne archive le répertoire courant)
4.5. APPROFONDISSEMENT DES COMMANDES LIÉES AUX SYSTÈMES DE FICHIERS83
La commande tar
tar LaClé LeFic
$ gunzip /tmp/LeFic.tar.gz
$ tar -xvf /tmp/LeFic.tar
La commande df
df -a LeRep
• le répertoire de montage
La commande df
$ df -a
SysFichier 1K-blocs Utilisé la capacité disponible Monté sur
/dev/hda1 37428528 34612244 914992 98% /
none 0 0 0 - /proc
none 0 0 0 - /dev
none 0 0 0 - /dev/pts
none 256908 0 256908 0% /dev/shm
/mnt/cdrom 0 0 0 - /mnt/cdrom
/mnt/floppy 0 0 0 - /mnt/floppy
La commande du
du Lobjet
Syntaxe :
find ListeDeRep ListeCond
Ex :
find . -name LeFic -print
Les primitives de la page précédente peuvent être composées avec les opérateurs
de :
• négation !
Les processus
5.1 Généralités
Concept de processus
Un programme exécutable produit par compilation et édition de liens est un
objet inerte correspondant au contenu d’un fichier régulier sur disque.
On peut donc dire qu’un processus est un objet dynamique qui correspond
à l’exécution du programme
85
86 CHAPITRE 5. LES PROCESSUS
• la pile d’exécution,
Ordonnanceur
Toutes les activités dans le système, qu’il s’agisse
L’un des rôles du système est de permettre à tous les processus d’avancer
dans leur exécution.
• ses propriétaires,
La commande top
Mem: 12996K used, 1312K free, 0K shrd, 940K buff, 5048K cached
Load average: 0.00, 0.00, 0.00 (State: S=sleeping R=running, W=waiting)
PID USER STATUS RSS PPID %CPU %MEM COMMAND
1281 root R 400 1278 0.5 2.7 top
1276 root S 1396 554 0.3 9.7 sshd
609 root S 1800 1 0.0 12.5 openvpn
554 root S 1088 1 0.0 7.6 sshd
534 root S 476 1 0.0 3.3 nas
1278 root S 440 1276 0.0 3.0 ash
590 nobody S 416 1 0.0 2.9 dnsmasq
540 root S 384 1 0.0 2.6 dropbear
547 root S 368 1 0.0 2.5 httpd
98 root S 364 1 0.0 2.5 syslogd
1 root S 356 0 0.0 2.4 init
94 root S 344 1 0.0 2.4 logger
561 root S 336 1 0.0 2.3 crond
477 root S 324 1 0.0 2.2 wifi
99 root S 320 1 0.0 2.2 klogd
557 root S 264 1 0.0 1.8 telnetd
La commande ps
Elle permet à un utilisateur quelconque d’obtenir la liste de processus appar-
tenant à un ensemble particulier ainsi que certaines de leurs caractéristiques.
La commande ps
Sans option, la commande fournit la liste des processus qui appartiennent à
la même session que le processus shell depuis lequel la commande est lancée
(c’est-à-dire ceux qui sont attachés au même terminal).
La commande ps
L’exemple suivant montre les informations minimales fournies par la commande
ps, l’utilisateur n’ayant a priori rien fait d’autre que se connecter via ssh.
$ ps
PID TTY TIME CMD
38596 pts/3 0:00 -bash
37425 pts/3 0:00 ps
La commande ps -u
Syntaxe : ps -u LeNom .
$ ps -u jac
UID PID TTY TIME CMD
383 430 pts/3 0:00 ps
383 596 pts/3 0:00 -bash
383 748 - 0:00 sshd
Commande ps -l
L’option -l permet d’obtenir pour chaque processus :
Exemple
• l’état du processus (F/S) : la valeur R de la colonne S correspond à l’état
actif et la valeur S à l’état endormi (attente d’un événement)
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 383 450 596 0 68 24 128e2 432 pts/3 0:00 vi
1 R 383 446 596 2 61 20 128e2 400 pts/3 0:00 ps
1 R 383 596 048 1 60 20 1978 880 pts/3 0:00 -bash
Questions :
quel est le père du processus 450 ?
quel processus aura priorité ?
• O : Non-existant
• R : actif
• W : swappé
• T : arrêté
Ceci varie fortement d’un système à l’autre, on peut récupérer les codes
d’une machine donnée par man ps
$ ps -lu $LOGNAME
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
140 S 503 7787 7785 0 69 0 - 1579 do_sel ? 00:00:00 sshd
000 S 503 7788 7787 0 69 0 - 698 wait4 pts/0 00:00:00 bash
140 S 503 7820 7818 0 69 0 - 1537 do_sel ? 00:00:00 sshd
000 S 503 7821 7820 0 75 0 - 656 wait4 pts/1 00:00:00 bash
000 R 503 10028 7788 16 76 0 - 606 - pts/0 00:00:01 boucler
000 R 503 14032 7821 0 75 0 - 770 - pts/1 00:00:00 ps
004 Z 503 14037 10028 0 75 0 - 0 do_exi pts/0 00:00:00 expr <def
#!/bin/bash
# boucler
while true
do
x=
done
Modification de priorité
La commande nice permet à l’utilisateur de modifier la priorité d’un processus
lui appartenant.
Démons
En principe, les processus système (daemons)
• ne sont sous le contrôle d’aucun terminal
• ont comme propriétaire le super-utilisateur.
Leur rôle :
Démons
En général les démons ont comme répertoire de travail la racine absolue du
système de fichiers afin de permettre le démontage de disques logiques sans
avoir à les interrompre.
• lpsched
• cron
• inetd
Démon init
Son rôle est
Ce processus
• a 1 comme numéro
• il est le processus parent des processus shells créés par les utilisateurs se
connectant depuis un terminal alphanumérique classique.
$ ps -elf | head -2
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
100 S root 1 0 0 68 0 - 353 do_sel Jan05 ? 00:00:04 init
5.2. CLASSES DE PROCESSUS 93
Démon lpsched
Son rôle :
Démon cron
Son rôle :
Démon inetd
Son rôle :
superviser les différents services réseau utilisant les protocoles Internet.
• de connexion distante
• de copie de fichiers.
• par échappement à des commandes telles que les éditeurs par exemple
Note : le nombre de processus qui peuvent être créés par un utilisateur donné
peut parfois être volontairement limité.
Remarque :
la plupart des processus des utilisateurs sont sous le contrôle d’un terminal,
mais cela n’est absolument pas une caractéristique d’un processus utilisateur.
5.2. CLASSES DE PROCESSUS 95
Commande at
La commande lit sur l’entrée standard une suite de commandes destinée à être
exécutée ultérieurement.
Syntaxes :
• at -f LeFicCommandes LeMoment
lit la suite de commandes dans un fichier
Commande at
at LeMoment LaDate +LapsDeTemps
Commande at
Les fichiers de configuration de la commande at:
Les signaux
La commande kill permet d’envoyer manuellement des signaux à un processus
(ou un groupe de processus).
Cette propriété suppose que la zone programme d’un processus soit protégée
en écriture.
• soit par demande de réalisation d’un appel système par le processus lui-
même,
Gestion du terminal
• clear effacement du terminal
• stty cette commande permet entre autres de définir les séquences de
touches correspondant à certains signaux.
5.2. CLASSES DE PROCESSUS 99
Commande stty
$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D;
eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread
-clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip
-inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel opost
-olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh
-xcase -tostop -echoprt
100 CHAPITRE 5. LES PROCESSUS
Table des matières
101
102 TABLE DES MATIÈRES
Assignation de valeur . . . . . . . . . . . . . . . . . . . . . . . . . 13
Arithmétique entière . . . . . . . . . . . . . . . . . . . . . . . . . 30
Incrément, décrément . . . . . . . . . . . . . . . . . . . . . . . . 30
Décalage d’arguments . . . . . . . . . . . . . . . . . . . . . . . . 30
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Exemple, suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Exemple, suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Variables de position . . . . . . . . . . . . . . . . . . . . . . . . . 33
Autres notations liées aux paramètres . . . . . . . . . . . . . . . 33
Substitutions conditionnelles :- . . . . . . . . . . . . . . . . . . . 33
Autres substitutions conditionnelles . . . . . . . . . . . . . . . . 34
Expressions conditionnelles sur chaı̂nes . . . . . . . . . . . . . . . 34
Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Syntaxes alternatives pour calculs . . . . . . . . . . . . . . . . . . 35
Syntaxes alternatives pour calculs . . . . . . . . . . . . . . . . . . 35
Classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3 Compléments sur l’environnement . . . . . . . . . . . . . . . . . 36
Variables d’Environnement . . . . . . . . . . . . . . . . . . . . . 36
Variables locales et d’environnement . . . . . . . . . . . . . . . . 36
Exportation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Manipulation de variables . . . . . . . . . . . . . . . . . . . . . . 37
Initialisation de l’Environnement . . . . . . . . . . . . . . . . . . 37
Initialisation de l’Environnement . . . . . . . . . . . . . . . . . . 38
Définition de synonymes . . . . . . . . . . . . . . . . . . . . . . . 38
Fichier d’alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Le répertoire utilisateur . . . . . . . . . . . . . . . . . . . . . . . 39
Chemin de recherche des commandes . . . . . . . . . . . . . . . . 39
Recherche de commande . . . . . . . . . . . . . . . . . . . . . . . 39
Modifier le chemin de recherche . . . . . . . . . . . . . . . . . . . 40
Exemple de .profile . . . . . . . . . . . . . . . . . . . . . . . . 40
Répertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Référençage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Organisation des intra-arborescences . . . . . . . . . . . . . . . . 62
Montage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
La commande mount . . . . . . . . . . . . . . . . . . . . . . . . . 63
Montage NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2 Les références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Fichiers accessibles et chemins d’accès . . . . . . . . . . . . . . . 63
Références absolues d’un fichier . . . . . . . . . . . . . . . . . . . 63
Répertoires de travail . . . . . . . . . . . . . . . . . . . . . . . . 64
Références relatives . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Références relatives . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Les liens .. et . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Répertoires (presque) vides . . . . . . . . . . . . . . . . . . . . . 65
Répertoire privé . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3 Les différents types de fichiers . . . . . . . . . . . . . . . . . . . . 66
Les fichiers ordinaires ou réguliers . . . . . . . . . . . . . . . . . . 66
Les répertoires usuels . . . . . . . . . . . . . . . . . . . . . . . . . 66
Répertoire /bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Les répertoires usuels . . . . . . . . . . . . . . . . . . . . . . . . . 67
Répertoire /etc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Les fichiers spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . 67
Modes de fichiers spéciaux . . . . . . . . . . . . . . . . . . . . . . 68
Autres types de fichiers . . . . . . . . . . . . . . . . . . . . . . . 68
Structure des nœuds d’index . . . . . . . . . . . . . . . . . . . . 68
4.4 Les droits d’accès aux fichiers . . . . . . . . . . . . . . . . . . . . 69
Les groupes d’utilisateurs . . . . . . . . . . . . . . . . . . . . . . 69
Catégories d’utilisateurs d’un fichier . . . . . . . . . . . . . . . . 69
Les types d’opérations . . . . . . . . . . . . . . . . . . . . . . . . 69
Indicateurs de mode d’un fichier . . . . . . . . . . . . . . . . . . 70
Indicateurs de mode d’un répertoire . . . . . . . . . . . . . . . . 70
Mode x pour des répertoires . . . . . . . . . . . . . . . . . . . . . 70
Répertoires en mode x . . . . . . . . . . . . . . . . . . . . . . . . 70
Modes r et w des répertoires . . . . . . . . . . . . . . . . . . . . . 71
Répertoires en mode rw . . . . . . . . . . . . . . . . . . . . . . . 71
Répertoires et modes . . . . . . . . . . . . . . . . . . . . . . . . . 71
Répertoires en mode wx . . . . . . . . . . . . . . . . . . . . . . . 72
Répertoires en mode rx . . . . . . . . . . . . . . . . . . . . . . . 72
Le cas des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Expressions conditionnelles sur fichiers . . . . . . . . . . . . . . . 73
Le super-utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Propriétaire d’un fichier . . . . . . . . . . . . . . . . . . . . . . . 74
La commande su . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Changer les attributs d’un i-nœud . . . . . . . . . . . . . . . . . 74
chmod en détail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
106 TABLE DES MATIÈRES
5 Les processus 85
5.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Concept de processus . . . . . . . . . . . . . . . . . . . . . . . . . 85
Constitution d’un processus . . . . . . . . . . . . . . . . . . . . . 85
Bloc de contrôle du processus . . . . . . . . . . . . . . . . . . . . 86
Ordonnanceur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Caractéristiques d’un processus . . . . . . . . . . . . . . . . . . . 86
La commande top . . . . . . . . . . . . . . . . . . . . . . . . . . 87
La commande ps . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
La commande ps . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
La commande ps . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
La commande ps -u . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Commande ps -l . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
TABLE DES MATIÈRES 107