Command Linux OFPPT [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

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

I. Système de fichiers sous Unix 1. Arborescence 2. Noms de fichiers 3. Chemin d'un fichier a. Répertoire parent b. Répertoire courant c. Chemin absolu d. Chemin relatif 4. Types de fichiers a. Exécutable b. Répertoire c. Lien (ln) i. Symbolique ii. Physique d. Fichier e. Fichier caché 5. Navigation (cd) 6. Commandes sur le système de fichiers 7. Lister les fichiers (ls) 8. Méta-caractères

Comme dans tous les autres systèmes d'exploitation, les données sont organisées en 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.

Noms de fichiers Sous Unix (et contrairement au Dos), tous les caractères alphanumériques plus la ponctuation sont des caractères valides. De plus il n'existe pas de notion d'extention de fichier. Cela fait du caractère . (point) un caractère comme un autre qui peut apparaître plus d'une fois dans un nom de fichier. Par contre l'espace est considéré comme un séparateur à proscire dans le nommage des fichiers. Le système Unix n'accepte pas les caractères accentués et distingue les minuscules des majuscules. Exemples : • • • •

MonProg.c et monprog.c ne représentent pas les mêmes fichiers a.b... est un nom de fichier valide sous Unix tp6-31/03/2001.c est valide _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

-

ambiguité (de façon exacte et unique) par son chemin. Ce dernier représente la succession des répertoires à parcourir pour accéder au fichier (navigation dans l'arbre). 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).

Répertoire parent Le répertoire parent est celui hiérarchiquement immédiatement supérieure à celui courant. Il est noté deux points ..

Répertoire courant 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 .

Chemin absolu

Support de Formation Linux & SHELL

-

6/59

Un répertoire peut ne contenir aucun fichier. Mais en revanche, un répertoire contient toujours un répertoire parent .. et un répertoire courant . .

Les liens (ln) 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. 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 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. Les liens peuvent êtres de deux types :

Lien symbolique

Le chemin absolu désigne la succession des répertoires à parcourir depuis la racine pour accéder au fichier spécifié.

Un lien symbolique est un simple pointeur vers un autre fichier bien réel.

Exemple : /home/h-etie00/tpC/tp3.c pour accéder au fichier tp3.c du système de fichier ou qu'on se trouve dans le système (représenté dans le schéma plus-haut).

La commande ln -s permet de créer un lien symbolique sur un fichier. Ce lien sera présent sous la forme d'un fichier dont le nom sera affiché après 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 réperoire courant pour accéder au fichier spécifié.

Lien physique

Exemple: ../monprog.c pour accéder au fichier monprog.c lorsqu'on se trouve dans le répertoire tpC. La présence du répertoire parent dans ce chemin relatif permet de remonter dans l'arbre.

Un lien physique sur un fichier est un fichier qui occupe exactement le même espace disque que le fichier vers lequel il pointe. 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 généralement). Il n'est pas conseillé de tenter de les éditer à l'aide d'un éditeur de texte traditionnel : il n'apparaîtra que des caractères bizarres et incomprehensibles. Seules les chaînes de caractères stockées en constantes dans l'exécutable seront visibles. Mais en général la taille d'un exécutable devrait vous

Fichier Un fichier est de type fichier lorsqu'il est "tout à fait normal", qu'il n'a rien de particulier ; c'est-à-dire lorsqu'il n'est ni un exécutable, ni un répertoire et ni un l lien.

Fichier caché Répertoire Les répertoires, nous l'avons vu plus haut, sont des ensembles de fichiers et de répertoires.

-

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 fichiers ne les affichera pas par defaut.

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

SECTEUR NTIC

SECTEUR NTIC

Support de Formation Linux & SHELL

-

7/59

Navigation (cd) La commande unix de navigation dans le système de fichier est : cd pour Change Directory.

-

Support de Formation Linux & SHELL

-

8/59

Lister les fichiers (ls) Une commande essentielle de tout système d'exploitation est le listage des fichiers et sous-répertoires du répertoire courant. L'équivalent sous Unix de la commande dir du Dos est ls.

Exemple

Description

Syntaxe : ls

cd .

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

Exemple :

cd ..

Va dans le réperoire parent.

cd /

Saute vers le réperoire racine, à la base de tout le système.

cd /home

Se déplace vers le répertoire home fils de la racine.

$ ls amoi.c lettre.doc monprog.c

cd /home/h-etie00

Parcours l'arbre jusqu'au répertoire h-etie00 en passant par la racine, puis par home.

Cette commande accepte les méta-caractères afin de n'afficher que les fichiers qui répondent à certaines contraintes lexicographique.

cd ../Mail

Remonte l'arbre d'un cran, puis va dans le répertoire Mail

cd ../..

Remonte de deux crans.

montage.jpg tp3.c tp1.c zizitop.mp3 tp2.c

Syntaxe : ls expression-régulière Exemple :

Commandes sur le système de fichiers Commande Description

$ ls *.c amoi.c monprog.c

tp1.c tp2.c

tp3.c

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.

cp

Copie un fichier ou un répertoire.

pwd

Affiche le chemin du répertoire courant.

cd

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

ls

Affiche la liste des fichiers et répertoires.

Pour afficher les fichiers cachés, utiliser l'attribut -a (all). Très pratique pour lister les 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 et utiliser les méta-caractères.

$ ls -l -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 lrwxrwxrwx 1 root univ 3 Jan 24 12:16 tp -> TpK

Exemple : $ ls -a .bash .netscape .profile amoi.c

lettre.doc tp2.c monprog.c tp3.c montage.jpg zizitop.mp3 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

-

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.

ls -lu

Tri par date de dernier accès et affiche cette date.

ls -F

Affiche les types de fichiers i.e. en rajoutant le symbôle correspondant : / (répertoire), * (exécutable), @ (lien).

ls -S

Tri par ordre de taille décroissante.

ls -X

Tri par type d'extention.

ls -r

Tri inverse.

II. Manipulation de fichiers 1. Afficher a. Afficher le contenu d'un fichier (cat) b. Affichage inverse (tac) c. Afficher l'entête (head) d. Afficher la fin (tail) e. Afficher écran par écran (more et less) f. Numérotation des lignes (nl) g. Affichage sans doublon (uniq) h. Affichage avec tri (sort) 2. Découper (split) 3. Différences (diff) 4. Statistiques (wc) 5. Type de fichier (file) 6. Création de fichier (touch) 7. Calcul d'un condensat (md5sum) a. Présentation b. A quoi ça sert ? c. Exemples 8. Recherche de fichiers (find) a. Introduction b. Liste des critères de recherche c. Combinatoire des tests 9. Combinatoire des commandes précédentes

Méta-caractères Les méta-caractères * (astérisque) et ? (point d'interrogation) sont très utiles lors de la manipulation de fichiers en groupe. Le méta-caractère * remplace dans l'expression dans laquelle il apparait, zéro, un ou plusieurs autre(s) caractère(s). Quand à ?, il remplace un et un seul caractère. Par exemple, la commande rm * -r supprime tous les fichiers de tous les réperoires inclus dans celui courant. A utiliser avec parcimonie! Alors que mv tp*.c tpC déplace dans le répertoire tpC tous les fichiers ayant n'importe quoi entre tp et .c. 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 SECTEUR NTIC

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC

10/59

-

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 sortie standard le contenu d'un fichier.

La commande tac est homologue à cat mais affiche le contenu d'un fichier en partant de la dernière ligne vers la première.

Par combinaison de ces commandes au sein de tubes, on peut former des commandes complexes très utiles.

Afficher l'entête (head)

Afficher le contenu d'un fichier (cat) La commande cat permet d'afficher sur la sortie standard l'entier contenu d'un fichier. En voici les options : - v (Verbose) permet de convertir les caractères spéciaux des fichiers binaires en caractères affichables - n (Number) numérote les lignes - b (number nonBlank) numérote que les lignes non vides - E (show Ends) affiche le symbôle $ (dollard) à la fin de chaque ligne - s (Squeeze blank) n'affiche au plus un ligne vide - T (show Tab) affiche les caractères tabulations comme ^I - A (show All) équivalent à -vET - e équivalent à -vE - t équivalent à -vT. Syntaxe : cat fichier 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 disfonctionnement du terminal d'affichage. Exemple : cat -v /bin/ls 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 caractères à l'intérieur d'un programme. A l'origine, cat permet de concaténer des fichiers et d'en renvoyer le résultat sur la sortie standard. Syntaxe : cat fichier_1 fichier_2 fichier_3 Exemple : cat lettre.txt rapport.txt conclusion.txt L'exemple précédent affiche à l'écran le contenu des fichiers lettre.txt, rapport.txt et conclusion.txt. Au lieu d'afficher sur la sortie standard le résultat de cette concaténation, on peut la rediriger vers un fichier.

La commande head permet de n'afficher que les permières lignes d'un fichier (10 par défaut). En voici les options : - cN affiche les N premiers octets - nN affiche les N premières lignes - q n'affiche pas le nom du fichier - v affiche le nom du fichier avant d'en afficher l'entête. Syntaxe : head fichier Exemple : head lettre.tex Dans cet exemple, il s'affiche les 10 premières lignes du fichier lettre.tex, si ce dernier en contient moins de 10, il sera affiché dans sa totalité. Exemple : head -n5 lettre.tex Affichage des 5 premières lignes. Exemple : head -vc20 lettre.tex Affichage des 20 permiers caractères après le nom du fichier.

Afficher la fin (tail) La commande tail permet de n'afficher que les dernières lignes d'un fichier (10 par défaut). Elle est homologue à head et possède les mêmes attributs. Syntaxe : tail fichier Exemple : tail lettre.tex Dans cet exemple, il s'affiche les 10 dernières lignes du fichier lettre.tex, si ce dernier en contient moins de 10, il sera affiché dans sa totalité. Exemple : tail -n5 lettre.tex 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

-

Les commandes more et less permettent d'afficher page par page des fichiers volumineux sur la sortie stantard.

Support de Formation Linux & SHELL

-

14/59

-

Syntaxe : sort fichier 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.

Numérotation des lignes (nl) La commande nl permet l'affichage du contenu d'un fichier et en numérote les lignes. En voici les options : - bt numérote les lignes non-vides (par défaut) - ba numérote toutes les lignes - bpXXX numérote seulement les lignes qui contiennent la chaîne de caractères XXX - sX supprime le décalage du à la numérotation et utilise le séparateur X - s'XXX' supprime le décalage du à la numérotation et utilise la chaîne 'XXX'

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 différencier majuscules et minucules (f).

Découpage (split) La commande split permet de découper un fichier en plusieurs plus petits. Ses options sont : - b n (Bytes) découpage par blocs de n octets ou - l n (Lignes) découpage par blocs de n lignes Syntaxe : split fichier

Syntaxe : nl fichier Exemple : split -b 135000 vacances.mpeg Exemple : nl lettre.tex Affiche le contenu du fichier lettre.tex en insérant le numéro de chaque ligne en début de ligne avec un espace comme séparateur entre le numéro et le premier caractère de chaque ligne. Ne numérote que les lignes non vides. Les lignes vides sont affichées. Exemple : nl -ba lettre.tex Numérote et affiche toutes les lignes du fichier. Synonyme de cat -n lettre.tex. Affichage sans doublon (uniq) La commande uniq permet d'afficher le contenu d'un fichier ligne par ligne en ométant les doublons. En voici les options : - u affichage sans doublon (par défaut) - d affichage des doublons - c comptage des doublons

Ici on découpe le fichier vacances.mpeg qui est une vidéo volumineuse en fichiers de 1.35 Mo afin de la sauvegarder sur disquettes (de capacité maximum de 1.44 Mo). 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 lexicographique naturel (descendant de 'a' vers 'z'). Pour changer le préfixe, il suffit de le spécifier en fin de commande. Exemple : wc -l 100 /var/log/httpd/access.log access.log. Ici on découpe le fichier de log du serveur HTTP en plus petits fichiers de 100 lignes chacun. Dont le nom sera du type access.log.aaa, access.log.aab... Note : pour découper des fichiers texte brut, faire la découpe en nombre de lignes. Tandis que pour découper les fichiers binaires, utiliser la découpe en nombre d'octets.

Syntaxe : uniq fichier Exemple : uniq lettre.tex Affiche le contenu du fichier lettre.tex sur la sortie standard en ométant les duplications de lignes lorsqu'elles sont contigues.

Affichage avec tri (sort) La commande sort permet de trier les lignes d'un fichier. En voici les options : - b ignore les espaces en début de ligne - d ordre alphabétique (A-Z, a-z, 0-9, espace) (par défaut) - f ignore la casse - n ordre numérique - r inverse l'odre de tri.

Etude d'un cas d'école : on dispose du fichier cours_de_c.pdf qu'on souhaite 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 copier directement sur disquette. 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 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 disquettes dont on dispose. Commande : split -b 130000 cours_de_c.pdf.gz cours_de_c.pdf.gz. 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

cours_de_c.pdf.gz.aa (1.3 Mo) cours_de_c.pdf.gz.ab (1.3 Mo) cours_de_c.pdf.gz.ac (200 Ko) que l'on va copier chacun dans une disquette. Pour retrouver le fichier de départ, on concatène et on décompresse. Commandes : cat cours_de_c.pdf.gz.* > cours_de_c.pdf.gz gunzip cours_de_c.pdf.gz acroread cours_de_c.pdf

Différences (diff) La commande diff permet de comparer le contenu de deux fichiers pour en conaître les différences. Ceci est très pratique pour savoir si deux fichiers ont le même contenu. En voici quelques options : - b ignore les différences du à des espaces blancs - 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 - r comparaison récursive des fichiers d'un répertoire, sous répertoires...

-

Support de Formation Linux & SHELL

-

16/59

-

Syntaxe : wc fichier Exemple : wc mail.txt Sans options, wc renvoie atomatiquement le nombre de de lignes (l), de mots (w) et de caractères (c). Exemple : wc -lL mail.txt Renvoie le nombre de lignes (l) et la taille maximale d'une ligne (L). Exemple : $ wc mail.txt 12 108 671

mail.txt

Dans l'exemple précédent, le fichier mail.txt comporte 12 lignes, 108 mots et 671 caractères.

Type de fichier (file) 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 3a4 > .signature.old Ici on peut voir qu'il y a une différence entre les ligne 3 et 4 dans le fichier .signature.old où i ly a une ligne insérée. S'ils avaient été égaux, diff n'aurait rien affiché. Exemple : $ split -q .signature .signature.old Files .signature and .signature.old differ Exemple : $ split -q .signature .signature Files .signature and .signature are identical

Cette commande retourne le type d'un fichier passé en paramètre. Pour opérer, elle fait appel à un fichier qui contient les signatures binaires d'un grand nombre de fichier. Elle est par exemple capable de fournir les caractéristiques du système qui a compilé un fichier exécutable parmis plusieurs centaines. Exemple : $ file ../* ../DATA: directory ../cv.doc: Microsoft Word document ../tp6.c: program text C++ ../mail.txt: international ascii text 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 - L (Length max ligne) affiche la longueur de la ligne la plus longue

Création d'un fichier (touch) 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

Syntaxe : touch fichier

dans un fichier.

Appliquée à un fichier déjà existant, elle modifie son heure de dernier accès et met cette dernière à l'heure courante par défaut.

Syntaxe : md5sum -c condensat fichier

-

18/59

-

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) Présentation

Exemple : $ md5sum -c upload.md5 -v 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.

A quoi ça sert ? Lorsque l'on transmet des messages ou des fichiers par mail, ftp ou http ; il est utile de savoir si le fichier reçu à destination n'a pas subit d'altération pendant son 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. 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 transfert. Et R va demander à E de le lui renvoyer.

Recherche de fichiers (find) La commande find est ultra puissante, elle permet de faire une recherche sur le système de fichier et d'afficher la liste des fichiers satisfaisant à une combinaison de critères très variés.

Introduction Syntaxe : find répertoire critères [-print] Exemple : find . -name "*.c" -print

Exemples La fonction md5sum calcul le condensat d'un fichier selon l'algorithme MD5. En voici les options : - b voit le fichier en binaire et pas en texte brut - v mode verbeux - c fichier compare le condensat avec celui enregistré dans le fichier

L'exemple précédent lance la recherche depuis le répertoire courant (.) et affiche le résultat de la recherche (print). Le critère de recherche porte sur le nom (name) et doit satisfaire le motif (expression régulière) suivant : "*.c" c'est-à-dire tous les fichiers d'extention .c (autrement dit les programmes sources écris en langage C). Exemple : find . -mtime +7 -print

Syntaxe : md5sum [options] fichier Exemple : $ md5sum upload.zip 607cdbaeef8f20be5dcb428f007c9696 upload.zip La commande md5sum affiche le condensat (607cdbaeef8f20be5dcb428f007c9696) et le nom du fichier (upload.zip).

Cet exemple recherche et affiche (print) les fichiers dont la date de dernière modification (mtime : Modify Time) remonte à plus de 7 jours (+7). 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 modifiés exactement il y a 10 jours.

Liste des critères de recherche Pour transmettre ce condensat, on fait une redirection de l'affichage vers un fichier. Syntaxe : md5sum fichier > condensat Exemple : md5sum upload.zip > upload.zip.md5

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 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 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

Option

Description

print

affiche le résultat

name motif

nom du fichier

iname motif

idem mais sans tenir compte de la casse

-

19/59

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

atime +n|-n|n

nombre de jours depuis la date de dernier accès

mmin +n|-n|n

nombre de minutes depuis la date de dernière modification

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

type type

type du fichier b (fichier spécial en mode bloc), c (fichier special en mode caractère), d (répertoire), p (tube nommé), f (fichier normal), l (lien symbolique), s (socket)

uid n

le fichier porte le numéro de propriétaire spécifié

gid n

idem pour numéro de groupe

size n

le fichier est de taille spécifiée dont il faut préciser l'unité : b (bloc de 512 octets, par défaut), c (octet), k (Ko)

used n

nombre de jours entre la création et le dernier accès au fichier

perm +n|-n|n

valeur numérique des droits d'accès au fichier

user nom

le propriétaire du fichier a pour nom celui passé en paramètre

group nom

idem pour le groupe

inum n

numéro d'inode du fichier

links n

nombre de liens du fichier

-

Support de Formation Linux & SHELL

true

-

20/59

-

renvoie toujours vrai

Les options doivent êtres précédées d'un trait d'union (-) et leur paramètre éventuel séparé par un espace. Les paramètres numériques n peuvent être passé en valeur absolue (par exemple 7) ou bien en valeur relative (+2 ou -20).

Combinatoire des tests Chacune des options du tableau précédent constitue un test. La commande find offre une algèbre booléenne permettant de combiner à l'aide d'opérateurs les tests souhaités afin de former une expression complexe. Les opérateurs suivants sont présentés dans l'ordre de priorité décroissante. 1. ( expr ) force la priorité d'évaluation 2. ! expr négation logique (devien vrai si était faux et inversement) 3. -not expr idem 4. expr_1 expr_2 expr_2 est évaluée si expr_1 est vrai 5. expr_1 -a expr_2 idem 6. expr_1 -and expr_2 idem 7. expr_1 -o expr_2 expr_2 n'est pas évaluée si expr_1 est vrai 8. expr_1 -or expr_2 idem 9. expr_1, expr_2 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 oubliettes.

newer fichier

le fichier est plus récent que celui passé en paramètre

anewer fichier

on a accédé au fichier plus récemment qu'on a modifié celui passé en paramètre

cnewer fichier

on a accédé au fichier plus récemment qu'on a créé celui passé en paramètre

nouser

aucun utilisateur dans le système ne correspond au UID du fichier

nogroup

aucun groupe ne correspond au GID du fichier

empty

le fichier est vide et il est soit un fichier normal soit un répertoire

Combinatoire des commandes précédentes

false

renvoie toujours faux

Exemple :

Ainsi dans les exemples précédents, les critères étaient évalués de gauche à droite tant que que le précédent renvoyait vrai. Exemple : find . -not -name ".c" -print Cet exemple affiche sur la sortie standard la liste des fichiers qui ne portent pas l'extention ".c".

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

SECTEUR NTIC

SECTEUR NTIC

Support de Formation Linux & SHELL

-

21/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." 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 numérote le résultat, on en prend que les 5 premières lignes. De ces 5 premières lignes, en ne prend que les 3 dernières (c'est-à-dire en fin de compte les lignes 3 à 5). On renverse une nouvelle fois le résultat!

-

Support de Formation Linux & SHELL

-

22/59

III. Droits d'accès aux fichiers 1. Notion de droits (permissions) 2. Affichage des droits (ls) 3. Droits d'accès 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 fichier selon la catégorie d'utilisateurs.

Lecture

Ainsi les manipulations de fichiers sont restreintes selon les droits alloués à chaque fichier. A chaque catégorie d'utilisateur correspond des droits spécifiques sur un fichier.

L'accès en lecture autorise la lecture du fichier, c'est-à-dire qu'il est possible d'éditer ce fichier avec une application quelconque pour en voir le contenu. Cet 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 permet de lister les fichiers d'un répertoire avec toutes les informations connexes possibles dont les droits du fichier.

L'accès en écriture permet de modifier un fichier et de le supprimer. Il est désigné par la lettre w (write).

Exemple : ls -l -rw-r--r-- cyberzoide univ astuces.txt drwxr-xr-x cyberzoide univ data -rw-r--r-- cyberzoide univ lettre.doc -rw------- cyberzoide univ Mail 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 fichier et enfin le nom du fichier.

Alloué à un répertoire, il autorise la modification et la suppression des fichiers qu'il contient quelques soient les droits d'accès des fichiers de ce répertoire (mêmes s'ils ne possèdent pas eux-même le droit en écriture). Donc attention!

Exécution 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). Pour qu'un programme puisse être exécuté, il est indispensable que le droit en 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 - pour les fichiers normaux et les exécutables).

Quant à un répertoire, il est tout aussi indispensable que son droit en exécution 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 nom est cyberzoide. Ce propriétaire daisant partie du groupe appelé univ. Vous apprendrez par la suite la significations des lettres r, w et x.

Ce droit en exécution est sans effet lorsqu'il est affecté à un fichier qui n'est pas un exécutable.

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).

Modèle concentrique des droits d'accès

A chaque catégorie d'utilisateur on associe un triplet de droits : lecture, écriture et 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 à accéder aux données).

Triplet Droits correspondants ---

L'accès à un sous ensemble concentrique suppose a priori d'obtenir des droits supplémentaires.

Identification des droits Identification globale

aucun

--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.

Droits

Description

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

SECTEUR NTIC

SECTEUR NTIC

Support de Formation Linux & SHELL

-

27/59

-

globaux rwxr-xr-x

Le propriétaire a tous les droits, et le groupe ainsi que les autres n'ont pas accès en écriture.

rwxr--r--

Le propriétaire a tous les droits, et le groupe ainsi que les autres n'ont accès qu'en lecture.

rwxr-x---

Le propriétaire a tous les droits, le groupe possède les droits de lecture et d'exécution alors que les autres n'ont aucun droit.

rwx------

Le propriétaire a tous les droits mais le groupe et les autres aucun.

rw-r--r--

Le propriétaire possède les droits de lecture, écriture mais pas exécution. Et le groupe et les autres ont le droit en lecture.

rw-rw----

Le propriétaire et le groupe ont le droit en lecture et écriture mais les autres n'ont aucun droit.

Support de Formation Linux & SHELL

+

ajouter

-

retirer

=

définir

Droit

-

28/59

Description

r

lecture

w

écriture

x

exécution

Comme le montre le tableau ci-dessous, la commande chmod lorsqu'elle est utilisée en notation symbolique ne permet de modifier les droits que pour une catégorie d'utilisateurs à la fois. On peut retirer, ajouter ou définir un ou plusieurs droits en même temps.

Changement des droits (chmod) Il est offert au propriétaire d'un fichier (et seulement à lui seul) de modifier les droits du fichier. C'est-à-dire qu'il peut supprimer des droits ou bien en rajouter de nouveaux à chacune des trois catégories d'utilisateur. Pour cela, on utilise la commande chmod (change mode) selon la syntaxe suivante : chmod droits fichier. 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 symbolique

Exemple

Description

chmod g=rwx temps.txt Alloue au groupe tous les droits. chmod g-w temps.txt

Retire au groupe le droit d'écriture.

chmod a-rwx temps.txt

Retire aux autres tous les droits.

chmod u=rw temps.txt

Alloue au propriétaire les droits en lecture et en écriture.

chmod a+r temps.txt

Rajoute aux autres le droit en lecture.

Notation numérique

Pour affecter à chaque catégorie les droits voulus, on peut utiliser une notation symbolique selon la syntaxe :

L'avantage de la notation numérique sur la précédente est de permettre sur un fichier la définition absolue des droits de toutes les catégories en même temps 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 remplacés par leur notation décrite dans les tableaux suivants.

Ainsi on remplace chacun des triplets par un nombre compris entre 0 et 7. Ce qui nous fait un nombre à trois chiffres en guise de notation numérique.

Catégorie Description

Le tableau ci-après permet de faire la convertion entre les différentes triplets 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

-w-

010

2

-wx

011

3

r--

100

4

r-x

101

5

rw-

110

6

rwx

111

7

-

29/59

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, puisque cette numérotation est la convertion en octal de la représentation binaire 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 convertir en octal (ce qui revient à du décimal car on ne passe pas aux dizaines dans la base 8).

-

Support de Formation Linux & SHELL

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 droits à allouer aux fichiers, mais celle correspondant aux droits à ne pas allouer. Le système Unix affecte à un fichier les droits globaux résultant de la soustraction des droits maxima 777 par le masque de protection. Exemple : si le masque de protection vaut 037 alors 740 (=777-037) seront les droits alloués à tout nouveau fichier. La commande permettant de définir un nouveau masque de protection est umask. Syntaxe : umask droits Exemple : umask 037

chmod 640 temps.txt

rw-r-----

chmod 700 temps.txt

rwx------

777 = rwx rwx rwx = 111 111 111 - 037 = --- -wx rwx = 000 011 111 = 740 = rwx r-- --- = 111 100 000

chmod 661 temps.txt

rw-rw-r--

chmod 761 temps.txt

rwxrw-r--

chmod 610 temps.txt

rw-r-----

Un programme ne peut être exécuté que si le fichier exécutable coorespondant possède le droit d'exécution dans la catégorie à laquelle appartient l'utilisateur.

D'après cet exemple, tout nouveau fichier aura les droits 740 (rwxr-----) car le masque de protection vaudra 037 (----wxrwx). Pour connaître la valeur du masque de protection, tapez umask sans attribut.

Remarque Lors de la création d'un fichier, même si le masque de protection spécifie le droit 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 faudra lui rajouter manuellement le droit en exécution.

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 lecture.

Fichier 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é et exécuté par le Shell.

Masque de protection des fichiers (umask)

-

Manipulation

Droits globaux associés

Exécutable

30/59

Le masque de protection de fichier permet de définir les droits par défaut de tout fichier créé.

Exemple

Remarques importantes

-

Droits étendus SUID Définition 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. 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

Exemple 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 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é dans le fichier /etc/passwd (rw-r--r--) appartenant à root dont vous n'avez pas les droits en écriture. Comment donc modifier votre mot de passe si vous n'êtes pas autorisé à écrire sur le fichier stockant les mots passes ?!! Pour des raisons de sécurité évidentes, le root interdit à quiconque de pouvoir modifier ou supprimer ce fichier. Par contre le programme /usr/bin/passwd vous y autorise grace au droit SUID : vous utilisez le droit en écriture du root durant l'exécution du programme qui change votre mot de passe.

Nota : la présence du droit SUID suppose la présence du droit en exécution qui permet de lancer le fichier exécutable.

SGID Le droit SGID fonctionne différemment selon qu'il est affecté à un fichier exécutable ou à un répertoire.

Exécutable 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 appartient le propriétaire de l'exécutable et non plus les droits du propriétaire.

Répertoire Tout fichier créé porte les droits du masque de protection de son propriétaire. De plus, tout fichier porte un UID (identificateur de 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 du groupe auquel appartient le propriétaire. Le droit SGID, lorsqu'il est affecté à un répertoire, casse cette logique. Puisque tout nouveau fichier créé dans un répertoire marqué par le SGID sera de groupe non pas celui du propriétaire du fichier mais celui du 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 Syntaxe : chmod u+s fichier-exécutable.

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.

Notation symbolique

Exemple : chmod u+s data/hotprog. Syntaxe : chmod g+s fichier-exécutable|répertoire.

Notation numérique

-

Dans cet exemple on donne les droits rwsr-xr-x au fichier monprog. Ne pas oublier que le droit SUID s'affiche à la place du droit en exécution du propriétaire sans que ce dernier soit supprimé!

Mais il est quelque fois nécessaire de permettre à d'autres utilisateurs l'accès à des données normalement protégées. Ce droit SUID permet de préter à un utilisateur de façon temporaire, des droits suplémentaires par l'intermédiaire d'un programme (fichier exécutable).

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 à ces fichiers est filtré par un programme qui est seul à prendre des initiatives sur ces fichiers.

32/59

Exemple : chmod 4755 monprog.

droits de l'utilisateur pour la manipulation des fichiers et non pas ceux du propriétaire du fichier (sinon quel souk!).

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 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.

-

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

Dans cet exemple on donne les droits rwxr-sr-x au fichier monprog. Ne pas oublier que le droit GUID s'affiche à la place du droit en exécution du groupe sans que ce dernier soit supprimé!

Quand un utilisateur se connecte, il fournit un nom de connexion (login name) et un mot de passe (password). Si la connexion réussit, un shell est lancé et l'utilisateur se retrouve dans son répertoire de travail (working directory) qui est initialement son répertoire de connexion (login directory). Ces 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 répertoire.

Les utilisateurs sont définis au sein du fichier /etc/passwd. En voici sa structure : user:passwd:UID:GID:commentaire:homedir:commande

Il permet d'interdire à tout utilisateur (sauf le root) de supprimer un fichier dont il n'est pas le propriétaire, quelque soient ses droits. 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 les fichiers d'une suppression ou modification de la part d'un utilisateur autre que son propriétaire. Ce bit collant permet donc d'aller à l'encontre du droit en écriture d'un répertoire dont héritent les fichiers du répertoire.

Champs

Contenu

user

nom de connexion (login) de cet utilisateur mot de passe crypté. S'il est remplacé par une *, ou un x, son contenu est placée dans /etc/shadow. S'il est absent il n'y a pas de mot de passe. Si ! : compte verrouillé.

passwd

UID

User Identification, numéro d'identification de l'utilisateur. L'utilisateur root à l'UID 0, les numéros inférieurs à 100 sont des utilisateurs spéciaux. Généralement un Unix peut gérer plus 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.

GID

Group Identification, numéro du groupe d'appartenance de l'utilisateur. Les groupes supplémentaires sont définis dans /etc/group

Sa valeur numérique est 1000 et est représenté symboliquement par t. Exemple : chmod 1755 tmp/. Exemple : chmod a+t tmp/.

Commentaire

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

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. Répertoire de connexion, ou home directory / login directory. Si l'utilisateur est toto, le répertoire est généralement /home/toto

homedir

commande

Commande à exécuter lors de la connexion de l'utilisateur. C'est généralement le shell (/bin/sh, /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 group

passwd

Contenu nom du groupe mot de passe pour un utilisateur désirant changer de groupe sans en faire partie. Peu utilisé. (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

2.3. Commandes

On crée un utilisateur le plus simplement avec

La commande passwd permet de changer le mot de passe, etdispose de plusieurs options.

useradd -m user 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é



passwd -d nom_user : supprime le mot de passe



passwd -l nom_user : verrouille le compte



passwd -f nom_user : force le changement de mot de passe à la prochaine connexion

-

36/59

-

La commande usermod modifie ces valeurs (mêmes paramètres) mais permet aussi de verrouiller un compte :



-l login : modification du login



-L : lock password (verrouillage)



-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)



usermod : modification d'un compte utilisateur



userdel : supprime l'utilisateur (deluser parfois sous Linux)



groupadd : ajout d'un groupe



groupmod : modification d'un groupe



groupdel : supprime un groupe



pwck : vérification de la cohérence de /etc/passwd



grpck : vérification de la cohérence de /etc/group



finger : informations sur un utilisateur



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 /tmp/libre Exécution d'une commande tous les jours ouvrables à 17 heures : 0 17 * * 1-5 fin_travail.sh

1.

Les files d'attente de message FIFO (« Message Queue ») que les processus utilisent pour échanger 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 données dans une zone commune.

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.

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



ipcs -s : uniquement les sémaphores

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

Les informations retournées sont les suivantes :

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)



ID : Identifiant de l'IPC (fourni par le noyau)



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



MODE (1) : les attributs



R : un processus attend une réception de message



S : un processus attend de pouvoir envoyer un message



D : une zone de mémoire partagée a été supprimée et disparaîtra quand le dernier processus s'en détachera

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 en dur dans le noyau, soit passé comme paramètre depuis le secteur de boot. Une fois cette partition montée, le noyau a donc accès à une partie de l'arborescence (/sbin, /etc, /lib, ...) et démarre le premier processus, init 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é



MODE (2) : les droits



r : droits de lecture



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

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 disque, secteurs contenant le noyau. Le noyau Linux est compressé. Le début de l'image du noyau contient le code permettant de la décompresser, puis l'image ainsi décompressée est exécutée.

Dans certains cas (plantage de filesystem, impossibilité de redémarrer le système UNIX, maintenance 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 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.

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 (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 création de l'arborescence de tous les processus nécessaires au bon fonctionnement du système.



sysinit : exécuté une fois lors du chargement du système



boot : exécuté lors du premier passage à ce niveau



bootwait : idem mais init attend la fin de l'exécution de la commande pour continuer



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 de niveau concerné



wait : idem mais avec attente de fin d'exécution



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.



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.



ctrlaltdel : spécial (linux) réaction à la combinaison des touches Crl+Alt+Del

7.2.1. Notion de runlevels Un Unix propose plusieurs niveaux de fonctionnement ou runlevels. Chaque niveau propose des services 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 ê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).

Niveau

Convention Arrêt du système effectué par la commande init 0

0

shutdown -h sous Linux



commande : la commande à exécuter avec ses paramètres et les redirections.

1

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

2

Mode multi-utilisateurs, réseau activé avec services réseaux de base comme telnet (sans services réseau sous Linux)

3

Mode multi-utilisateurs avec services réseau sous Linux, comme NFS

# Pour le runlevel 3, on exécute la commande rc avec 3 comme paramètre l3:3:wait:/etc/rc.d/rc 3

4

Mode multi-utilisateur spécifique, à construire soit-même

# Terminal pour les niveaux 2 3 4 et 5. S'il se termine il est relancé 1:2345:respawn:/sbin/getty 9600 tty1

5

Voici un exemple : # Le runlevel par défaut est le 3 id:3:initdefault:

Sur certains Unix et suivant l'architecture matérielle, maintenance matérielle depuis un firmware de la machine.

7.2.3. Commandes

Sous Linux mode multi-utilisateurs avec interface graphique (lancement de xdm au lieu du login console)

La commande « who -r » donne le runlevel courant. 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 pseudoniveaux a b et c permettant d'exécuter les nouvelles commandes d'un niveau sans relancer celles déjà en cours.

7.2.2. /etc/inittab Le comportement du processus init et des runlevels est défini dans le fichier /etc/inittab. La syntaxe d'une ligne est la suivante : Id:[niveaux]:action:commande

Il existe deux principes de fonctionnement des scripts de démarrage. L'un est orienté BSD avec l'utilisation d'un 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. Suivant les distributions Linux nous trouvons l'une ou l'autre de ces solutions. Sur les distributions Mandrake et Red Hat, c'est la méthode SYSTEM V qui est utilisée.

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



Id : Identifiant de ligne sur quatre caractères, juste indicatif (sauf sous Linux et getty : numéro de terminal)

Dans inittab nous voyons que des scripts sont exécutés suivant les runlevels. Par exemple /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 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



/etc/rc.d : contient les scripts permettant l'arrêt et le redémarrage des services (rc, rc.local), l'initialisation du système (rc.sysinit), le chargement de modules (pilotes supplémentaires rc.modules), ...



/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),



/etc/rc.d/ : un répertoire par niveau (rc3.d, rc5.d), contenant des liens vers les scripts contenus dans /etc/rc.d/init.d.

-

Les liens contenus dans /etc/rc.d/rc3.d (par exemple) ont des noms spécifiques :



Snn : S pour start, nn est une valeur numérique sur deux caractères (01 05 10 15 ou autre) déterminant l'ordre de lancement des services



Knn : K pour Kill, nn la valeur déterminant l'ordre d'arrêt des services.

Execution des scripts 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 fait la même chose pour S* cette fois en lançant les services. Voici un exemple de script pour le démarrage : if [ -d /etc/rc${level}.d ] then for i in /etc/rc${level].d/S* do if [ -s ${i} ] then sh ${i} start fi done fi

Support de Formation Linux & SHELL



-f : full-restart, redémarrage complet du service



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



-s : status-all : statut de tous les services lancés



-d : debug, informations complémentaires

7.4. Ouverture de session 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 va demander la saisie du mot de passe. Si le mot de passe est correct (vérification dans /etc/passwd et /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 login, lui-même étant un fils du terminal, mais cette vision tend à disparaître. Une fois la session terminée (fin du shell), init relance un terminal pour une nouvelle connexion.

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/), 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

-

service [-f -R -s -d] action

S01init S05network S10nfs S15usb S20sound



46/59

Sous Linux, le répertoire /var/lock/subsys contient la liste des services lancés, un fichier par service. Le répertoire /var/run contient dans certains cas la liste des PID et des fichiers de verrouillage de certains services. La commande service permet d'effectuer des actions sur les services sans se déplacer dans /etc/rc.d/init.d.

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 :



-

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 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 modem (et lancer ensuite une session ppp par exemple).



Que faut-il sauvegarder ?



Avec quelle fréquence ?



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é ?



Quels sont les besoins, en capacité, du support de sauvegarde ?



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 ?



Quelle est la méthode de sauvegarde la plus appropriée ?

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 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. 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. Certains systèmes permettent de spécifier un autre message d'information que celui par défaut. Syntaxe sur Unix AT&T (System V) shutdown [-y] [-g delai_de_grâce] [-i niveau] L'option -y supprime les demandes de confirmation, l'option -g permet de modifier le délai avant l'arrêt, qui est par défaut de 15 secondes, et enfin l'option -i permet de définir le niveau dans lequel on souhaite redémarrer. Syntaxe pour Linux : 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 à 20 heures), le mode un texte affiché aux utilisateurs. La commande « halt » est l'équivalent d'un shutdown -h now (arrêt définitif). La commande « reboot » est l'équivalent d'un shutdown -r now (redémarrage). La combinaison de touches ALT+CTRL+DEL lance un reboot.

Voici quelques autres commandes :



mt : contrôle d'une bande magnétique



touch : met la date de dernière modification à l'heure actuelle, pour forcer une sauvegarde incrémentale



find : sélectionne les fichiers à sauvegarder



compress et uncompress : compression et décompression des fichiers



gzip, gunzip, zcat, compression et décompression au format GnuZip.

5.1.2. Sauvegarde par tar On emploie très souvent la commande tar car elle est simple et efficace. Elle sauvegarde des fichiers, y compris l'arborescence de fichiers. L'archive ainsi créée peut s'étendre sur plusieurs volumes : quand la bande ou la disquette est pleine, c'est à l'utilisateur d'en insérer une nouvelle et la sauvegarde/restitution continue.

5. La sauvegarde

Pour une sauvegarde :

5.1. Les outils de sauvegarde

tar cvf nom_archive Fichier(s) tar cvf archive1.tar /home/*

La sauvegarde est un travail important de l'administrateur puisqu'en cas de gros problème, on passe généralement par une restauration du système depuis une sauvegarde ou une image du système lorsque celuici était encore intègre (bon fonctionnement, pas de corruption). Chaque Unix arrive avec des commandes et des procédures de sauvegarde qui lui sont propres. On distingue tout de même quelques outils communs.

5.1.1. Commandes, plans, scripts •

Pour la sauvegarde de fichiers et d'arborescences, on utilise les commandes tar, cpio et pax. Ces commandes sauvent une arborescence, et pas un système de fichiers. On peut faire coïncider les deux.



Pour la sauvegarde physique de disques et de systèmes de fichiers, on utilise la commande dd et la commande volcopy.



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, mais là chaque OS vient avec ces propres outils. On trouve aussi en libre ou dans le commerce des solutions plus pointues.

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 fonction de la date, l'heure ou la charge machine. Il sera aussi très important de définir un plan de sauvegarde, en se posant les bonnes questions :

-



c: création d'archive



v : mode bavard 'verbose' : dit ce qui se fait



f : le paramètre suivant est le nom de l'archive

Pour lister le contenu de l'archive : tar tvf nom_archive tar tvf archive1.tar



t : liste le contenu de l'archive

Pour une restauration : tar xvf nom_archive fichiers tar xvf archive1.tar



x : extraction de l'ensemble des fichiers de l'archive, ou du ou des fichiers spécifiés.

Autres clés et paramètres :

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

SECTEUR NTIC

SECTEUR NTIC

Support de Formation Linux & SHELL

-

49/59



r : les fichiers sont ajoutés à la fin de l'archive. Ne fonctionne pas avec les bandes et cartouches.



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é)



[LINUX] z : l'archive est compressée au format gzip.



[LINUX] Z : l'archive est compressée au format compress.



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

-



-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)

-

Argument

utilisation

if=fichier

« fichier » désigne le ficher à copier, à défaut l'entrée standard.

of=fichier

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

bs=valeur

« valeur » désigne la taille commune du bloc pour les fichiers d'entrée et de sortie, par défaut à 512 octets.

skip=n

nombre de blocs qu'il faut sauter au début du fichier d'entrée.

seek=n

nombre de blocs à sauter au début du fichier de sortie

count=n

nombre de blocs à copier

conv=...

Conversion lors de la copie (lcase : minuscule, ucase : majuscule, ascii, abcdic, swab : permutation des 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 : -v : mode bavard « verbose », informations détaillées

50/59

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.

5.1.3. Sauvegarde par cpio



-

Support de Formation Linux & SHELL

Pour une sauvegarde : cpio -oL



o : output, creation de la sauvegarde en sortie



L : sauve les fichiers liés et pas les liens symboliques

Pour lister le contenu de l'archive :

Exemple sous Linux : 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. dd if=/dev/hda5 of=boot.lnx bs=512 count=1

cpio -it



i : lecture de l'archive en entrée



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

Pour une restauration :

9. Disques physiques et logiques 9.1. Les disques 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]



u : restauration inconditionnelle, avec écrasement des fichiers qui existent déjà. Par défaut les fichiers ne sont pas restaurés si ceux présents sur le disque sont plus récents ou du même âge.



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



d : cpio reconstruit l'arborescence des répertoires et sous-répertoires manquants.

Exemples :

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 fichiers « classique ». Les écritures sont asynchrones, le noyau gérant dans ce cas un cache « buffer ». Exemple de disque : /dev/dsk. Un disque en accès par caractère ou « raw device » est utilisé directement par un logiciel, par exemple un 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. 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 : find . print | cpio -ocvB | compress > /dev/fd0



Restauration cat /dev/fd0 | uncompress | cpio -iuvBd

5.1.4. Sauvegarde par dd 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

La reconnaissance et la gestion des disques physiques sont différentes selon la version d'Unix utilisée. Il faudra alors se reporter au manuel et à la documentation spécifiques au système. 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, ... Nomenclature sous Linux :



/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



/dev/hda1-2 : Partitions principales (max théorique de 4)



/dev/hda3 : Partition étendue (pour ajout de partitions logiques)



/dev/hda5-x : Partitions logiques étendues



/dev/hdb : 2nd disque physique IDE (IDE0, slave)



/dev/hdc : 3eme disque physique IDE (IDE1, Master)



/dev/hdd : 4eme disque physique IDE (IDE2, Slave)



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



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



/dev/sdb : 2nd disque SCSI (0:1)



/dev/fd0 : 1er lecteur de disquettes

-

51/59

-

Sous Linux, il est possible de gérer des contrôleurs IDE supplémentaires sans limite théorique. Dans le cas de 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. 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.

9.2. Ajout de disques Là encore la procédure dépend du système Unix utilisé mais les étapes de base sont généralement les mêmes :

Support de Formation Linux & SHELL

-

52/59

-

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. Bandes de données (« data striping », « striped disk ») 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 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. Disques RAID La mise en oeuvre de ces deux techniques passe généralement par la technologie RAID « Redundant Arrays of Inexpansive/Independant Disks », inventée par l'université de Berkeley en Californie.

Niveau

Spécificité

RAID 0

Un disque sans redondance avec bandes : agrégat de plusieurs partitions en une seule.

RAID 1

Des disques en miroir, mirroring

RAID 2

Miroir avec écriture en parallèle et correction d'erreur (« EEC »)

RAID 3

Écriture en parallèle avec contrôle de parité.

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, Lun SCSI, ...).

RAID 4

Bandes avec parité, la bande de parité est sur un seul disque

2.

Sous le système Unix, il faut vérifier que le noyau supporte bien le contrôleur désiré (IDE, SCSI) et éventuellement le paramétrer pour disposer du bon pilote.

RAID 5

Bandes avec parité, la bande est répartie sur plusieurs disques. Tolérance de panne d'un seul disque.

3.

Formater le disque, ce qui consiste à la sectorisation du disque, la création d'une table de partitions et la recherche de blocs défectueux.

RAID 6

Bandes avec deux fonctions de parité, réparties sur deux disques. Tolérance de panne de deux disques simultanés.

1.

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é).

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.

Sous Linux, les étapes 3, 4 et 5 sont liées. En effet Le formatage du disque est lié au partitionnement. La 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 commande mkfs, avec éventuellement une recherche des blocs défectueux avec la commande badblocks (ou incorporée à mkfs). Les périphériques /dev/xxx sont déjà présents. Dans les distributions Linux récentes, le répertoire /dev est dynamique (devfs) et les fichiers périphériques spéciaux apparaissent ou disparaissent à volonté.

9.3. Disques RAID et « striped disks » On distingue deux types de supports RAID : 1.

un support matériel : Le contrôleur de disque gère lui-même le RAID et la tolérance aux pannes.

2.

un support logiciel : le système Unix gère lui-même le RAID à l'aide de pilotes et d'outils particuliers propres au système. Il devient ainsi possible de faire du RAID même avec un contrôleur non prévu à cet effet.

Les solutions les plus utilisées pour la tolérance de panne sont le RAID 1 et le RAID 5.

Une solution RAID est une solution de tolérance aux pannes et ne remplace jamais une sauvegarde. Sous Linux, le RAID est possible sous toutes ses formes mais on y emploie généralement le RAID 0, 1 ou 5. En cas de RAID matériel, géré par le contrôleur, aucune configuration spécifique n'est nécessaire. Le RAID logiciel 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, y compris sur un contrôleur IDE. Voir les Howtos associés.

9.4. Groupes de volumes Un groupe de volumes « volume group » est un ensemble de disques physiques ou de volumes physiques « physical volume ». Il devient facile d'ajouter ou de retirer un volume physique d'un groupe de volumes. Un système utilisant les groupes de volumes doit disposer d'au moins un groupe de volumes lui-même constitué d'au moins un volume physique. 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

-

Si plus tard on récupère un troisième disque de 500 Mo, on pourra le rajouter dans le groupe de volumes qui 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, la création de volumes est parfaitement possible soit depuis des outils particuliers généralement 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 démarrer.

Support de Formation Linux & SHELL

-

56/59

-

Sous AT&T (SYSTEM V) on utilise la commande swap. 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 oublier de rajouter la nouvelle partition dans /etc/fstab pour le redémarrage suivant.

9.6. Raw devices 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 :

9.5. Le swap Le « swap » ou échange est un mécanisme d'échanges de données entre la mémoire physique RAM et un espace sur disque spécialement aménagé à cet effet. Il est extrêmement conseillé d'installer des partitions de swap même si la machine dispose d'une grande capacité de mémoire. En effet plus un système UNIX dispose de mémoire, plus il en alloue dynamiquement pour le cache (disques, système) et autres buffers. 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 peut varier d'un facteur ½ à un facteur 3 ou 4. On se reportera pour ça au guide d'administration de l'UNIX concerné.



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



gestion des fichiers associée à la gestion des périphériques



gestion des processus à l'aide de l'ordonnanceur (« process scheduler »)

Les processus accèdent aux services du noyau via les API « Application Programming Interface », un ensemble de fonctions système ou primitives. Le langage le plus usité dans ce cas est le langage C. Les primitives d'UNIX sont basées sur le standard d'API POSIX, définie par l'IEEE et normalisée par l'ISO. Il n'est pas forcément nécessaire de connaître la structure interne du noyau, même si cela apporte un plus, mais l'administrateur a parfois besoin d'en modifier certains paramètres, soit dynamiques, soit statiques.

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é :

11.2. Reconstruire le noyau Il existe plusieurs cas où la reconstruction d'un noyau s'avère parfois nécessaire :



Ajout d'un périphérique



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



Modification de paramètres systèmes (par exemple limite du nombre de processus), cas fréquent.



...

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. Certains paramètres systèmes peuvent être modifiés à la volée - sans recompilation ou redémarrage - à l'aide du système de fichiers spécial /proc. 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.

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

4.

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

Sous Linux, les sources du noyau sont disponibles et permettent outre sa recompilation de comprendre son fonctionnement interne.



-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

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. 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 d'état du système (chargement de pilotes, ...) Sous Linux, dmesg affiche le contenu de /var/log/dmesg. 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.

11.4. Le démon syslog Le démon syslog, un processus appelé syslogd, permet de recevoir, traiter et stocker des messages d'erreurs é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. 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 soussystèmes.

Sous-système

Signification

auth

service de sécurité et d'authentification

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

daemon kern

les démons du système

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

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

Niveau emerg alert

Signification Le système est inutilisable Une intervention immédiate est indispensable

crit

Erreur critique pour le sous-système

err

Erreur de fonctionnement

warning notice info debug none

3.

-

le noyau

lpr

2.

59/59

Avertissement Évènement normal méritant d'être signalé Pour information seulement Message envoyé pour la mise au point Ignorer les messages

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