Cours Sigle du Cours Session - Groupe Professeur Systèmes d’exploitation INF3723 Automne 2006 01 Assistant Laboratoire II : Introduction au système d’exploitation UNIX (partie 2) Objectifs Général Le but de ce travail pratique est d’approfondir vos connaissances d’Unix. Spécifiques droits des fichiers compilation en C sous Unix redirection des fichiers Manipulations Partie I : Tapez la commande qui permet de réaliser ce qui suit : 1. 2. 3. 4. 5. afficher la liste des utilisateurs connectés au système. afficher votre code utilisateur. afficher le nom du répertoire courant. afficher le contenu du répertoire courant. créer un répertoire de nom laboratoire, afficher le contenu du répertoire courant et changer de répertoire pour passer à celui qui vient d’être créé. 6. afficher le nom du répertoire courant puis son contenu. 7. Créer un fichier de nom fich1, le contenu du fichier est : #include<iostream.h> #define long 180 int main() { char chaine[long]; cin.getline(chaine,long); cout<<chaine<<endl; return 0; } 8. Afficher le code de protection du fichier créé. 9. ajouter la permission en exécution pour le propriétaire et le groupe. 10. changer le nom du fichier en prog1.cpp. 11. compiler le fichier avec la commande g++ -o prog1 prog1.cpp. UQO - Département d’Informatique et d’Ingénierie INF 3723 : Systèmes d’exploitation 12. exécuter le programme : prog1 13. supprimer la permission en exécution du programme prog1.cpp pour le groupe. 14. rediriger la sortie standard du programme vers un fichier nommé resultat. 15. afficher le contenu de ce fichier. Partie 2 Que fait chacune des commandes suivantes : ls *.cpp file laboratoire ls|sort ls*/*.c ls|wc –w cat>>prog1.cpp //fin du programme ^D grep cin prog1.cpp|wc –l find . –name titi –print Partie 3 Écrire la commande qui permet d’afficher: les 2 premières lignes du fichier prog1.cpp. les 3 dernières lignes du fichier prog1.cpp. la 4ème ligne du fichier prog1.cpp. Rapport Il n’y a pas de rapport à remettre. Par contre la présence et la participation comptent pour 10% de la note du cours. Laboratoire # 2 Systèmes d’exploitation – INF3723 Page - 2 / 5 Annexe A : Introduction au système Unix (suite) 1. Éditeurs Unix Plusieurs éditeurs fonctionnent sous Unix : emacs, vi, xedit, pico…. Mais vi est l’éditeur standard sur la majorité des systèmes UNIX. vi utilise deux modes : Mode insertion : utilisé pour entrer du texte. Mode de commandes : utilisé pour manipuler le fichier. Pour créer un fichier nomfich avec vi : On lance la commande : vi nomfich Appuyer sur la touche i pour passer en mode insertion Taper le texte Peser sur <Esc> pour passer en mode commandes Pour la sauvegarde, appuyer sur les 3 touches :wq Pour plus d’informations sur cet éditeur, consulter le lien suivant : http://w3.uqah.uquebec.ca/DOC/unx_vi.html ou http://www.cs.fsu.edu/general/vimanual.html 2. Fichiers et répertoires Chaque utilisateur du système Unix est identifié par un numéro unique appelé UID (user identifier). Un utilisateur particulier, appelé le superviseur ou l’administrateur avec le UID = 0 possède des privilèges que les autres utilisateurs n’ont pas. Il peut accéder à tous les fichiers et effectuer certains appels systèmes réservés. Le système Unix offre la possibilité de constituer des groupes d’utilisateurs. Chaque groupe a un numéro unique appelé GID (group identifier). Les UID et GID d’un utilisateur servent, par exemple, à définir les droits d’accès aux fichiers de l’utilisateur. a. Permissions d’accès aux fichiers et aux répertoires Les fichiers sont regroupés dans des répertoires qui peuvent contenir aussi d’autres répertoires. Le système de fichiers UNIX représente donc une structure arborescente. Chaque fichier a un propriétaire (le créateur du fichier) et un groupe. Pour contrôler les accès aux fichiers et aux répertoires, neuf (9) bits de protection ou bits de droits leur sont attribués. Les 3 premiers bits définissent les droits d’accès pour le propriétaire, les 3 autres pour le groupe (même département, …) et les 3 derniers bits pour l’ensemble des utilisateurs. Chaque groupe de 3 bits contrôle les accès en lecture(r), en écriture(w) et en exécution(x) pour les fichiers. En ce qui concerne les catalogues ou répertoires (qui sont aussi des fichiers) : r : permet de lire les noms des fichiers w : permet d’ajouter et de retirer des fichiers x : permet la recherche dans un catalogue. Exemple : Laboratoire # 2 Systèmes d’exploitation – INF3723 Page - 3 / 5 -rwxr-xrw=> permet la lecture, l’écriture et l’exécution pour le propriétaire, la lecture et l’exécution pour le groupe et la lecture et l’écriture pour les autres. Remarques : On peut aussi transcrire l’écriture précédente en octal : 756. Le premier tiret à gauche des permissions indique que c’est un fichier. Pour indiquer un répertoire il y aura un d à la place du tiret. b.Modifications des permissions On peut donc pour une raison ou une autre, vouloir modifier ces permissions. L’appel système utilisé est la commande chmod. Cette commande a plusieurs formes, on peut, soit utiliser les codes r, w, x avec les codes u (utilisateur), g(groupe), o(autres), ou bien tout simplement utiliser les les valeurs octales. Exemple : chmod go+rw lab1 : ajouterait au groupe et aux autres les permissions de lecture et d’écriture sur le fichier lab1. chmod go=u-x lab1 : donnerait les mêmes permissions que l’utilisateur au groupe et aux autres sauf l’exécution. chmod 640 lab1 : donne les permissions de lecture et d’écriture à l’utilisateur, de de lecture au groupe et aucune permission aux autres. c.Chemin d’accès absolu et relatif Il y a deux façons de spécifier les noms des fichiers en Unix. La première est le chemin d’accès absolu qui indique comment accéder au fichier à partir du répertoire racine. Le répertoire racine est spécifié par /. Exemple : /labo/inf3723/lab2 La deuxième façon est le chemin d’accès relatif, où le chemin est donné par rapport au répertoire de travail en cours. Exemple : si inf3723 est le répertoire en cours, les commandes : mv lab2 lab3 (ici les chemins sont relatifs) et mv /labo/inf3723/lab2 /labo/inf3723/lab3 font exactement la même chose. 3. Les processus Les seules entités actives d’un système UNIX sont les processus et le seul moyen de créer des processus est de dupliquer un processus existant. Les appels systèmes d’Unix permettent la création, l’arrêt des processus, la communication et la synchronisation des processus. Laboratoire # 2 Systèmes d’exploitation – INF3723 Page - 4 / 5 Mais tout d’abord définissons la structure de l’espace d’adressage du processus. Cet espace est constitué de 3 segments (texte, données et pile) : Le segment de texte contient les instructions en langage machine (le code) produit par le compilateur et l’assembleur. Le segment de données contient l’espace de stockage des variables du programme. Il est divisé en deux parties : une pour les données initialisées et une autre pour les données non initialisées. La taille de cet espace peut augmenter ou diminuer durant l’exécution du programme. Le segment de pile contient au départ les variables d’environnement (shell) et la ligne de commande envoyée au shell pour demander l’exécution du programme. Un programme peut ainsi connaître ses paramètres. Les processus en Unix sont créés de façon très simple. L’appel système fork() crée une copie exacte du processus appelant qui est le processus père. La copie créée est le processus fils. Le père et le fils ont chacun leur propre image mémoire privée mais partage les fichiers qui sont ouverts. L’exécution des 2 programmes père et fils continue après l’appel du fork(). Le fait que les images mémoire, les variables et les registres soient identiques pour le père et pour le fils pose un problème : comment savoir quel processus est le père et lequel est le fils? Pour résoudre ce problème, l’appel système fork() retourne 0 dans le fils, une valeur supérieure à 0 qui est en fait le pid (process identifier) du fils, dans le père et une valeur inférieure à 0 si l’appel système a échoué. Un processus fils peut connaître son pid par l’appel système getpid() et il peut connaître celui de son père par l’appel système getppid(). Cette possibilité d’avoir des arbres de processus est la clé du fonctionnement d’Unix en temps partagé. Laboratoire # 2 Systèmes d’exploitation – INF3723 Page - 5 / 5