M1 EEAS Système d’exploitation GNU/Linux UPS Système d’exploitation GNU/Linux Plan du cours: ➽ I-Introduction ➽ II-Système de fichiers ➽ III-Processus ➽ IV-Langage de Shell ➽ V-Compléments sur les commandes Jean-Michel ENJALBERT - [email protected], 2005/2006 –1– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS I-Introduction I-1 Rôles d’un Système d’Exploitation S.E.= ensemble d’outils logiciels permettant de gérer le fonctionnement d’un ordinateur. – fournit une interface entre les programmes utilisateurs et le matériel – assure la gestion des ressources du système (processeur, mémoire, clavier, écran, disques, imprimantes, etc..). On distingue: – le programme qui gère les ressources du système et les processus (le noyau) – les outils logiciels associés au SE (compilateur, éditeur de texte, commandes, etc...). Jean-Michel ENJALBERT - [email protected], 2005/2006 –2– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS Applications Outils Noyau Materiel Un système d’exploitation doit concilier: – utilisation optimale des ressources (processeur, mémoire, ...) – facilité d’utilisation pour l’utilisateur Jean-Michel ENJALBERT - [email protected], 2005/2006 –3– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS I-2 Concepts de base des SE premiers ordinateurs (années 50) ➯ une seule personne: programmeur et opérateur. lecteur de cartes Ordinateur perforatrice imprimante sous utilisation des machines (très coûteuses) ➯ séparation des tâches de programmation et d’utilisation. Jean-Michel ENJALBERT - [email protected], 2005/2006 –4– M1 EEAS UPS Système d’exploitation GNU/Linux - Introduction Apparition des bandes magnétiques: programme résidant en mémoire chargé d’enchaı̂ner les tâches: le moniteur. lecteur/enreg. bandes lecteur de cartes perforatrice imprimante Ordinateur Notion de traitement par lots. execution resultats Programmeur Operateur travaux chargement bandes moniteur UC Inconvénient: séparation du programmeur/utilisateur et de la machine. Jean-Michel ENJALBERT - [email protected], 2005/2006 –5– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS Evolution de la technique: décalage entre lenteur des entrées/sorties et rapidité de l’unité centrale. Concept de multi-programmation. Interruption des tâches. Principe: entrelacer les tâches demandées au système pour ne pas bloquer l’UC dans l’attente de la fin d’une opération d’E/S. P1 E/S P4 P4 P1 P2 P3 P2 E/S P3 P1 P2 P3 P4 Jean-Michel ENJALBERT - [email protected], 2005/2006 –6– M1 EEAS UPS Système d’exploitation GNU/Linux - Introduction Amélioration de la puissance des machines: concept de temps partag é. Commutations périodiques des tâches. Rapidité des commutations (linux:1ms) ➯ pseudo-paralléllisme. P1 P1 P2 P2 P3 P4 P1 P3 P2 P3 P4 P4 fin P2 P1 P3 P4 P1 fin P3 P4 fin P1 Concepts utilisés par tous les systèmes d’exploitation modernes. Jean-Michel ENJALBERT - [email protected], 2005/2006 –7– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS I-3 Historique: de UNIX a GNU/LINUX Naissance d’UNIX: 1969 (K. Thomson aux laboratoires Bell) Objectif: disposer, sur un mini-ordinateur, d’un système d’exploitation puissant. Ecrit quasi entièrement en langage C en 1973 par D. Ritchie ➯ “invention” du langage C. ➯ UNIX portable sur toute machine possédant un compilateur C. 1984, Richard STALLMAN: Création de la Free Software Foundation (FSF) Projet de développement d’un système Unix entièrement libre (projet GNU). Développement d’outils: un compilateur C (gcc), un éditeur de texte (emacs), un débogueur (gdb) etc.. Noyau (nom de code: hurd) en retard. ➯ en 1991, Linus Thorwald: noyau Unix: Linux. Aujourd’hui (2005), GNU/Linux concurrent des UNIX commerciaux et de Microsoft/Windows. Jean-Michel ENJALBERT - [email protected], 2005/2006 –8– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS I-4 Caractéristiques principales d’UNIX I-4.1 Multi-plateformes Ecrit en C ➯ Compilateur C disponible ➯ UNIX disponible. ➯ Systèmes embarqués (micro-contrôleurs) ➯ Ordinateurs personnels (PC et MAC) ➯ Stations de travail et serveurs. I-4.2 Multi-tâches Ordinateur mono-processeur: une chose à la fois. Multi-taches: utilisation de l’attente d’E/S (lentes) et temps partag é: plusieurs taches “ouvertes”. Pour l’utilisateur, identique a un système parallèle. Jean-Michel ENJALBERT - [email protected], 2005/2006 –9– M1 EEAS I-4.3 Système d’exploitation GNU/Linux - Introduction UPS Multi-utilisateurs UNIX conçu pour permettre à plusieurs utilisateurs d’utiliser le même système de manière sécurisé ➯ Gestion des fichiers permettant de leur affecter un propriétaire et des droits d’accès. Notion de groupe permettant de distinguer différentes catégories d’utilisateur. ➯ Multi-tâches. Utilisation du système par plusieurs utilisateurs en même temps Chaque utilisateur exécute ses tâches sans perturber les tâches des autres. Jean-Michel ENJALBERT - [email protected], 2005/2006 –10– M1 EEAS I-4.4 Système d’exploitation GNU/Linux - Introduction UPS Système de fichiers hiérarchisé “en UNIX, tout est fichier” ➯ Fichier UNIX: chaı̂ne de caractères non structurée ➯ A tout fichier est associé un bloc d’informations (i-node) décrivant ses propriétés identifié par un index unique. ➯ Désignation d’un fichier fait par des fichiers particuliers: les répertoires. Un répertoire est un fichier formé d’un ensemble de couples: (index, nom de fichier) ➯ Racine du système: répertoire sans nom d’index 2. Contient des fichiers non-répertoires et/ou des répertoires L’ensemble forme une arborescence dont les feuilles sont des fichiers non-répertoires ou des répertoires vides. ➯ Périphériques (clavier, souris, disques, etc...) sous UNIX: fichiers spéciaux intégrés dans l’arborescence. Jean-Michel ENJALBERT - [email protected], 2005/2006 –11– M1 EEAS I-4.5 Système d’exploitation GNU/Linux - Introduction UPS Gestion des processus Processus: ensemble des programmes chargés en mémoire centrale en exécution ou en attente d’exécution. Gérés par le noyau du SE (ordonnancement et allocation des ressources). Processus initial: init. Crée des processus fils qui eux-même... Arborescence unique de processus. Un processus est caractérisé par un numéro (ID). Il possède un espace mémoire propre. Jean-Michel ENJALBERT - [email protected], 2005/2006 –12– M1 EEAS Système d’exploitation GNU/Linux - Introduction UPS I-5 Utilisateur d’un système UNIX I-5.1 ➯ ➯ ➯ ➯ Compte utilisateur créé par administrateur (utilisateur root). login: nom de l’utilisateur mot de passe: protection de l’accès ´ repertoire personnel: répertoire /home/nom I-5.2 login. Fichiers personnels. Processus de login ➯ Au démarrage du système, lancement du processus login: affichage d’un message et attente de caractères. ➯ Entrée du nom de login et du mot de passe ➯ Vérification de l’existence du compte et de la validité du mot de passe, puis création d’un processus de shell (interpréteur de commande) Jean-Michel ENJALBERT - [email protected], 2005/2006 –13– M1 EEAS I-5.3 Système d’exploitation GNU/Linux - Introduction UPS Administration du système UNIX: droits limités pour les utilisateurs (sur les fichiers et les processus). Utilisateur particulier qui possède tous les droits: root. Administrateur du système. ➯ Création de comptes utilisateurs ➯ Configuration du système ➯ Accès à tous les fichiers et à tous les processus. ➯ Peut détruire le système! Jean-Michel ENJALBERT - [email protected], 2005/2006 –14– M1 EEAS Système de fichiers GNU/Linux UPS II-Système de fichiers II-1 Différents types de fichiers Fichier: chaı̂ne de caractères non structuré + i-node. – Fichiers ordinaires: Inclus fichiers ’textes’ et fichiers binaires. – Fichiers spéciaux: associés à des périphériques. Ils sont placés dans le répertoire /dev et peuvent être à accès par bloc ou par caractère. – Répertoires: Fichiers qui permettent de référencer d’autres fichiers. Répertoire: ➯ liste de couples (nom fichier, index i-node) qui permet d’acc éder à un fichier à partir de son nom. Deux entrées au moins: (. , son propre index) et (.., l’index de son répertoire père). – Liens: Permet d’accéder à un même fichier en utilisant des noms différents. Jean-Michel ENJALBERT - [email protected], 2005/2006 –15– M1 EEAS Système de fichiers GNU/Linux UPS II-2 L’arborescence des fichiers Le système de fichiers UNIX se présente sous la forme d’une arborescence: mkdir bin / chmod home projet jme projet.c Chemin absolu: chemin unique partant de la racine permettant de désigner un fichier donné. Exemple sur la figure: /home/jme/projet. Chemin relatif: chemin faisant référence a un répertoire de travail. Exemple: a partir du répertoire /bin: ../home/jme/projet Jean-Michel ENJALBERT - [email protected], 2005/2006 –16– M1 EEAS UPS Système de fichiers GNU/Linux Exemple d’arborescence / .,2 bin,3 home,4 bin .,3 ..,2 mkdir,5 chmod,6 home .,4 ..,2 jme,7 mkdir chmod jme .,7 ..,4 projet,8 projet.c,9 Jean-Michel ENJALBERT - [email protected], 2005/2006 projet .,8 ..,7 projet.c –17– M1 EEAS Système de fichiers GNU/Linux UPS II-3 Commandes de base ➯ pwd: affiche le chemin abolu du répertoire de travail. ➯ cd permet de se déplacer (c’est à dire de changer la valeur du répertoire de travail) dans l’arborescence. – Sans argument, fixe le répertoire de travail comme étant le répertoire personnel de l’utilisateur. – L’argument de cd peut être un chemin absolu ou un chemin relatif. – Le fichier .., qui fait référence au répertoire père, permet de remonter dans l’arborescence. Jean-Michel ENJALBERT - [email protected], 2005/2006 –18– M1 EEAS Système de fichiers GNU/Linux UPS II-4 Unités logiques Unités logiques = unités de stockage (locales ou distantes): disque dur, lecteur de disquettes, lecteur de CD, etc... ➯ Chaque unité contient sa propre arborescence de fichiers. ➯ Ces unités logiques sont accessibles à partir de l’arborescence générale du système à condition d’être rattaché à cette arborescence. C’est ce que l’on appelle le ”montage”. ➯ Chaque unité peut être placé à n’importe quel endroit de l’arborescence. ➯ La commande mount permet d’effectuer ce montage. Elle est associée a la commande umount qui permet le démontage. Les unités logiques ”montables” doivent être décrites dans le fichier /etc/fstab. Jean-Michel ENJALBERT - [email protected], 2005/2006 –19– M1 EEAS UPS Système de fichiers GNU/Linux Exemple de montage Arbre systeme Arbre unite logique bin mkdir bin / / chmod home src data projet jme mnt projet.c Montage au point /mnt Montage au point /home/jme mkdir mkdir bin / bin chmod home / projet jme mnt bin projet.c chmod home bin jme mnt src src data data Jean-Michel ENJALBERT - [email protected], 2005/2006 –20– M1 EEAS Système de fichiers GNU/Linux UPS II-5 Caractéristiques des fichiers II-5.1 Descripteur de fichiers Chaque fichier UNIX est associé à un descripteur (i-node) qui contient: – un numéro unique d’identification – l’identification de son propriétaire – un compteur de références à ce fichier – l’adresse des blocs utilisés sur le disque pour ce fichier – sa taille en octets – son type: ordinaire, spécial,... – la date de sa création , de sa dernière modification, ... – les droits d’accès pour les différents utilisateurs – etc... Jean-Michel ENJALBERT - [email protected], 2005/2006 –21– M1 EEAS II-5.2 Système de fichiers GNU/Linux UPS les droits d’accès Les droits d’accès à un fichier peuvent être donnés soit: – au seul propriétaire du fichier – à tous les membres du groupe auquel il appartient – à tous les autres utilisateurs (non-membres du groupe) Un utilisateur appartient à un ou plusieurs groupes. Trois types de droits d’accès: – droits en lecture: Permet de visualiser le contenu du fichier et d’en effectuer une copie. – droits en écriture: Permet de modifier le contenu du fichier. – droits d’exécution: Permet d’exécuter le fichier. Pour un répertoire, permet de le ”traverser” c’est à dire de se déplacer à l’intérieur. Jean-Michel ENJALBERT - [email protected], 2005/2006 –22– M1 EEAS Système de fichiers GNU/Linux UPS Représentation des type et droits d’accès d’un fichier: ➯ chaı̂ne de 10 caractères du type: drwxrwxrwx Premier caractère: ➯ ➯ ➯ ➯ - pour un fichier ordinaire d pour un répertoire l pour un lien b ou c pour un fichier spécial. 3 groupes de 3 caractères: droits pour: propriétaire, groupe, autres (dans l’ordre). ➯ ➯ ➯ ➯ - absence de droits, r droits en lecture w droits en écriture x droits en exécution. Jean-Michel ENJALBERT - [email protected], 2005/2006 –23– M1 EEAS Système de fichiers GNU/Linux UPS II-6 Commandes sur les fichiers Une commande UNIX se présente sous la forme générale: commande -options arguments Les options comme les arguments peuvent être omis suivant la commande concernée. Chaque argument doit être séparé par un espace. Jean-Michel ENJALBERT - [email protected], 2005/2006 –24– M1 EEAS II-6.1 Système de fichiers GNU/Linux UPS Liste de fichiers La commande ls permet d’afficher la liste des fichiers contenu dans un répertoire.Principales options: -l pour un affichage détaillé (long) -a pour afficher les fichiers cachés (commencant par un .) Exemple: ls -l total 982 -rw-r--r-drwxr-xr-x drwxr-xr-x drwx-----drwxrwx--drwx-----drwxr-x---rw-r--r-drwx-----drwx------ 1 2 2 2 9 15 2 1 2 5 enjalber enjalber enjalber enjalber enjalber enjalber enjalber enjalber enjalber enjalber rst rst rst rst rst rst rst rst rst rst 62107 1024 512 512 512 1024 512 40960 512 1536 Sep Jul Jul Sep Jul Jul Jul Aug Sep Jul 12 20 18 6 21 20 20 31 8 20 13:44 09:12 08:56 11:14 09:54 13:15 08:16 05:16 16:41 10:00 7296_data.pdf C167/ Desktop/ PERSO/ Topo/ UPS/ UTILS/ automate2.tar mail/ nsmail/ Sans argument, ls affiche la liste des fichiers du répertoire courant. Sinon affiche le contenu du répertoire donné en argument, Jean-Michel ENJALBERT - [email protected], 2005/2006 –25– M1 EEAS II-6.2 Système de fichiers GNU/Linux Modification des droits d’accès: chmod Syntaxe: chmod ➯ ➯ ➯ ➯ ➯ ➯ ➯ ➯ ➯ UPS [ugoa][+-][rwx] nom fichier u user: le propriétaire du fichier g group: les membres du groupe o others: les autres (non-membres du groupe) a all: Tout le monde + Donne le droit d’accès - Supprime le droit d’accès r read: accès en lecture w write: accès en écriture x : accès en exécution Remarque: Un utilisateur ne peut modifier que les droits des fichiers qui lui appartiennent (excepté root). Jean-Michel ENJALBERT - [email protected], 2005/2006 –26– M1 EEAS II-6.3 Système de fichiers GNU/Linux UPS Caractères génériques Parmi les caractères spéciaux réservés, les caractères ? et *, appelés aussi caractères génériques permettent de sélectionner un sous-ensemble de fichiers (pour l’affichage de leur liste par exemple). ? remplace un et un seul caractère. * remplace une chaı̂ne de caractères de longueur quelconque. Exemples: ls *.c affiche uniquement la liste de tous les fichiers d’extension .c. ls a?? affiche la liste de tous les fichiers dont le nom contient 3 lettres et commence par a. Jean-Michel ENJALBERT - [email protected], 2005/2006 –27– M1 EEAS II-6.4 Système de fichiers GNU/Linux UPS Commandes de manipulation des fichiers – Copie de fichiers: cp Syntaxe: cp origine destination ou origine est le nom d’un fichier et destination le nom d’un fichier ou d’un répertoire (nom absolu ou relatif) – Déplacement de fichiers mv Syntaxe: mv origine destination. Le déplacement est un changement de nom. – Suppression de fichiers rm Syntaxe: rm fichiers Attention, sous UNIX il n’est pas possible de récupérer un fichier supprimé. On peut utiliser les caractères génériques? et *. Jean-Michel ENJALBERT - [email protected], 2005/2006 –28– M1 EEAS II-6.5 Système de fichiers GNU/Linux UPS Commandes de visualisation Les fichiers ordinaires de type texte peuvent être visualisés par différentes commandes UNIX: – cat Affiche a l’écran le contenu du fichier. – more Comme cat mais l’affichage se fait page par page. – head Affiche les premières lignes d’un fichier. – tail Affiche les dernières lignes d’un fichier. La commande wc permet d’afficher le nombre de lignes, de mots et de caract ères d’un fichier (dans cet ordre). Jean-Michel ENJALBERT - [email protected], 2005/2006 –29– M1 EEAS II-6.6 Système de fichiers GNU/Linux UPS Commandes de manipulation des répertoires Les commandes mv et cp s’appliquent aussi aux répertoires mais deux commandes supplémentaires permettent de créer et de supprimer un répertoire: – mkdir Pour créer un répertoire. – rmdir Pour supprimer un répertoire vide. Pour un répertoire non-vide, il faut utiliser la commande: rm -r nom repertoire. Jean-Michel ENJALBERT - [email protected], 2005/2006 –30– M1 EEAS II-6.7 Système de fichiers GNU/Linux UPS Les liens Un lien vers un fichier est un pointeur qui permet d’accéder à un fichier en utilisant un nom différent. Création d’un lien: commande ln. Syntaxe: ln [-s] fichier lien vers fichier ➯ Lien physique Nouvelle entrée dans un répertoire pour un numéro d’inode identique. ➯ Lien symbolique (option -s de la commande) Fichier spécial dont le contenu spécifie le chemin (absolu ou relatif) conduisant au fichier pointé. Si le fichier pointé est supprimé, le lien existe toujours mais ne peut plus fonctionner. Jean-Michel ENJALBERT - [email protected], 2005/2006 –31– M1 EEAS Système de fichiers GNU/Linux UPS Illustration Lien physique: ln progV2 prog Lien symbolique: ln −s progV2 prog bin bin .,61 ..,60 progV1,62 progV2,63 prog,63 .,61 ..,60 progV1,62 progV2,63 (prog−>progV2) prog,64 Jean-Michel ENJALBERT - [email protected], 2005/2006 –32– M1 EEAS UPS Processus GNU/Linux III-Processus III-1 Notion de processus Un processus peut être vu comme un programme en cours d’exécution. Il est caractérisé par un environnement: registres, pile, segment de données. DISQUE Programmes Lancement (fichiers executables) MEMOIRE Processus Ordonnanceur Unite Centrale Chaque processus est pris en charge par le noyau du S.E. qui lui attribue les ressources nécessaires: processeur, mémoire, ... Jean-Michel ENJALBERT - [email protected], 2005/2006 –33– M1 EEAS Processus GNU/Linux UPS III-2 Etats d’un processus Dans un système multi-tâches comme UNIX, un processus peut se trouver dans différents états au cours de sa vie: – En exécution Le processus est exécuté par le processeur – Prêt Le processus est prêt a être exécuté mais il attend que le processeur se libère. – Suspendu Le processus est en attente d’une ressource (entrée/sortie par exemple) – Stoppé Le processus a été suspendu par un signal externe. – Zombie Le processus est terminé mais reste référencé dans le système. Jean-Michel ENJALBERT - [email protected], 2005/2006 –34– M1 EEAS UPS Processus GNU/Linux ´ Graphe de changements d’etats du processus Creation Stoppe Signal Signal Pret Ordonnancement En Execution Terminaison Zombie Requete Entree/Sortie Fin Entree/Sortie Suspendu L’ordonnancement est le mécanisme qui permet de décider quel processus doit être exécuté par le processeur à un instant donné. Lorsqu’un processus se termine, il reste dans l’état zombie jusquà ce que son processus père prenne connaissance de son état de terminaison. Jean-Michel ENJALBERT - [email protected], 2005/2006 –35– M1 EEAS Processus GNU/Linux UPS III-3 Attributs d’un processus Durant son existence, un processus est caractérisé par: – son état – son identificateur (PID) – la valeur des registres du processeur – l’identité de l’utilisateur sous le nom duquel il s’exécute – les informations utilisés pour l’ordonnancement: priorité,... – les informations concernant l’espace d’adressage (code, données, pile) – les informations concernant les entrées/sorties – ... Jean-Michel ENJALBERT - [email protected], 2005/2006 –36– M1 EEAS Processus GNU/Linux UPS III-4 Liste des processus La commande ps permet d’afficher des informations sur les processus existants dans le système. Elle possède différentes options. Utilisé sans options, elle affiche la liste des processus fils du terminal (shell) à partir duquel elle a été lancée. Exemple: [jme@tamia AUTOMATE]$ ps PID TTY TIME CMD 584 pts/0 00:00:00 bash 617 pts/0 00:00:00 simulateur 618 pts/0 00:00:00 ps Jean-Michel ENJALBERT - [email protected], 2005/2006 –37– M1 EEAS UPS Processus GNU/Linux Il existe aussi la commande top qui affiche en interactif des informations sur les processus en cours et sur leur état. 36 processes: 33 sleeping, 3 running, 0 zombie, 0 stopped CPU states: 44.6% user, 1.5% system, 0.0% nice, 53.7% idle Mem: 38792K av, 37796K used, 996K free, 26320K shrd, 3672K buff Swap: 66488K av, 3356K used, 63132K free 18592K cached PID 528 582 619 1 2 3 336 363 415 464 499 500 USER root jme jme root root root root daemon root xfs root root PRI 19 1 4 0 0 0 0 0 0 0 0 0 NI 0 0 0 0 0 0 0 0 0 0 0 0 SIZE 3184 4160 1016 108 0 0 200 316 80 1096 248 68 RSS SHARE STAT 3064 964 R 4160 2984 R 1016 824 R 52 44 S 0 0 SW 0 0 SW 148 108 S 300 236 S 0 0 SW 1020 624 S 0 0 SW 0 0 SW LIB %CPU %MEM 0 33.2 7.8 0 3.7 10.7 0 3.7 2.6 0 0.0 0.1 0 0.0 0.0 0 0.0 0.0 0 0.0 0.3 0 0.0 0.7 0 0.0 0.0 0 0.0 2.6 0 0.0 0.0 0 0.0 0.0 Jean-Michel ENJALBERT - [email protected], 2005/2006 TIME 0:13 0:01 0:00 0:04 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 COMMAND X konsole top init kflushd kupdate syslogd atd lpd xfs login mingetty –38– M1 EEAS UPS Processus GNU/Linux III-5 Création des processus ➯ Duplication du processus courant (appel système fork). Le père crée un fils. ➯ Recouvrement du code exécutable du fils (appel système exec) fork:exec "commande" bash commande wait Processus pere Processus fils fork:exec "commande1" commande 1 bash fork:exec "commande2" commande 2 A l’initialisation le processus init est lancé. Ce processus crée lui-même des processus fils. Le résultat est une arborescence de processus. Jean-Michel ENJALBERT - [email protected], 2005/2006 –39– M1 EEAS UPS Processus GNU/Linux III-6 Mode utilisateur et mode noyau Protection des ressources paratagées (mémoire, E/S, ...): ➯ Seuls les processus systémes peuvent y accéder. Processus utilisateur: doit utiliser des appels système. requete E/S Processus Utilisateur Processus Systeme E/S resultat requete Exemple: Permet de vérifier les droits de l’utilisateur sur un fichier. Jean-Michel ENJALBERT - [email protected], 2005/2006 –40– M1 EEAS UPS Processus GNU/Linux III-7 Communication entre processus III-7.1 Les signaux Un processus peut émettre un signal vers un autre processus. Appel système: kill signal PID III-7.2 Les tubes Files de caractères de type FIFO. Un processus peut ouvrir un tube vers un autre processus et envoyer des donn ées. Processus emetteur tube de communication ecriture lecture Processus recepteur Jean-Michel ENJALBERT - [email protected], 2005/2006 –41– M1 EEAS III-7.3 UPS Processus GNU/Linux Mémoire partagée ➯ Sous UNIX, chaque processus possède sa mémoire propre. ➯ Le mécanisme de mémoire partagée permet de définir une zone mémoire accessible depuis plusieurs processus. ➯ Une clé permet l’accès à cette zone. ➯ Le processus qui réserve la mémoire partagée génère cette clé et la transmet aux processus avec qui il doit partager cette mémoire. Processus 1 Processus 2 lecture/ecriture Memoire propre Memoire commune Memoire propre Jean-Michel ENJALBERT - [email protected], 2005/2006 –42– M1 EEAS III-7.4 Processus GNU/Linux UPS Sémaphores ➯ Servent à gérer l’allocation de ressources limitées. ➯ Dans le cas des ressources systèmes (entrées/sorties, mémoires, processeur...) c’est le SE qui arbitre entre les différentes demandes (en utilisant des sémaphores!). ➯ Un sémaphore est un compteur associé à une ressource. – Si ce compteur vaut zéro, c’est que la ressource est indisponible. – Un processus qui veut accéder à une ressource ne peut le faire que si la valeur du sémaphore n’est pas nulle. – Il décrémente alors le compteur. A la libération de la ressource, il incrémente le compteur. Jean-Michel ENJALBERT - [email protected], 2005/2006 –43– M1 EEAS III-7.5 UPS Processus GNU/Linux Files de messages Les files de messages fonctionnent comme des boı̂tes aux lettres. Chaque processus autorisé peut mettre un message dans la boı̂te aux lettres ou en retirer un. envoi mess. lecture mess. Processus 1 Processus 2 Processus 3 boite aux lettres Jean-Michel ENJALBERT - [email protected], 2005/2006 –44– M1 EEAS Processus GNU/Linux UPS III-8 Redirection des Entrées/Sorties III-8.1 Entrée et sortie standards Création d’un processus ➯ ouverture de 3 fichiers. – Entrée standard: descripteur 0, clavier. – Sortie standard: descripteur 1, écran – Sortie d’erreurs: descripteur 2, écran Redirections et pipeline: Ecran et clavier=fichiers spéciaux ➯ – Redirection de la sortie d’un processus vers un fichier – Redirection d’un fichier vers l’entrée d’un processus. – Redirection de la sortie d’un processus vers l’entrée d’un processus. Jean-Michel ENJALBERT - [email protected], 2005/2006 –45– M1 EEAS III-8.2 Processus GNU/Linux UPS Redirection de la sortie commande > fichier permet de rediriger la sortie standard vers un fichier S’il existait précédemment, le fichier est écrasé. On peut aussi rediriger la sortie vers un fichier existant sans l’ écraser (à la suite) en écrivant commande >> fichier Un fichier particulier: /dev/null permet d’envoyer la sortie vers le n éant... Jean-Michel ENJALBERT - [email protected], 2005/2006 –46– M1 EEAS III-8.3 Processus GNU/Linux UPS Sortie d’erreur En plus de la sortie standard, un processus peut écrire sur la sortie erreurs On peut rediriger cette sortie (l’écran par défaut) en utilisant la syntaxe: commande 2> fichier ou commande 2>> fichier On peut aussi rediriger les deux sorties: (commande > fichier1) 2> fichier2 qui redirige la sortie standard vers fichier1 et la sortie erreur vers fichier2. Jean-Michel ENJALBERT - [email protected], 2005/2006 –47– M1 EEAS III-8.4 Processus GNU/Linux UPS Redirection de l’entrée La redirection de l’entrée standard se fait en utilisant la syntaxe: commande < fichier Le processus vient lire dans le fichier les données précédemment rentrées au clavier. On peut bien sùr rediriger à la fois l’entrée et la sortie en écrivant: commande < fichier1 > fichier2 La commande prend ses entrées dans fichier1 et met ses sorties dans fichier2. Jean-Michel ENJALBERT - [email protected], 2005/2006 –48– M1 EEAS Processus GNU/Linux III-8.5 UPS Enchainement de processus On peut lier deux processus, l’un prenant en entrée la sortie de l’autre (on parle de pipeline): commande1 | commande2 commande2 prend en entrée la sortie de commande1. Ceci est équivalent à: commande1 > tempo; commande2 < tempo; rm tempo Remarque: Le caractère ; permet d’enchaı̂ner des commandes. Jean-Michel ENJALBERT - [email protected], 2005/2006 –49– M1 EEAS Processus GNU/Linux UPS III-9 Lancement des commandes Les commandes sont généralement lancées à partir d’un terminal. Lancement en avant-plan (terminal bloqué tant que la commande s’exécute): commande Lancement en arrière-plan (le terminal reste disponible) commande & Remarque: si le processus attend des entrées clavier, il va être stoppé. Passage arrière-plan ➯ avant-plan: fg Passage avant-plan ➯ arrière-plan: bg (il faut d’abord stopper le processus) Signals envoyés à un processus en avant-plan: – CTRL-Z: processus stoppé – CTRL-C: processus supprimé. Jean-Michel ENJALBERT - [email protected], 2005/2006 –50– M1 EEAS Langage de shell: Bash UPS IV-Langage de shell IV-1 Introduction Shell = Interpréteur de commandes Analyse et exécute des commandes UNIX Mode interactif: commandes rentrées au clavier dans un terminal. L’analyse de la commande et son exécution commence après le retour-chariot (caractère CR). Mode “batch”: la commande est un fichier contenant des commandes UNIX. L’interpréteur exécute ce fichier ligne par ligne. Jean-Michel ENJALBERT - [email protected], 2005/2006 –51– M1 EEAS Langage de shell: Bash UPS IV-2 Interpréteur interactif L’algorithme que suit un interpréteur de commande en mode interactif peut-être décrit ainsi: 1. Ouverture de 3 fichiers: entrée standard, sortie standard, sortie d’erreur. 2. Affichage du message d’accueil (prompt). 3. Lecture sur l’entrée standard (avec stockage des caractères dans un buffer) jusqu’au caractère retour chariot. 4. Interprétation des caractères spéciaux (par exemple “?” et “*”). 5. Recherche de la commande (dans les répertoires listés dans la variable PATH). 6. Lancement de la commande en avant-plan: fork:exec:wait:prompt ou en arrière-plan: fork:exec:prompt. En arrière plan, on revient directement en 2. En avant-plan, on attend la fin de la commande (fonction wait) avant de revenir en 2. Jean-Michel ENJALBERT - [email protected], 2005/2006 –52– M1 EEAS Langage de shell: Bash UPS IV-3 Fichiers de configuration A la connection au système, celui-ci exécute un fichier de configuration. Pour bash il s’agit du fichier: .bash profile. Remarques: Le caractère # en début de ligne indique un commentaire. Le fichier .bash profile n’est exécuté qu’à la connection au système et pas lors de l’ouverture d’un nouveau terminal. .bashrc est lui exécuté à l’ouverture de chaque nouveau terminal. On notera la commande alias qui permet de donner un synonyme à une commande. L’inverse de la commande alias est la commande unalias. Voici un exemple des fichiers .bash profile et .bashrc: Jean-Michel ENJALBERT - [email protected], 2005/2006 –53– M1 EEAS Langage de shell: Bash UPS # .bash_profile # Get the aliases and functions if [ -f ˜/.bashrc ]; then . ˜/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin:. BASH_ENV=$HOME/.bashrc USERNAME="" export USERNAME BASH_ENV PATH Jean-Michel ENJALBERT - [email protected], 2005/2006 –54– M1 EEAS Langage de shell: Bash UPS # .bashrc # User specific aliases and functions alias rm="rm -i" alias mv="mv -i" alias cp="cp -i" alias cls="clear" alias ls="ls --color=auto" alias ll="ls -l" # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi Jean-Michel ENJALBERT - [email protected], 2005/2006 –55– M1 EEAS Langage de shell: Bash UPS IV-4 Variables d’environnement Variables initialisées par le système (fichiers d’iniitialisation). Exemples: ➯ PWD Contient le chemin absolu du répertoire de travail. ➯ HOSTNAME Contient le nom de la machine. ➯ USERNAME Contient le nom de l’utilisateur. ➯ PATH Contient la liste des chemins de recherche des commandes. Chaque chemin est séparée par :. Les répertoires sont explorés dans l’ordre de la liste jusqu’a ce que la commande soit trouvée. Jean-Michel ENJALBERT - [email protected], 2005/2006 –56– M1 EEAS UPS Langage de shell: Bash IV-5 Les scripts-shell Un script-shell est un fichier texte contenant des commandes UNIX qui vont être exécutées par l’interpréteur de commandes. On doit le rendre exécutable (commande chmod). Il doit commencer par une ligne indiquant l’interpréteur de commandes à utiliser (Exemple: .#!/bin/bash). Une commande UNIX a la forme générale suivante: commande -options arguments ou options et arguments sont des listes de chaı̂nes de caractères séparés par des blancs. Par exemple: rm -i *.c *.o. Elle renvoie un code de retour qui vaut zéro en cas de succès et une valeur positive en cas d’ erreur. Une commande UNIX peut-être une commande interne au noyau ou une commande externe. Jean-Michel ENJALBERT - [email protected], 2005/2006 –57– M1 EEAS IV-5.1 UPS Langage de shell: Bash Paramètres positionnels Les paramètres positionnels permettent de récupérer les valeurs passées à une commande (arguments ou options). On utilise la notation: $x ou x représente le numéro du paramètre. $0 représente le nom du fichier script lui-même. $# représente le nombre de paramètres passés au script. Exemple: Soit le script-shell essai. Si l’on exécute: essai du shell Les paramètres positionnels ont les valeurs suivantes: ` parametre valeur $# 2 $0 essai $1 du $2 shell Jean-Michel ENJALBERT - [email protected], 2005/2006 –58– M1 EEAS IV-5.2 Langage de shell: Bash UPS Variables utilisateurs On peut aussi définir des variables locales dans un script simplement en les affectant. A l’intérieur d’un script, les valeurs des variables sont accessibles en les pr éfixant par le symbole $. Elles peuvent être rendues accessibles en dehors du script gràce à la commande export. IV-5.3 Divers – Les commentaires commencent avec le symbole # et se terminent en fin de ligne. – Le séparateur de commande est la fin de ligne ou le caractère ; Jean-Michel ENJALBERT - [email protected], 2005/2006 –59– M1 EEAS Langage de shell: Bash UPS Exemple de script La commande: echo permet d’afficher des chaı̂nes de caractères à l’écran et notamment les valeurs des variables. La commande read permet de lire une variable au clavier. #!/bin/bash # # Exemple de variables utilisateurs # VAR1=52 # VAR1 = la chaine ’52’ VAR2=VAR1 # VAR2 = la chaine ’VAR1’ ! VAR3=$VAR1 # VAR3 = la valeur de VAR1 soit la chaine ’52’ VAR4=$((VAR1+1)) # VAR4 = la chaine: ’53’ echo $VAR1 $VAR2 $VAR3 $VAR4 # Affiche: 52 VAR1 52 53 echo "Votre reponse?" read REP echo "vous avez repondu: $REP" Jean-Michel ENJALBERT - [email protected], 2005/2006 –60– M1 EEAS IV-5.4 Langage de shell: Bash UPS La commande test La commande test permet de réaliser des comparaisons. On peut écrire: test comparaisons ou [ comparaisons ] (espaces obligatoires!). Quelques opérateurs de comparaison: ` Sur les chaı̂nes de caracteres: test v1 = v2 (égalité de chaı̂nes de caractères) test v1 != v2 (non-égalité de chaı̂nes de caractères) ´ Sur les expressions arithmetiques: test v1 -eq v2 (égalité de valeurs entières) test v1 -ne v2 (non-égalité de valeurs entières) Pour les expressions arithmétiques, les opérateurs de comparaison suivants peuvent être utilisés: -eq, -ne, -lt, -le, -gt, -ge. Jean-Michel ENJALBERT - [email protected], 2005/2006 –61– M1 EEAS Langage de shell: Bash UPS Sur les fichiers: (tirées du manuel de bash): -a -b -c -d -r -s -w -x -O -G file file file file file file file file file file True True True True True True True True True True if if if if if if if if if if file file file file file file file file file file exists. exists and exists and exists and exists and exists and exists and exists and exists and exists and is a block special file. is a character special file. is a directory. is readable. has a size greater than zero. is writable. is executable. is owned by the effective user id. is owned by the effective group id. Exemple: #!/bin/bash # teste si le paramètre passé en ligne de commande est un répertoire # if test -d $1 ; then echo $1 est un répertoire else echo $1 n’est pas un répertoire fi Jean-Michel ENJALBERT - [email protected], 2005/2006 –62– M1 EEAS IV-5.5 UPS Langage de shell: Bash Evaluation des expressions arithmétiques L’évaluation arithmétique permet de remplacer une expression par le résultat de son évaluation. Il existe deux formes (équivalentes) d’évaluation arithmétique: $[expression] $((expression)) Les opérateurs sont les mêmes que ceux du langage C: +, -, *, /, >>, <<, etc... Par exemple, le script suivant: #!/bin/bash x=3 y=5 echo $x+$y $[$x+$y] $(($x*$y)) affiche: 3+5 8 15 Jean-Michel ENJALBERT - [email protected], 2005/2006 –63– M1 EEAS IV-5.6 Langage de shell: Bash UPS Structures de contrôle if if <condition1>; then <commandes1> elif <condition2>; then <commandes2> else <commandes3> fi condition1 et condition2 sont des commandes (test en général). #!/bin/bash # lance latex et dvips si l’utilisateur a donné nom en argument # if test $# -ne 1; then echo "erreur de syntaxe" else latex $1; dvips -o $1.ps $1.dvi fi Jean-Michel ENJALBERT - [email protected], 2005/2006 –64– M1 EEAS Langage de shell: Bash UPS for for <variable> [in <liste_de_cas>] do <commandes> done ([] signifie optionnel) Exemple: #!/bin/bash # # supprime les droits d’acces en lecture sur les fichiers # d’extension .c aux utilisateurs autre que le proprietaire # des fichiers # for FICHIER in *.c do chmod go-r $FICHIER done Jean-Michel ENJALBERT - [email protected], 2005/2006 –65– M1 EEAS Si in Langage de shell: Bash UPS ... est omis, liste prend successivement la valeur de chacun des paramètres positionnels. Exemple: #!/bin/bash # # Calcule la moyenne des paramètres (entiers) passés en # ligne de commande # SOMME=0 for NOTE do SOMME=$((SOMME+NOTE)) done if [ $# -ne 0 ]; then echo moyenne:$(($SOMME/$#)) fi Jean-Michel ENJALBERT - [email protected], 2005/2006 –66– M1 EEAS Langage de shell: Bash UPS while while <condition> do <commandes> done Exécute les commandes tant que condition est vraie. Exemple: #!/bin/bash # x=0 while test $[$x] -lt 5 # evalue x do # fait tant que x<5 x=$[$x+2] # incrémente x de 2 echo $x # affiche x done Jean-Michel ENJALBERT - [email protected], 2005/2006 –67– M1 EEAS Langage de shell: Bash UPS until until <condition> do <commandes> done Exécute les commandes jusqu’a ce que condition soit vraie. Exemple: #!/bin/bash # # Exemple de boucle ’until’ # boucle jusqu’a ce que l’utilisateur tape ’fin’ # REP=encore until [ $REP = "fin" ] do echo ? read REP done Jean-Michel ENJALBERT - [email protected], 2005/2006 –68– M1 EEAS Langage de shell: Bash UPS case case <variable> in <cas1>) <commande1> ;; <cas2>) <commande2> ;; *) <commande_defaut> ;; esac cas1, cas2 sont des chaı̂nes de caractères. Exécute la commande pour laquelle il y a correspondance entre variable et cas. Sinon exécute la commande par défaut. Jean-Michel ENJALBERT - [email protected], 2005/2006 –69– M1 EEAS Langage de shell: Bash UPS Exemple: #!/bin/bash # # Calculatrice basique sur les nombres entiers # if [ $# -ne 3 ]; then echo "3 paramètres: opérande opérateur(+,-,/,x) opérande" else case $2 in +) echo $[$1+$3] ;; -) echo $[$1-$3] ;; x) echo $[$1 * $3] ;; /) echo $[$1 / $3] ;; *) echo "opérateur inconnu" # traitement par défaut esac fi Jean-Michel ENJALBERT - [email protected], 2005/2006 –70– M1 EEAS Compléments sur les commandes UPS ´ V-Complements sur les commandes Voici quelques commandes usuelles Unix, certaines sont détaillées par la suite: ➯ man commande affiche l’aide en ligne de la commande ➯ grep motif fichier recherche de chaı̂nes dans un fichier. ➯ find chemin expression recherche de fichiers. ➯ which commande recherche de commandes. ➯ tar options archive fichiers archivage de fichiers. ➯ gzip fichier compression d’un fichier ➯ file fichier affichage du type d’un fichier (ascii, binaire, ...) ➯ du rep affichage de l’espace utilisé par l’arborescence spécifiée. ➯ touch fichier crée un fichier vide ou met à jour sa date. ➯ diff fichier1 fichier2 affiche les différences entre fichiers texte. ➯ sort fichier tri un fichier texte Jean-Michel ENJALBERT - [email protected], 2005/2006 –71– M1 EEAS V-1 Compléments sur les commandes UPS Manuel en ligne: man La commande man permet d’afficher le manuel en ligne des commandes disponibles sur le système. Sous sa forme la plus simple sa syntaxe est: man Exemple: man commande. man. On peut aussi préciser la section de recherche: man section nom. Ainsi la section 3 regroupe les fonctions systèmes du langage C. Exemple: man 3 printf Pour afficher toutes les sections correspondants à une commande, on utilise l’option -a. Exemple: man -a time Jean-Michel ENJALBERT - [email protected], 2005/2006 –72– M1 EEAS Compléments sur les commandes Exemple: man UPS grep (extraits) Nom: grep - Afficher les lignes correspondant à un motif donné. Synopsis: grep [ -[[AB] ]num ] [ -[chnvx] ] motif [ fichiers... ] Description: grep recherche dans les fichiers d’entrée indiqués les lignes correspondant à un certain motif. Si aucun fichier n’est fourni, la lecture se fait depuis l’entrée standard. Par défaut, grep affiche les lignes correspondant au motif. grep accepte les options suivantes : -num Les correspondances seront affichées avec num lignes supplémentaires avant et après. -A num Afficher num lignes supplémentaires après la ligne correspondante. -B num Afficher num lignes supplémentaires avant la ligne correspondante. -c Ne pas afficher les résultats normaux. A la place, afficher un compte des lignes correspondantes pour chaque fichier d’entrée. Avec l’option -v (voir plus bas), afficher les nombres de lignes ne correspondant pas au motif. -h Ne pas afficher le nom des fichiers dans les ér sultats lorsque plusieurs fichiers sont parcourus. -n Ajouter à chaque ligne de sortie un préfixe contenant son numéro dans le fichier d’entrée. -v Inverser la mise en correspondance, pour sélectionner les lignes ne correspondant pas au motif. -x Ne sélectionner que les correspondances qui occupent une ligne entière. Jean-Michel ENJALBERT - [email protected], 2005/2006 –73– M1 EEAS Compléments sur les commandes UPS V-2 Utilisation de grep ➯ Affichage des lignes contenant la chaine: “1000” de prog.c: grep 1000 prog.c ➯ Compte des lignes contenant “while”: grep -c while prog.c ➯ Recherche du PID du processus: emacs ps | grep emacs ➯ Suppression des lignes contenant “printf” de prog.c et sauvegarde dans prog2.c: grep -v printf prog.c > prog2.c Jean-Michel ENJALBERT - [email protected], 2005/2006 –74– M1 EEAS Compléments sur les commandes UPS V-3 Recherche de fichiers find Syntaxe: find chemin expression Chemin: la recherche s’effectue dans le répertoire dont le chemin est donné en argument et tous ses sous-répertoires. Expression: affiche la liste des fichiers pour laquelle expression est vraie. Exemples d’expressions: -name nom, -size +nk, ... Exemples: find /home/jme -name prog.c Affiche le chemin de tous les fichiers prog.c contenu dans l’arborescence ayant pour racine /home/jme find . -size +50k Affiche tous les fichiers du répertoire courant de taille supérieure à 50 Koctets. Jean-Michel ENJALBERT - [email protected], 2005/2006 –75– M1 EEAS Compléments sur les commandes UPS V-4 Recherche de commandes: which Recherche du chemin de l’exécutable donné en argument. La recherche se fait dans les répertoires listés dans la variable d’environnement PATH. Option: -a Affiche toutes les occurences de l’exécutable. Exemple: which bash /bin/bash Jean-Michel ENJALBERT - [email protected], 2005/2006 –76– M1 EEAS Compléments sur les commandes UPS V-5 Archivage: tar tar permet de concaténer des fichiers et des répertoires dans un seul fichier (fichier archive) Création d’une archive: tar cvf archive.tar fichiers ou: tar cvf archive.tar repertoires Vérification de l’archive (affichage de son contenu): tar tvf archive.tar Désarchivage (extraction des fichiers): tar xvf archive.tar ´ Remarque: les fichiers archiv´ es ne sont pas supprimes. Jean-Michel ENJALBERT - [email protected], 2005/2006 –77– M1 EEAS Compléments sur les commandes UPS V-6 Compression de fichiers: gzip Il existe plusieurs utilitaires de compression de fichier. gzip est le plus utilis é sous Linux. Compression: gzip fichier : remplace fichier par sa version compressée fichier.gz Affichage du contenu du fichier compressé: gzip -l fichier.gz Décompression: gzip -d fichier.gz Jean-Michel ENJALBERT - [email protected], 2005/2006 –78–