Université de la Manouba Ecole supérieur d’économie numérique Système d’exploitation Chapitre 4: Principes et bases du système UNIX Niveau: 1 TSI/ECOM Enseignant: Mme Wiem Trabelsi E-mail: [email protected] ESEN Plan 1. Aspect multi utilisateur 2. Aspect gestion des périphériques 3. Commandes et langage de commandes 4. Aspect fichiers 5. Commandes supplémentaire 6. Aspect processus 1 . Aspect multi-utilisateurs Il y a deux types d’utilisateurs: Un utilisateur du système: C’est un personne physique Qui possède des droit d’accès au système Qui possède un répertoire personnel Qui appartient à un groupe d’utilisateur Cours systèmes d'exploitation 3 1 . Aspect multi-utilisateurs Un utilisateur particulier: « root » C’est l’administrateur du système Il Possède tous les droits sur le système, sur les utilisateurs et sur les fichiers. Il n’intervient que pour changer la configuration et lors de l’installation. Les commandes utilisable par root: « adduser »: ajouter un utilisateur. « deluser »: supprimer un utilisateur. « usermod »: modifier ou changer les propriétés d’un compte utilisateur. Cours systèmes d'exploitation 4 1 Aspect multi-utilisateurs Identification d’un utilisateur: Compte = Nom de connexion ou nom d’utilisateur + mot de passe Nom : « login » Mot de passe : « password » Exemple: Login: Jean Password: ???? 5 1 Aspect multi-utilisateurs Modification du mot de passe: « passwd »: c’est la commande qui permet de changer le mot de passe. Exemple: $ passwd Changing password for Jean Old password: New password: Re-enter new password: $ 6 1 Aspect multi-utilisateurs Les fichiers qui contient des information sur les utilisateurs: Référence à tous les utilisateurs: « /etc/passwd » et/ou « /etc/shadow ». Référence à un groupe: « /etc/group ». Répertoire personnel: « /home/<login> ». 7 1 Aspect multi-utilisateurs Exemple: Le fichier « /etc/passwd » Contient toutes les informations sur les comptes utilisateurs du système. Seul root a le droit d‘écriture dessus. Chaque utilisateur est référencé par une ligne. Exemple: bernardi:ZyXD4:501:510:Bernardi Fabrice:/home/bernardi:/bin/bash login Mot de passe crypté GID: n° du groupe UID: n° unique de l’utilisateur Répertoire personnel Shell par défaut Commentaire 8 2 . Aspect gestion des périphériques L’interface entre UNIX et les terminaux (tty abréviation de teletype) est prise en charge par un gestionnaire de ligne série (driver tty). Celui−ci est paramétrable : • erase annule le dernier caractère frappé (#, ^H ou DEL), • kill annule tous les caractères de la ligne (@ ou ^U), • intr envoie le signal « interrupt » ; interrompt la commande en cours (DEL ou ^C), • quit envoie le signal « quit » ; provoque la fin du processus courant (^| ou ^\), • eof simule une fin de fichier à partir d’un terminal (^D), • tabs indique si le terminal sait faire des tabulations, • speed indique la vitesse du terminal. 9 2 Aspect gestion des périphériques Exemple: Pour voir les paramètres courants, tapez: $ stty speed 9600 baud; ... Pour voir tous les paramètres, tapez : $ stty −a speed 9600 baud; ... line = 0; ... 10 3. Commandes et langage de commandes Il existe un très grand nombre de commandes sous Unix. Elles sont écrite de la forme : nom_commande [-options] <cible1> <cible2>... Remarque: Pour taper plusieurs commandes sur la même ligne, il faut utiliser le séparateur « ; » : Cmd1 ; Cmd2;…………………; Cmdn 11 3 Commandes et langage de commandes Quelques commandes utiles dès le premier contact avec le système : uname informations relatives à la version du système, date date et heure connues par le système, tty nom de la ligne sur laquelle on est connecté, who liste des utilisateurs connectés, grep recherche les fichiers possédant des chaînes de caractères données, cal calendrier des mois de l’année demandée, pg affiche le contenu du fichier passé en argument par pages de 23 lignes, man pages du manuel correspondant à la commande demandée, echo affiche ses arguments, wc compte le nombre de lignes, de mots et de caractères contenus dans le fichier passé en argument, sort tri le contenu du fichier passé en argument, 12 3. Commandes et langage de commandes Les cas d’erreurs Plusieurs cas d’erreurs peuvent se produire par exemples: La commande n’existe pas. ATTENTION Le shell distingue les lettres majuscules des minuscules. Vous n’avez pas le droit d’exécuter cette commande. Les options de la commande sont erronées. En général la commande affiche un message d’utilisation, précisant quels sont les options et arguments. Pour plus de détails taper $ man commande. Les arguments de la commande sont erronés 13 3. Commandes et langage de commandes Exemples: $ uname −a system node Release_3.2 2 Machine_i386 $ L’option −a (all) affiche toutes les informations. $ date Wed Jul 6 11:34:52 MET 1995 $ MET est le nom du fuseau horaire, ici Mean Europeen Time. $ tty /dev/ttyp0 $ /dev/ttyp0 est le nom de la ligne série. En effet sous UNIX les périphériques sont désignés par des noms de fichiers. 14 $ man date date(C) ... Manuel de référence (man) sur la commande date. Pour avoir plus de détails sur l’utilisation de la commande man, faire « $ man man ». $ echo installation terminée installation terminée $ echo ’voulez−vous continuer [y]/n?\c’ voulez−vous continuer [y]/n? $ Affiche à l’écran la chaîne de caractères suivant la commande « echo », après d’éventuelles interprétations(variables, fonctions ...). $ wc fichier 8 48 208 fichier $ Affiche les caractéristiques du fichier de nom « fichier » en terme de contenu, de la façon suivante : il possède 8 lignes, 48 mots et 208 caractères. 15 4. Aspect fichiers A. Fichiers ordinaires – Pour ce système, les données d’un fichier forment une suite non structurée d’octets (byte stream). – Un fichier texte, par exemple, est une suite de codes ASCII, les lignes étant séparées par le code ASCII ’nouvelle ligne’ (012 octal). Il n’existe aucune notion d’organisation telle que séquentiel indéxé, etc ... – Un certain nombre de caractéristiques sont associées à un fichier : la date de sa création, celle de la dernière modification, le propriétaire, la taille, etc ... – > Ces caractéristiques sont regroupées dans un descripteur de fichier, appelé noeud d’index (i−node ou index−node). 16 4 . Aspect fichiers Commandes associées aux fichiers ls fichier ... [list] Affiche le contenu des répertoires (à un niveau) et les noms des fichiers passés en argument, c’est_à−dire fichier ..., ou s’il n’y a pas d’argument, tous les fichiers du répertoire courant sauf ceux commençant par un point. cat fichier ... [concatenate] Affiche le contenu des fichiers fichier. touch fichier1 fichier2 [create] Crée des fichiers vide nommé fichier1 fichier2 cp fichier1 fichier2 [copy] Copie fichier1 dans fichier2 mv fichier1 fichier2 [move] Renomme fichier1 en fichier2 rm fichier [remove] Détruit ou supprime le fichier fichier ; 17 4. Aspect fichiers Résultat de la commande : $ ls –l La commande ls avec l’option −l (long) affiche de nombreuses informations sur le fichier : $ ls −l Le type du fichier : ’d’ pour répertoire, ’−’ pour un fichier ordinaire, ’b’ ou ’c’ pour des fichiers spéciaux (périphériques). Le nom de fichier : Limité à 14 (ou 255) caractères parmi le jeu ASCII. Le système n’impose aucun format. On évite les caractères invisibles et les méta−caractères (*, ?, [ et ]). La taille du fichier : C’est son nombre d’octets. Elle sert à déterminer la fin du fichier. Il n’y a donc pas de marque de fin de fichier. 18 4. Aspect fichiers Droits d’accès: Trois groupes d’autorisation: – l’utilisateur propriétaire (u) – les personnes appartenant au groupe propriétaire (g) – les autres (o: others) – tous (a: all) Pour chaque groupe 3 caractères indiquent les autorisations : r, w et x. – r (read): permission de lecture • Autorisation de lire le contenu (cat, pg ...) ; • ce droit est nécessaire pour faire une copie du fichier. • ls permet de lister le contenu du fichier • Attention: pour ls −l il faut aussi le droit x). 19 4. Aspect fichiers – w (write): permission d’écriture • Autorisation de modifier le contenu ; • On peut écrire dans un fichier avec un éditeur ou une commande (cat). • Il faut ce droit pour le fichier destination d’une copie, d’un déplacement ou d’un lien, si le fichier existe déjà. • Pour un répertoire on peut créer et détruire des fichiers et des répertoires. • Lors d’une destruction, seule cette permission prévaut. Elle permettra de détruire un fichier, même si on n’a aucun droit dessus. La destruction d’un fichier revient à modifier le répertoire, pas le fichier ! – x exécution/traverse • Pour un répertoire (cd) • Pour exécuter un script (programme shell) – − à la place de r, w ou x signifie non−autorisé. 20 4. Aspect fichiers B. Répertoire Un répertoire ou catalogue (directory) est un fichier qui contient une liste de noms de fichiers, parmi lesquels on peut trouver des sous−répertoires, et ainsi de suite (arborescence logique). • les répertoires sont représentés par des rectangles • les fichiers par des cercles. 21 4. Aspect fichiers Répertoire courant : A chaque processus est associé un répertoire, appelé répertoire courant ou de travail (défaut). Chemin absolu : Pour accéder à un fichier à partir de la racine et en indiquant tous les sous−répertoires rencontrés. Chemin relatif : On peut ne spécifier qu’une partie du chemin d’accès, pour que ce chemin soit interprété à partir du répertoire courant. On désigne par « . » : répertoire courant Et par « .. » : répertoire père 22 4. Aspect fichiers Exemple: répertoire courant /usr/c2 /usr/c2/projet /tmp /usr/c1 /usr/c1 /usr/c1 chemin relatif ./.profile ./fichA ../etc/passwd ../c2/.profile ../c2/projet/fichA ../../tmp/fich1 23 4. Aspect fichiers Un répertoire est un fichier ordinaire dans le sens où il possède un index et des données sous forme de suite d’octets. Seul le système peut écrire dans un répertoire. – répertoire = table de liens (i−nombre, chaîne de caractère) – i−nombre = numéro d’index (i−node) de la structure décrivant le fichier. Fichier−répertoire "projet" On peut voir les numéros d’i−nodes par la commande : $ ls −i 423 fichA 666 fichB 759 toto $ 24 4. Aspect fichiers Gestion des liens entre fichiers – Un fichier (entête plus contenu) peut avoir plusieurs noms ; dans tous les cas le système identifie un fichier non pas par un nom, mais par son numéro de i−noeud. – Un répertoire est un fichier dont le contenu contient un ensemble de couples (nom, i−noeud) ; chaque nom est un lien vers un i−noeud donné. Il existe deux types de liens « lien hard (physique) » et « lien symbolique ». Cours systèmes d'exploitation avancés 25 4. Aspect fichiers Les liens "hard" Création de deux ou plusieurs noms vers un i−noeud unique au moyen de la commande ln. Cette commande n’est utilisable qu’à l’intérieur d’un même système de fichiers (arborescence). Cours systèmes d'exploitation avancés 26 4. Aspect fichiers Les liens "Symboliques" • Ces liens, différents des précédents, permettent de lier plusieurs noms à un même fichier sans rattacher ces derniers au i−noeud correspondant. • Pour cela on utilise la commande ln avec l’option −s. La commande : $ ln −s foo bar Crée le lien symbolique bar qui pointe sur le fichier foo. $ ls −i bar foo 22195 bar 22192 foo $ Cours systèmes d'exploitation avancés 27 4. Aspect fichiers On a des i−noeuds différents. Par contre si l’on utilise la commande "ls −l" on voit apparaître le lien : $ ls −l bar foo lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar−>foo −rw−r−−r−− 1 root root 12 Aug 5 16:50 foo $ Cours systèmes d'exploitation avancés 28 4. Aspect fichiers Commandes associées à un répertoire mkdir répertoire [make directory] crée un répertoire. rmdir répertoire [remove directory] détruit le répertoire si il est vide et si ce n’est pas votre répertoire courant. cd répertoire [change directory] change de répertoire courant. Sans argument rapatrie dans le répertoire de connexion. pwd [print working directory] affiche le chemin absolu du répertoire courant. Cours systèmes d'exploitation avancés 29 4. Aspect fichiers ln fichier1 fichier2 [link] établit un nouveau lien sur le fichier fichier1. ls −F affiche les noms de fichiers suivis du caractère’/’ s’il s’agit d’un répertoire, et du caractère ’*’ s’il s’agit d’un fichier ayant la permission d’exécution. ls −C affiche les noms de fichiers par colonnes. cp fichier ... rép copie tous les fichiers fichier ... Dans le répertoire rép. mv fichier ... rép déplace tous les fichiers fichier ... dans le répertoire rép. Cours systèmes d'exploitation avancés 30 4. Aspect fichiers C. Génération de noms de fichiers Certains caractères spéciaux sont interprétés par le shell, et permettent de décrire les noms de fichiers. Ce sont des méta−caractères (c’est−à−dire des caractères utilisés pour décrire d’autres caractères) : • Le caractère ’*’ signifie n’importe quelle chaîne de caractères. • Le caractère ’?’ signifie n’importe quel caractère. • Les crochets ’[]’ signifient un caractère appartenant à un ensemble de valeurs décrites dans les crochets. • Le caractère ’−’ utilisé avec les crochets permet de définir un intervalle, plutôt qu’un ensemble de valeurs. • Le caractère ’!’ utilisé entre crochets en première position, signifie tout caractère excepté ceux spécifiés entre crochets. Cours systèmes d'exploitation avancés 31 4. Aspect fichiers Exemples f* Tous les fichiers dont le nom commence par ’f’. f? Tous les fichiers dont le nom commence par ’f’, suivi d’un seul caractère quelconque. f[12xy] Tous les fichiers dont le nom commence par ’f’, suivi d’un caractère à choisir parmi ’1, ’2’, ’x’ ou ’y’. f[a−z] Tous les fichiers dont le nom commence par ’f’, suivi d’un caractère dont le code ASCII est compris entre le code ’a’ et le code ’z’, donc une lettre minuscule. Cours systèmes d'exploitation avancés 32 4. Aspect fichiers *.c Tous les fichiers dont le nom se termine par ’.c’ ?.c Tous les fichiers dont le nom est formé d’un caractère quelconque, suivi de ’.c’ ?? Tous les fichiers dont le nom est formé de deux caractères. *.[A−Za−z] Tous les fichiers dont le nom se termine par un ’.’ suivi d’une seule lettre majuscule ou minuscule. *.[ch0−9] Tous les fichiers dont le nom se termine par un ’.’ suivi d’un seul caractère à choisir parmi ’c’, ’h’, ou un chiffre entre ’0’ et ’9’. [!f]* Tous les fichiers dont le nom ne commence pas par ’f’ *[!0−9] Tous les fichiers dont le nom ne se termine pas par un chiffre. Cours systèmes d'exploitation avancés 33 Substitution par le shell des méta−caractères Lorsque le shell trouve des méta−caractères sur une ligne, il substitue l’expression entière, par exemple : f* −> f1 f36 foo fz Chaque ligne est donc analysée deux fois : 1. Par le shell : celui−ci lit la ligne « ls −l f*.c » . Il enlève de cette ligne « f*.c » et le remplace par « f1.c f2.c f15.c ». Le résultat est donc la ligne « ls −l f1.c f2.c f15.c ». 2. Par la commande : lorsque celle−ci est exécutée, elle reçoit la ligne « ls −l f1.c f2.c f15.c », elle va donc travailler sur les 3 fichiers. -> Le traitement des méta−caractères est indépendant de la commande. Il est effectué par le shell, avant l’exécution de la commande. Cours systèmes d'exploitation avancés 34 4. Aspect fichiers D. Encore quelques commandes find parcourt une arborescence en sélectionnant des fichiers selon des critères de recherche, et en exécutant des actions sur chaque fichier sélectionné. find répertoire critères_de_recherche actions Exemple : $ find /usr/c1 −name agenda −print ici la commande find part du répertoire /usr/c1, parcourt toute la sous−arborescence en recherchant les fichiers qui ont pour nom agenda, et affiche sur la sortie standard le chemin absolu de chaque fichier trouvé. Cours systèmes d'exploitation avancés 35 type commande ... Donne le chemin absolu du fichier exécuté lorsque vous tapez commande. Sinon, indique que la commande est interne au shell. Exemple : $ type find pg find is /bin/find pg is /usr/bin/pg $ type umask umask is a shell builtin $ Cours systèmes d'exploitation avancés 36 file fichier affiche le type du fichier (exécutable, répertoire, ASCII ...). En l’utilisant avant de visualiser le contenu d’un fichier cela évite d’afficher un contenu binaire. Exemple : $ file /bin/ls /etc/passwd /usr/c1 /bin/ls: demand paged pure executable /etc/passwd: ascii text /usr/c1: directory $ Cours systèmes d'exploitation avancés 37 test option fichier Vérifie le fichier selon l’une des options suivantes : −f fichier normal −d répertoire −w autorisé en écriture −r autorisé en lecture −x autorisé en exécution −s taille du fichier supérieure à 0 test retourne 0 en cas de succès, 1 en cas d’échec. Cette valeur peut être consultée grâce à la variable automatique « ? ». Cours systèmes d'exploitation avancés 38 Exemple : $ ls −l drwxr−x−−− 11 c1 cours 17 Aug 1 09:00 save −rw−r−−−−− 1 fun axis 21 Jul 25 17:05 data $ whoami c1 term/c4 Aug 2 09:01 $ test −f save; echo $? 1 $ test −d save; echo $? 0 $ test −r save; echo $? 0 $ test −f data; echo $? 0 $ test −w data; echo $? 1 $ Cours systèmes d'exploitation avancés 39 sum fichier Calcule et affiche une somme de contrôle pour un fichier (intégrité des fichiers). diff fichier1 fichier2 Affiche les lignes différentes devant être modifiées pour que les deux fichiers soient identiques. touch fichier Modifie la date de dernière modification du fichier, celle−ci devient égale à la date à laquelle la commande a été exécutée. Si le fichier n’existe pas, il sera créé (et de taille nulle) sauf si l’option c est utilisée. Cours systèmes d'exploitation avancés 40 Exemple : $ ls toto toto not found $ touch −c toto $ ls toto toto not found $ touch 1009133591 toto $ ls −l toto −rw−r−−r−− 1 c1 cours 0 Oct 9 1991 toto $ date Wed Feb 07 10:59:09 1996 MET 1996 $ touch toto $ ls −l toto −rw−r−−r−− 1 c1 cours 0 Feb 07 10:59 toto $ Cours systèmes d'exploitation avancés 41 4. Aspect fichiers E. Protection des fichiers: chmod c’est la commande qui permet de modifier les droits d’accès sur un fichier. On a deux types d’écritures: • L’écriture symbolique: chmod <personne concernée><Action><Accès autorisés> <fichier> Cours systèmes d'exploitation avancés 42 Exemple : $ ls –l fichA -rw-rw-rw- 1 c1 cours 342 Oct 18 15:28 fichA $ chmod go−w fichA; ls −l fichA −rw−r−−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ chmod u+x fichA; ls −l fichA −rwxr−−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ chmod g−r fichA; ls −l fichA −rwx−−−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ chmod ug+rw fichA; ls −l fichA −rwxrw−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ chmod g−rw fichA; ls −l fichA −rwx−−−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ chmod ug=rw fichA; ls −l fichA −rw−rw−r−− 1 c1 cours 342 Oct 18 15:28 fichA $ Cours systèmes d'exploitation avancés 43 • L’écriture octale (code): chmod <code> <fichier> Exemple : $ ls −l toto −rw−r−−r−− 1 c1 cours 342 Oct 18 15:28 toto $ $ chmod 760 toto; ls −l toto −rwxrw−−−− 1 c1 cours 342 Oct 18 15:28 toto $ Cours systèmes d'exploitation avancés 44 Autre Permission: Nous avons vu que chaque i−noeud contient entre autre chose une zone d’information sur les protections du fichier correspondant. Les droits d’accès à un fichier sont mémorisés sur 12 bits. un bit positionné, a la valeur 1. bit 11: set−uid bit bit 10: set−gid bit bit 9: sticky bit bit 8, 7, 6 : accès en l, w, x pour le propriétaire bit 5, 4, 3 : accès en l, w, x pour le groupe du propriétaire bit 2, 1, 0 : accès en l, w, x pour les autres utilisateurs Cours systèmes d'exploitation avancés 45 • set−uid -rwsr-x--x 100 111101001 <-> 4 751 La permission setuid permet, lorsqu’on exécute un programme, de prendre l’identité (user id) effective du propriétaire du fichier. Cela permet aux utilisateurs d’accéder à des fichiers ou des répertoires auxquels il n’ont pas accès normalement. • set−gid -rwxr-s--x 010 111101001 <-> 2 751 A le même rôle mais relativement au groupe. • sticky bit -rwxr-x--t 001 111101001 <-> 1 751 Permet de demander le maintien d’un texte binaire en zone de swap même lorsque plus aucun processus ne l’exécute. C’est utile pour les programmes qui sont très utilisés (éditeurs, compilateurs, ...) ; c’est un gain de temps, puisque le programme est déjà en mémoire. Cours systèmes d'exploitation avancés 46 Le masque: umask [masque] : Permet de modifier le masque des droits de création de fichier. Cours systèmes d'exploitation avancés 47 Exemple : $ umask 000 $ mkdir foo $ ls −l foo drwxrwxrwx 2 c1 cours 512 Jul 3 16:39 foo $ rmdir foo $ umask 022 $ mkdir foo $ ls −l foo drwxr−xr−x 2 c1 cours 512 Jul 3 16:41 foo $ rmdir foo $ umask 077 $ mkdir foo $ ls −ld foo drwx−−−−−− 2 c1 cours 512 Jul 3 16:42 foo $ Cours systèmes d'exploitation avancés 48 Autres commandes: chgrp nom_groupe fichier [change group] Modifie le groupe propriétaire d’un fichier. chown nom_utilisateur fichier [change owner] Modifie l’utilisateur propriétaire d’un fichier. Exemple : $ ls −l f1 −rw−r−−−−− 1 prof cours 11 Jul 13 13:00 f1 $ logname prof $ chown c1 f1 $ ls −l f1 −rw−r−−−−− 1 c1 cours 11 Jul 13 13:01 f1 $ chown c2 f1 f1 : Not owner $ Cours systèmes d'exploitation avancés 49 5. Commandes supplémentaires A. Redirection d’entrées/sorties Lorsqu’une commande est lancée, ses entrées/sorties peuvent être redirigées sur un fichier. • Ainsi, l'utilisation du caractère «>» permet de rediriger la sortie standard d'une commande située à gauche vers le fichier situé à droite : $ date > date.out Dans ce cas les données produites par la commande date ne sont pas affichées sur l’écran, mais écrites dans le fichier date.out. La redirection «>» a pour but de créer un nouveau fichier. Ainsi, si un fichier du même nom existait, celui-ci sera écrasé. La commande suivante crée tout simplement un fichier vide : $ >fichier L'emploi d'un double caractère «>>» permet de concaténer la sortie standard vers le fichier, c'est-à-dire ajouter la sortie à la suite du fichier, sans l'écraser. Cours systèmes d'exploitation avancés 50 • De manière analogue, le caractère «<» indique une redirection de l'entrée standard. $ cat < toto.txt Dans ce cas le contenu du fichier toto.txt est envoyé en entrée de la commande cat, dont le seul but est d'afficher le contenu sur la sortie standard. Enfin l'emploi de la redirection «<<» permet de lire sur l'entrée standard jusqu'à ce que la chaîne située à droite soit rencontrée. $ cat << STOP L'exemple suivant va lire l'entrée standard jusqu'à ce que le mot STOP soit rencontré, puis va afficher le résultat. Cours systèmes d'exploitation avancés 51 B − Syntaxe générale n<fichier redirige en lecture le descripteur n sur fichier. Si n n’est pas précisé, ce sera 0 (l’entrée standard). Si fichier n’existe pas le shell renvoie une erreur. n>fichier redirige en écriture le descripteur n sur fichier. Si n n’est pas précisé, ce sera 1 (la sortie standard). Si fichier existe il sera écrasé, sinon créé. n>>fichier redirige en écriture le descripteur n à la fin de fichier, sans détruire les données préalablement contenues par ce fichier. Si n n’est pas précisé, ce sera 1 (la sortie standard). Si fichier n’existe pas il sera créé. C − Remarques générales a. Il est possible de rediriger à la fois l’entrée et la sortie. Exemples : $ wc < /etc/passwd > tmp $ cat tmp 20 21 752 $ Cours systèmes d'exploitation avancés 52 b. Les redirections d’entrées/sorties standards sont effectuées par le shell d’une façon totalement indépendante du contexte. Les caractères spéciaux ’>’ et ’<’ peuvent être situés n’importe où sur une ligne de commande (précéder ou suivre la commande). Les deux lignes suivantes produisent le même résultat : $ who > tmp; grep ’c[12]’ < tmp c1 tty4 Jul 31 09:46 c2 tty2 Jul 31 09:17 $ > tmp who; < tmp grep ’c[12]’ c1 tty4 Jul 31 09:46 c2 tty2 Jul 31 09:17 C. On peut rediriger la sortie d’erreur vers la « poubelle » (/dev/null) ; dans ce cas les messages d’erreur seront perdus : $ cat fichier−inexistant 2>/dev/null Cours systèmes d'exploitation avancés 53 Autres commandes: Syntaxe : grep [options] expreg [fichiers] Recherche dans les fichiers ou sur son entrée standard des lignes de texte qui satisfont l'expression régulière expreg indiquée. Sa sortie peut être redirigée dans un fichier. Options -c donne seulement le nombre de lignes trouvées obéissant au critère -l donne seulement le nom des fichiers où le critère a été trouvé -v donne les lignes où le critère n'a pas été trouvé -i ne pas tenir compte de la casse (ne pas différencier majuscules minuscules) -n pour n'afficher que les numéros des lignes trouvées -w pour imposer que le motif corresponde à un mot entier d'une ligne Cours systèmes d'exploitation avancés 54 Les expressions régulières lié à la commande grep Expressions reconnues : . signifie un caractère quelconque * répétition du caractère situé devant ^ début de ligne $ fin d'une ligne (donc "e$" mots se terminant par e) [...] contient une liste ou un intervalle de caractères cherchés [^..] caractères interdits. Cours systèmes d'exploitation avancés 55 Les symboles ^ et $ indiquent le début ou la fin d'une chaîne, et permettent donc de la délimiter. – "^debut": chaîne qui commence par "debut" – "fin$": chaîne qui se termine par "fin" – "^chaîne$": chaîne qui commence et se termine par "chaîne" – "abc": chaîne contenant la chaîne "abc " Les symboles *, + et ?, respectivement "zero ou plusieurs", "un ou plusieurs", "un ou aucun", permettent de donner une notions de nombre. – "abc+": chaîne qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) – "abc*": chaîne qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" ...) – "abc?": chaîne qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc") – "^abc+": chaîne commençant par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" ...) Cours systèmes d'exploitation avancés 56 Les accolades {X,Y} permettent de donner des limites de nombre. – "abc{2}": chaîne qui contient "ab" suivie de deux "c" ("abcc") – "abc{2,}": chaîne qui contient "ab" suivie de deux "c" ou plus ("abcc" etc..) – "abc{2,4}": chaîne qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" .. "abcccc") Les parenthèses ( ) permettent de représenter une séquence de caractères. – "a(bc)*": chaîne qui contient "a" suivie de zero "bc" ou plus La barre verticale | se comporte en tant qu'opérateur OU – "un|le": chaîne qui contient "un" ou "le" – "(un|le) chien": chaîne qui contient "un chien" ou "le chien" – "(a|b)*": chaîne qui contient une suite de "a" ou de "b" Cours systèmes d'exploitation avancés 57 Le point . indique n'importe quel caractère (une fois) – "^.{3}$": chaîne qui contient 3 caractères Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe – permet quand à lui de définir un intervalle. Le caractère ^ après le premier crochet indique quand à lui une interdiction. – "[abc]": chaîne qui contient un "a", un "b", ou un "c" – "[a-z]": chaîne qui contient un caractère compris entre "a" et "z" – "^[a-zA-Z]": chaîne qui commence par une lettre – "^[^a-zA-Z]": chaîne qui ne commence pas par une lettre Cours systèmes d'exploitation avancés 58 Exemples • cherche dans fichier, les lignes dont la 1ère lettre est qcq et la 2ème doit être o grep "^.o" fichier • cherche dans le fichier passwd les lignes commençant par t grep "^t" /etc/passwd • cherche les lignes ne commençant pas commençant par t grep -v "^t" /etc/passwd • cherche les lignes contenant les mots suivant le modèle T.t. grep "T.t." /etc/passwd • compter les lignes saisies au clavier qui se termine par a grep -c "a$" • afficher les lignes des fichiers essai?.txt qui contiennent a, b ou c grep [abc] "essai?.txt" Cours systèmes d'exploitation avancés 59 6. Aspect processus A. Définition • Les processus correspondent à l’exécution de tâches (programmes des utilisateurs, entrées−sorties, ...) par le système. • Un système d’exploitation doit en général traiter plusieurs tâches en même temps. Comme il n’a, la plupart du temps (UNIX), qu’un processeur, il résout ce problème grâce à un pseudo−parallélisme. Il traite une tâche à la fois, s’interrompt et passe à la suivante. La commutation de tâches étant très rapide, il donne l’illusion d’effectuer un traitement simultané. • Le mot processus désigne un programme binaire en cours d’exécution, c’est−à−dire un programme dans un environnement. Cours systèmes d'exploitation avancés 60 6 Aspect processus Les processus des utilisateurs sont lancés par un interprète de commande (shell). Ils peuvent eux−même lancer ensuite d’autres processus. On appelle le processus créateur, le père, et les processus créés, les fils. Les processus peuvent donc se structurer sous la forme d’une arborescence. Au lancement du système, il n’existe qu’un seul processus, qui est l’ancêtre de tous les autres. Cours systèmes d'exploitation avancés 61 Les processus sont composés d’un espace de travail en mémoire formé de 3 segments : Le code correspond aux instructions, en langage d’assemblage, du programme à exécuter. La zone de données contient les variables globales ou statiques du programme ainsi que les allocations dynamiques de mémoire. Enfin, les appels de fonctions, avec leurs paramètres et leurs variables locales, viennent s’empiler sur la pile. Cours systèmes d'exploitation avancés 62 L’environnement d’un processus encore appelé contexte, comprend entre autre : • un numéro d’identification unique appelé PID (Process IDentifier) ; • le numéro d’identification de l’utilisateur qui a lancé ce processus, appelé UID (User IDentifier), et le numéro du groupe auquel appartient cet utilisateur, appelé GID (Group IDentifier) ; • le répertoire courant ; • les fichiers ouverts par ce processus ; • le masque de création de fichier, appelé umask ; • la taille maximale des fichiers que ce processus peut créer, appelée ulimit ; • la priorité ; • les temps d’exécution ; • le terminal de contrôle, c’est−à−dire le terminal à partir duquel la commande a été lancée. Cours systèmes d'exploitation avancés 63 Voici un premier schéma (simplifié) d’un processus : Cours systèmes d'exploitation avancés 64 Ce prosessus a le numéro 36. Il a été lancé par l’utilisateur qui a 106 pour UID. Il est en train d’exécuter le programme ’cmd1’. Il a consommé 0.3 seconde, avec une priorité de 20. Son masque de création de fichier est 027. Son terminal de contrôle est /dev/term/c4. Son répertoire courant est /usr/c1. Il a 4 fichiers ouverts : Cours systèmes d'exploitation avancés 65 Sur le schéma ci−dessous, les trois programmes deviennent trois processus indépendants qui ont chacun leur propre contrôle de flux (compteur ordinal). Cours systèmes d'exploitation avancés 66 -> Sur un intervalle de temps assez grand, tous les processus ont progressé, mais à un instant donné un seul processus est actif. – La commutation des tâches (multiprogrammation), c’est−à−dire le passage d’une tâche à une autre, est réalisée par un ordonnanceur (scheduler) au niveau le plus bas du système. Cet ordonnanceur est activé par des interruptions d’horloge, de disque et de terminaux. Différence entre un processus et un programme : – Un processus est une activité d’un certain type qui possède un programme, des données en entrée et en sortie, ainsi qu’un état courant. – Un seul processeur peut être partagé entre plusieurs processus en se servant d’un algorithme d’ordonnancement qui détermine quand il faut suspendre un processus pour en servir un autre. Cours systèmes d'exploitation avancés 67 logname affiche uniquement le nom associé à l’UID. Exemple : $ logname c1 $ Le PID est stocké dans une pseudo−variable spéciale que l’on appelle $. On peut consulter le PID du shell courant en tapant : $ echo $$ 36 $ Le 1er "$" définit le contenu de la pseudo−variable, alors que le second "$" correspond au PID du shell courant. Cours systèmes d'exploitation avancés 68 B. Commandes associés aux processus Certaines des caractéristiques de l’environnement peuvent être consultées par diverses commandes. Nous connaissons déjà : pwd affiche le chemin du répertoire courant tty affiche le terminal de contrôle umask affiche le masque de création de fichier Voici d’autres commandes : id consulte l’UID et le GID. Exemple : $ id uid=106(c1) gid=104(cours) $ Cours systèmes d'exploitation avancés 69 C. Création de processus Pour chaque commande lancée (sauf les commandes internes), le shell crée automatiquement un nouveau processus. Il y a donc 2 processus. Le premier, appelé processus père, exécute le programme shell, et le deuxième, appelé processus fils, exécute la commande. Le fils hérite de tout l’environnement du père, sauf bien sûr du PID, du PPID et des temps d’exécution. Cours systèmes d'exploitation avancés 70 Un nouvel élément de l’environnement apparaît ici, le PPID. C’est le PID du processus père. Le père du processus 36 est le processus 27, et celui de 27 est le processus 1. Seul le fils (36) a ouvert le fichier /tmp/toto. Les deux processus peuvent parfaitement tourner en parallèle. La puissance de traitement est partagée entre tous les programmes lancés et, mis à part les machines multi−processeurs, un seul processus est actif à un instant t. Cours systèmes d'exploitation avancés 71 On utilisera cette solution (processus lancés en parallèle) par exemple pour lancer un traitement très long, et continuer à travailler en même temps. Dans ce cas, on dit que le père a lancé un fils en tâche de fond (background) ou encore en mode asynchrone. Cours systèmes d'exploitation avancés 72 Une autre solution consiste à placer le processus père en attente jusqu’à ce que le processus fils soit terminé. Pour lancer une commande en plaçant le père en attente, il suffit de taper cette commande : $ cmd1 ... résultat de la commande cmd1 $ Ce mode est donc le mode par défaut dans le shell. Cours systèmes d'exploitation avancés 73 Pour lancer une commande en tâche de fond, il faut faire suivre cette commande par le caractère ’&’: $ cmd1 & [1] 127 $ Le Korn Shell affiche un numéro de tâche entre [] et le PID de cette tâche de fond, puis continue à travailler, donc affiche la chaîne d’invite et attend la prochaine commande. En Bourne Shell, il n’y a pas de numéro de tâche, la même commande aurait donnée : $ cmd1 & 127 $ Cours systèmes d'exploitation avancés 74 Si vous avez plusieurs commandes successives à lancer en arrière plan, il faudra utiliser les parenthèses. $ (cmd1; cmd2) & [2] 128 $ La commande cmd2 ne sera lancée que lorsque la commande cmd1 sera terminée. Ceci dit, l’utilisateur récupère la main tout de suite. Le shell détecte la présence du ’&’ partout sur la ligne. Dans le cas suivant, la commande cmd1 sera lancée par un sous−processus shell : $ (cmd1) $ La commande cmd1 est lancée en arrière plan et la commande cmd2 est tout de suite lancée derrière en direct. $ cmd1 & cmd2 [3] 130 $ Cours systèmes d'exploitation avancés 75 La commande wait n permet d’attendre la mort de la tâche de fond dont le PID est n. $ cmd1 & [4] 132 $ wait 132 ... on est bloqué jusqu’à ce que cmd1 se termine $ Si n n’est pas précisée, wait attend la mort de toutes les tâches de fond. wait ne s’applique qu’aux processus lancés dans le shell lui−même. Cours systèmes d'exploitation avancés 76 D. Arborescence de processus Tous les processus sont créés à partir d’un processus père, existant déjà. Le premier processus est un peu spécial. Il est créé lorsque le système est initialisé. Il s’appelle "init", a le PID 1 et n’est associé à aucun terminal. Son travail consiste à créer de nouveaux processus. Le processus "init" crée 2 sortes de processus : des processus interactifs, associés aux lignes d’entrées/sorties sur lesquelles sont rattachés des terminaux. Autrement dit des processus vous permettant de vous connecter. Cours systèmes d'exploitation avancés 77 Pour visualiser les processus que vous avez lancé, tapez la commande «ps» : $ ps PID TTY TIME COMMAND 527 ttyp4 1:70 −ksh 536 ttyp4 0:30 cmd1 559 ttyp4 0:00 ps $ PID identifie le processus, TTY est le numéro du terminal associé, TIME est le temps cumulé d’exécution du processus, COMMAND est le nom du fichier correspondant au programme exécuté par le processus. Cours systèmes d'exploitation avancés 78 Dans cet exemple un utilisateur s’est connecté au système sur le terminal ttyp4 (commande tty). Un processus a donc été créé pour exécuter le programme shell (ksh). Il a le PID 527. $ echo $$ 527 $ cmd1 & $ $ ps PID TTY TIME COMMAND 527 ttyp4 1:70 −ksh 536 ttyp4 0:30 cmd1 559 ttyp4 0:00 ps $ Puis l’utilisateur a lancé le programme cmd1 en tâche de fond. Un deuxième processus (de PID 536) est créé qui exécute la commande ’cmd1’. Cours systèmes d'exploitation avancés 79 •Le processus 527 continue à tourner en parallèle, l’utilisateur peut donc continuer à travailler, et il lance la commande ps. Un troisième processus (de PID 559) est créé pour exécuter cette commande. La commande ps affiche le résultat sur la sortie standard, celle−ci étant associée à l’écran, le résultat apparaît. •Pendant ce temps, le shell est endormi. Lorsque la commande ps est terminée, le processus 559 meurt, son père, le processus 527, est averti par le système, et il recommence à travailler. Comme il s’agit du shell, il affiche à nouveau la chaîne d’invite ’$’ et attend une nouvelle commande. •Sans option, la commande concerne les processus associés au terminal depuis lequel elle est lancée. Cours systèmes d'exploitation avancés 80 *E. Identificateurs réels et effectifs A chaque processus sont en fait associés deux groupes d’identifications : 1. l’UID et le GID réels identifient l’utilisateur qui a lancé le processus. 2. l’UID et le GID effectifs (EUID et EGID), identifient les droits des processus. Le plus souvent, les identités réelles et effectives sont identiques. Cependant, il peut être nécessaire de modifier les droits d’un processus. Le fichier /etc/passwd est protégé en écriture. Aucun utilisateur n’a le droit d’écrire dans ce fichier. Cependant, en utilisant la commande passwd (/bin/passwd), vous écrivez quand même dans ce fichier, puisque vous modifiez votre mot de passe. $ ls −l /etc/passwd −rw−r−−r−− 1 root sys 7100 Aug 22 15:21 /etc/passwd $ type passwd passwd is /bin/passwd $ ls −l /bin/passwd −r−sr−sr−x 1 root sys 19040 Dec 19 1985 /bin/passwd $ Cours systèmes d'exploitation avancés 81 Remarquez que pour le fichier exécutable /bin/passwd, ls affiche un caractère ’s’ à la place du caractère ’x’ habituel, montrant par là que ce fichier a le mode « set user ID » et « set group ID ». Dans ce cas, l’EUID et l’EGID du processus sont ceux du propriétaire du fichier exécuté (et non pas ceux de l’utilisateur qui l’a lancé). Ainsi quiconque lance l’exécutable passwd, travaille avec l’UID effectif de root et GID de sys. Cours systèmes d'exploitation avancés 82 *F. Statut Lorsqu’un processus se termine, il retourne toujours une valeur significative ou statut. Par convention, lorsqu’un processus se termine correctement, il retourne la valeur 0, sinon il retourne une valeur différente de 0 (généralement 1). Ce choix permet de ramener des codes significatifs pour différencier les erreurs. Le statut d’une commande shell est placé dans la pseudo−variable spéciale, nommée "?". On peut consulter sa valeur en tapant la commande : echo $? Cours systèmes d'exploitation avancés 83 Sur cet exemple, la valeur 0 renvoyée par la commande "echo" nous indique que la commande "cp " s’est bien passée. Cours systèmes d'exploitation avancés 84 F. Communication entre processus Les utilisateurs disposent d’un mécanisme leur permettant de lancer un certain nombre de processus de façon concurrente (en quelque sorte parallèlement) et communiquant entre eux par l’intermédiaire de tubes (pipes), le système assurant la synchronisation de l’ensemble des processus ainsi lancés. Principe de fonctionnement : la sortie standard d’un des processus est redirigée sur l’entrée dans un tube et l’entrée standard de l’autre processus est redirigée sur la sortie de ce tube. Ainsi les deux processus peuvent échanger des données sans passer par un fichier intermédiaire de l’arborescence. Cours systèmes d'exploitation avancés 85 Le lancement concurrent de processus communiquant deux par deux par l’intermédiaire d’un tube sera réalisé par une commande de la forme : Exemple : $ who > tmp ; grep cours < tmp cours ttya4 Jul 31 10:50 cours ttyc6 Jul 31 09:34 cours ttya2 Jul 31 09:02 $ rm tmp L’utilisation de la commande rm évite de conserver le fichier intermédiaire. Cours systèmes d'exploitation avancés 86 L’utilisation d’un pipe (|) permet de résumer ces trois lignes de commandes en une seule : $ who | grep cours cours ttya4 Jul 31 10:50 cours ttyc6 Jul 31 09:34 cours ttya2 Jul 31 09:02 La sortie produite par la commande who est associée à l’entrée de la commande grep. who donne la liste des personnes connectées au système à un moment donné ; grep cherche si la chaîne cours est présente dans le flot de données qu’elle reçoit. On peut donc considérer que la commande grep joue le rôle de filtre. Cours systèmes d'exploitation avancés 87 Examinons l’exemple suivant : $ ps −a | wc −l 9 $ La commande "ps −a | wc −l" entraîne la création de deux processus concurrents (allocation du processeur). Un tube (fichier particulier, appelé buffer) est créé dans lequel les résultats du premier processus ("ps −a") sont écrits. Le second processus lit dans le tube. Un tube de communication (|) permet de mémoriser des informations. Autres exemples: • cherche dans le fichier des groupes, ceux qui commencent par a ou b .. ou j less /etc/group | grep "^[a-j] " • pour lister les sous-répertoires du rép. /etc ls -l /etc | grep "^d" Cours systèmes d'exploitation avancés 88