tp3_linux

Page 1

LYCEE TECHNIQUE IBN SINA KENITRA

1. 2. 3. 4.

BTS- DSI ANNEE: 2011/2012 MODULE 04: SYSTEMES D'EXPLOITATIONS

TP 3 L'arborescence du système de fichiers d'UNIX Gestion de comptes et la politique d'accès aux fichiers d'UNIX Communication entre processus : première approche Gestion de processus : première approche

NB : Les parties correspondant à du travail à faire sont toutes en italiques.

Partie 1. L'arborescence du système de fichiers d'UNIX Notions vues dans cette partie : Noms génériques de fichiers, arborescence (./..) et méta-caractères. Une arborescence est une façon d'organiser le rangement et par conséquent l'accès aux fichiers d'UNIX. Chaque système de fichiers possède donc une et une seule arborescence qui évolue sans cesse. Ceci se concrétise par la présence d'une seule racine appelée par convention « / », de noeuds et de feuilles. Chaque noeud correspond à un répertoire de l'arborescence dans lequel on peut trouver des noeuds et/ou des feuilles. Une feuille correspond à un fichier ordinaire (différent des répertoires). On appelle répertoire d'accueil (« home directory ») l'endroit où l'interprète de commande (shell) est lancé en début de session (connexion « login/passwd »). On appelle répertoire courant ou répertoire de travail («pwd ») l'endroit de l'arborescence où l'on se trouve lorsqu'on lance des commandes. Un fichier (ordinaire ou répertoire) est donc nécessairement placé au moins à un endroit de l'arborescence. Pour manipuler ces différents fichiers il faut les nommer. On peut inclure dans leur nom, le chemin permettant de les retrouver dans l'arborescence. Par exemple le fichier « passwd » qui contient les informations concernant les différentes sessions autorisées sur la machine, se trouve dans le répertoire « etc », qui lui-même se trouve dans le répertoire racine « / ». On pourra alors directement parler du fichier « passwd » en utilisant « /etc/passwd ». • Créer à l'aide de la commande « mkdir » un répertoire de nom « rep » dans votre répertoire de travail. Placez-vous dans ce nouveau répertoire (« cd ») et examiner le contenu de ce dernier, en utilisant successivement les commandes « ls » puis « ls -al » enfin « ls -ali ». Qu'observez-vous ? Ce répertoire contient-il des fichiers ? Si oui, quels sont-ils ? • Pour vous aidez à répondre à ces questions, lancer les commandes suivantes : « $ cat . », « $ rm . » et « $ cd .. » ; puis pour chacune d'elles, expliquer le message renvoyé par l'interprète de commande (shell). • Retourner dans votre répertoire d'accueil (« home directory »), lancer la commande « ls -ali | more » (lire « pipe more »). En observant les deux premières lignes obtenues, pouvez-vous compléter la réponse à la question précédente (nature des fichiers observés) ? En généralisant cette observation à tous les répertoires (noeuds) de l'arborescence du système de fichiers d'UNIX, on peut comprendre comment est construit cette arborescence. • Comment cela se passe-t-il pour la racine ? Expliquer. La commande « $ cd /.. » est-elle correcte ? Dans UNIX la notion de liens « hard » correspond à deux ou davantage d'entrées (noms de fichiers symboliques) qui désignent un même fichier de données. Pour une entrée donnée on connaîtra le nombre de liens qu'elle a en regardant les informations fournies par l'option « -l » de la commande « ls ». Un exemple que vous connaissez maintenant est justement celui des entrées « . » et « .. ». • En utilisant cette notion de lien « hard », expliquer en général combien un répertoire contient de sousrépertoires. Pour cela vous prendrez le cas du répertoire « /etc » et vous vérifierez votre formule sur votre répertoire « rep » sous votre répertoire d'accueil. Vous pourrez vérifier votre réponse en utilisant la commande « $ ls -ld » sur ces deux exemples et en comptant à la main le nombre de sous-répertoires. • Placez-vous dans le répertoire « rep » et créer le fichier de nom « .fich1 ». Remonter d'un niveau dans l'arborescence (« $cd .. ») puis effectuer les deux commandes « rmdir » et « ls » qui produiront les résultats suivants : $ rmdir rep rmdir : rep not empty


$ ls -l rep total 0 $ Expliquer en utilisant la commande « ls » et son option « -a ». Pour définir le chemin d'accès à un fichier et par conséquent son nom, nous disposons de deux techniques complémentaires qui sont le « nommage absolu » et le « nommage relatif ». Expliquer ces deux notions que vous illustrerez en utilisant la commande « cd » en donnant deux chemins différents qui modifient votre répertoire courant pour devenir celui qui correspond au répertoire d'accueil d'un autre étudiant

Noms génériques et principe de fonctionnement de la commande « ls »

1. 2. 3.

1. 2. 3. 4. • •

• •

La commande « ls -a » édite la liste triée de tous les noms de fichiers du répertoire courant. On ne considère que les fichiers ordinaires et les répertoires ; la commande « ls fich » fonctionne de la façon suivante : Si « fich » n'existe pas Alors « erreur » est édité Sinon Si « fich » est ordinaire Alors « fich » est édité Sinon le contenu de « fich » est édité Fsi Fsi La commande utilisée (« ls », « cd » ...) ne voit pas les noms génériques (méta-caractères ...). Le shell réalise donc les étapes suivantes : substitution des méta-caractères par la définition associée création d'une liste de noms de fichiers lancement de la commande sur chaque nom de la liste triée (ordre ASCII) On appelle nom générique de fichier un nom de fichier qui comprend des caractères spéciaux appelés « méta-caractères » (incluant les opérateurs associés). Ces « méta-caractères » pourront être substitués par des caractères classiques suivant des règles précises de substitution. Aini un nom générique de fichier est une définition d'un ensemble de noms de fichiers. L'un des méta-caractères le plus employé est « * ». Il correspond à n'importe quelle chaîne de caractères (type de chaque caractère et nombre de caractères). Construisez la sous-arborescence suivante sous « rep » : Dans « rep » vous créez le répertoire « rep1 » et les fichiers « .c », « a » et « b ». Dans « rep1 » vous créez le répertoire « rep2 » et les fichiers « a1 », « b1 » et « .c1 ». Dans « rep2 » vous créez le répertoire « rep3 » et les fichiers « a2 », « b2 » et « .c2 ». Enfin dans « rep3 » vous créez le fichier « a3 ». Donner les résultats de : « $ ls ; ls . ; ls .. ; ls -a ; ls -a . ; ls -a .. Pour chacun des noms génériques ci-dessous, expliquez, en utilisant les commandes « echo », « ls » et « ls -a », comment le shell réalise l'expansion des noms (passage d'un nom générique à une liste de noms) de fichiers correspondant : * ; .* ; */* ; */.* ; .*/* ; .*/.* Les noms génériques de fichiers utilisent des méta-caractères (« * », « ? » ...) et des opérateurs spécifiques (« [ ] », « - », »! » ...). Par exemple le nom générique « fich[123] .*» correspond à la liste des fichiers dont le nom commence par « fic », puis dont le 4ème caractère est soit « 1 », soit « 2 », soit « 3 », le 5ème est un « . » et la suite est une chaîne de caractères dont chacun d'eux et leur nombre peut prendre toutes les valeurs possibles. Placez-vous sous « rep » et créer à l'aide de la commande « touch » les quatre fichiers suivants : « 21 », « 27 », « 2a » et « 39 ». En utilisant la commande « ls » et les noms génériques de fichiers, afficher tous les fichiers de votre répertoire courant (« rep ») dont les noms sont un nombre compris entre 20 et 40. Sous le même répertoire courant, créer les fichiers « b.truc », « chose », « s.f » et « sous ». Trouver une commande qui permet d'afficher tous les fichiers dont le nom ne commence pas par « s. ». En utilisant l'éditeur « vi » construire un fichier dont le contenu contient sur plusieurs lignes, plusieurs occurrences de la chaîne de caractères « le système unix », écrites sous les formes suivantes : « le système unix », « Le système unix », « Le Système Unix » ou encore « le système Unix ». Utiliser les commandes « grep », « | » et « wc » pour compter le nombre d'occurrences de cette chaîne, toute orthographe considérée (majuscule/minuscule).


Partie 2. Gestion de comptes et la politique d'accès aux fichiers d'UNIX Notions vues dans cette partie: useradd, usermod, userdel, groupadd, groupdel, chmod, umask. Gestion des comptes Pour créer l'utilisateur c1, root passe la commande : useradd c1 Ceci crée : • le répertoire personnel /home/c1, portant par défaut le nom du compte • une nouvelle entrée dans les 2 fichiers fondamentaux /etc/passwd et /etc/group. Pour lui attribuer le mot de passe : passwd c1 Saisir 2 fois le mot de passe Supprimer le compte d'un utilisateur (non connecté), au hasard .. totox. userdel -r totox L'option -r supprime aussi le rép. personnel et les fichiers de l'utilisateur La commande supprime toute trace de l'utilisateur dans le fichier de configuration : /etc/passwd y compris dans les groupes d'utiliseurs. Modifier le compte de l'utilisateur toto usermod totox usermod -G cours,prof c1 : ajoute c1 dans les 2 groupes cours et prof (qui doivent exister) Les groupes • Un groupe est, aussi pour Linux, un ensemble d'utilisateurs qui partagent les mêmes fichers et répertoires. Nous verrons que les fichiers accordent des droits d'accès réglables à ces groupes. • Chaque utilisateur doit faire partie au moins d'un groupe, son groupe primaire. Celui-ci est défini au moment de la création du compte, et par défaut, l'utilisateur appartient à un nouveau groupe créé, portant son nom. • Ainsi, dans /etc/passwd chaque utilisateur possède un groupe par défaut, précisé par son identifiant gid dans ce fichier. • L'appartenance au groupe primaire n'étant pas exclusive, tout utilisateur peut faire partie de plusieurs autres groupes, appelés ses groupes secondaires. Mais le rôle joué par le groupe primaire demeure prépondérant, comme nous le verrons dans le système des permissions des fichiers. • Pour lister tous les groupes (primaire et secondaires) d'un utilisateur : groups c1 • Pour créer un nouveau groupe : groupadd stagiaire • Supprimer un groupe, au hasard .. encore totox : groupdel totox Le groupe est supprimé du fichier /etc/group. • Pour ajouter un utilisateur à un groupe : Le plus simple est d'éditer le fichier /etc/group et d'ajouter une liste d'utilisateurs (séparés par des virgules) sur la ligne du groupe (ou utiliser Linuxconf).

A la création d'un compte d'utilisateur, l'administrateur affecte celui-ci à un groupe. Chaque groupe possède u nom. Un utilisateur peut changer de groupe par la commande newgrp. On peut donner des droits d'accès particuliers à certains fichiers pour les membres d'un même groupe. Au total, il existe 3 types d'accès : propriétaire (u = user), groupe (g = group), autres (o = other). L'ensemble es désigné par a (all). L'expression des droits nécessite 12 bits :


group

user

1

1

0

1

1

r set uid

1 w

1

x

0 r

w

other

1 x

1 r

0

w

0

x

attribut spécifique

set-gid 6

7

5

4

en octal

Pour un fichier, r = droit de lecture, w = droit d'écriture, x = droit d'exécuter (1 = oui, 0 = non) Pour un répertoire, r :on peut consulter la liste des fichiers qui y sont contenus w : on peut créer ou effacer des fichiers à l'intérieur x : on peut utiliser ce répertoire en argument d'une commande et s'y positionner Ces 9 bits sont précédés par 3 autres bits pour compléter la description des protections : - le bit "set-uid" : quand il vaut 1 pour un fichier exécutable, le processus d'exécution a les droits du propriétaire du fichier et non de l'utilisateur qui le lance - le bit "set-gid" : même rôle, mais relativement au groupe - l'attribut spécifique : outre la valeur "-" pour les fichiers ordinaires, il peut prendre la valeur : d fichier répertoire c fichier spécial en mode caractère (cas des terminaux) b fichier spécial en mode bloc (cas de lecteurs de disques ou de bandes) s bit de collage ou "sticky-bit" : il maintient le fichier en zone de recouvrement (swap) à partir de laquelle le chargement est plus rapide La commande ls avec l'option l permet d'afficher les protections de fichiers. La commande chmod permet de modifier les protections d'un fichier. Exemple : Supposant que pour un fichier Fich1 on a les droits suivants : -rw-rw-r-- 1 c1 cours 884 Jul 7 Fich1 la commande $ chmod u=rwx,g=rx Fich1 ou encore $ chmod u+x,g−w,g+x Fich1 ou encore $ chmod u+x,g−w+x Fich1 ou encore $ chmod u+x,g=rx Fich1 ou encore $ chmod u+x,g=rx Fich1 ou encore la solution numérique … $ chmod 75- Fich5 Cette commande permet d’affecter les droits au fichier Fich1 : rwx à l’utilisateur, rx au groupe. Exercice 1 Ouvrer deux fenêtres si vous travaillez en mode graphique, ou deux consoles virtuelles (« ALT + F2 ») sinon ; vous disposez alors de deux terminaux. Avec la commande « tty » récupérer le nom de ces terminaux ; puis regarder les droits mis sur les fichiers spéciaux correspondants en utilisant la commande « ls ». Lancer dans chacun des terminaux la commande « mesg » après avoir regardé dans le manuel (« man ») ce qu'elle fait. Lancez la commande « mesg n » dans l'un des terminaux, puis regarder à nouveau les droits du fichier spécial correspondant à ce terminal. Utiliser la commande « write user /dev/ttyi » à partir de chacun des terminaux pour écrire sur l'autre. Que constatez-vous ? Exercice 2 Soit le fichier suivant : -rw-rw-r-- 1 c1 cours 884 Jul 7 Fich1 Quelles commandes permettent à l'utilisateur « c1 » de modifier les droits d'accès sur le fichier « Fich1 » pour avoir : -rwxr-xr-x 1 c1 cours 884 Jul 7 Fich1 Donnez une solution numérique et une solution avec les actions.


Exercice 3

1. 2. 3.

a. b. c. d.

Les utilisateurs « c1 » et « c2 » appartiennent au groupe « cours ». L'utilisateur « guest » appartient au groupe « extern ». Le fichier « /tmp/x » existe et est accessible en lecture pour tout le monde. On se trouve dans le répertoire « d1 ». Les utilisateurs « c1 », « c2 » et « guest » peuvent-ils exécuter les commandes suivantes : $ cp /tmp/x f1 $ cp /tmp/x f2 $ rm f1 dans chacune des trois configurations suivantes (utilisez les raisons évoquées dans la partie « rappel » pour justifier vos réponses) : drwxr-xr-- 2 c1 cours 1152 Jul 7 14:49 d1 -rw-rw-r-- 1 c1 cours 884 Jul 7 14:52 d1/f1 drwxrwxr-x 2 c1 cours 1152 Jul 7 14:49 d1 -rw-r--r-- 1 c1 cours 884 Jul 7 14:52 d1/f1 drwxrwxr-x 2 c1 cours 1152 Jul 7 14:49 d1 --------- 1 c1 cours 884 Jul 7 14:52 d1/f1 Note : la commmande « cp file1 file2 » crée le fichier « file2 » si celui-ci n'existe pas, sinon écrase les données existantes de « file2 » par celles de « file1 ». Dans le premier cas, il s'agit d'une création de fichier, dans le deuxième cas, il s'agit d'une écriture. Rappel : Pour accéder à un fichier, il faut avoir le droit de passage dans chacun des répertoires qui constituent son chemin (le droit de passage dans un répertoire est le droit d'exécution « x »). Pour écrire dans un fichier, il faut avoir l'autorisation d'écriture (« w ») sur ce fichier. Pour modifier les droits d'un fichier, il faut en être le propriétaire. Pour créer ou détruire un fichier, il faut avoir le droit d'écriture dans le répertoire contenant ce fichier, puisqu'il s'agit d'ajouter ou de supprimer un lien dans un répertoire. Exercice 4 A quoi sert la commande « umask » ? A partir du répertoire courant créer un sous-répertoire « rep1 » (commande « mkdir »). Comment faire pour que ce répertoire ait automatiquement (dès sa création) les droits « rwxrw-r-- » ? Créer un fichier « fich1 » et regarder la valeur de ses droits. Comparer cette valeur avec celle du répertoire « rep1 ». Que peut-on en conclure sur les valeurs par défaut d'un fichier et d'un répertoire ? Exercice 5 Quelle commande permet de tester l'existence d'un fichier ou d'un répertoire ? Comment récupérer le résultat (échec ou succès) ?


Partie 3. Communication entre processus : première approche

1. 2.

i. ii. iii.

a. b. i. ii. a. b. c. 1.

2. 3.

4.

Notions vues dans cette partie: « | » (pipe), grep, tee, ps, wc. Exercice 1 Contrairement aux processus lancés simultanément qui s’exécutent sans relation entre eux, des processus concurrents sont synchronisés entre eux par la production d’information de l’un, et la consommation d’information de l’autre. Il est nécessaire pour cela, que le processus producteur soit apte à produire des caractères sur la sortie standard, et que le processus consommateur soit apte à lire des caractères sur l’entrée standard. C’est ce que réalise la commande « pipe » dont la syntaxe est : commande1 | commande2 Exemple : $ ps -alx | grep bash « ps » produit une liste de processus ; le pipe sert de raccordement de la sortie standard du processus « ps » sur l’entrée standard du processus « grep », qui va lui-même n’afficher que les lignes contenant la chaîne « bash ». Exécuter la ligne de commande de cet exemple. Créer un fichier texte de nom « text1 » dont le contenu est : 1 : la commande pipe sert à la communication entre processus 3 : la commande tee est utile pour capturer les informations qui circulent dans un pipe 2 : la commande tee recopie son entrée standard sur sa sortie standard et sur un fichier 4 : la commande tee peut être utilisée pour sauvegarder dans un fichier les traces des informations qui circulent sur sa sortie standard. 1 : qu’est-ce qu’un pipe et que fait la commande tee ? en utilisant la commande « | » écrire une commande qui compte le nombre de ligne contenant le mot « pipe » dans le fichier « text1 ». Regarder dans le manuel la commande « tee ». En utilisant cette commande modifier le résultat obtenu en i) afin de récupérer dans un fichier « text2 » les lignes contenant le mot « pipe ». Ecrire une ligne de commande qui permettent de créer un fichier « text3 » qui contiendra les lignes du fichier « text1 » contenant le mot « pipe ». Ces lignes devront être triées sur le premier champ de chaque ligne. Enfin la commande affiche le nombre de ces lignes. Exercice 2 Combien y a-t’il de processus actifs sur le système ? Combien d’utilisateurs sont connectés sur le système ? En utilisant la commande « sort », afficher la liste de ces utilisateurs connectés, triée : par ordre alphabétique. selon l’heure de connexion. Combien le répertoire « /etc » a t’il de fichiers répertoire ? Utiliser les commandes « ls », « grep » et « wc ». Combien le répertoire « /etc » a t’il de sous-répertoires ? Utiliser les commandes « ls », « grep » et « wc ». Afficher la liste des fichiers du répertoire courant, triée par ordre de taille des fichiers. Exercice 3 Utiliser la commande « cat » et l'opérateur « > » pour créer les fichiers « fich1 » et « fich2 ». Toujours en utilisant la commande « cat » mais cette fois en regardant le manuel créer le fichier « fich3 » constitué de la concaténation des fichiers « fich1 » et « fich2 ». Lancer la commande « cat fich1 fich-inexistant » avec le fichier « fich-inexistant » inexistant et le fichier « fich1 » existant. Nous pouvons rediriger la sortie standard en utilisant l’opérateur « > » ; par exemple « cat fich1 fichinexistant > trace » ou « cat fich1 fich-inexistant 1>trace ». Lancez les deux commandes ; que constatez-vous ? Lancez la commande du a) en redirigeant la sortie d’erreur dans le fichier « err ». Comment peut-on rediriger la sortie standard sur la sortie d’erreur ?


Partie 4. Gestion de processus : première approche Notions vues dans cette partie: commandes ” echo ”, ” exec ”, ” . ”, Création de processus. Gestion des processus En utilisant le langage de commande shell (” bash ”) et les commandes ” echo ”, ” exec ” et ” . ” nous allons voir la gestion des processus, la création de processus fils et l'exécution d'une commande dans un processus Construire avec l'éditeur de texte ” vi ” les trois fichiers de commandes ” com1 ”, ” com2 ” et ” com3 ” tels qu'ils sont décrits ci-dessous : $ cat com1 echo je suis dans com1 ps com2 echo je suis de retour dans com1 $ cat com2 echo je suis dans com2 ps com3 echo je suis de retour dans com2 $ cat com3 echo je suis dans com3 ps Essayer de lancer la commande ” com1 ”. Que se passe-t-il ? Que devez-vous faire pour que l'exécution puisse être lancée ? Une fois ce problème résolu, lancer la commande ” com1 ” en redirigeant les traces dans le fichier ” trace1 ”. Utilisation de la commande ” . ” Reprendre les fichiers correspondant aux commandes ” com1 ”, ” com2 ” et ” com3 ” et remplacer les appels aux commandes ” com? ” par ” . com? ”. Vous pouvez créer de nouveaux fichiers ” com1p ”, ” com2p ” et ” com3p ” ainsi modifiés. Lancer la nouvelle commande ” com1p ” en redirigeant les traces dans le fichier ” trace2 ”. Utilisation de la commande ” exec ” Reprendre les fichiers correspondant aux commandes ” com1 ”, ” com2 ” et ” com3 ” et remplacer les appels aux commandes ” com? ” par ” exec com? ”. Vous pouvez créer de nouveaux fichiers ” com1e ”, ” com2e ” et ” com3e ” ainsi modifiés. Lancer la nouvelle commande ” com1e ” en redirigeant les traces dans le fichier ” trace3 ”. Conclusions A partir de l'analyse des trois fichiers de trace obtenus (” trace1 ”, ” trace2 ” et ” trace3 ”), expliquer les différences entre l'appel d'une commande ” com ” ($ com), l'utilisation de la coommande ” . ” ($ . com) et l'utilisation de la commande ” exec ” ($ exec com).


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.