Vous êtes sur la page 1sur 30

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail

Support du cycle de perfectionnement

Le Système d'exploitation Linux:


Poste de Travail & SHELL

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 3/59 - Support de Formation Linux & SHELL - 4/59 -

Arborescence

Comme dans tous les autres systèmes d'exploitation, les données sont organisées en
I. Système de fichiers sous Unix fichiers eux-mêmes organisés en répertoires (et sous-répertoires) sur les éléments de
sauvegarde. L'architecture du système de fichiers est sous la forme d'un arbre dont le
répertoire noté / est la racine. Tous les autres répertoires en sont les noeuds et les
fichiers les feuilles. Un système de fichier est donc un arbre n-aire.
1. Arborescence
2. Noms de fichiers
3. Chemin d'un fichier
a. Répertoire parent
b. Répertoire courant Noms de fichiers
c. Chemin absolu
d. Chemin relatif Sous Unix (et contrairement au Dos), tous les caractères alphanumériques plus la
4. Types de fichiers ponctuation sont des caractères valides. De plus il n'existe pas de notion d'extention de
a. Exécutable fichier. Cela fait du caractère . (point) un caractère comme un autre qui peut apparaître
b. Répertoire plus d'une fois dans un nom de fichier. Par contre l'espace est considéré comme un
c. Lien (ln) séparateur à proscire dans le nommage des fichiers. Le système Unix n'accepte pas les
i. Symbolique caractères accentués et distingue les minuscules des majuscules.
ii. Physique
d. Fichier Exemples :
e. Fichier caché
5. Navigation (cd)
• MonProg.c et monprog.c ne représentent pas les mêmes fichiers
6. Commandes sur le système de fichiers
• a.b... est un nom de fichier valide sous Unix
7. Lister les fichiers (ls)
• tp6-31/03/2001.c est valide
8. Méta-caractères
• _Z_ l'est aussi

Alors que sous Dos, les fichiers sont au format 8.3 c'est-à-dire que les fichiers portent un
nom de 8 caractères et une extention de 3 caractères séparés par un point (.), le
système Unix autorise tout comme Windows95 des noms de fichiers long (256 caractères
environ).

Les caractères invalides sous Dos (;+=[]',"*\<>/?:|.) sont acceptés par Unix.

Exemple : logo.cyber+zoide.jpeg est accepté par Unix mais refusé par Dos.

Chemin d'un fichier


Tous ces éléments sont hérarchisés les uns par rapport aux autres. Cette contrainte est
représentée par la notion de chemin d'un fichier. En effet, un fichier est localisable sans

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 5/59 - Support de Formation Linux & SHELL - 6/59 -

ambiguité (de façon exacte et unique) par son chemin. Ce dernier représente la Un répertoire peut ne contenir aucun fichier. Mais en revanche, un répertoire
succession des répertoires à parcourir pour accéder au fichier (navigation dans l'arbre). contient toujours un répertoire parent .. et un répertoire courant . .
Les répertoires sont séparés par un slash noté / dans l'écriture du chemin (attention,
c'est le même symbole qui représente la racine).
Les liens (ln)
Répertoire parent Les liens sont des fichiers assez spéciaux puisqu'il permettent d'associer plusieurs
noms à un seul et même fichier. Pour créer un lien, utiliser la commande ln.
Le répertoire parent est celui hiérarchiquement immédiatement supérieure à celui
courant. Il est noté deux points .. L'utilité des liens est évidente puisqu'ils permettent à partir d'un seul fichier
physiquement présent sur l'espace disque, d'avoir plusieurs références de noms
Répertoire courant différents et localisées en des lieux différents d'un même fichier qu'il n'est plus
besoin de copier. Lorsque le fichier pointé est volumineux, l'emploi des liens est
donc très avantageux.
On appelle répertoire courant celui dans lequel on se trouve à un instant donné
durant la navigation dans le système de fichiers. Il est noté point .
Les liens peuvent êtres de deux types :

Chemin absolu Lien symbolique


Le chemin absolu désigne la succession des répertoires à parcourir depuis la
Un lien symbolique est un simple pointeur vers un autre fichier bien réel.
racine pour accéder au fichier spécifié.

La commande ln -s permet de créer un lien symbolique sur un fichier. Ce


Exemple : /home/h-etie00/tpC/tp3.c pour accéder au fichier tp3.c du système de
lien sera présent sous la forme d'un fichier dont le nom sera affiché après
fichier ou qu'on se trouve dans le système (représenté dans le schéma plus-haut).
le symbole @.

Chemin relatif Syntaxe : ln -s nom-du-fichier-à-pointer nom-du-lien-symbolique

Le chemin relatif désigne la succession des répertoires à parcourir depuis le Lien physique
réperoire courant pour accéder au fichier spécifié.
Un lien physique sur un fichier est un fichier qui occupe exactement le
Exemple: ../monprog.c pour accéder au fichier monprog.c lorsqu'on se trouve même espace disque que le fichier vers lequel il pointe.
dans le répertoire tpC. La présence du répertoire parent dans ce chemin relatif
permet de remonter dans l'arbre.
Ainsi les deux fichiers : le lien et le fichier pointé sont physiquement les
mêmes bien que virtuellement (pour le système de fichiers) ils portent des
noms différents et puissent être localisés dans des répertoires différents.

Types de fichiers Syntaxe : ln nom-du-fichier-à-pointer nom-du-lien-symbolique

Sous Unix, les fichiers peuvent être de 5 types différents : Vous aurez remarquer ici l'absence de l'attribut -s réservé aux liens
symboliques.

Exécutable
Les fichiers exécutables correspondent à des programmes (écrits en langage C Fichier
généralement). Il n'est pas conseillé de tenter de les éditer à l'aide d'un éditeur Un fichier est de type fichier lorsqu'il est "tout à fait normal", qu'il n'a rien de
de texte traditionnel : il n'apparaîtra que des caractères bizarres et particulier ; c'est-à-dire lorsqu'il n'est ni un exécutable, ni un répertoire et ni un l
incomprehensibles. Seules les chaînes de caractères stockées en constantes dans lien.
l'exécutable seront visibles. Mais en général la taille d'un exécutable devrait vous
Fichier caché
Répertoire Les fichiers et répertoires cachés se distinguent des autres par la seule présence
d'un point (.) en première position dans leur nom. La commande de listage des
Les répertoires, nous l'avons vu plus haut, sont des ensembles de fichiers et de fichiers ne les affichera pas par defaut.
répertoires.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 7/59 - Support de Formation Linux & SHELL - 8/59 -

Lister les fichiers (ls)


Navigation (cd)
Une commande essentielle de tout système d'exploitation est le listage des fichiers et
La commande unix de navigation dans le système de fichier est : cd pour Change sous-répertoires du répertoire courant.
Directory.
L'équivalent sous Unix de la commande dir du Dos est ls.

Exemple Description Syntaxe : ls


Se déplace vers le répertoire courant c'est-à-dire ne change pas
cd . Exemple :
de place!

cd .. Va dans le réperoire parent. $ ls


amoi.c montage.jpg tp3.c
cd / Saute vers le réperoire racine, à la base de tout le système.
lettre.doc tp1.c zizitop.mp3
cd /home Se déplace vers le répertoire home fils de la racine. monprog.c tp2.c

Parcours l'arbre jusqu'au répertoire h-etie00 en passant par la Cette commande accepte les méta-caractères afin de n'afficher que les fichiers qui
cd /home/h-etie00
racine, puis par home. répondent à certaines contraintes lexicographique.
cd ../Mail Remonte l'arbre d'un cran, puis va dans le répertoire Mail
Syntaxe : ls expression-régulière
cd ../.. Remonte de deux crans.
Exemple :

$ ls *.c
Commandes sur le système de fichiers amoi.c tp1.c tp3.c
monprog.c tp2.c

Commande Description On peut afficher toutes les informations relatives à un fichier : type, droits, numéro
d'inode, nom, UID, GID, taille, date et heure de création... avec l'attribut -l.
rm Supprime un fichier ou un répertoire.

mv Déplace ou renomme un fichier ou un réperoire. Syntaxe : ls -l

mkdir Crée un réperoire. Exemple :


rmdir Supprime un répertoire.
$ ls -l
cp Copie un fichier ou un répertoire. -rwxr--r-- 1 root univ 106 Apr 10 15:09 amoi.c
drwxr-xr-x 1 root univ 1024 Jan 5 20:54 DATA
-rwx------ 1 root univ 5160 Feb 23 09:22 lettre.doc
pwd Affiche le chemin du répertoire courant. lrwxrwxrwx 1 root univ 3 Jan 24 12:16 tp -> TpK

cd Se déplace dans le système de fichier.


Pour afficher les fichiers cachés, utiliser l'attribut -a (all). Très pratique pour lister les
ls Affiche la liste des fichiers et répertoires. fichiers de configuration.

ln Crée un lien vers un fichier. Syntaxe : ls -a

Aux commandes sur les fichiers (rm, mv, cp) vous pouvez spécifier plusieurs arguments Exemple :
et utiliser les méta-caractères.
$ ls -a
.bash lettre.doc tp2.c
.netscape monprog.c tp3.c
.profile montage.jpg zizitop.mp3
amoi.c tp1.c

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 9/59 - Support de Formation Linux & SHELL - 10/59 -

Commande Description
ls Liste les fichiers par ordre aplabétique en colonnes.

ls -l Liste les fichiers en ligne avec toutes les informations connexes.

ls -a Liste en plus les fichiers cachés.

ls -m Sépare les fichiers par une virgule.

ls -t Tri par date.


II. Manipulation de fichiers
ls -lu Tri par date de dernier accès et affiche cette date.

Affiche les types de fichiers i.e. en rajoutant le symbôle correspondant


ls -F
: / (répertoire), * (exécutable), @ (lien). 1. Afficher
a. Afficher le contenu d'un fichier (cat)
ls -S Tri par ordre de taille décroissante. b. Affichage inverse (tac)
ls -X Tri par type d'extention. c. Afficher l'entête (head)
d. Afficher la fin (tail)
ls -r Tri inverse. e. Afficher écran par écran (more et less)
f. Numérotation des lignes (nl)
g. Affichage sans doublon (uniq)
h. Affichage avec tri (sort)
Méta-caractères 2. Découper (split)
3. Différences (diff)
4. Statistiques (wc)
Les méta-caractères * (astérisque) et ? (point d'interrogation) sont très utiles lors de la
5. Type de fichier (file)
manipulation de fichiers en groupe. Le méta-caractère * remplace dans l'expression dans
6. Création de fichier (touch)
laquelle il apparait, zéro, un ou plusieurs autre(s) caractère(s). Quand à ?, il remplace un
et un seul caractère. 7. Calcul d'un condensat (md5sum)
a. Présentation
b. A quoi ça sert ?
Par exemple, la commande rm * -r supprime tous les fichiers de tous les réperoires inclus
c. Exemples
dans celui courant. A utiliser avec parcimonie!
8. Recherche de fichiers (find)
a. Introduction
Alors que mv tp*.c tpC déplace dans le répertoire tpC tous les fichiers ayant n'importe b. Liste des critères de recherche
quoi entre tp et .c. c. Combinatoire des tests
9. Combinatoire des commandes précédentes
Mais si on écrit mv tp??.c tpC , on déplace les fichiers contenant exactement deux
caractères entre tp et .c.

Afficher

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


DIRECTION RECHERCHE ET INGENIERIE DE FORMATION
SECTEUR NTIC
SECTEUR NTIC
Support de Formation Linux & SHELL - 11/59 - Support de Formation Linux & SHELL - 12/59 -

Sous Unix, il existe de nombreuses commandes spécialisées qui permettent d'afficher sur La commande tac est homologue à cat mais affiche le contenu d'un fichier en
la sortie standard le contenu d'un fichier. partant de la dernière ligne vers la première.

Par combinaison de ces commandes au sein de tubes, on peut former des commandes Afficher l'entête (head)
complexes très utiles.
La commande head permet de n'afficher que les permières lignes d'un fichier (10
Afficher le contenu d'un fichier (cat) par défaut). En voici les options :
- cN affiche les N premiers octets
La commande cat permet d'afficher sur la sortie standard l'entier contenu d'un - nN affiche les N premières lignes
fichier. En voici les options : - q n'affiche pas le nom du fichier
- v (Verbose) permet de convertir les caractères spéciaux des fichiers binaires en - v affiche le nom du fichier avant d'en afficher l'entête.
caractères affichables
- n (Number) numérote les lignes Syntaxe : head fichier
- b (number nonBlank) numérote que les lignes non vides
- E (show Ends) affiche le symbôle $ (dollard) à la fin de chaque ligne Exemple : head lettre.tex
- s (Squeeze blank) n'affiche au plus un ligne vide
- T (show Tab) affiche les caractères tabulations comme ^I Dans cet exemple, il s'affiche les 10 premières lignes du fichier lettre.tex, si ce
- A (show All) équivalent à -vET dernier en contient moins de 10, il sera affiché dans sa totalité.
- e équivalent à -vE
- t équivalent à -vT.
Exemple : head -n5 lettre.tex

Syntaxe : cat fichier


Affichage des 5 premières lignes.
Exemple : cat lettre.tex
L'exemple précédent affiche à l'écran le contenu du fichier lettre.tex. Si le fichier
avait été binaire, l'affichage des caractères spéciaux aurait provoqué un grave Exemple : head -vc20 lettre.tex
disfonctionnement du terminal d'affichage.
Exemple : cat -v /bin/ls Affichage des 20 permiers caractères après le nom du fichier.
L'ajout de l'option v permet de transformer les caractères de contrôle en
caractères affichables à l'écran. Ceci est très utile pour rechercher des chaînes de Afficher la fin (tail)
caractères à l'intérieur d'un programme.
La commande tail permet de n'afficher que les dernières lignes d'un fichier (10 par
A l'origine, cat permet de concaténer des fichiers et d'en renvoyer le résultat sur défaut). Elle est homologue à head et possède les mêmes attributs.
la sortie standard.
Syntaxe : tail fichier
Syntaxe : cat fichier_1 fichier_2 fichier_3
Exemple : tail lettre.tex
Exemple : cat lettre.txt rapport.txt conclusion.txt
Dans cet exemple, il s'affiche les 10 dernières lignes du fichier lettre.tex, si ce
L'exemple précédent affiche à l'écran le contenu des fichiers lettre.txt, rapport.txt dernier en contient moins de 10, il sera affiché dans sa totalité.
et conclusion.txt.
Exemple : tail -n5 lettre.tex
Au lieu d'afficher sur la sortie standard le résultat de cette concaténation, on peut
la rediriger vers un fichier. Affichage des 5 dernières lignes.

Syntaxe : cat fichier_1 fichier_2 fichier_3 > fichier_4 Exemple : tail -vc20 lettre.tex

Exemple : cat lettre.txt rapport.txt conclusion.txt > publication.txt Affichage des 20 derniers caractères après le nom du fichier.

Ainsi le fichier publication.txt aura pour contenu la concaténation des fichiers


lettre.txt, rapport.txt et conclusion.txt.

Affichage inverse (tac) Afficher écran par écran (more et less)

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 13/59 - Support de Formation Linux & SHELL - 14/59 -

Les commandes more et less permettent d'afficher page par page des fichiers Syntaxe : sort fichier
volumineux sur la sortie stantard.
Exemple : sort -bdf essai.txt
Pour passer à la page suivante : les touches fléchées. Pour effectuer un
défilement vertical : touche ENTREE. Pour quitter : touche q. Cet exemple permet de trier les lignes du fichier essai.txt dans l'ordre
alphabétique (d) sans tenir compte des espaces de début de ligne (b) et sans
Numérotation des lignes (nl) différencier majuscules et minucules (f).

La commande nl permet l'affichage du contenu d'un fichier et en numérote les Découpage (split)
lignes. En voici les options :
- bt numérote les lignes non-vides (par défaut) La commande split permet de découper un fichier en plusieurs plus petits. Ses
- ba numérote toutes les lignes options sont :
- bpXXX numérote seulement les lignes qui contiennent la chaîne de caractères - b n (Bytes) découpage par blocs de n octets
XXX ou
- sX supprime le décalage du à la numérotation et utilise le séparateur X - l n (Lignes) découpage par blocs de n lignes
- s'XXX' supprime le décalage du à la numérotation et utilise la chaîne 'XXX'
Syntaxe : split fichier
Syntaxe : nl fichier
Exemple : split -b 135000 vacances.mpeg
Exemple : nl lettre.tex
Ici on découpe le fichier vacances.mpeg qui est une vidéo volumineuse en fichiers
Affiche le contenu du fichier lettre.tex en insérant le numéro de chaque ligne en de 1.35 Mo afin de la sauvegarder sur disquettes (de capacité maximum de 1.44
début de ligne avec un espace comme séparateur entre le numéro et le premier Mo).
caractère de chaque ligne. Ne numérote que les lignes non vides. Les lignes vides
sont affichées. Par défaut, les fichiers issus de la découpe auront un nom ayant pour préfixe x et
pour suffixe une suite de lettre du type aa, ab,ac... créés dans l'ordre
Exemple : nl -ba lettre.tex lexicographique naturel (descendant de 'a' vers 'z').
Pour changer le préfixe, il suffit de le spécifier en fin de commande.
Numérote et affiche toutes les lignes du fichier.
Synonyme de cat -n lettre.tex. Affichage sans doublon (uniq) Exemple : wc -l 100 /var/log/httpd/access.log access.log.

La commande uniq permet d'afficher le contenu d'un fichier ligne par ligne en Ici on découpe le fichier de log du serveur HTTP en plus petits fichiers de 100
ométant les doublons. En voici les options : lignes chacun. Dont le nom sera du type access.log.aaa, access.log.aab...
- u affichage sans doublon (par défaut)
- d affichage des doublons Note : pour découper des fichiers texte brut, faire la découpe en nombre de
- c comptage des doublons lignes. Tandis que pour découper les fichiers binaires, utiliser la découpe en
nombre d'octets.
Syntaxe : uniq fichier
Etude d'un cas d'école : on dispose du fichier cours_de_c.pdf qu'on souhaite
Exemple : uniq lettre.tex sauvegarder sur disquette. Or la commande ls (voir Système de fichiers sous Unix
> Lister les fichiers) nous apprend qu'il fait 5.7 Mo, ce qui est trop grand pour le
Affiche le contenu du fichier lettre.tex sur la sortie standard en ométant les copier directement sur disquette.
duplications de lignes lorsqu'elles sont contigues. On va dont le compresser avec l'utilitaire gzip (voir Compression > Le
compresseur gzip) afin d'en réduire la taille. Le fichier résultant cours_de_c.pdf.gz
Affichage avec tri (sort) fait tout de même 2.8 Mo, ce qui reste encore trop.
On va donc utiliser notre recours ultime : le saucissonage de notre fichier en
plusieurs plus petits de taille 1.3 Mo pour être sûr qu'ils rentreront dans les
La commande sort permet de trier les lignes d'un fichier. En voici les options : disquettes dont on dispose.
- b ignore les espaces en début de ligne
- d ordre alphabétique (A-Z, a-z, 0-9, espace) (par défaut)
Commande : split -b 130000 cours_de_c.pdf.gz cours_de_c.pdf.gz.
- f ignore la casse
- n ordre numérique
- r inverse l'odre de tri. Ce qui nous crée les fichiers suivants :

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 15/59 - Support de Formation Linux & SHELL - 16/59 -

cours_de_c.pdf.gz.aa (1.3 Mo) Syntaxe : wc fichier


cours_de_c.pdf.gz.ab (1.3 Mo)
cours_de_c.pdf.gz.ac (200 Ko) Exemple : wc mail.txt
que l'on va copier chacun dans une disquette.
Sans options, wc renvoie atomatiquement le nombre de de lignes (l), de mots (w)
Pour retrouver le fichier de départ, on concatène et on décompresse. et de caractères (c).

Commandes : Exemple : wc -lL mail.txt


cat cours_de_c.pdf.gz.* > cours_de_c.pdf.gz
gunzip cours_de_c.pdf.gz Renvoie le nombre de lignes (l) et la taille maximale d'une ligne (L).
acroread cours_de_c.pdf
Exemple :
Différences (diff)
$ wc mail.txt
La commande diff permet de comparer le contenu de deux fichiers pour en 12 108 671 mail.txt
conaître les différences. Ceci est très pratique pour savoir si deux fichiers ont le
même contenu. En voici quelques options : Dans l'exemple précédent, le fichier mail.txt comporte 12 lignes, 108 mots et 671
- b ignore les différences du à des espaces blancs caractères.
- B ignore les différences du à des lignes blanches
- i ignore les différences minuscules/MAJUSCULES
- q indiquer seulement si les fichiers sont différents et ne pas afficher les
différences elles-mêmes
- s indiquer lorsque deux fichiers sont identiques Type de fichier (file)
- r comparaison récursive des fichiers d'un répertoire, sous répertoires...
La commande file permet de connaître le type d'un fichier.
Syntaxe : diff [options] fichier_1 fichier_2
Syntaxe : file fichier
Exemple :
$ split .signature .signature.old Cette commande retourne le type d'un fichier passé en paramètre. Pour opérer, elle fait
3a4 appel à un fichier qui contient les signatures binaires d'un grand nombre de fichier.
> .signature.old
Elle est par exemple capable de fournir les caractéristiques du système qui a compilé un
Ici on peut voir qu'il y a une différence entre les ligne 3 et 4 dans le fichier fichier exécutable parmis plusieurs centaines.
.signature.old où i ly a une ligne insérée. S'ils avaient été égaux, diff n'aurait rien
affiché. Exemple :

Exemple : $ file ../*


$ split -q .signature .signature.old ../DATA: directory
Files .signature and .signature.old differ ../cv.doc: Microsoft Word document
../tp6.c: program text C++
Exemple : ../mail.txt: international ascii text
$ split -q .signature .signature
Files .signature and .signature are identical Dans l'exemple précédent, on souhaite connaître le type de tous les fichiers du répertoire
parent.
Statistiques (wc)
La précision de la commande dépend du fichier magic qu'elle appelle.
La commande wc permet de compter le nombre de caractères, de mots et de
lignes d'un fichier. Ses options sont :
- l (Lignes) compte le nombre de lignes
- w (Words) compte le nombre de mots
- c (Chars) compte le nombre de caractères Création d'un fichier (touch)
- L (Length max ligne) affiche la longueur de la ligne la plus longue
La commande touch permet de créer un nouveau fichier vide.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 17/59 - Support de Formation Linux & SHELL - 18/59 -

Syntaxe : touch fichier dans un fichier.

Appliquée à un fichier déjà existant, elle modifie son heure de dernier accès et met cette Syntaxe : md5sum -c condensat fichier
dernière à l'heure courante par défaut.
Exemple : md5sum -c upload.zip.md5 upload.zip

En cas d'erreur, il s'affiche : md5sum: MD5 check failed for 'upload.zip'.


Calcul d'un condensat (md5sum)
Exemple :
$ md5sum -c upload.md5 -v
Présentation upload.zip FAILED
md5sum: 1 of 1 file(s) failed MD5 check
Un condensat est une somme de vérification permettant de s'assurer de l'intégrité
des données. Un condensat est calculé à partir d'une fonction de hachage. Ici la
fonction utilisée implémente l'algorithme MD5.

Recherche de fichiers (find)


A quoi ça sert ?
La commande find est ultra puissante, elle permet de faire une recherche sur le système
Lorsque l'on transmet des messages ou des fichiers par mail, ftp ou http ; il est de fichier et d'afficher la liste des fichiers satisfaisant à une combinaison de critères très
utile de savoir si le fichier reçu à destination n'a pas subit d'altération pendant son variés.
transfert (erreur de transmission, piratage...). Pour cela on transmet en plus du
fichier un condensat.
L'émeteur E calcule le condensat C du fichier F et envoie le tout au récepteur R. Introduction
Le récepteur R calcule le condensat K du fichier F et le compare à C. Si C=K alors
tout va bien, sinon cela signifie que le fichier F a subit des modification durant son Syntaxe : find répertoire critères [-print]
transfert. Et R va demander à E de le lui renvoyer.
Exemple : find . -name "*.c" -print
Exemples
L'exemple précédent lance la recherche depuis le répertoire courant (.) et affiche
La fonction md5sum calcul le condensat d'un fichier selon l'algorithme MD5. En le résultat de la recherche (print). Le critère de recherche porte sur le nom
voici les options : (name) et doit satisfaire le motif (expression régulière) suivant : "*.c" c'est-à-dire
- b voit le fichier en binaire et pas en texte brut tous les fichiers d'extention .c (autrement dit les programmes sources écris en
- v mode verbeux langage C).
- c fichier compare le condensat avec celui enregistré dans le fichier
Exemple : find . -mtime +7 -print
Syntaxe : md5sum [options] fichier
Cet exemple recherche et affiche (print) les fichiers dont la date de dernière
Exemple : modification (mtime : Modify Time) remonte à plus de 7 jours (+7).
$ md5sum upload.zip
607cdbaeef8f20be5dcb428f007c9696 upload.zip On aurait pu spécifier mtime -5 pour les fichiers dont la date de dernière
modification date au plus de 5 jours. Ou encore mtime 10 pour les fichiers
La commande md5sum affiche le condensat modifiés exactement il y a 10 jours.
(607cdbaeef8f20be5dcb428f007c9696) et le nom du fichier (upload.zip).
Liste des critères de recherche
Pour transmettre ce condensat, on fait une redirection de l'affichage vers un
fichier. Le tableau suivant récapitule les principales options de la commande find.
Chacune de ces options (sauf la première print) sont des critères de recherche qui
Syntaxe : md5sum fichier > condensat renvoient un bouléen vrai si le critère est satisfait, faux sinon. Si exactement tous
les critères sont satisfaits, alors le fichier est considéré comme « trouvé » et est
Exemple : md5sum upload.zip > upload.zip.md5 passé en paramètre à l'option print (si celle-ci est elle aussi spécifiée).

On va générer un nouveau condensat qu'on va comparer avec celui enregistré

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 19/59 - Support de Formation Linux & SHELL - 20/59 -

Option Description true renvoie toujours vrai

print affiche le résultat


Les options doivent êtres précédées d'un trait d'union (-) et leur paramètre
name motif nom du fichier éventuel séparé par un espace.

iname motif idem mais sans tenir compte de la casse Les paramètres numériques n peuvent être passé en valeur absolue (par exemple
7) ou bien en valeur relative (+2 ou -20).
mtime +n|-n|n nombre de jours depuis la date de dernière modification

ctime +n|-n|n nombre de jours depuis la date de création Combinatoire des tests
atime +n|-n|n nombre de jours depuis la date de dernier accès
Chacune des options du tableau précédent constitue un test. La commande find
mmin +n|-n|n nombre de minutes depuis la date de dernière modification offre une algèbre booléenne permettant de combiner à l'aide d'opérateurs les
tests souhaités afin de former une expression complexe.
cmim +n|-n|n nombre de minutes depuis la date de création

amin +n|-n|n nombre de minutes depuis la date de dernier accès Les opérateurs suivants sont présentés dans l'ordre de priorité décroissante.

type du fichier b (fichier spécial en mode bloc), c (fichier 1. ( expr )


type type special en mode caractère), d (répertoire), p (tube nommé), f force la priorité d'évaluation
(fichier normal), l (lien symbolique), s (socket) 2. ! expr
négation logique (devien vrai si était faux et inversement)
uid n le fichier porte le numéro de propriétaire spécifié 3. -not expr
idem
gid n idem pour numéro de groupe
4. expr_1 expr_2
le fichier est de taille spécifiée dont il faut préciser l'unité : b expr_2 est évaluée si expr_1 est vrai
size n 5. expr_1 -a expr_2
(bloc de 512 octets, par défaut), c (octet), k (Ko)
idem
used n nombre de jours entre la création et le dernier accès au fichier 6. expr_1 -and expr_2
idem
perm +n|-n|n valeur numérique des droits d'accès au fichier 7. expr_1 -o expr_2
user nom le propriétaire du fichier a pour nom celui passé en paramètre expr_2 n'est pas évaluée si expr_1 est vrai
8. expr_1 -or expr_2
group nom idem pour le groupe idem
9. expr_1, expr_2
inum n numéro d'inode du fichier expr_1 et expr_2 sont toujours évaluées mais la valeur booléenne de la
liste est celle de expr_2. La valeur de expr_1 est dont passée aux
links n nombre de liens du fichier oubliettes.
newer fichier le fichier est plus récent que celui passé en paramètre
Ainsi dans les exemples précédents, les critères étaient évalués de gauche à
on a accédé au fichier plus récemment qu'on a modifié celui droite tant que que le précédent renvoyait vrai.
anewer fichier
passé en paramètre
Exemple : find . -not -name ".c" -print
on a accédé au fichier plus récemment qu'on a créé celui passé
cnewer fichier
en paramètre
Cet exemple affiche sur la sortie standard la liste des fichiers qui ne portent pas
aucun utilisateur dans le système ne correspond au UID du l'extention ".c".
nouser
fichier

nogroup aucun groupe ne correspond au GID du fichier

empty
le fichier est vide et il est soit un fichier normal soit un Combinatoire des commandes précédentes
répertoire

false renvoie toujours faux Exemple :

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 21/59 - Support de Formation Linux & SHELL - 22/59 -

$ tac script.txt | nl | head -n5 | tail -n3 | tac


5 then if [ -f "/bin/$1" ]
4 then echo "Commande externe."
3 else echo "N'est pas une commande externe." III. Droits d'accès aux fichiers
Dans l'exemple précédent, on renvoie successivement le résultat des commandes aux
suivantes par l'intermédiaire des tubes (|). On lit à l'envers le fichier script.txt, on
1. Notion de droits (permissions)
numérote le résultat, on en prend que les 5 premières lignes. De ces 5 premières lignes,
2. Affichage des droits (ls)
en ne prend que les 3 dernières (c'est-à-dire en fin de compte les lignes 3 à 5). On
3. Droits d'accès
renverse une nouvelle fois le résultat!
a. Lecture
b. Ecriture
c. Exécution
4. Catégories d'utilisateurs
a. Propriétaire (UID)
b. Groupe (GID)
c. Autre
5. Modèle concentrique des droits d'accès
6. Identification des droits
a. Identification globale
b. Combinaisons des droits
7. Changement des droits (chmod)
a. Notation symbolique
b. Notation numérique
8. Remarques importantes
a. Exécutable
b. Répertoire
c. Fichier
9. Masque de protection des fichiers (umask)
a. Manipulation
b. Remarque
10. Droits étendus
a. SUID
i. Définition
ii. Exemple
iii. Manipulation
 Notation symbolique
 Notation numérique
b. SGID
i. Exécutable
ii. Répertoire
iii. Manipulation
 Notation symbolique
 Notation numérique
c. Sticky bit

Notion de droits
Les droits d'accès aux fichiers (appelés encore modes ou permissions) sont un point

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 23/59 - Support de Formation Linux & SHELL - 24/59 -

essentiel du système Unix. Ils permettent de définir des droits différents sur un même Lecture
fichier selon la catégorie d'utilisateurs.
L'accès en lecture autorise la lecture du fichier, c'est-à-dire qu'il est possible
Ainsi les manipulations de fichiers sont restreintes selon les droits alloués à chaque d'éditer ce fichier avec une application quelconque pour en voir le contenu. Cet
fichier. A chaque catégorie d'utilisateur correspond des droits spécifiques sur un fichier. accès est désigné par la lettre r (read).

Alloué à un répertoire, ce droit permet de lister les fichiers qu'il contient.

Affichage des droits (ls) Ecriture

Pour afficher à l'écran les droits alloués à un fichier, il faut utiliser la commande ls -l qui L'accès en écriture permet de modifier un fichier et de le supprimer. Il est désigné
permet de lister les fichiers d'un répertoire avec toutes les informations connexes par la lettre w (write).
possibles dont les droits du fichier.
Alloué à un répertoire, il autorise la modification et la suppression des fichiers qu'il
Exemple : contient quelques soient les droits d'accès des fichiers de ce répertoire (mêmes
ls -l s'ils ne possèdent pas eux-même le droit en écriture). Donc attention!
-rw-r--r-- cyberzoide univ astuces.txt
drwxr-xr-x cyberzoide univ data Exécution
-rw-r--r-- cyberzoide univ lettre.doc
-rw------- cyberzoide univ Mail
L'accès en exécution permet à un fichier exécutable d'être lancé et à un répertoire
d'être ouvert. Il est désigné par la lettre x (execute).
Ici n'ont été reproduites que les informations intéressantes affichées par la commande
(certaines ont été effacées). Sont affichés : la liste des droits puis le nom du propriétaire
de chaque fichier, le nom du groupe d'utilisateurs auquel appartient de propriétaire des Pour qu'un programme puisse être exécuté, il est indispensable que le droit en
fichier et enfin le nom du fichier. exécution sur ce fichier soit autorisé pour l'utilisateur qui souhaite le lancer.

En préfixe des droits (et ici en noir) est affiché le type du fichier (d pour les répertoires et Quant à un répertoire, il est tout aussi indispensable que son droit en exécution
- pour les fichiers normaux et les exécutables). soit autorisé pour qu'on puisse accèder aux fichiers qu'il contient.

On peut voir dans cet exemple que tous les fichiers sont du même propriétaire dont le Ce droit en exécution est sans effet lorsqu'il est affecté à un fichier qui n'est pas
nom est cyberzoide. Ce propriétaire daisant partie du groupe appelé univ. Vous un exécutable.
apprendrez par la suite la significations des lettres r, w et x.

Catégories d'utilisateurs
A un fichier on affecte les droits correspondants à trois catégories d'utilisateurs : les
droits du propriétaire du fichier, les permissions du groupe d'utilisateurs auquel
appartient le propriétaire et celles concédées à tous les autres.

Propriétaire

Le propriétaire d'un fichier est la personne qui le crée. Il est désigné par la lettre u
(owner).

Le UID désigne par un identificateur numérique unique le propriétaire d'un fichier.

Droits d'accès Groupe

Les droits d'accès d'un fichier sont au nombre de trois: Un groupe d'utilisateur est un ensemble d'utilisateurs privilégiés ayant en général
des permissions moindre que le propriétaire d'un fichier mais plus grandes que la

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 25/59 - Support de Formation Linux & SHELL - 26/59 -

catégorie qui suit. Cette catégorie est désignée par la lettre g (group).

Le GID désigne par un identificateur numérique unique le groupe auquel


appartient le propriétaire d'un fichier.

Autres

Cette catégorie regroupe tous les utilisateurs qui ne sont ni le propriétaire d'un
fichier ni faisant partir du même groupe que le propriétaire. On les désignent par
la lettre a (other).

A chaque catégorie d'utilisateur on associe un triplet de droits : lecture, écriture et


Modèle concentrique des droits d'accès exécution. Au total 9 droits (3*3) sont affectés à chaque fichier.

Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le droit
est refusé, on voit un tiret (-).

Dans l'exemple ci-contre, le propriétaire dispose des droits de lecture et


d'écriture. Tandit que le groupe ainsi que les autres ne disposent que du droit de
lecture.

Combinaisons des droits

A chacune des 3 catégories d'utilisateur, on associe d'une des 8 combinaisons


différentes possibles pour l'allocation des droits que le tableau ci-dessous
récapitule.
Le schéma ci-haut montre qu'un ensemble de propriétaires forme un groupe, qu'un
ensemble de groupes forme la catégorie "autres" (qui sont tous ceux qui prétendent à Triplet Droits correspondants
accéder aux données).
--- aucun
L'accès à un sous ensemble concentrique suppose a priori d'obtenir des droits
supplémentaires. --x exécution

-w- écriture

-wx écriture et exécution

r-- lecture

r-x lecture et exécution

rw- lecture et écriture

rwx lecture, écriture et exécution

Or les droits globaux d'un fichier sont identifiés par l'association de 3 triplets de
droits. Ce qui nous fait 83=512 combinaisons différentes. Le tableau suivant
regroupe quelques unes de ces combinaisons possibles.
Identification des droits
Droits Description
Identification globale

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 27/59 - Support de Formation Linux & SHELL - 28/59 -

globaux + ajouter

Le propriétaire a tous les droits, et le groupe ainsi que les autres - retirer
rwxr-xr-x
n'ont pas accès en écriture.
= définir
Le propriétaire a tous les droits, et le groupe ainsi que les autres
rwxr--r-- Droit Description
n'ont accès qu'en lecture.

Le propriétaire a tous les droits, le groupe possède les droits de r lecture


rwxr-x---
lecture et d'exécution alors que les autres n'ont aucun droit.
w écriture
rwx------ Le propriétaire a tous les droits mais le groupe et les autres aucun.
x exécution
Le propriétaire possède les droits de lecture, écriture mais pas
rw-r--r--
exécution. Et le groupe et les autres ont le droit en lecture.
Comme le montre le tableau ci-dessous, la commande chmod lorsqu'elle est
Le propriétaire et le groupe ont le droit en lecture et écriture mais utilisée en notation symbolique ne permet de modifier les droits que pour une
rw-rw---- catégorie d'utilisateurs à la fois.
les autres n'ont aucun droit.

On peut retirer, ajouter ou définir un ou plusieurs droits en même temps.

Changement des droits (chmod) Exemple Description


Il est offert au propriétaire d'un fichier (et seulement à lui seul) de modifier les droits du chmod g=rwx temps.txt Alloue au groupe tous les droits.
fichier. C'est-à-dire qu'il peut supprimer des droits ou bien en rajouter de nouveaux à
chacune des trois catégories d'utilisateur. chmod g-w temps.txt Retire au groupe le droit d'écriture.

chmod a-rwx temps.txt Retire aux autres tous les droits.


Pour cela, on utilise la commande chmod (change mode) selon la syntaxe suivante :
Alloue au propriétaire les droits en lecture et en
chmod u=rw temps.txt
chmod droits fichier. écriture.

chmod a+r temps.txt Rajoute aux autres le droit en lecture.


On peut utiliser cette commande de deux façons différentes pour les mêmes résultats.
On choisit soit la notation symbolique soit la notation numérique.
Notation numérique
Notation symbolique
L'avantage de la notation numérique sur la précédente est de permettre sur un
Pour affecter à chaque catégorie les droits voulus, on peut utiliser une notation fichier la définition absolue des droits de toutes les catégories en même temps
symbolique selon la syntaxe : selon la syntaxe :

chmod catégorie+opération+liste-des-droits fichier chmod serie-de-3-chiffres fichier

Où les termes catégorie, opération et liste des droits doivent êtres respectivement Ainsi on remplace chacun des triplets par un nombre compris entre 0 et 7. Ce qui
remplacés par leur notation décrite dans les tableaux suivants. nous fait un nombre à trois chiffres en guise de notation numérique.

Le tableau ci-après permet de faire la convertion entre les différentes triplets


Catégorie Description possibles et leur notation octale (nombre en base 8).
u propriétaire

g groupe Triplet Nombre binaire Nombre octal

a autres --- 000 0

--x 001 1
Opération Description

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 29/59 - Support de Formation Linux & SHELL - 30/59 -

Le masque de protection de fichier permet de définir les droits par défaut de tout fichier
-w- 010 2
créé.
-wx 011 3

r-- 100 4
Manipulation

r-x 101 5 Ce masque se comporte comme un filtre et utilise la notation numérique. On parle
de filtre car il ne contient pas la série des 3 chiffres octaux correspondants aux
rw- 110 6 droits à allouer aux fichiers, mais celle correspondant aux droits à ne pas allouer.
rwx 111 7
Le système Unix affecte à un fichier les droits globaux résultant de la soustraction
des droits maxima 777 par le masque de protection.
L'emploi de cette numérotion suppose de connaître ou de savoir retrouver
aisément le nombre octal associé à chaque triplet. Ce qui est assez simple, Exemple : si le masque de protection vaut 037 alors 740 (=777-037) seront les
puisque cette numérotation est la convertion en octal de la représentation binaire droits alloués à tout nouveau fichier.
du triplet. Considérez la présence d'un droit comme un booléen valant 1 et son
absence comme 0, vous obtenez alors un nombre binaire qu'il est aisé de La commande permettant de définir un nouveau masque de protection est umask.
convertir en octal (ce qui revient à du décimal car on ne passe pas aux dizaines
dans la base 8).
Syntaxe : umask droits

Exemple Droits globaux associés Exemple : umask 037

chmod 640 temps.txt rw-r----- 777 = rwx rwx rwx = 111 111 111
- 037 = --- -wx rwx = 000 011 111
chmod 700 temps.txt rwx------
= 740 = rwx r-- --- = 111 100 000
chmod 661 temps.txt rw-rw-r--
D'après cet exemple, tout nouveau fichier aura les droits 740 (rwxr-----) car le
chmod 761 temps.txt rwxrw-r-- masque de protection vaudra 037 (----wxrwx).
chmod 610 temps.txt rw-r-----
Pour connaître la valeur du masque de protection, tapez umask sans attribut.

Remarque
Remarques importantes
Lors de la création d'un fichier, même si le masque de protection spécifie le droit
Exécutable en exécution, ce dernier ne sera pas affecté au fichier nouvellement créé mais
seulement à un répertoire. Donc, si vous créez un fichier exécutable ou un script il
Un programme ne peut être exécuté que si le fichier exécutable coorespondant
faudra lui rajouter manuellement le droit en exécution.
possède le droit d'exécution dans la catégorie à laquelle appartient l'utilisateur.
Répertoire
On ne peut accèder à un fichier que si les répertoires successifs constitutifs du
chemin absolu de ce fichier possèdent le droit en exécution.
Pour pouvoir lister les fichiers d'un répertoire, ce dernier doit être accessible en Droits étendus
lecture.
Fichier SUID
Le droit en exécution n'a aucune incidence sur un fichier non exécutable.
Par contre, un script (c'est-à-dire un fichier texte contenant des commandes du
Shell) doit avoir les droits en lecture et en exécution pour pouvoir être interprété
Définition
et exécuté par le Shell.
Nous avons vu plus haut que chaque catégorie d'utlisateurs dispose de
droits différenciés sur les fichiers. Et seul le propriétaire d'un fichier a le
pouvoir de céder des droits à d'autres utilisateurs.
Masque de protection des fichiers (umask)
Lorsqu'un utilisateur lance un programme, ce programme s'approprie les

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 31/59 - Support de Formation Linux & SHELL - 32/59 -

droits de l'utilisateur pour la manipulation des fichiers et non pas ceux du Exemple : chmod 4755 monprog.
propriétaire du fichier (sinon quel souk!).
Dans cet exemple on donne les droits rwsr-xr-x au fichier monprog.
Mais il est quelque fois nécessaire de permettre à d'autres utilisateurs Ne pas oublier que le droit SUID s'affiche à la place du droit en
l'accès à des données normalement protégées. Ce droit SUID permet de exécution du propriétaire sans que ce dernier soit supprimé!
préter à un utilisateur de façon temporaire, des droits suplémentaires par
l'intermédiaire d'un programme (fichier exécutable). Nota : la présence du droit SUID suppose la présence du droit en
exécution qui permet de lancer le fichier exécutable.
En exécutant un programme possédant un droit SUID, un utilisateur
s'appropie les droits du propriétaire du fichier exécutable durant le temps SGID
d'exécution du programme. Ces droits supplémentaires ne sont valables
que sur les fichiers appelés par le programme et les opérations effectuées
par le programme et que durant le temps d'exécution du programme. Le droit SGID fonctionne différemment selon qu'il est affecté à un fichier
exécutable ou à un répertoire.
Son utilité vient du fait qu'il n'est pas besoin d'accorder durablement des
droits étendus à n'importe qui sur des fichiers sensibles. Puisque l'accès à Exécutable
ces fichiers est filtré par un programme qui est seul à prendre des
initiatives sur ces fichiers. Sur un fichier exécutable, le SGID est similaire au droit SUID vu
précédemment sauf qu'il donne à un utilisateur les droits du groupe auquel
Exemple appartient le propriétaire de l'exécutable et non plus les droits du
propriétaire.
L'exemple le plus flagrant est celui du programme /usr/bin/passwd (rws--
x--x) qui appartient à l'utilisateur root. Ce programme possède le droit s Répertoire
en lieu et place du droit en exécution du triplet du propriétaire. Ce
programme sert à modifier votre mot de passe personnel qui est stocké Tout fichier créé porte les droits du masque de protection de son
dans le fichier /etc/passwd (rw-r--r--) appartenant à root dont vous n'avez propriétaire. De plus, tout fichier porte un UID (identificateur de
pas les droits en écriture. propriétaire) et un GID (identificateur de groupe). C'est-à-dire qu'un fichier
est toujours identifié par le nom de son propriétaire ainsi que par le nom
Comment donc modifier votre mot de passe si vous n'êtes pas autorisé à du groupe auquel appartient le propriétaire.
écrire sur le fichier stockant les mots passes ?!! Pour des raisons de
sécurité évidentes, le root interdit à quiconque de pouvoir modifier ou Le droit SGID, lorsqu'il est affecté à un répertoire, casse cette logique.
supprimer ce fichier. Par contre le programme /usr/bin/passwd vous y Puisque tout nouveau fichier créé dans un répertoire marqué par le SGID
autorise grace au droit SUID : vous utilisez le droit en écriture du root sera de groupe non pas celui du propriétaire du fichier mais celui du
durant l'exécution du programme qui change votre mot de passe. propriétaire du répertoire.

Manipulation Ainsi, tout fichier créé dans un répertoire portant le SGID, héritera du
groupe du propriétaire du répertoire.
Pour ajouter un droit SUID à un programme, utiliser la commande chmod
de la même manière que vous procéderiez pour un droit normal. Manipulation

Notation symbolique La valeur numérique du droit SGID est 2000, il est symbolisé par la lettre s
et est affiché à la place du droit d'exécution du groupe.
Syntaxe : chmod u+s fichier-exécutable.
Notation symbolique
Exemple : chmod u+s data/hotprog.
Syntaxe : chmod g+s fichier-exécutable|répertoire.
Notation numérique
Exemple : chmod g+s data/.
La valeur numérique d'un SIUD est 4000 et s'ajoute à la valeur de
la série numérique globale. Notation numérique

Syntaxe : chmod 4+droits fichier-exécutable. Syntaxe : chmod 2+droits fichier-exécutable|répertoire.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 33/59 - Support de Formation Linux & SHELL - 34/59 -

Exemple : chmod 2755 monprog. 2. Gestion des utilisateurs


Quand un utilisateur se connecte, il fournit un nom de connexion (login name) et un mot de passe
Dans cet exemple on donne les droits rwxr-sr-x au fichier monprog.
(password). Si la connexion réussit, un shell est lancé et l'utilisateur se retrouve dans son répertoire de
Ne pas oublier que le droit GUID s'affiche à la place du droit en travail (working directory) qui est initialement son répertoire de connexion (login directory). Ces
exécution du groupe sans que ce dernier soit supprimé! informations sont placées dans les fichiers /etc/passwd et /etc/group.

Sticky Bit 2.1. /etc/passwd

Le droit Sticky Bit (appellé aussi bit collant) est alloué à la catégorie autres d'un Les utilisateurs sont définis au sein du fichier /etc/passwd. En voici sa structure :
répertoire.
user:passwd:UID:GID:commentaire:homedir:commande

Il permet d'interdire à tout utilisateur (sauf le root) de supprimer un fichier dont il Champs Contenu
n'est pas le propriétaire, quelque soient ses droits.
user nom de connexion (login) de cet utilisateur
Si le répertoire en question est accessible en écriture par n'importe quel
utilisateur (rwxrwxrwx), n'importe qui peut poser ce bit collant qui protège tous
mot de passe crypté. S'il est remplacé par une *, ou un x, son contenu est placée dans
les fichiers d'une suppression ou modification de la part d'un utilisateur autre que passwd
/etc/shadow. S'il est absent il n'y a pas de mot de passe. Si ! : compte verrouillé.
son propriétaire.
User Identification, numéro d'identification de l'utilisateur. L'utilisateur root à l'UID 0, les
Ce bit collant permet donc d'aller à l'encontre du droit en écriture d'un répertoire numéros inférieurs à 100 sont des utilisateurs spéciaux. Généralement un Unix peut gérer plus
dont héritent les fichiers du répertoire. UID de 60000 UID. Si l'affectation est généralement séquentielle, elle peut aussi être arbitraire.
Plusieurs logins peuvent être associés à un seul UID. Dans ce cas en fait il n'existe qu'un seul
utilisateur.
Sa valeur numérique est 1000 et est représenté symboliquement par t.
Group Identification, numéro du groupe d'appartenance de l'utilisateur. Les groupes
GID
Exemple : chmod 1755 tmp/. supplémentaires sont définis dans /etc/group

Exemple : chmod a+t tmp/. Commentaire


Zone libre, contenant généralement le nom et le prénom. Il faut éviter d'y placer de caractères
spéciaux et accentués.

Ce droit s'affiche en lieu et place du droit en exécution de la catégorie autres.


Répertoire de connexion, ou home directory / login directory. Si l'utilisateur est toto, le
homedir
répertoire est généralement /home/toto

Commande à exécuter lors de la connexion de l'utilisateur. C'est généralement le shell (/bin/sh,


commande
/bin/ksh, ...) mais aussi n'importe quelle autre commande.

2.2. /etc/group
Les groupes sont définis au sein du fichier /etc/group. Voici sa structure :

group:passwd:GID:liste_utilisateurs

Champs Contenu

group nom du groupe

mot de passe pour un utilisateur désirant changer de groupe sans en faire partie. Peu utilisé.
passwd
(commande newgrp)

GID Group Identification, numéro d'identification du groupe.

liste liste des utilisateurs du groupe. Pour utilisation avec la commande newgrp.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 35/59 - Support de Formation Linux & SHELL - 36/59 -

On crée un utilisateur le plus simplement avec


2.3. Commandes
useradd -m user
La commande passwd permet de changer le mot de passe, etdispose de plusieurs options. useradd -c "login de test" -d /home/logtest -s /bin/bash -g users -u 123-m logtest

• passwd nom_user : changement du mot de passe de l'utilisateur donné La commande usermod modifie ces valeurs (mêmes paramètres) mais permet aussi de verrouiller un compte :

• passwd -d nom_user : supprime le mot de passe


• -l login : modification du login
• passwd -l nom_user : verrouille le compte
• -L : lock password (verrouillage)
• passwd -f nom_user : force le changement de mot de passe à la prochaine connexion
• -U : unlock password (déverouillage
Les autres commandes sont :
La commande userdel supprime le compte, avec son répertoire personnel si -r.
• useradd :ajout d'un utilisateur (adduser parfois sous Linux)
userdel -r logtest
• usermod : modification d'un compte utilisateur
La commande chsh modifie le shell de login.
• userdel : supprime l'utilisateur (deluser parfois sous Linux)

• groupadd : ajout d'un groupe


• -s : spécifie le nouveau shell
• groupmod : modification d'un groupe • -l : donne la liste
• groupdel : supprime un groupe chsh -s /bin/sh logtest
• pwck : vérification de la cohérence de /etc/passwd
La commande groupadd crée un groupe :
• grpck : vérification de la cohérence de /etc/group

• finger : informations sur un utilisateur groupadd [-g GID] [-o] [-r] [-p password] group

• su : se connecter à un compte
• -g : précise le GID > 99
• id : connaître son identité
• -o : le GID n'est pas unique
• chsh (Linux) : changer de shell
• -r : GID système <= 99

On se reportera au manuel en ligne pour les options qui ne sont pas compliquées. • -p password déjà crypté
groupadd -g 123 grptest
Sous Linux, la syntaxe de useradd est la suivante :
La commande groupdel supprime le groupe.
useradd [-c comment] [-d homedir] [-g initial_group] [-G group2,group3,...] [-m] [-s shell] [-u UID] [-o] [-r]
[-e YYYY-MM-DD] [-f inactive_days]
groupdel grptest

• -c : saisie du commentaire. Un commentaire détaillé peut être inséré avec la commande chfn. La commande groupmod modifie le groupe, -n renomme le groupe.
• -d : le répertoire personnel
On peut changer de groupe (groupe secondaire) avec la commande newgrp :
• -g : le groupe de base

• -G : groupes supplémentaires pour utilisation avec la commande newgrp newgrp [-] groupe [-c commande]

• -m : recopie du /etc/skel dans le répertoire personnel.


6. Gestion des processus
• -s : le shell

• -u : choix d'un UID spécifique > 99 6.1. Signaux


• -o : l'UID n'est pas unique
Lorsqu'un utilisateur exécute une commande externe UNIX crée un processus qui exécute les instructions de
• -r : UID privilégié système <= 99 la commande. Un processus est identifié durant toute sa durée par un « PID » « Process IDentifier » et
passe par différents états : actif, prêt, en attente, ...
• -e : date d'expiration du login

• -f : délai avant verrouillage si mot de passe non changé Un PID est unique à un instant donné. Une fois le processus terminé, il peut être réattribué. Plusieurs instances
d'un même binaire peuvent être exécutées au même moment, chaque processus étant indépendant et
• -p : mot de passe déjà crypté avec crypt possédant son propre PID.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 37/59 - Support de Formation Linux & SHELL - 38/59 -

Un processus est créé par la primitive fork de l'API Unix. Cette primitive crée un clone du processus l'ayant
exécuté, un processus fils, puis celui-ci exécute un autre programme avec la commande exec. L'ensemble finit
6.3. Commandes de gestion de processus
par créer un arbre de processus.
6.3.1. Commandes externes
Le premier processus créé au démarrage du système se nomme init, et son PID est 1. Il est le père, l'ancêtre,
de tous les autres.
• ps : la commande ps -ef affiche tous les processus avec un grand nombre d'informations (PID UID,
PPID, ...)
Il existe quatre manières d'exécuter un processus :
• kill : contrairement à son nom, elle ne tue pas forcément mais envoie un signal à un ou des
processus.
• en avant-plan ou interactif (foreground) : c'est le mode par défaut, comme par exemple sous le shell.
Le shell (sh) est le père des commandes (ls, rm, ...) lancées depuis son invite de commande. Il attend • kill -l : liste des signaux
que le processus fils (la commande lancée) ait terminé pour rendre la main (apparition de l'invite de
commande) • kill -n PID : envoie le signal n au processus PID

• A l'arrière-plan (background) : lorsqu'on lance une commande suivie du signe « & ». Le shell va créer • kill -n 0 : envoie le signal à tous les processus du groupe du shell
le processus fils et rendre tout de suite la main sans attendre que le fils ait terminé son exécution.
• kill -n -1 : envoie le signal n à tous les processus donc l'UID réel est identique à l'UID effectif
• En mode détaché : le processus détaché n'a plus de terminal de contrôle. C'est le cas d'un processus du propriétaire du shell émetteur. Autrement dit, le signal est envoyé à tous les processus de
lancé par la commande nohup. Un « ? » apparaît dans la colonne TTY de la commande ps. l'utilisateur.

• Les démons (daemons) ou services : ce sont des processus détachés associés aux services du • kill -n -PID : envoie le signal n à tous les processus du groupe PID.
systèmes d'UNIX.
• su : permet de faire exécuter un processus avec une autre identité que la sienne, par défaut le shell :
su jean -c "id" : exécute id sous le login de jean.
Contrairement aux processus en avant-plan qui peuvent être arrêtés avec un CTRL+C , les processus détachés
ne peuvent être arrêtés qu'avec des signaux. Le signal 1 « HUP » indique à un démon de relire sa • fuser : informations sur les processus qui utilisent un périphérique ou le système de fichiers.
configuration. Le signal 15 « TERM » est utilisé pour dire à un démon de se terminer. Enfin le signal 9
« KILL » tue le processus brutalement et sans quel celui-ci puisse l'intercepter et réagir. C'est la dernière • at : exécution de commandes en différé
parade à utiliser avec modération, le système pouvant par la suite se trouver dans un état instable. Les
numéros de signaux ne sont pas standards, contrairement aux libellés qui pour un certain nombre, le sont. • crontab : exécution périodique de commandes

• env : affiche l'environnement d'un shell


Dans certains cas un processus et ses descendants forment un groupe de processus identifié par le PID du
premier processus père, le « leader ». Dans ce cas les signaux peuvent être envoyés à tous les membres du
groupe en même temps. 6.3.2. Commandes internes

Généralement, quand un processus crée un fils, il reste à l'écoute de sa terminaison, même s'il le lance en • & : exécute un processus en arrière-plan
arrière-plan. Quand le fils se termine (meurt) le signal « CHLD » est envoyé au père. Mais la programmation
autorise un processus à ne pas rester à l'écoute de certains signaux, notamment celui-ci. Si un processus se • wait : attend que les commandes exécutées en arrière-plan soit terminée pour poursuivre l'exécution
termine avant que son père se soit mis en attente de sa fin, ou qu'il n'attende pas sa fin, alors le système le du shell.
descripteur du processus au cas où le père le réclamerait. C'est ainsi que se forme un « zombie ». Il apparaît
avec un ps sous le nom « defunct ». Si le père meurt sans récupérer les signaux de ses fils, c'est init qui • exec : remplacement du code du shell par le code le la commande. Il n'y a pas de création de
récupère les fils. processus, le nouveau code se substituant à l'ancien. Si la commande réussit, il n'y a pas de retour au
shell, mais au login, après exécution de la commande.
Un « zombie » compte pour un processus, bien qu'il n'existe plus réellement. Ne pouvant être simplement • . script : c'est ici le point « . » qui nous intéresse : le script est exécuté par le shell courant et pas par
éliminés s'ils sont lancés par root par exemple, il est possible que dans certains cas leur nombre devienne tel un shell fils.
que le nombre maximum de processus autorisés est atteint, ce qui peut provoquer l'effondrement du
système, ou même un crash.
6.4. Exécution différée
6.2. L'environnement
Le démon cron exécute des commandes pour un utilisateur, selon des critères temporels : date et heure :

Quand un processus créé un fils, ce dernier hérite de son père d'un ensemble d'éléments définis par ses
ancêtres : • La périodicité (tou(te)s les) quand elles sont soumises par la commande crontab.

• L'échéance (à telle heure) quand elles sont soumises par la commande at.
• Le répertorie courant du père
• A leur tour et dès que possible quand elles sont soumises par la commande batch.
• Le umask

• Le ulimit Il peut y avoir des contraintes d'utilisation.

• Les variables d'environnement en copie 1. L'utilisateur doit avoir l'autorisation de soumettre une requête. La liste des utilisateurs autorisés est
située dans le fichier cron.allow, et la liste des utilisateurs interdits dans cron.deny, dans
• ...
/usr/lib/cron. Pour les commandes at et batch les fichiers sont at.allow et at.deny. Si ces fichiers
n'existent pas seul root est autorisé à utiliser ces commandes. Pour autoriser tout le monde, il suffit de
Les variables d'environnement peuvent être modifiées ou définies dans /etc/profile, ~/.profile ou tout autre créer un fichier deny vide (aucun utilisateur interdit).
endroit. Une variable importante est TERM, notamment pour vi.
2. Le démon cron exécute une commande dans un environnement réduit (seules les variables HOME,
LOGNAME et SHELL sont initialisées avec des valeurs simples). Les autres variables doivent êtres

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 39/59 - Support de Formation Linux & SHELL - 40/59 -

initialisées ou récupérées par ou depuis un script. Dans le cas d'un lancement de script, celui-ci doit $ at heure [date] < fichier_commandes
obligatoirement être précisé par le commentaire « #! ».
3. Il faut éviter les commandes interactives, c'est à dire nécessitant une entrée standard (clavier) ou Exemples :
sortant un résultat sur écran par la sortie standard. Il vaut mieux dans ces deux cas utiliser les
redirections. Sans redirection les messages de sortie et d'erreurs sont envoyés dans la boite aux Exécution de fic_commandes à 15 heures
lettres de l'utilisateur.
4. Le démon cron mémorise l'historique des actions dans /usr/lib/cron/log. Il faut penser à purger at 1500 < fic_commandes
régulièrement ces fichiers.
5. Les requêtes de cron et at sont placées dans /usr/spool/cron/crontabs et /usr/spool/cron/atjobs. Elles Exécution à minuit
portent le nom de l'utilisateur
Sous Linux, les autorisations cron sont dans les fichiers allow et deny du répertoire /var/spool/cron. Les at midnight < fic_commandes :
mêmes pour at et batch sont dans le répertoire /etc. Les requêtes de cron sont dans
/var/spool/cron/tabs et les traces dans /var/spool/cron/log. Exécution dans trois heures

6.4.1. Crontab at now + 3 hours < fic_commandes

Le démon cron fonctionne à l'aide d'une table, appelée une « cron table ». C'est un fichier texte simple, édité • La liste des travaux est visible avec at -l. La liste apparaît sous forme de fichiers xxxxxxxx.a
avec un simple éditeur, par défaut vi. Pour modifier sa cron table personnelle on utilise la commande crontab -
e. Le format est le suivant : • On supprimer un travail avec at -r xxxxxxxx.a

6.4.3. batch
Minutes Heures Jour du mois Mois Jour de la semaine Commande
La commande batch fonctionne comme at mais on ne précise pas d'heure ni de date. La travail est placé dans
1 2 3 4 5 6 un file d'attente (FIFO) et est exécutée quand c'est son tour.

batch < fic_commandes


On utilise le format suivant pour les valeurs périodiques :
6.5. Les IPC
• Une valeur pour indiquer quand il faut exécuter la commande. Ex : la valeur 15 dans le champ minute
signifie la quinzième minute
Les « IPC » (Inter Process Communication) sont des mécanismes de synchronisation et de communication
• Une liste de valeurs séparées par des virgules. Ex : 1,4,7,10 dans le champ Mois pour Janvier, Avril, implémentés dans le noyau UNIX, auxquels les processus applicatifs sont appel pour échanger des données ou
régler des problèmes de concurrence d'accès à des ressources.
Juillet, Octobre

• Une intervalle de valeurs. Ex : 1-5 dans le champ Jour de la Semaine indique du lundi (1) au vendredi Bien qu'étant principalement un problème ou un travail pour les développeurs, l'administrateur est concerné car
(5). Le 0 est le dimanche et le 6 le samedi. il acquiert une meilleure connaissance de son système, et il doit être capable d'identifier les IPC utilisés par les
processus et de les supprimer à la main en cas de plantage du processus. Éventuellement ce sera à
• Le caractère * pour toutes les valeurs possibles. Ex : * dans le champ Jour du mois indique tous les l'administrateur de modifier les paramètres système si les ressources IPC viennent à manquer.
jours du ou des mois.

On distingue trois catégories d'IPC :


Exemples :

1. Les files d'attente de message FIFO (« Message Queue ») que les processus utilisent pour échanger
Exécution de df tous les jours, toute l'année, tous les quarts d'heure : les données, avec une notion de priorité et de présence de messages (sans les lire).
2. Les zones de mémoire partagées (« Shared Memory ») par plusieurs processus pour lire et écrire des
0,15,30,45 * * * * df > /tmp/libre
données dans une zone commune.

Exécution d'une commande tous les jours ouvrables à 17 heures : 3. Les sémaphores pour permettre aux processus de se synchroniser afin d'éviter des conflits d'accès à
des ressources partagées, par exemple les Shared Memory.

0 17 * * 1-5 fin_travail.sh
La commande « ipcs » permet de lister les sémaphores.

• Pour lister les crontabs actives : crontab -l


• ipcs : liste les informations des trois catégories
• Pour supprimer la crontab active : crontab -r
• ipcs -q : uniquement les message queue
• Pour éditer la crontab d'un utilisateur particulier: crontab -u user
• ipcs -m : uniquement les shared memory

6.4.2. at • ipcs -s : uniquement les sémaphores

La commande at exécute une commande à une date et une heure données. La commande est lue depuis Les informations retournées sont les suivantes :
l'entrée standard. Si celle-ci est stockée dans un fichier, il faudra rediriger celui-ci vers la commande.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 41/59 - Support de Formation Linux & SHELL - 42/59 -

• T : type d'IPC (q, m, s) Dans les deux cas pour un système Unix, le boot va alors charger le noyau Unix par lui-même et l'exécuter.
Comme un boot ne sait pas gérer un système de fichiers, le boot va en fait lire des secteurs consécutifs du
• ID : Identifiant de l'IPC (fourni par le noyau) disque, secteurs contenant le noyau.

• KEY : le nom de l'IPC, choisi ou généré par son créateur


Le noyau Linux est compressé. Le début de l'image du noyau contient le code permettant de la
• MODE (1) : les attributs décompresser, puis l'image ainsi décompressée est exécutée.

• R : un processus attend une réception de message Lors de son exécution, le noyau vérifie et initialise quelques périphériques, charge les pilotes nécessaires puis
essaie de charger le système de fichier root (root directory /). L'emplacement du root filesystem est soit écrit
• S : un processus attend de pouvoir envoyer un message
en dur dans le noyau, soit passé comme paramètre depuis le secteur de boot. Une fois cette partition montée,
• D : une zone de mémoire partagée a été supprimée et disparaîtra quand le dernier processus s'en le noyau a donc accès à une partie de l'arborescence (/sbin, /etc, /lib, ...) et démarre le premier processus, init
détachera de PID 1.

• C : La zone de mémoire partagée sera initialisée à 0 quand le premier processus s'y attachera Démarrage alternatif
• - : aucun attribut n'est positionné
Dans certains cas (plantage de filesystem, impossibilité de redémarrer le système UNIX, maintenance
• MODE (2) : les droits spécifique) il est nécessaire de démarrer sur un autre support soit générique (support d'installation, disque de
réparation – rescue disk – de l'éditeur, ...) soit créé spécifiquement par l'administrateur (cas d'un cd bootable
• r : droits de lecture avec les pilotes nécessaires au bon fonctionnement de la machine et des outils d'administration ou de
réparation particuliers) Le support peut être une disquette ou un cédérom.
• w : droits en écriture pour les messages et la mémoire partagée

• a : droit de modification du sémaphore

• - : pas de drois

• OWNER : le nom du propriétaire de l'IPC

• GROUP : le nom du groupe propriétaire de l'IPC

La commande « ipcrm » permet de supprimer une ressource IPC. Il y a deux syntaxes :

• ipcrm -x ID (q, m ou s)

• ipcrm -X CLE (X : Q, M ou S)

7. L'arrêt et le redémarrage
Il est nécessaire pour introduire les notions de gestion des utilisateurs, de services et de réseaux de
comprendre le principe de chargement d'un système Unix.

Les distributions Linux RedHat et Mandrake ou SuSE sont proches d'un Unix System V ce qui fait que ce qui va
être décrit par la suite est valable pour la plupart des Unix (mais rien n'empêche une distribution de s'orienter
BSD, comme certaines Slackware, Debian et Corel).

7.1. boot
La première séquence est le bootstrap. Quand le PC est allumé le BIOS effectue quelques tests internes de
fonctionnement (vérification des paramètres du setup, initialisation du matériel, vérification de la présence du
clavier, de la souris, de la mémoire, du lecteur de disquette, des disques durs, de la carte graphique,
désignation et activation des IRQ et DMA aux divers ports intégrés et aux cartes d'extension ISA, PCI, AGP...).

Ensuite, suivant les paramètres du setup, le Bios cherche sur quel disque booter : disquette, disque dur, lecteur
cd ... Dans le cas d'un disque dur le Bios va tenter de démarrer sur le disque maître (master) du premier port
IDE (IDE0). Pour un SCSI le disque maître est celui déterminé dans le setup de la carte SCSI. Sur ce disque,
c'est tout d'abord le MBR (Master Boot Record) qui est exécuté. Outre du code interne qui détermine la table
des partitions et la partition active par défaut (celle sur laquelle on va en principe effectuer le boot principal, et
qui contient le système par lui-même), on peut rajouter ou modifier ce code de manière à démarrer sur une
autre partition ou disque, proposer un menu, ...

Si le MBR est celui par défaut, le code du MBR va chercher quelle est la partition active du disque, puis
exécuter le secteur de boot de cette partition.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 43/59 - Support de Formation Linux & SHELL - 44/59 -

7.2. init • initdefault : TRES IMPORTANT car il définit le niveau par défaut lors du boot et du lancement
d'init.

Le processus « init » (/sbin/init sous Linux) est le premier processus lancé par le système, il porte le numéro 1 • sysinit : exécuté une fois lors du chargement du système
(PID=1) et est le père de tous les processus du système. C'est lui qui va prendre en charge le démarrage des
divers services, éventuellement indirectement le chargement de nouveaux pilotes, le support réseau, et la • boot : exécuté lors du premier passage à ce niveau
création de l'arborescence de tous les processus nécessaires au bon fonctionnement du système.
• bootwait : idem mais init attend la fin de l'exécution de la commande pour continuer

7.2.1. Notion de runlevels • off : la ligne est ignorée, et lors d'un changement de niveau le processus est tué s'il est actif

• once : la commande est exécutée à chaque lecture d'inittab par init et à chaque changement
Un Unix propose plusieurs niveaux de fonctionnement ou runlevels. Chaque niveau propose des services de niveau concerné
différents. On peut trouver des niveaux de maintenance, des niveaux sans support réseau, des niveaux lançant
le support graphique... A un instant donné, le système fonctionne dans un seul niveau. Les niveaux peuvent • wait : idem mais avec attente de fin d'exécution
être cumulatifs. Le niveau 4 englobera les fonctionnalités du niveau 3 et des services en plus. Ils peuvent être
aussi totalement différents. On peut changer de niveau avec init directement (ou telinit sous Linux). • respawn : TRES IMPORTANT : la commande est lancé pour le niveau concerné. Si le
processus se termine, il est automatiquement relancé. C'est le cas pour les terminaux (getty)
car quand un utilisateur se déconnecte un nouveau doit pouvoir se connecter.

Niveau Convention • powerwait : Spécial (Linux). En cas de coupure de courant l'onduleur envoie une information
au système qui exécutera l'action concernée.

Arrêt du système effectué par la commande init 0 • ctrlaltdel : spécial (linux) réaction à la combinaison des touches Crl+Alt+Del
0
shutdown -h sous Linux
• commande : la commande à exécuter avec ses paramètres et les redirections.

Mode single-user (mode mono-utilisateur) pour des opérations particulières. C'est généralement le
1 Voici un exemple :
mode de maintenance (un seul utilisateur, pas de mode réseau, ...)

# Le runlevel par défaut est le 3


Mode multi-utilisateurs, réseau activé avec services réseaux de base comme telnet (sans services id:3:initdefault:
2
réseau sous Linux)
# Pour le runlevel 3, on exécute la commande rc avec 3 comme paramètre
3 Mode multi-utilisateurs avec services réseau sous Linux, comme NFS l3:3:wait:/etc/rc.d/rc 3

# Terminal pour les niveaux 2 3 4 et 5. S'il se termine il est relancé


4 Mode multi-utilisateur spécifique, à construire soit-même 1:2345:respawn:/sbin/getty 9600 tty1

Sur certains Unix et suivant l'architecture matérielle, maintenance matérielle depuis un firmware de la 7.2.3. Commandes
machine.
5
Sous Linux mode multi-utilisateurs avec interface graphique (lancement de xdm au lieu du login La commande « who -r » donne le runlevel courant.
console)
Les commandes « init » et « telinit » suivies du runlevel commutent le système dans ce runlevel.
6 Reboot de la machine (shutdown -r)

7.3. Scripts de démarrage


s,S Mode single-user sur Unix avec console root, pas présent dans inittab.

7.3.1. BSD, SYSTEM V


On trouve aussi le niveau « q » permettant à init de relire son fichier de configuration, et les pseudo-
niveaux a b et c permettant d'exécuter les nouvelles commandes d'un niveau sans relancer celles déjà en Il existe deux principes de fonctionnement des scripts de démarrage. L'un est orienté BSD avec l'utilisation d'un
cours. ou deux scripts qui gèrent l'ensemble des tâches à accomplir (rc1.d, rc.local, ...). L'autre est orienté SYSTEM V
avec un script qui lance divers démons et tâches réparties au sein d'une arborescence spécifique dépendant du
runlevel.
7.2.2. /etc/inittab
Suivant les distributions Linux nous trouvons l'une ou l'autre de ces solutions. Sur les distributions Mandrake et
Le comportement du processus init et des runlevels est défini dans le fichier /etc/inittab. La syntaxe d'une Red Hat, c'est la méthode SYSTEM V qui est utilisée.
ligne est la suivante :

7.3.2. Cas général SYSTEM V et Linux


Id:[niveaux]:action:commande

Dans inittab nous voyons que des scripts sont exécutés suivant les runlevels. Par exemple
• Id : Identifiant de ligne sur quatre caractères, juste indicatif (sauf sous Linux et getty : numéro de /etc/rc.d/rc.sysinit qui s'occupe de l'initialisation du système, et aussi /etc/rc.d/rc 3. C'est ce script qui lance
terminal) tous les services (web, nfs, crontab, bind, ...) pour le runlevel 3. Son fonctionnement est le suivant.

• Niveaux : Indique si la commande doit être prise en compte pour le niveau demandé, c'est la liste des
niveaux sans séparateur. Nous trouvons génalement les répertoires suivants :

• action : type d'action à effectuer selon les circonstances pour cette ligne.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 45/59 - Support de Formation Linux & SHELL - 46/59 -

• /etc/rc.d : contient les scripts permettant l'arrêt et le redémarrage des services (rc, rc.local), Sous Linux, le répertoire /var/lock/subsys contient la liste des services lancés, un fichier par service. Le
l'initialisation du système (rc.sysinit), le chargement de modules (pilotes supplémentaires répertoire /var/run contient dans certains cas la liste des PID et des fichiers de verrouillage de certains
rc.modules), ... services. La commande service permet d'effectuer des actions sur les services sans se déplacer dans
/etc/rc.d/init.d.
• /etc/rc.d/init.d : contient les scripts (shell-scripts) d'arrêt et de relance des services (/etc/init.d
est un lien symbolique vers ce répertoire), service [-f -R -s -d] <nom_service> action

• /etc/rc<niveau>.d/ : un répertoire par niveau (rc3.d, rc5.d), contenant des liens vers les scripts
contenus dans /etc/rc.d/init.d. • -f : full-restart, redémarrage complet du service

• -R : full-restart-all : redémarrage de tous les services actuellement lancés


Les liens contenus dans /etc/rc.d/rc3.d (par exemple) ont des noms spécifiques :
• -s : status-all : statut de tous les services lancés
• Snn<Nom_service> : S pour start, nn est une valeur numérique sur deux caractères (01 05 10 15 • -d : debug, informations complémentaires
ou autre) déterminant l'ordre de lancement des services

• Knn<Nom_service> : K pour Kill, nn la valeur déterminant l'ordre d'arrêt des services. 7.4. Ouverture de session
Execution des scripts
Une fois les terminaux (getty) lancés par init un prompt attend la saisie du nom de l'utilisateur. Avant ce
prompt le contenu du fichier /etc/issue est affiché. Le nom validé, le terminal exécute la commande login qui
Quand rc est exécuté, il va tout d'abord lister tous les liens commençant par K* à l'aide d'une boucle for. Puis il va demander la saisie du mot de passe. Si le mot de passe est correct (vérification dans /etc/passwd et
fait la même chose pour S* cette fois en lançant les services. Voici un exemple de script pour le démarrage : /etc/shadow), alors login affiche le contenue de /etc/motd et exécute un shell (toujours défini dans
/etc/passwd). Il faut noter que getty et login n'effectuent pas de fork : les processus lancés ne sont pas des
fils mais se substituent au processus courant (API exec). Certains Unix considèrent que le shell est un fils de
if [ -d /etc/rc${level}.d ]
login, lui-même étant un fils du terminal, mais cette vision tend à disparaître.
then
for i in /etc/rc${level].d/S*
do Une fois la session terminée (fin du shell), init relance un terminal pour une nouvelle connexion.
if [ -s ${i} ]
then
sh ${i} start
fi
done
fi

On voit bien que chaque fichier (non vide) commençant par S (donc Start) du répertoire correspondant au
runlevel est exécuté. Ce script implique une lecture séquentielle de chaque script de démarrage. On peut choisir
l'ordre d'exécution des scripts en modifiant le nom des liens pointant sur ceux-ci :

S01init
S05network
S10nfs
S15usb
S20sound

Ce sont les deux chiffres situés après le S (ou le K) qui déterminent l'ordre de sortie par l'instruction for et donc
l'ordre de leur exécution. Dans notre exemple init (S01init) sera exécuté en premier et sound (S20sound) en
dernier.

Sous Linux, lors du chargement, de la relance des services ou du changement de runlevel, le système vérifie si
le service est déjà lancé (trace dans /var/lock/subsys/<nom_service>), s'il l'est alors il est arrêté.

7.3.3. Arrêt et relance des services

Les services ont généralement une syntaxe simple permettant de les lancer ou de les stopper. Généralement
placés dans /etc/rc.d/init.d ou /etc/init.d, ils acceptent les options suivantes :

• start : démarre le service

• stop : arrêt du service

• status : état (lancé, arrêté, PID, ...) du service

• restart : effectue un arrêt/relance du service

• reload : dans certains cas seulement, le service est invité à relire sa configuration

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 47/59 - Support de Formation Linux & SHELL - 48/59 -

Le paramétrage du terminal se fait par le fichier/etc/gettydefs. C'est getty qui va permettre un bon • Que faut-il sauvegarder ?
fonctionnement du terminal de l'utilisateur, en s'adaptant aux divers paramètres de celui-ci (VT100, VT220,
XTERM, CONSOLE, ...). De plus getty peut parfaitement écouter un port série et supporter une connexion • Avec quelle fréquence ?
modem (et lancer ensuite une session ppp par exemple).
• Combien de temps conservera-t-on les sauvegardes, à quel endroit, en combien d'exemplaires ?

7.5. Arrêt du système • A quel endroit sera stocké l'historique des sauvegardes ?

• Quel est le support le plus approprié ?


L'arrêt d'un système Unix s'effectue avec la commande shutdown. Il est possible d'arrêter totalement le
système, de rebooter uniquement, de préciser le moment de l'arrêt et d'en avertir les utilisateurs. Lors d'un • Quels sont les besoins, en capacité, du support de sauvegarde ?
arrêt, un init 0 a lieu. Dans un premier temps les processus reçoivent tous le signal TERM (signal 15) pour qu'ils
puissent se finir correctement, puis un signal KILL (signal 9) qui tue les processus récalcitrants définitivement. • Combien de temps prévoit-on pour un fichier, un système de fichier et est-ce raisonnable ?

• La sauvegarde doit-elle être automatique ou manuelle ?


Shutdown est généralement (mais pas toujours) un script qui prévient régulièrement (toutes les minutes) les
utilisateurs de l'imminence de l'arrêt du système. • Quelle est la méthode de sauvegarde la plus appropriée ?

Certains systèmes permettent de spécifier un autre message d'information que celui par défaut. Voici quelques autres commandes :

Syntaxe sur Unix AT&T (System V) • mt : contrôle d'une bande magnétique

• touch : met la date de dernière modification à l'heure actuelle, pour forcer une sauvegarde
shutdown [-y] [-g delai_de_grâce] [-i niveau]
incrémentale

L'option -y supprime les demandes de confirmation, l'option -g permet de modifier le délai avant l'arrêt, qui est • find : sélectionne les fichiers à sauvegarder
par défaut de 15 secondes, et enfin l'option -i permet de définir le niveau dans lequel on souhaite redémarrer.
• compress et uncompress : compression et décompression des fichiers

Syntaxe pour Linux : • gzip, gunzip, zcat, compression et décompression au format GnuZip.
shutdown [-h] [-r] [date] [mode]

L'option -h signifie halt et arrête le système, -r le redémarre, la date précise le délai (+3 : trois minutes, 20:00 5.1.2. Sauvegarde par tar
à 20 heures), le mode un texte affiché aux utilisateurs.
La commande « halt » est l'équivalent d'un shutdown -h now (arrêt définitif). On emploie très souvent la commande tar car elle est simple et efficace. Elle sauvegarde des fichiers, y compris
La commande « reboot » est l'équivalent d'un shutdown -r now (redémarrage). l'arborescence de fichiers. L'archive ainsi créée peut s'étendre sur plusieurs volumes : quand la bande ou la
La combinaison de touches ALT+CTRL+DEL lance un reboot. disquette est pleine, c'est à l'utilisateur d'en insérer une nouvelle et la sauvegarde/restitution continue.

5. La sauvegarde Pour une sauvegarde :

tar cvf nom_archive Fichier(s)


5.1. Les outils de sauvegarde tar cvf archive1.tar /home/*

La sauvegarde est un travail important de l'administrateur puisqu'en cas de gros problème, on passe • c: création d'archive
généralement par une restauration du système depuis une sauvegarde ou une image du système lorsque celui-
ci était encore intègre (bon fonctionnement, pas de corruption). Chaque Unix arrive avec des commandes et • v : mode bavard 'verbose' : dit ce qui se fait
des procédures de sauvegarde qui lui sont propres. On distingue tout de même quelques outils communs.
• f : le paramètre suivant est le nom de l'archive

5.1.1. Commandes, plans, scripts


Pour lister le contenu de l'archive :

• Pour la sauvegarde de fichiers et d'arborescences, on utilise les commandes tar, cpio et pax. Ces tar tvf nom_archive
commandes sauvent une arborescence, et pas un système de fichiers. On peut faire coïncider les deux. tar tvf archive1.tar
• Pour la sauvegarde physique de disques et de systèmes de fichiers, on utilise la commande dd
et la commande volcopy. • t : liste le contenu de l'archive
• Une sauvegarde incrémentale consiste à sauvegarder une première fois la totalité des données,
puis ensuite uniquement les fichiers modifiés. On utilise parfois les commandes dump et restore, Pour une restauration :
mais là chaque OS vient avec ces propres outils. On trouve aussi en libre ou dans le commerce des
solutions plus pointues. tar xvf nom_archive fichiers
tar xvf archive1.tar
L'administrateur aura parfois à définir des scripts de sauvegarde et de restauration adaptés au as par cas
(partition systèmes, données applicatives, ...) et à automatiser quand c'est possible l'exécution de ceux-ci en
• x : extraction de l'ensemble des fichiers de l'archive, ou du ou des fichiers spécifiés.
fonction de la date, l'heure ou la charge machine.

Autres clés et paramètres :


Il sera aussi très important de définir un plan de sauvegarde, en se posant les bonnes questions :

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 49/59 - Support de Formation Linux & SHELL - 50/59 -

• r : les fichiers sont ajoutés à la fin de l'archive. Ne fonctionne pas avec les bandes et cartouches. peut être employée avec n'importe quel fichier. La commande dd permet de réaliser des copies physiques de
disques et de systèmes de fichiers.
• k : spécifie la taille en ko du support d'archivage, pour faire du multi-volumes

• l : on sauvegarde les fichiers et pas les liens symboliques (le fichier pointé est sauvé)
Argument utilisation
• [LINUX] z : l'archive est compressée au format gzip.

• [LINUX] Z : l'archive est compressée au format compress. if=fichier « fichier » désigne le ficher à copier, à défaut l'entrée standard.

• [LINUX] j : l'archive est compressée au format bzip2.


of=fichier « fichier » désigne le résultat de la copie, à défaut la sortie standard.

5.1.3. Sauvegarde par cpio


« valeur » désigne la taille commune du bloc pour les fichiers d'entrée et de sortie, par défaut à
bs=valeur
512 octets.
La commande cpio sauvegarde su la sortie standard les fichiers dont on saisit les noms sur l'entrée standard,
par défaut le clavier et l'écran. On utilisera donc les redirections. Voici les options :
skip=n nombre de blocs qu'il faut sauter au début du fichier d'entrée.

• -v : mode bavard « verbose », informations détaillées


seek=n nombre de blocs à sauter au début du fichier de sortie
• -c : sauvegarde des attributs des fichiers sous forme ASCII (pour l'échange entre divers OS)

• -B : augmente la vitesse d'exécution en utilisant une mémoire tampon (5120 octets soit 10 blocs) count=n nombre de blocs à copier

Pour une sauvegarde :


Conversion lors de la copie (lcase : minuscule, ucase : majuscule, ascii, abcdic, swab :
conv=...
permutation des octets)
cpio -oL

• o : output, creation de la sauvegarde en sortie


Exemple sous Linux :
• L : sauve les fichiers liés et pas les liens symboliques
Ici on va placer le secteur de boot de la partition (ou est installé lilo ou grub) dans un fichier. Le fichier ainsi
créé pourra être utilisé avec le chargeur de NT/2000/XP pour démarrer sous Linux.
Pour lister le contenu de l'archive :
dd if=/dev/hda5 of=boot.lnx bs=512 count=1
cpio -it

9. Disques physiques et logiques


• i : lecture de l'archive en entrée

• t : comme pour tar, liste le contenu de l'archive


9.1. Les disques
Pour une restauration :
Un disque UNIX peut être vu comme un ensemble de blocs logiquement contigus et accessibles par un ou deux
noms de périphériques dans /dev (type bloc ou type caractère).
cpio -i[umd]
Un disque en accès par blocs est généralement géré par le système et ses outils, et dispose d'un système de
• u : restauration inconditionnelle, avec écrasement des fichiers qui existent déjà. Par défaut les fichiers fichiers « classique ». Les écritures sont asynchrones, le noyau gérant dans ce cas un cache « buffer ».
ne sont pas restaurés si ceux présents sur le disque sont plus récents ou du même âge. Exemple de disque : /dev/dsk.

• m : les fichiers restaurés conservent leur dernière date de modification


Un disque en accès par caractère ou « raw device » est utilisé directement par un logiciel, par exemple un
• d : cpio reconstruit l'arborescence des répertoires et sous-répertoires manquants. gestionnaire de bases de données comme Oracle ou Informix, ou par des outils de sauvegarde. Les écritures
sur ces diques sont synchrones, elles ne passent pas par des buffers du noyau. Exemple de disque : /dev/rdsk.

Exemples :
Il est possible de déclarer un disque à la fois en mode bloc et en mode caractère.

• Sauvegarde de l'arborescence courante sur une disquette avec compression :


La reconnaissance et la gestion des disques physiques sont différentes selon la version d'Unix utilisée. Il faudra
find . print | cpio -ocvB | compress > /dev/fd0
alors se reporter au manuel et à la documentation spécifiques au système.
• Restauration
cat /dev/fd0 | uncompress | cpio -iuvBd On retiendra généralement que les périphériques disques physiques et/ou logiques sont représentés par une
entrée dans le répertoire /dev soit directement, soit dans une arborescence propre au support utilisé, par
exemple /dev/ide, /dev/scsi, ...
5.1.4. Sauvegarde par dd
Nomenclature sous Linux :
La commande « dd » (device to device) est destinée à la copie physique, bloc à bloc, d'un fichier périphérique
vers un fichier périphérique. A l'origine on l'utilisait pour la lecture et l'écriture sur bande magnétique, mais elle
• /dev/hda : 1er disque physique IDE (IDE0, Master)

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 51/59 - Support de Formation Linux & SHELL - 52/59 -

• /dev/hda1-2 : Partitions principales (max théorique de 4) Les écritures de données sont dupliquées sur plusieurs disques, généralement deux, pour se prémunir des
défaillances d'un disque. Dans ce cas il reste toujours un disque disponible.
• /dev/hda3 : Partition étendue (pour ajout de partitions logiques)
Bandes de données (« data striping », « striped disk »)
• /dev/hda5-x : Partitions logiques étendues

• /dev/hdb : 2nd disque physique IDE (IDE0, slave) Il s'agit de découper les données à écrire sur disque et segments séquentiels et contigus pouvant résider sur
plusieurs disques physiques distincts. L'ensemble des segments d'une bande constitue un disque logique. Une
• /dev/hdc : 3eme disque physique IDE (IDE1, Master) solution plus élaborée est l'utilisation d'une bande de parité calculée à partir des des données d'une autre
bande. Il est alors possible de reconstruire les données.
• /dev/hdd : 4eme disque physique IDE (IDE2, Slave)

• /dev/sda : 1er disque SCSI (Carte 0, Lun 0) Disques RAID

• /dev/sda1 : 1ère partition du 1er disque SCSI (0:0:0)


La mise en oeuvre de ces deux techniques passe généralement par la technologie RAID « Redundant Arrays
• /dev/sdb : 2nd disque SCSI (0:1) of Inexpansive/Independant Disks », inventée par l'université de Berkeley en Californie.

• /dev/fd0 : 1er lecteur de disquettes


Sous Linux, il est possible de gérer des contrôleurs IDE supplémentaires sans limite théorique. Dans le cas de Niveau Spécificité
l'ajout d'une carte contrôleur IDE supplémentaire de type Promise UltraDMA133 ou autre, les disques /dev/hde
(IDE2, Master), /dev/hdf (IDE2, Slave), /dev/hdg (IDE3, Master) et /dev/hdh (IDE3, Slave) apparaissent.
RAID 0 Un disque sans redondance avec bandes : agrégat de plusieurs partitions en une seule.
De plus, Linux dispose d'une couche d'émulation (layer) SCSI, appelée IDE-SCSI, pour gérer les périphériques
SCSI comme des périphériques IDE, ce qui est utile pour la gestion des graveurs IDE.
RAID 1 Des disques en miroir, mirroring

9.2. Ajout de disques RAID 2 Miroir avec écriture en parallèle et correction d'erreur (« EEC »)

Là encore la procédure dépend du système Unix utilisé mais les étapes de base sont généralement les mêmes :
RAID 3 Écriture en parallèle avec contrôle de parité.
1. Installation physique du disque au sein de la machine sur le bon contrôleur. Il est nécessaire de noter
les informations concernant le type de disque, le type de contrôleur, son numéro (IDEx, Master, Slave, RAID 4 Bandes avec parité, la bande de parité est sur un seul disque
Lun SCSI, ...).
2. Sous le système Unix, il faut vérifier que le noyau supporte bien le contrôleur désiré (IDE, SCSI) et RAID 5 Bandes avec parité, la bande est répartie sur plusieurs disques. Tolérance de panne d'un seul disque.
éventuellement le paramétrer pour disposer du bon pilote.
3. Formater le disque, ce qui consiste à la sectorisation du disque, la création d'une table de partitions et
Bandes avec deux fonctions de parité, réparties sur deux disques. Tolérance de panne de deux
la recherche de blocs défectueux. RAID 6
disques simultanés.
4. Partitionner le disque, c'est à dire le découper en volumes logiques pouvant contenir un système de
fichiers. Lors de cette étape la partition peut être initialisée avec un identifiant de partition déterminant
son type (et le type de système de fichiers qui y sera placé). Les solutions les plus utilisées pour la tolérance de panne sont le RAID 1 et le RAID 5.
5. Création des fichiers périphériques spéciaux dans /dev, en mode bloc et/ou en mode caractère.
L'opération manuelle consiste en l'appel de la commande mkdev, mais la procédure est parfois
automatique suivant le type de système UNIX. Une solution RAID est une solution de tolérance aux
Sous Linux, les étapes 3, 4 et 5 sont liées. En effet Le formatage du disque est lié au partitionnement. La pannes et ne remplace jamais une sauvegarde.
commande fdisk permet la création d'une table de partitions et de partitions physiques et étendues. Le
formatage des partitions se fait ensuite par la création du système de fichiers sur la partition à l'aide de la
Sous Linux, le RAID est possible sous toutes ses formes mais on y emploie généralement le RAID 0, 1 ou 5. En
commande mkfs, avec éventuellement une recherche des blocs défectueux avec la commande badblocks (ou
cas de RAID matériel, géré par le contrôleur, aucune configuration spécifique n'est nécessaire. Le RAID logiciel
incorporée à mkfs). Les périphériques /dev/xxx sont déjà présents.
est possible à l'aide de modules et pilotes fournis par le noyau, et de divers outils de configuration. Le RAID
logiciel est généralement plus rapide que le RAID matériel, et permet aussi de débrancher les disques à chaud,
Dans les distributions Linux récentes, le répertoire /dev est dynamique (devfs) et les fichiers périphériques
y compris sur un contrôleur IDE. Voir les Howtos associés.
spéciaux apparaissent ou disparaissent à volonté.

9.3. Disques RAID et « striped disks » 9.4. Groupes de volumes


Un groupe de volumes « volume group » est un ensemble de disques physiques ou de volumes physiques
On distingue deux types de supports RAID :
« physical volume ». Il devient facile d'ajouter ou de retirer un volume physique d'un groupe de volumes.

1. un support matériel : Le contrôleur de disque gère lui-même le RAID et la tolérance aux pannes.
Un système utilisant les groupes de volumes doit disposer d'au moins un groupe de volumes lui-même
2. un support logiciel : le système Unix gère lui-même le RAID à l'aide de pilotes et d'outils particuliers constitué d'au moins un volume physique.
propres au système. Il devient ainsi possible de faire du RAID même avec un contrôleur non prévu à
cet effet. L'espace total d'un groupe de volumes est constitué d'un ensemble d'unités (granules) d'allocation physique
(« physical extent », « physical partition ») allouées à des disques logiques ou volumes logiques.
Disques en miroir :

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 53/59 - Support de Formation Linux & SHELL - 54/59 -

Un volume logique « logical volume » est constitué d'un certain nombre d'unités d'allocation logiques
(« logical extent ») qui correspondent aux « physical extent » ou « physical partition » allouées dans ce groupe
de volumes. Les unités d'allocation physique qui ont été allouées ne sont pas contiguës.

Un volume logique dispose d'une ou deux entrées (bloc, caractère) dans le répertoire /dev.

Opérations réalisables sur un groupe de volumes :

• Création d'un groupe de volumes

• Ajout d'un disque physique à un groupe de volumes

• Retrait d'un disque physique d'un groupe de volumes

• Rattachement d'un disque physique à un nouveau groupe de volumes

Opérations réalisables sur les volumes logiques :

• Création ou suppression d'un volume logique

• Extension ou réduction de la taille d'un volume logique

Bien que les définitions semblent barbares, les volumes logiques sont plus simples à réaliser qu'une partition
physique, et il y a ensuite aucune différence d'utilisation. On ne peut pas toujours réduire la taille d'un volume
logique à cause des données qui y sont stockées et qui seraient alors endommagées. Quand on étend la taille
d'un volume logique, il ne faut pas oublier d'étendre la taille du système de fichiers.

Cas concret :

En pratique, imaginons deux petits disques de 500 Mo chaque. La logique voudrait la création d'une partition
sur chaque disque, soit de deux partitions distinctes de 500 Mo, l'une pouvant servir pour la racine, l'autre pour
le homedir.

Avec un RAID 0, on peut envisager de concaténer les deux partitions (« striping ») en une seule de 1Go. Mais il
s'agit là d'une seule partition qui sera vue comme telle par le système.

Avec les groupes de volumes, les disques représentent en fait des « physical volumes » de 500 Mo chaque. Un
groupe de volumes « volume group » est un ensemble de plusieurs « physical volumes ». Dans notre cas, on va
créer un « volume group » constitué de deux « physical volumes », soit un « volume group » de 1 Go.

Une fois ce groupe de volumes créé, il se comporte comme un disque physique « virtuel » dans lequel on va
créer un ou des volumes logiques « logical volume », autrement dit des partitions dans lesquels on pourra créer
des systèmes de fichiers, de swaps, ...

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 55/59 - Support de Formation Linux & SHELL - 56/59 -

Si plus tard on récupère un troisième disque de 500 Mo, on pourra le rajouter dans le groupe de volumes qui Sous AT&T (SYSTEM V) on utilise la commande swap.
aura alors une taille de 1,5 Go. Il sera alors possible soit de créer de nouveaux volumes logiques (partitions),
soit d'étendre ceux existants (les agrandir).
Sous Linux, on utilise la commande fdisk pour créer une partition physique de swap, ou les outils LVM. Puis on
créé le swap avec la commande mkswap. Enfin, on utilise la commande swapon pour l'activer. Il ne faut pas
Sous Linux, la création de volumes est parfaitement possible soit depuis des outils particuliers généralement oublier de rajouter la nouvelle partition dans /etc/fstab pour le redémarrage suivant.
présentés dans un package appelé LVM, soit depuis les outils d'administration livrés pour chaque distribution
(RedHat et SuSE ont le meilleur support, la Mandrake est plus complexe). Si on souhaite créer la partition root
(/) sur un volume logique, il faut créer une partition classique /boot séparée sur lequel le noyau pourra 9.6. Raw devices
démarrer.
Le terme « raw device » est utilisé pour désigner un disque dont l'usage est dédié à un logiciel d'application
qui, pour accéder au disque en tant que fichier, utilise son nom en mode caractère ou mode « raw » (brut,
naturel, nu, cru).

De ce fait, l'application gère elle-même la structure des données et fichiers au sein de ce disque qui sont dans
un format spécifique et n'apparaissent pas dans l'arborescence.

Les principales applications préférant ce mode de travail sont les gestionnaires de bases de données,
notamment Oracle ou Informix.

Sous Linux, le mode raw est aussi utilisé par les outils multimédia, par exemple les lecteurs de DVD qui
accèdent à ce support par l'intermédiaire d'un raw device /dev/rdvd.

11. Le noyau

11.1. Son rôle


Un noyau UNIX est un fichier exécutable qui se trouve sur le disque de boot à la racine du système de fichiers
/dev/root, dans le système de fichiers monté sur le répertoire /stand ou sur le répertoire /boot. Le nom de ce
fichier n'est pas standard et peut être UNIX, unix, vmunix, ...

Le noyau assure la gestion des ressources physiques et logiques du système :

• gestion des périphériques par les pilotes intégrés au noyau


9.5. Le swap
• gestion des fichiers associée à la gestion des périphériques
Le « swap » ou échange est un mécanisme d'échanges de données entre la mémoire physique RAM et un • gestion des processus à l'aide de l'ordonnanceur (« process scheduler »)
espace sur disque spécialement aménagé à cet effet.

Les processus accèdent aux services du noyau via les API « Application Programming Interface », un ensemble
Il est extrêmement conseillé d'installer des partitions de swap même si la machine dispose d'une grande de fonctions système ou primitives. Le langage le plus usité dans ce cas est le langage C. Les primitives d'UNIX
capacité de mémoire. En effet plus un système UNIX dispose de mémoire, plus il en alloue dynamiquement sont basées sur le standard d'API POSIX, définie par l'IEEE et normalisée par l'ISO.
pour le cache (disques, système) et autres buffers.

Il n'est pas forcément nécessaire de connaître la structure interne du noyau, même si cela apporte un plus,
Un swap a généralement deux fois la taille de la mémoire. Mais ce calcul n'est pas toujours linéaire et la taille mais l'administrateur a parfois besoin d'en modifier certains paramètres, soit dynamiques, soit statiques.
peut varier d'un facteur ½ à un facteur 3 ou 4. On se reportera pour ça au guide d'administration de l'UNIX
concerné.

Taille swap = taille RAM x 2


La vitesse du swap est cruciale pour la vitesse du système. Il est conseillé de placer la partition d'échange sur
un disque physique différent de celui ou est installé le système. De même deux partitions de swap de 128 Mo
chacune sur deux disques sont plus rapides qu'une seule partition swap de 256 Mo sur un disque.

Certains UNIX proposent de créer un fichier de swap dans un système de fichier quelconque. Si cela présente
l'avantage d'utiliser l'espace existant dans le cas ou il est impossible de créer une nouvelle partition, le principal
inconvénient reste la baisse générale des performances.

Les zones de swap sont généralement activées automatiquement au démarrage du système UNIX par des
scripts qui utilisent la commande swapon -a. Les partitions de swap sont définies en principe dans
/etc/fstab. Il s'agit de la logique BSD. Il est possible de rajouter du swap à la volée sans redémarrer le
système.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 57/59 - Support de Formation Linux & SHELL - 58/59 -

prenant en charge la majorité des pilotes existants. Dans ce cas s'il manque un pilote on peut généralement
récupérer uniquement ses sources, et le reconstruire sous forme de module.

Dans le cas où il faut reconstruire tout le noyau, on passe par les commandes suivantes :
cd /usr/src/linux
make xconfig (ou make menuconfig) -> choix des options et paramètres du noyau

make dep ; make clean


make bzImage
make modules
make modules_install ...
Recopie du noyau de arc/i386/boot/bzImage vers /boot ...
Modification des liens et de /etc/lilo.conf ou /boot/grub/install.tx ...
Réinstallation de lilo, grub est dynamique ...
reboot

11.3. Informations système


Quelques commandes permettent d'obtenir des informations utiles sur le système.

La commande uname permet d'obtenir des informations sur le système UNIX utilisé :

• -a : toutes les caractéristiques

• -m : le type de matériel

• -n : le nom réseau du système

• -r : la « release » du système

• -s : le nom du système d'exploitation

• -v : la version du système d'exploitation

11.2. Reconstruire le noyau La commande what extrait les commentaires d'un fichier, par exemple d'une commande, ce qui permet
d'obtenir des informations comme la version et la date de la commande.
Il existe plusieurs cas où la reconstruction d'un noyau s'avère parfois nécessaire :
La commande dmesg les informations contenues dans le fichier /usr/adm/messages, généralement les
informations envoyées à la console maître /dev/console lors du démarrage du système et le changement
• Ajout d'un périphérique d'état du système (chargement de pilotes, ...)

• Ajout ou retrait du pilote associé, cas fréquent.


Sous Linux, dmesg affiche le contenu de /var/log/dmesg.
• Modification de paramètres systèmes (par exemple limite du nombre de processus), cas fréquent. La commande free affiche l'état de la disponibilité mémoire et du swap.
La commande arch donne l'architecture système (type de processeur).
• ... La commande hostid affiche l'identifiant du host.
Linux (comme Solaris, Aix ou encore HP-UX 11) a levé l'obligation de reconstruire le noyau en cas d'ajout ou de
retrait d'un pilote. Le chargement est devenu dynamique grâce à l'utilisation d'un noyau modulaire et des
commandes insmod, modprobe et rmmod.
11.4. Le démon syslog
Certains paramètres systèmes peuvent être modifiés à la volée - sans recompilation ou redémarrage - à l'aide Le démon syslog, un processus appelé syslogd, permet de recevoir, traiter et stocker des messages d'erreurs
du système de fichiers spécial /proc. émis par le noyau ou certains démons. Un fichier de configuration /etc/syslog.conf permet de définir l'origine,
l'importance et la destination de chaque message, sous forme de deux champs.
La procédure de reconstruction d'un noyau est propre à chaque UNIX, c'est pourquoi il nous est impossible de
voir ce processus en détail. Cependant il y a généralement quatre étapes : 1. L'origine définit en fait un ensemble de systèmes et de sous-systèmes (noyau, services). La liste,
extensible, est composée à l'origine des éléments suivants. L'étoile « * » définit l'ensemble des sous-
systèmes.
1. Recopie /sauvegarde du noyau actuel et des fichiers de configuration
2. Modification du fichier de configuration (ajout des pilotes, ...)
3. Compilation et édition de liens conduisant à la génération d'un noyau exécutable Sous-système Signification

4. Arrêt et redémarrage du système pour charger le nouveau noyau.


auth service de sécurité et d'authentification
Sous Linux, les sources du noyau sont disponibles et permettent outre sa recompilation de comprendre son
fonctionnement interne.
cron service cron
Les distributions sont fournies avec un nombre plus que conséquents de modules dynamiques déjà construits et

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC SECTEUR NTIC
Support de Formation Linux & SHELL - 59/59 -

daemon les démons du système

kern le noyau

lpr le service d'impression

mail la messagerie

news le réseau

syslog syslog lui-même

user messages des processus utilisateurs

uucp Unix to Unix CoPy

2. L'importance ou « niveau » définit le niveau de criticité du message. L'étoile « * » définit l'ensemble


de tous les niveaux.

Niveau Signification

emerg Le système est inutilisable

alert Une intervention immédiate est indispensable

crit Erreur critique pour le sous-système

err Erreur de fonctionnement

warning Avertissement

notice Évènement normal méritant d'être signalé

info Pour information seulement

debug Message envoyé pour la mise au point

none Ignorer les messages

3. La destination ou « action » peut être un fichier, un mail à un utilisateur, la console, une liste
d'utilisateurs, ...

Les messages syslog sont inscrits dans les fichiers /var/log/messages et /var/log/syslog. Le noyau écrit
dans /dev/error et les sous-systèmes dans /dev/syslog. Les messages distants sont reçus sur la socket du
port 514.

On peut envoyer des messages à syslogd par la commande logger.

Sous Linux, on peut trouver le fichier /etc/syslog.conf ou /etc/syslogd.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC

Vous aimerez peut-être aussi