Command Linux OFPPT
Command Linux OFPPT
Command Linux OFPPT
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.
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 :
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.
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.
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.
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
Commande Description
ls Liste les fichiers par ordre aplabétique en colonnes.
Afficher
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_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.
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 :
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
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.
empty
le fichier est vide et il est soit un fichier normal soit un Combinatoire des commandes précédentes
répertoire
Notion de droits
Les droits d'accès aux fichiers (appelés encore modes ou permissions) sont un point
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).
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).
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
catégorie qui suit. Cette catégorie est désignée par la lettre g (group).
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).
Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le droit
est refusé, on voit un tiret (-).
-w- écriture
r-- lecture
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
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.
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.
--x 001 1
Opération Description
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
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
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
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
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
mot de passe pour un utilisateur désirant changer de groupe sans en faire partie. Peu utilisé.
passwd
(commande newgrp)
liste liste des utilisateurs du groupe. Pour utilisation avec la commande newgrp.
• 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 :
• 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]
• -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.
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
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
• 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
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
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.
• 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.
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.
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.
• 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.
• 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
• - : pas de drois
• 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.
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, ...)
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)
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.
• /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
• 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é.
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 :
• reload : dans certains cas seulement, le service est invité à relire sa configuration
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 ?
Certains systèmes permettent de spécifier un autre message d'information que celui par défaut. Voici quelques autres commandes :
• 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.
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
• 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.
• 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.
• -B : augmente la vitesse d'exécution en utilisant une mémoire tampon (5120 octets soit 10 blocs) count=n nombre de blocs à copier
Exemples :
Il est possible de déclarer un disque à la fois en mode bloc et en mode caractère.
• /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)
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é.
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 :
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.
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, ...
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
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é.
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.
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
La commande uname permet d'obtenir des informations sur le système UNIX utilisé :
• -m : le type de matériel
• -r : la « release » du système
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, ...)
kern le noyau
mail la messagerie
news le réseau
Niveau Signification
warning Avertissement
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.