Introduction aux systèmes d’exploitation (IS1) Concepts de base 1 Ressources bibliographiques Voici une courte liste de documents pouvant vous aider à suivre ce module. Elle n’est bien entendu pas exhaustive, et l’Internet regorge de sites explicatifs, tutoriels et autres notes de cours sur les systèmes d’exploitation. Nous vous recommandons tout de même les quelques références suivantes. Livre : « Unix, programmation et communication », par J.-M. Rifflet et J.-B. Yunès, Dunod. Livre très complet sur Unix, va bien au-delà du cadre de ce module mais peut servir de référence et de source d’exercices et d’exemples. Notes de cours : http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/ Tutoriel : http://w3.uqah.uquebec.ca/DOC/index-unx.html Aide-mémoire : http://devernay.free.fr/cours/unix/unixref.html Manuel FreeBSD : http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/ 2 Organisation des données Fichiers et répertoires Sous Unix (comme sous la majorité des systèmes d’exploitation), les données (sur le disque dur, un cd-rom, une clef USB, ...) sont organisées selon les notions de répertoire et fichier. Les fichiers contiennent les données ; ils peuvent contenir des textes en clair (courriers, textes sources des programmes, etc...) ou encore un programme exécutable. Les répertoires permettent d’organiser les fichiers sur l’espace du disque dur. Ils contiennent aussi bien des fichiers que des sous-répertoires. On obtient ainsi une structure hiérarchique. Les noms de fichiers et de répertoires peuvent contenir à peu près tous les caractères et distinguent les majuscules des minuscules. Mais certains caractères sont plus pénibles que d’autres. Le caractère espace, par exemple, sert de séparateur et ne peut donc être utilisé dans un nom de fichier que « protégé » par le caractère backslash (\). D’autre part, les fichiers et répertoires dont le nom commence par le caractère point (.) sont appelés cachés et ni la commande de listage des fichiers (ls) ni le gestionnaire de fichiers de KDE ne les afficheront par défaut. 1 Structure arborescente des données On peut comparer les répertoires à des boîtes dans lesquelles on peut classer des objets, i.e les fichiers, et aussi y stocker d’autres boîtes dans lesquelles sont classés d’autres objets. Cette représentation de l’arborescence nous montre que, pour retrouver un fichier, il est nécessaire de connaître son chemin d’accès. Ce dernier représente la succession des répertoires à parcourir pour accéder au fichier (navigation dans l’arbre). Les répertoires sont séparés par un slash (/) dans l’écriture du chemin (il sert par conséquent aussi à représenter la racine). Exemple d’arborescence sous Unix : / bin . . . home etu1 .bashrc etu2 tp1.ps ... tmp users . . . . . . ... tp2.ps Quelques définitions : Répertoire courant On appelle répertoire courant celui dans lequel on se trouve à un instant donné durant la navigation dans le système de fichiers. Il est noté point (.) Répertoire parent Le répertoire parent est celui hiérarchiquement immédiatement supérieur à celui courant. Il est noté « point point » (..) Répertoire racine C’est le répertoire le plus haut de l’arborescence. Il est représenté par / et est le seul répertoire qui n’a pas de parent (ou pour être exact, dont le parent est lui-même). Répertoire personnel (ou home directory) Chaque utilisateur a un répertoire maison. C’est le répertoire dans lequel vous vous trouvez lorsque vous ouvrez un shell. C’est le répertoire où vous pouvez/devez mettre vos fichiers personnels. C’est en général le répertoire /home/<nom d’utilisateur> et il peut toujours être désigné par le caractère tilde (˜). Chemin absolu Le chemin absolu désigne la succession des répertoires à parcourir depuis la racine pour accéder au fichier spécifié. Exemple : /home/etu2/tp1.ps pour accéder au fichier tp1.ps du système de fichier quel que soit l’endroit où on se trouve dans le système (représenté dans le schéma plus-haut). Chemin relatif Le chemin relatif désigne la succession des répertoires à parcourir depuis le répertoire courant pour accéder au fichier spécifié. Exemple : ../etu1/.bashrc pour accéder au fichier .bashrc lorsqu’on se trouve dans le répertoire etu2. La présence du répertoire parent dans ce chemin relatif permet de remonter dans l’arbre. 2 3 Commandes shell les plus courantes Dans la liste de commandes qui suit, fic et rep désignent des fichiers ou des répertoires via leur chemin relatif ou absolu. man (manual) : man commande Peut-être la plus importante de toutes étant donné qu’elle explique le fonctionnement de toutes les autres et permet d’en connaître les options. pwd (print working directory) : pwd Affiche le chemin absolu du répertoire dans lequel vous vous trouvez. cd (change directory) : cd rep Change le répertoire courant. ls (list) : ls rep Permet d’afficher le contenu d’un répertoire. Sans argument, elle affiche le contenu du répertoire courant. cp (copy) : cp fic1 . . . ficn rep Copie les fichiers fic1 . . . ficn dans le répertoire rep. mv (move) : mv fic1 . . . ficn rep Déplace les fichiers fic1 . . . ficn dans le répertoire rep. On se sert aussi de cette commande pour renommer un fichier (mv ancien nouveau). rm (remove) : rm fic1 . . . ficn Détruit les fichiers fic1 . . . ficn . Attention, par défaut aucune confirmation de suppression ne vous est demandée quand vous utilisez cette commande. mkdir (make directory) : mkdir rep1 . . . repn Crée les répertoires rep1 . . . repn . rmdir (remove directory) : rmdir rep1 . . . repn Détruit les répertoires rep1 . . . repn à condition que ceux-ci soient vides. cat (catenate) : cat fic1 . . . ficn Affiche le contenu des fichiers texte fic1 . . . ficn . Ne fonctionne pas sur des fichiers de données (dits binaires). less : less fic1 . . . ficn Similaire à cat mais bien plus pratique pour les fichiers longs. Permet aussi de faire des recherches dans le texte. 4 Quelques conseils L’utilisation de * (wildcard). On a souvent besoin de manipuler plusieurs fichiers ou répertoires en même temps, par exemple lorsque l’on veut déplacer tous les fichiers d’un répertoire. Le « tous » se traduit dans les commandes par l’utilisation du caractère *. Par exemple, pour déplacer tous les fichiers du répertoire rep1 dans le répertoire rep2, on écrira mv rep1/* rep2. 3 L’utilisation de &. Vous l’avez peut être remarqué, quand on lance un programme comme Emacs à partir du shell, il est impossible d’interagir à nouveau avec le shell tant que le programme n’est pas terminé. Pour éviter cela, il suffit de rajouter & à la fin de la commande. Essayez. Copier/coller. Copier du texte sous Unix est assez facile puisque sélectionner du texte avec la souris, c’est déjà le copier. Pour le coller, il suffit de se positionner au dessus de la zone désirée et d’appuyer sur le bouton du milieu. NB : En général, un double clic du bouton gauche sur une chaîne de caractères la sélectionne en entier et donc la copie par la même occasion. De même, un triple clic sélectionne la ligne complète. La complétion automatique. De l’anglais completion : en appuyant sur la touche Tab, votre shell va tenter de compléter pour vous la ligne de commande que vous êtes en train de taper (commande elle-même ou argument). Dans le cas où plusieurs complétions sont possibles, la commande ne sera pas complétée, mais un second appui sur la touche Tab permet d’afficher la liste des possibilités. Ceci évite en particulier de faire des fautes d’orthographe dans les noms de fichiers. Historique (flèche vers le haut). Les shells modernes ont tous la possibilité d’avoir l’historique des commandes tapées. En utilisant les touches fléchées (haut et bas), on remonte dans l’historique des commandes déjà entrées. Il suffit alors de les valider avec la touche Enter ou de les modifier (flèches gauche ou droite et touche backspace). Interrompre une commande. L’utilisation simultanée des touches Ctrl + c permet d’interrompre la commande en cours d’execution. Celle-ci est intérrompue et le terminal affiche une nouvelle invite : vous pouvez alors taper une nouvelle commande. 5 Emacs : un puissant éditeur de texte L’éditeur Emacs est un éditeur de texte aux nombreuses fonctionnalités, mais il est parfois difficile de s’habituer à son ergonomie. Voici une courte liste de commandes qui peuvent vous aider. Nous noterons « C-touche », le fait de maintenir appuyée la touche Ctrl pendant qu’on appuie sur la touche <touche>. Les commandes de base sont les suivantes : C-x C-c quitter emacs. C-x C-f ouvrir un fichier. C-x C-w sauvegarder un fichier en précisant son nom. C-x C-s sauvegarder un fichier sous son propre nom. C-e aller à la fin de la ligne courante. C-a aller au début de la ligne courante. 4