Ecole Nationale Polytechnique Unité d’Enseignement Méthodologique . Travaux Pratiques Unix : Notions avancées Unix : Notions de base Unix/Linux i Introduction aux systèmes d’exploitation * 1 Commandes de base * 2 Système de fichiers ** 3 Gestion de fichiers & répertoires *** 4 Redirections & commandes filtres. * 5 Gestion des droits d’accès *** 6 Gestion des processus ** 7 L'interpréteur de commandes (le shell) * Travaux Pratiques . Unix/Linux Introduction aux systèmes d’exploitation i.1 Définitions o Un ordinateur est une machine de traitement de l’information o Système d’Exploitation : Programme assurant la gestion de l'ordinateur et de ses périphériques. i.2 Du matériel au Système d’exploitation L’utilisation d’un ordinateur repose d’une part sur une composante matériel (le Hardware) et d’autre part sur une composante logicielle (le Software). Hardware (Matériel) Software (Logiciel) Application Application Application Système d’exploitation Noyau Pilot e Pilot e Matériel (Hardware) Pour la partie matérielle, on distingue : a) Le microprocesseur Les unités de commande et de traitement constituent le µp b) La mémoire : RAM et ROM -RAM (Random Access Memory) : mémoire volatile, en lecture/écriture -ROM (Read Only Memory), mémoire en lecture seule : Programmes BIOS du PC c) Les périphériques : L'acquisition et la récupération des données se font par les périphériques. Pour la sauvegarde des informations (données et résultats), on utilise ce qu'on appelle les mémoires de masse tel que disque dur, disquette, Cdrom Dvd, Flash disk, bande magnétique, …etc i.3 Système d’exploitation a) Fonctions d’un système d'exploitation Un système d'exploitation peut être vu comme un ensemble de logiciels (organisé en couches), entre l'utilisateur et la partie matérielle de l'ordinateur. Le système d’exploitation doit s’occuper de : l ’exécution des commandes d’entrée/sortie la gestion de la mémoire la gestion des fichiers la multi-programmation (« multi-tâche ») la sécurité (gestion des accès,…) Pour la partie logicielle, on a : o Les programmes d’applications destinés à exécuter certaines tâches (traitements de textes, tableurs, etc) o Le système d’exploitation (operating system, SE ou OS) o Le Firmware (BIOS :Basic Input-Output System) : Petit programme sur la carte mère (ROM); au démarrage, gère les fonctions de base. Les pilotes de périphérique (drivers) sont des modules qui complètent le système d'exploitation pour gérer un périphérique particulier. Le SE doit aussi fournir : un langage de commande une interface graphique pour l’utilisateur (GUI) divers utilitaires (compilateurs, éditeurs, outils, …) Note : Un SE ne se résume pas seulement à l’IGU (interface graphique) TP : Initiation Unix ENP/ ABDELOUEL Page 2 b) Abstraction du terme « Machine » selon Coy: Machine réelle = Unité centrale + Périphériques Machine virtuelle = Machine réelle + Système d'exploitation Machine utilisable = Machine virtuelle + Applications i.4 Quelques systèmes d’exploitation Aujourd’hui, deux systèmes d’exploitation se partagent le marché 1. Windows: Conçu pendant les années 90 pour les processeurs 80x86. 2. Unix : Conçu pendant les années 70 et a servi de modèle pour MS-DOS, Windows. Plusieurs manufacturiers ont porté Unix pour leurs machines : SunOS/Solaris pour machines SUN, HP-UX pour HP, AIX pour IBM, DG/UX pour Data General …etc. Ces Unix commerciaux descendent du code source original d'AT&T et nécessite l'achat d'une licence. • Linux, version libre (open source, depuis 1992) d’Unix conçu pour les processeurs 80x86, 68000, PowerPC, Sparc. Autres Systèmes : • CP/M (depuis 1974) de Digital Research • MS-DOS (depuis 1981), Microsoft • • MSDOS Linux Microsoft Windows 95/98, NT, 2000, 2003, XP, Vista Unix : SunOS/Solaris AIX, HP/UX, DG/UX MacOS (Apple) OS/2 OS/2 (IBM) MacOS (depuis 1984,GUI), (Apple) Processeurs 68000/PowerPC 1 i.5 Présentation du système Unix Les origines d’Unix remontent à la première version développé en 1969 par Ken Thompson dans les laboratoires Bell. Depuis, Unix a beaucoup évolué et a donné naissance à une grande famille de systèmes d'exploitation. Ces systèmes sont le plus souvent une adaptation soit de la version Unix BSD développée essentiellement par l’université de Berkeley (Californie), soit de l’UNIX Système V commercialisé par ATT. Beaucoup d'efforts ont été faits récemment pour établir des normes (POSIX1), doter le système d'interface graphique, etc. Plus récemment, en 1991, Linus Torsvald, un étudiant finlandais a developpé le noyau d’un système de type Unix baptisé Linux. Quelques versions d’Unix Système Unix Constructeur AIX IBM HPUX HP ULTRIX DEC SPIX BULL DG/UX DATA GENERAL IRIX Silicon Graphics Solaris, SunOS Sun Microsystems Autres versions : Xenix,Venix, Sco Unix, Minix, Xinu Linux De par sa gratuité, son ouverture et ses performances, Linux gagne en popularité par rapport aux autres Unix. Même les grosses sociétés qui faisaient leur propre Unix s'y mettent ! (comme IBM, Sun, HP, SGI., Dell..) 1 Une norme a été proposée par l’IEEE : POSIX (Portable Operating System's Interface), une standardisation de l'interface des appels systèmes. TP : Initiation Unix ENP/ ABDELOUEL Page 3 i.6 Le System d’exploitation GNU/Linux Au sens strict, Linux est le nom du noyau de système d'exploitation libre, multitâche, multiplate-forme et multi-utilisateur de type UNIX créé par Linus Torvalds, souvent désigné comme le noyau Linux. Par extension, Linux désigne couramment le système d'exploitation libre combinant le noyau et un ensemble d'utilitaires système et accompagné d'une collection de logiciels très variés (projet GNU) 2.. • Linux est donc un noyau. • GNU est un ensemble de programmes utilitaires. • GNU/Linux est le système d'exploitation. Pour l'utilisateur final, Linux se présente sous la forme d'une distribution Linux i.7 Quelques distributions Linux/ BSD Unix GNU/Linux étant gratuit, différentes sociétés l'on reprit et complété afin de distribuer un système d'exploitation à leur goût. C'est ce qu'on appelle les distributions. Parmi les plus connues, citons RedHat, Mandriva, Fedora, Suse, Slackware, Debian, ubunto Quelle distribution GNU/Linux choisir ? La réponse se trouve dans le niveau d'expérience et de connaissance que l'on a dans l'univers Unix et tout dépend de ce qu’on veut en faire. : -Pour les débutants : • RedHat et ses dérivés Mandrake/Mandriva:/Fedora : Distributions communautaires, probablement les plus utilisées aujourd'hui, un standard. • • • SuSE/: OpenSuSe : Distribution de qualité, conviviale mais assez lourde. Knoppix: Distribution live-cd basée sur une Debian, très utile pour découvrir Linux sans risque : Aucune installation n'est nécessaire sur disque dur. Ubuntu et ses dérivés Kubuntu, nUbuntu,Xubuntu : Distributions basées sur une Debian avec une interface aussi simple à utiliser que Windows (voir plus !, Live-CD) -Dans le domaine professionel, des environnements BSD ou Linux sont utilisés pour leur fiabilité et leur performances: • Debian: Distribution complète (plus de 18000 paquets), une conception unique, un système somptueux. • NetBSD : Distribution basé sur BSD Unix, très sécurisé et fiable et hautement portable • OpenBSD :Un SE basé sur BSD Unix. Multiplate-forme, porté sur la standardisation, l'exactitude et la sécurité. i.8 Linux : Caractéristiques Générales : 1. Code source disponible (licence GPL) 2. Distributions multiples 3. Système multitâche et multi-utilisateur 4. Multi-plateforme(intel x86, Sun Sparc, etc…) 5. Gestion du multiprocesseur (option SMP) 6. Compatible POSIX (standard logiciel) 7. Compatibilité de code avec les autres UNIX 8. Gestion des consoles virtuelles 9. Possibilité de cohabitation avec d’autres systèmes 10. Support d’un grand nombre de systèmes de fichiers 2 Le projet GNU ("GNU is Not Unix") a démarré en réaction aux gros logiciels commerciaux, qui étaient pour la plupart hors de prix. GNU a apporté des tas d'utilitaires au noyau Linux, tel que le fameux compilateur gcc, et les milliers d'utilitaires (tar, tail, man, bash...) TP : Initiation Unix ENP/ ABDELOUEL Page 4 i.9 Architecture Globale du système Linux: 3 couches Architecture Globale : 3 couches 1. Couche «physique»: périphériques + BIOS 2. Couche «système»: noyau (kernel) et processus 3. Couche «interface»: shell + X-Window A) Le Shell : interpréteur de commande 1. 2. 3. 4. Lit et exécute les commandes de l’utilisateur Propose un contrôle des processus Gère les redirections en entrée et en sortie Propose un véritable langage de programmation Plusieurs types de shell disponibles: Le plus utilisé: bash, •Autres: csh, ksh, etc… B) Le Système X-Window : • • • • Interface graphique standard des systèmes UNIX Repose sur un «serveur X» Utilise un gestionnaire de fenêtres: plusieurs sont disponibles (KDE2, WindowMaker, etc…) Possibilité de déporter l’affichage à travers un réseau C) Le noyau Linux Le noyau (kernel) Linux est l'élément essentiel du système. Il permet le contrôle à bas niveau du matériel et assure les fonctions essentielles suivantes : • Le démarrage du système. • Le contrôle de tous les processus du système (La gestion des processus) : • Le contrôle des communications entre les processus • L’ accès aux périphériques matériels. Linux dispose d'une interface spéciale du noyau appelée système de fichiers virtuel (VFS, Virtual FileSystem) qui lui permet de supporter plusieurs systèmes de fichiers. i.10 Logiciel libre et Licence GPL La principale originalité de Linux par rapport à d'autres systèmes d'exploitation concurrents comme Microsoft Windows, Mac OS, ou les autres UNIX propriétaires est d'être constitué d'un noyau libre et de logiciels libres3. Une partie des logiciels libres sont protégés par la licence GPL. Ses quatre grands principes sont : - Le droit d'utiliser le logiciel sans restriction - Le droit de modifier le logiciel pour l'adapter à ses besoins - Le droit de diffuser et de redistribuer le logiciel sous certaines conditions précises - L'accès au code source, gage de sécurité et de pérénité. 3 Un logiciel libre n'est pas nécessairement un logiciel gratuit, Ce n’est pas non plus un logiciel libre de droits : c'est en vertu de leurs droits d'auteurs que les contributeurs d'un logiciel libre accordent les quatre libertés sous la licence GPL (General Public Licence) TP : Initiation Unix ENP/ ABDELOUEL Page 5 A1 Linux : Commandes de base 1.1 Environnement de travail Linux Linux est un systeme d’exploitation de type Unix. L’environnement de travail ressemble à celui de Windows. Cependant,. sur Linux, toute tache peut s’accomplir par des commandes, ce qui n’est pas le cas sur Windows. Cet aspect rend le systeme d’exploitation Linux très flexible. Cependant, certaines tˆaches s’effectuent uniquement par des commandes. Linux est donc un peu plus difficile à apprendre pour les debutants. 1.2 Les utilisateurs Unix Dans un contexte multi-utilisateurs, il est nécessaire que les usagers possèdent un compte identifiant chaque utilisateur et permettant une bonne gestion de l'accessibilité aux ressources. Pour Unix, il y a deux catégories d’utilisateurs : 1. Les utilisateurs ordinaires : Ils ont des droits limités, c'est à dire que certaines commandes leurs sont interdites et ils n'ont pas accès à certaines parties du système 2. Les administrateurs système : Ils ont tous les droits sur le système et sont chargés entre autres de la création /gestion des comptes utilisateurs, de la configuration du système et de l’installation de logiciels. Généralement sur un système UNIX, on limite volontairement le nombre d'administrateurs (appelé ROOT4 ou super utilisateur). Le compte utilisateur est attribué une fois pour toute par l’administrateur système. Il est caractérisé par : • Un nom de connexion unique (Login), et un mot de passé affecté à la creation du compte • Une entrée dans le fichier /etc/passwd • Un répertoire de travail : A chaque compte est associé à un répertoire privé (home directory). L'usager est libre de gérer son répertoire comme il l'entend. L'espace disque utilisé peut être limité par la capacité du disque ou par L'administrateur. 1.3 Session de travail sous Unix Une session de travail sous UNIX est composée de trois parties: (1) Connexion : (login=Se logger) Identification & Authentification par un mot de passe (password). Si l’usager est autorisé : • Le système définit son répertoire d’accueil (privé), comme répertoire courant. • Le système lance son programme interface avec le noyau (Shell) (2) Exécution de commandes : Interaction avec l'interpréteur de commandes (mode terminal/xwindows) (3) Déconnexion : Clôture de la session de travail (logout / exit = Se délogger). Avant de quitter un ordinateur, il faut TOUJOURS fermer sa session de travail. Remarque : L’une des particularités importantes des systèmes Unix est leur capacité à ouvrir une session distante. L’un des outils qui permet de faire cela est telnet. 4 Ne pas confondre l’usager root avec le répertoire qui est parent de tous les fichier et qui porte aussi le nom de "root", représenté par le caractère "/". TP : Initiation Unix ENP/ ABDELOUEL Page 6 A1 Linux : Commandes de Base 1.4 Les Commandes Unix5 Une commande est l’exécution d’un programme dans l’interprète (Shell). Elle prend en entrée des options et/ou des paramètres. Elle peut renvoyer de l’information à l’écran ou dans un fichier, modifier un fichier, ou produire un message d’erreur. Ces commandes sont généralement des programmes indépendants du shell (ou commandes externes au shell), par exemple ls ou echo. Le shell reconnait cependant un certain nombre de commandes comme étant des ordres qui lui sont adressés: on les appelle les commandes internes (par exemple cd, exit, eval. Etc) Synthaxe générale d’une commande : commande Commande Options Arguments [options] [arguments] nom de la commande (par convention en minuscules) permettent de modifier le comportement de la commande, elles peuvent être isolées ou regroupées, le premier caractère de l’option est “-“ Les arguments sont soit definis par l’utilisateur, soit des variables prédéfinis par le shell ou des chaines de caractères quelconques 1.5 Quelques commandes de base Les commandes suivantes sont des commandes couramment utilisées : N° Commande Description/ fonction Exemple (eqv. Msdos) 1 2 3 ls pwd (print work dir) cd 4 5 6 7 8 9 cat man mkdir (Make Dir.) rm (ReMove ) mv (Moves ) cp 10 11 12 chmod locate find Liste le contenu du répertoire mentionné. Supporte les jokers dir Affiche la position courante dans le Systeme de fichiers Changement de répertoire courant. Lorsqu'aucun argument n'est fourni, change au repertoire principal de l'usager Affiche le contenu d’un ou plusieurs fichiers Aide sur une commande Création d’un nouveau répertoire Efface les fichiers ou le répertoire ( rm -d) Déplace ou Renomme un fichier ou répertoire Copie un fichier ou un répertoire (attention cette fonction permet aussi d'écraser le fichier ou le répertoire du même nom) Permet de changer les droits sur un fichier a Recherche un fichier portant un nom donné Recherche un fichier portant un nom donné (beaucoup d'options) cd cd type help md rd move copy 1.6 Où trouver plus d'aide Unix offre de nombreuses source d'information sur le système. Si vous connaissez le nom d'une commande et que vous voulez connaître son mode d'emploi, essayez : Man [commande] Cela va générer la page de manuel de la commande. Il y une page de manuel en ligne pour la plupart des commandes du système. Ainsi, il n'est jamais nécessaire d'apprendre par coeur toutes les options des commandes UNIX car le manuel en ligne est toujours à disposition et rapide d'accès pour vous rafraîchir la mémoire. Remarques : • La majorité des commandes vous donne une courte description des options possibles et de la façon de s'en servir lorque vous les exécutez avec le paramètre --help. Exemple : ls --help • Si seul le sujet vous est connu ou alors seulement un mot-clé, alors essayez : apropos [sujet] ou info [sujet]. Cela vous montrera une liste de commandes en relation avec ce sujet. Exemple : apropos copy 5 Ce document n'est pas un manuel de référence sur Unix/Linux. Il ne s'agit que d’une présentation et d'une énumération des quelques commandes qu'il est indispensable de connaître pour travailler sur le système. Cela ne vous empêche pas de feuilleter de véritables livres et de consulter des sites web détaillant le fonctionnement d'Unix. TP : Initiation Unix ENP/ ABDELOUEL Page 7 A2 Le système de fichiers Unix 2. 1 Les systèmes de fichiers Les informations (données, programmes, images, courriers...) sont stockées dans des fichiers6 qui sont enregistrés dans des dossiers appelés répertoires (directory). Le traitement d’information nécessite souvent des opérations comme par exemple: ouvrir, lire, se déplacer et fermer un fichier … etc. La plupart des systèmes d’exploitation possèdent un système de fichiers (SF). Celui ci masque les spécificités des disques et autres périphériques d’entrées sorties pour offrir une vue logique uniforme des informations stockées. Un fichier peut/doit avoir : • un nom et divers attributs : taille, propriétaire (pour un système multi-utilisateur) • droits (lecture/écriture/exécution), ... • éventuellement d'autres informations : application associée, nature, .. • On appelle système de fichiers l'agencement logique et structuré des données sur un média. • On appelle arborescence la structure logique des fichiers et répertoires, telle qu'elle apparaît à l'utilisateur. Linux supporte un grand nombre de systèmes de fichiers, et notamment ceux provenant du monde Windows • • • (Système FAT : Fichiers MSDOS. Système FAT32 : Fichiers Windows 98. Système NTFS : Système propre à Windows NT • • • Système HPFS : Fichiers du système OS/2. Système CDFS : Fichiers sur CD-ROM. Système de fichiers Linux Ext2, Ext3, Swap Exemple de structure arborescente de répertoires Unités et Partitions7 Windows Le système de fichiers Windows est structuré en unités On trouve une racine par partition, repérée par une lettre suivi du caractère deux points et de l’anti-slash (C:\, D:\ …etc.) Arborescence du système de fichiers et analogie avec un système d’archivage de dossiers Noms des lecteurs et unités A:, B: Lecteurs de disquette, C: Premiere partition disque dur. D: jusqu'à Z: Unités supplémentaires 6 Quelque soit sa structure un fichier peut toujours être vu comme une suite finie de bits ou d'octets. 7 On appelle partition (sur un disque) un bloc du disque organisé pour faire un système de fichier complet. TP : Initiation Unix ENP/ ABDELOUEL Page 8 Exemple : Les systèmes de fichiers Windows Le système de fichiers Windows (FAT, FAT32) qui repose sur une table d'allocation des fichiers (FAT) est l'un des plus simples que l'on puisse trouver. Par exemple, le MSDOS, organise les fichiers d'une certaine façon: les noms de fichiers ne peuvent dépasser huit caractères et il n'existe aucune information de permission sur les fichiers. Dans le système de fichiers NTFS (New Technology File System), l'organisation des fichiers est optimisée sur la partition, d'où une très faible fragmentation. NTFS respecte la norme POSIX et permet une bonne gestion des disques de grande taille. Il prend également en charge le modèle de sécurité des systèmes Windows NT, Server et: 2.2 Le système de fichiers Unix Linux a aussi son propre système de fichiers appelé ext2 (version 2 du système de fichiers ext). Ses principales caractéristiques sont les suivantes : 1. Répertoires séparés par des / ; Le système ext3fs est un système ext2 2. Fichiers cachés débutant par un « . ». avec un journal. Ce qui permet le 3. Espaces et noms longs acceptés ; maintient de la cohérence des données 4. Défragmentation quasi-inutile pour les descripteurs de fichiers 2.2.1 Noms de fichiers Le nombre maximum de caractères composant le Caractères utilisés : nom est de 255 (sur presque tous les Unix • Majuscules [A-Z], Minuscules [a-z], d'aujourd'hui). L’extension est facultative et n’a • Souligné [ _ ], Virgule [,] et point [.] aucune signification pour le système. • Chiffres [0-9] Caractères de remplacement (ou joker) ? On peut remplacer le symbole ? par n'importe quel caractère (ou aucun), * On peut remplacer le symbole * par n'importe quelle chaîne de caractères • Le SF Unix est sensible à la casse (majuscules/minuscules) C'est-à-dire que les majuscules et les minuscules sont différenciées comme à l'écran lors du traitement des expressions ou des noms de fichiers et de répertoires. Prenez donc de bonnes résolutions et faites attention à l'usage des majuscules lors de la saisie de commandes ou de chemins d’accès …etc. 2.2.2 Structure physique du SF Linux (La table des inodes) Dans un SGF 'Unix/Linux, les fichiers et les répertoires sont identifiés par un numéro unique : le numéro d'inode (i-node number). • La table des inodes contient des informations telles que • Identification du propriétaire et de son groupe • Type du fichier (ordinaire, répertoire, lien symbolique, spécial). • Les permissions d'accès. • Nombre de liens sur le fichier, taille du fichier en octets (bytes). • Dates du dernier accès, dernière modification, dernière modification de l'i-node ; • Tableau de pointeurs sur les blocs de données. • • • • Le nom du fichier n’est pas stocké dans la table des inodes.’ Comme tout fichier, un répertoire possède aussi son inode. Le contenu du répertoire représente la correspondance entre les noms de fichiers et les inodes. Les noms " . " et " .. "figurent dans tout répertoire. " . " correspond au répertoire courant et " .. " au répertoire supérieur (ou répertoire parent). TP : Initiation Unix ENP/ ABDELOUEL Page 9 2.2.3 Les types de fichiers Unix : Fichiers standards Les différents type de fichiers Unix sont récapitulés dans le tableau suivant Code signification Commentaire Fichier texte ou binaire: C’est une séquence d'octets sans aucune - Fichier ordinaire organisation interne spécifique Fichier spécial dans lequel sont inscrits les liens du répertoire : d Fichier répertoire (association entre un nom et un numéro d'i-node) Lien Fichier permettant de référencer un fichier ordinaire ou un répertoire l symbolique en utilisant un nom différent (Raccourci) En plus, l’accès aux périphériques et aux ressources système s’effectuent à travers des descripteurs de fichiers. Sous Unix, « tout est Fichier » : Les disques, les lecteures (disquettes/Cdrom), le clavier, l’ecran, l’imprimante, la carte réseau …etc sont considérés comme des fichiers spéciaux8 Fichiers spéciaux Code c b p Signification Périphérique accédé en mode Caractère Périphérique accédé en mode Bloc Tube ou pipe s Socket Commentaire Exemple : terminaux, imprimante, souris Disques, mémoire, bande magnétique Fichier spécial permettant de communiquer entre différents programmes. Fichier spécial permettant de communiquer entre différentes machines (en réseau) 2.3 Arborescence classique d’Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». • Remarque : Le répertoire racine (root) Sous Windows, les partitions logiques ou physiques du disque sont généralement repérées par des lettres (Par exemple A : pour la disquette, C: pour un disque dur, D:pour un CDROM etc). Il faut oublier cette organisation pour Unix. Quelle que soit la structure du disque, Unix ne voit qu'une seule arborescence qui démarre à la racine9 /. Les autres partitions10 (Swap, Disques, CDROM …etc) vont donc s'insérer dans cette arborescence comme répertoires venant en aval du répertoire /. Les systèmes Unix possèdent tous plus ou moins la même arborescence, dans laquelle on retrouve les mêmes répertoires importants. Rép. Contenu /etc Contient les fichiers de configuration nécessaires à l'administration du système (fichiers passwd, group, inittab, ld.so.conf, lilo.conf, ...). /dev Contient les fichiers spéciaux permettant d’accéder aux périphériques. /bin Contient les exécutables essentiels au système, employés par tous les utilisateurs /sbin Contient les commandes essentielles d’administration du système. /usr Hiérarchie secondaire : Contient les applications complémentaires utilisées par le système. En particulier, le répertoire /usr/local contient les données relatives aux programmes installés sur la machine locale par le root (comparable au répertoire c:\program files de Windows) /usr contient les fichiers binaires non essentiels au système réservés à /sbin l'administrateur système /home contient les répertoires personnels des utilisateurs /var Contient les fichiers journaux (logs), les fichiers du spouleur d'impression ou bien les mails en attente. /mnt Répertoire de montage des périphériques amovibles de stockage (Cdrom …) 8 Les fichiers spéciaux se trouvent dans le répertoire /dev ("device"). Le slash (/) joue pour Unix le rôle de l'antislash (\) du DOS/Windows pour désigner les répertoires. 10 Les partitions de swap ont pour rôle de fournir une mémoire virtuelle pour les programmes tournant sous Unix TP : Initiation Unix 9 ENP/ ABDELOUEL Page 10 A3 Le système de fichiers Unix (2) Chemins d’accès 3.1 Chemins d'accès à un fichier/répertoire On appelle «chemin» la succession des répertoires conduisant à un fichier, à partir d’un endroit donné dans l’arborescence. Par extension, le chemin désigne la succession des répertoires et le nom du fichier lui-même. Pour désigner un fichier, il est possible de procéder de deux manières: • à l’aide d’un chemin absolu: on prend comme convention un parcours de l’arbre partant de la racine (root) (i.e. la désignation de la racine de l’arbre) doit être tout d’abord spécifié. Chemin Absolu= • / [rep1/ [rep2/ ..]] fichier à l’aide d’un chemin relatif: c’est la succession des répertoires à traverser, à partir d’un répertoire donné de l’arborescence (autre que la racine). En générale, par rapport au répertoire courant. Chemin relatif = [rep1/ [rep2/ ..]] fichier Remarques : • Dans les chemins, le délimiteur entre nom de répertoire et nom de fichier est la barre oblique slash «/» • Placé au début d’un chemin d’accès, le slash est nom de l a racine de l’arborescence Unix: a) Comment spécifier un chemin d’accès • Tapez le caractère slash (/), symbole du répertoire racine. • Tapez les noms des répertoires et des sous-répertoires qui contiennent le fichier, en prenant soin d'insérer un slash (/) devant chaque nom de répertoire. • Tapez le nom du fichier. Un slash (/) doit précéder le nom du fichier. Exemple : /home/sf1a/maths/matrix.pas est une référence absolue (un chemin d'accès absolu) au fichier matrix.pas b) Quelques règles • Régle 1 : Chaque nom de chemin d’accès absolu commence par slash (/) • Régle 2 : Le SE Unix utilise toujours des noms de chemin d’accès absolu. Les chemins d’accès relatifs sont complétés en utilisant si nécessaire le répertoire par défaut (rép. de travail) Chemin Absolu = Répertoire de Travail + Chemin relatif /rép.Travail Exemple : pour le fichier matrix.pas Répertoire de Travail = /home/sf1a/ Chemin relatif au fichier matrix.pas = maths/matrix.pas & Chemin Absolu = /home/sf1a/maths/matrix.pas • • • Régle 3 : Pour un fichier ou un répertoire donné, il n’existe qu’un seul chemin absolu, mais il existe des tas de chemins relatifs. Régle 4 : A tout instant, un utilisateur se trouve dans un répertoire, dénommé répertoire courant ou répertoire de travail. Régle 5 : Lors de sa connexion, un utilisateur est placé dans son repertoire personnel (home directory. TP : Initiation Unix ENP/ ABDELOUEL Page 11 3.2 Quelques commandes utiles et très pratiques copie (= duplique) le fichier specifie par le chemin «chemin1» dans le fichier specifie par le chemin «chemin2». Si «chemin2» est un repertoire, la copie de «chemin1» est placée dans ce répertoire ; sinon, «chemin1» est copie dans un fichier dont le nom est «chemin2». copie l’objet spécifié par le chemin «chemin1» dans l’objet spécifié par le cp -r «chemin1» «chemin2» chemin «chemin2». Si «chemin1» est un répertoire, cette commande copie l’ensemble des fichiers et répertoires qui s’y trouvent (récursivement). Sinon, cette commande est équivalente a cp «chemin1» «chemin2» . déplace le fichier spécifié par le chemin «chemin1» dans le fichier spécifié mv «chemin1» «chemin2» par le chemin «chemin2». Si «chemin2» est un répertoire, «chemin1» est déplacé dans ce répertoire ; sinon, «chemin1» est déplacé dans un fichier portant le nom «chemin2» . rm «chemin1 détruit (= efface) le fichier spécifié par le chemin chemin1. Ce chemin doit spécifier un fichier, pas un répertoire. rm -r «chemin1 détruit tous les fichiers et répertoires dont la racine est chemin1. Si chemin1 est un fichier, cette commande est équivalente a rm chemin1. rmdir «chemin1 détruit le répertoire spécifié par le chemin chemin1. Ce chemin doit spécifier un répertoire vide. crée un lien pointant sur l’objet (fichier ou répertoire) spécifié par le chemin «chemin1» qui porte le nom indiqué par le chemin «chemin2». Avant ln -s «chemin1» «chemin2» l’exécution de cette commande, l’objet «chemin2» ne doit pas exister. Apres son exécution, l’objet «chemin1» peut être accèdé via le chemin «chemin2». Par lien, nous entendons que «chemin1» et «chemin2» sont en fait le même objet et que cet objet peut maintenant être accédé selon deux chemins différents (on peut en ajouter autant que l’on veut). Attention un lien n'est pas une copie: si vous modifiez le fichier alors tous les liens sur ce fichier seront modifiés. Il existe deux sortes de liens: le lien physique et le lien symbolique (avec l'option -s). Le lien physique ne peut adresser que des fichiers, alors que le lien symbolique peut aussi lier des répertoires. cp «chemin1» «chemin2» Autres commandes more chemin1 chemin2 … echo chaine banner chaine visualise le contenu du ou des fichiers par page. affiche la chaine passée en paramètre affiche la chaine passée en paramètre avec des grosses lettres 3.3 Les alias Les alias sont une des choses les plus pratiques qui soient. Régulièrement on utilise les mêmes commandes avec parfois de nombreuses options Voici quelques exemples classiques d'alias : alias l="ls --color=auto" alias dir="ls -l " N.B : Les alias se placent habituellement dans le fichier de configuration (.bashrc, .profile …etc.) 3.4 Commandes par thèmes Les informations sur les programmes et les commandes : les fichiers les répertoires : le système et l'environnement Les variables Manipulation de fichiers et répertoires Divers Processus Le courrier électronique man, whereis, which diff, cat, grep, head, tail, file, more ls, pwd, find id, uname, logname,, tty, w, who alias, unalias cd, rm, rmdir, mkdir, chmod, cp, mv, ln sort, touch echo, sleep kill, ps elm, mail TP : Initiation Unix ENP/ ABDELOUEL Page 12 A4 Redirections & commandes filtres 4.1 Redirection des entrées-sorties Un grand nombre de programmes se contentent de lire un flot de donnés, de faire un traitement sur ces données et d'écrire un ot de données résultat. Ces programmes prennent donc leurs données sur l'entrée standard (périphérique logique 0), et écrivent leurs résultats sur la sortie standard (périphérique logique 1), et produisent d'éventuels messages d'erreur sur l'erreur standard (périphérique logique 2),. Un programme qui respecte cette convention porte (dans le jargon UNIX) le terme de filtre. Il faut juste préciser qu'un filtre n'affecte pas de fichier à ces trois périphériques logiques il délégue cette responsabilité au programme qui l'appelle. Le shell a donc sa propre stratégie d'affectation des périphériques logiques quand il lance un programme. Si l'utilisateur ne précise rien : • Le périphérique logique 0 est affécté par défaut au clavier du terminal. • Le périphériques logiques 1 & 2 sont afféctés par défaut à l'écran du terminal. Pour les cas où ces afféctations par défaut ne conviennent pas à l'utilisateur, le shell dispose d'un mécanisme permettant de spéciér les afféctations désirées. Ce mécanisme s'appelle la redirection des entrées-sorties. Périphérique d'entrée standard Commande Périphérique de sortie standard (par defaut le clavier) Programme (par defaut l'écran) Périphérique d'entrée fichier / texte Commande Programme Périphérique de sortie Fichier /texte 4.2 Notations de redirections > nom_de_fichier permet de rediriger la sortie standard (1) d'une commande à partir de ("sortie à.)" nom_de_fichier < nom_de_fichier permet de rediriger l'entrée standard (0) d'une commande à partir de ("entrée de...") nom_de_fichier. >> nom_de_fichier Il existe une autre forme consistant à remplacer le signe > par le signe >>. "Ajouter Dans ce cas,si nom_de_fichier existe, son contenu n'est pas perdu : le flot sortie à..." redirigé va s'écrire à la fin du fichier Les notations de redirections peuvent apparaitre Exemples : commande < data_in > data_out avant ou après la commande et dans n'importe on peut écrire indifférement: quel ordre. Il est traditionnel de les mettre après • < data_in commande > data_out la commande, et si on redirige entrée et sortie, • < data_in > data_out commande de mettre la redirection de l'entrée, puis celle de • commande > data_out < data_in la sortie, mais ce n'est nullement obligatoire TP : Initiation Unix ENP/ ABDELOUEL Page 13 Exemple bc (binary calculator), lit une ligne au terminal, interpréte cette ligne comme étant une expression à calculer, calcule l'expression et imprime le résultat sur le terminal. On peut cependant imaginer beaucoup de situation où l'on aimerait activer bc en lui faisant lire les expressions à partir d'un fichier data et afficher les résultats dans results 4.3 Communication par canal : | | $ bc -l 123+456 579 12*4 48 quit Bc < Data > Result - Canal, tube /Pipe Commande1 | Commande 2 Enchaînement de l'exécution de deux commandes Commande1 commande2 . c’àd envoie de la sortie écran de commande1 à command2 comme entrée de clavier. Entrée 1 (Clavier) Commande 1 Sortie 1 (Ecran) Entrée 2 (Clavier) Commande 2 Sortie 2 (Ecran) Canal de communication Entrée 1 Commande 1 Commande 2 Sortie 2 Les résultats générés par commande 1 sont transmis via le canal | de telle sorte qu’ils servent comme données d’entrée à commande 2 4.4 Commandes filtres Les commandes filtres, permettent de produire des résultats filtrés selon des critères bien définis : Commande More, find, sort. La commande MORE s'utilise pour visualiser le contenu de longs fichiers texte, écran par écran Commande MORE MORE < [chemin]fichier, ou commande | MORE La commande MORE lit les données d'entrée standard provenant d'un canal de communication ou d'un fichier redirigé et affiche un écran de données à la fois Recherche récursive d'un fichier spécifié par chemin find "chemin" -name fichier : fichier à chercher -print : affiche le chemin trouvé Affiche les lignes du fichier contenant la chaîne de caractères grep "chemin -i : majuscules et minuscules identiques -n : avec numéros de lignes Exemples ls | more, ls *.* | find "Alilo" envoie les sorties de la commande ls vers le filtre find qui affiche seuls les fichiers avec le mot "Alilo". Comme il n'y a pas de > en fin de commande, la liste filtrée va à l'écran. TP : Initiation Unix ENP/ ABDELOUEL Page 14 A5 Gestion des droits d’accès 5.1 Catégories et droits d’accès Unix défirencie trois catégories de personnes: L’utilisateur (user) est le propriétaire du fichier. Les codes utilisés sont les suivants Chaque utilisateur appartient à un ou plusieurs u Le propriétaire du fichier: (owner) (u) User groupes. La troisième catégorie concerne les droits g Les membres du groupe de l’utilisateur: de toute autre personne connectée à la machine. o Les autres utilisateurs (o) Others Sous unix, on ne compte que trois permissions11 distinctes r w x r w x r w x -_, d r Read : Permission de lecture w Write : Permission d'écriture x EXecute : Permission d'exécuter Octale 400 200 100 40 20 10 4 2 1 Lorsqu'on lit les permissions sur un fichier (cmd ls), on obtient le format suivant : Type User u Group g Others o Le premier groupe de « rwx» concerne les droits du propriétaire (User), le second ceux du groupe et le dernier ceux des autres. Si la lettre apparaît, le droit correspondant est donné. Si la lettre est remplacée par un tiret, le droit correspondant est refusé. 5.2 Droits d’accès : notation octale Dans la table des i-nodes, les permissions d'accès sont représentées par des "bits" dans un mot qui en contient neuf. Si le bit est activé, alors l'opération correspondante pour le ou les usagers (u,g,o) est permise. La notation octale permet d'attribuer les permissions de manière beaucoup plus efficace et concise. (voir la valeur des différentes permissions dans la notation octale). Ci-après quelques exemples: Octal Total en binaire Droits Commentaires 644 110 100 100 rw-r--r Le propriétaire peut lire et écrire, les autres peuvent uniquement lire. 755 111 101 101 rwxr-xr-x Comme ci-dessus+exécution permise pour tout le monde 600 110 000 000 rw------Seul le propriétaire peut lire et écrire. Remarque : Seul le propriétaire des fichiers ou un utilisateur ayant des droits particuliers (root) peut changer le mode d'accès. 5.3 Signification des permissions Les droits d’accès s’interprètent de manière différente selon qu’il s’agisse de fichiers ou de répertoires Fichier (-) Répertoire (d) La lecture d’un répertoire se fait lorsqu’on liste son contenu en absence de ce droit, on peut néanmoins atteindre et lister les fichiers des sousr Lecture autorisée répertoires, s’il en existe, et si on connaît leur nom. w Ecriture autorisée x Exécution autorisée l’écriture dans un répertoire se fait lorsqu’on crée ou détruit un fichier l’exécution se fait lorsqu’un chemin de fichier ou une commande cd spécifie le nom de ce répertoire En absence de ce droit, aucun accès au répertoire et a la sous arborescence issue du répertoire n'est possible. 5.4 La commande umask La commande umask permet de déterminer les droits par défaut avec lesquels tout fichier sera créé. La commande umask valUmask provoque la prise en compte des droits de base rw-rw-rw- (666 en octal), puis on fait l'opération : (droits de base) et (non umask). Ce qui revient à retirer chaque élément correspondant à un 1 binaire de valUmask. Par exemple : Droits de base 110 110 110 Droits à la Conséquences creation umask 022 000 010 010 110100100 crée les fichiers avec les droits rw-r--r-- 11 Il y a des fichiers dont les droits contiennent d’autres lettres que r,w et x. On trouve les lettres s, S, t. Pour en savoir plus, consultez le manuel en ligne de la commande chmod. TP : Initiation Unix ENP/ ABDELOUEL Page 15 A6 Unix : Gestion des processus 6.1 Les processus Unix o Tous les systèmes multitaches permettent d'avoir plusieurs programmes exécutables en même temps Principaux attributs d'un processus o Un processus est un programme en exécution (vue de l'usager qui lance des commandes). Une commande PID identificateur de processus donnée peut lancer plusieurs processus. PPID Id du processus père Principaux attributs d'un processus COMMAND intitulé de la commande Unix assigne un numéro unique à tous les processus actifs correspondant au processus pour les différencier et de les contrôler.Chaque processus est PRI Priorité du processus donc repéré par un identificateur de processus (PID – TTY Terminal d’execution Processus IDentifier) qui se présente sous la forme d'un UID propriétaire actif12 nombre entier. Ainsi, lorsqu'on veut effectuer une action sur un et GID réel et effectif. processus donné, on le repère exclusivement par son PID. NI La valeur Nice o Toutes les informations concernant les processus s’obtiennent avec la commande "ps" 6.2 Exécution d’une commande dans le Shell Le processus Fils (commande) Le processus Père (shell) La gestion des processus sous Unix est dite hiérarchisée. Lorsqu’on lance une commande externe au shell (par exemple ls), un processus fils du shell est créé et la commande s’execute dans celui-ci. Le processus père (le shell) attend que la commande soit exécutée pour redevenir actif. Ainsi, lorsqu'on demande l'exécution d'une Execution d’une commande dans le Shell commande, le shell lance la commande et se met en Une commande attente de sa terminaison. Ceci est mis en évidence est Lancée dans le aux yeux de l'utilisateur par le fait que le shell Shell courant n'imprime un prompt que lorsque la commande en cours est terminée. Quand on travaille de cette maniére on dit que l'on exécute les programmes en premier plan (foreground) Dort Est exécuté Il existe donc une possibilité pour l'utilisateur de demander au shell de lancer l'exécution d'un Est Informé de la programme et de ne pas attendre la fin de son fin d’exécution exécution( exécution en arrière-plan :background). Il suffit de taper le caractére & à la fin de la commande Se Réveil Meurt Comme il ne peut y avoir pour un shell intéractif qu’un processus en avant-plan à la fois, on comprend qu’il est facile de le gérer, en particulier grâce aux caractères (par exemple : arrêt par "CTRL C").. Par contre, il est possible d’avoir simultanément plusieurs processus en arrière-plan, lancés à partir du même shell intéractif. Dans ce cas, on contrôle ces processus en obtenant leur identifiant et leur état par les commandes ps/jobs, puis éventuellement en modifiant leur état par les commandes fg, bg ou kill13. 12 Propriétaire actif réel et effectif. Le réel est celui qui lance en premier le processus. L'effectif est celui qui exécute le processus avec les mêmes droits que le réel mais avec parfois des droits supplémentaires durant l'exécution du processus 13 Contrairement à son nom, cette commande n’est pas destinée réellement à tuer un processus, mais plutôt à lui envoyer un signal. La commande suspend n’existe pas en standard, mais on peut la définir avec un alias : alias suspend=’kill -STOP’ TP : Initiation Unix ENP/ ABDELOUEL Page 16 A7 L'interpréteur de commandes : shell 7.1 L'interpréteur de commandes : shell Le Shell c’est Les différents Shell Shell sh bash Bourne Again Shell • Une Interface utilisateur avec le système Unix C Shell csh Trusted Shell tsh • Un Interpréteur de commandes Bourne Shell bsh Restricted Shell Rsh • Un langage de programmation Korn Shell ksh Remote Shell rsh Le shell est un interpréteur de commandes. Il permet de lancer les commandes UNIX disponibles en leur Les différences entre ces shells portent affectant un certain nombre de paramètres essentiellement sur la syntaxe des constructions du d’exécution, de contrôler les données d’entrée et de langage et sur la richesse fonctionnelle. Mais sortie, les messages d’erreur éventuels et surtout de certaines fonctionnalités sont proposées d'une les enchaîner de manière efficace et pratique manière ou d'une autre par tous les shells. • Le shell est lui même un fichier binaire, qu’il est possible de lancer comme n’importe quelle autre commande UNIX. • Un shell est démarré pour chaque console ouverte (ou fenêtre X11 équivalente créée); il est interactif dans ce cas, car les lignes de commande tapées au clavier sont exécutées une par une avec confirmation systématique (touche <return>). 7.2 Les méta caractères du shell Les méta caractères du shell permettent de construire des chaînes de caractères génériques ou de modifier l'interprétation d'une commande: Le shell interprète les caractères spéciaux avant d'exécuter la commande * désigne une chaîne de caractères quelconque ? désigne un caractère quelconque [...] désigne les caractères entre crochets, définis par énumération ou par un intervalle { et } permettent de regrouper un ensemble de commandes et de les exécuter dans le "shell courant" ( et ) permettent de regrouper un ensemble de commandes et de les exécuter dans un "shell fils". ; sépare deux commandes sur une même ligne ' délimite une chaîne de caractères contenant des espaces (à l'intérieur, tous les méta caractères perdent leur signification) " délimite une chaîne de caractères contenant des espaces (à l'intérieur, tous les méta caractères perdent leur signification, à l'exception des méta caractères ` et $) ` Le texte donné entre anti-quotes (`) ou $( ) est considéré comme une commande à exécuter et ou $( ) remplacé par son résultat. Cela permet d'utiliser le résultat d'une commande comme argument d'une autre. \ annule la signification du méta caractère qui suit Exemples ls *.[csp] Liste de tous les fichiers ayant l'un des suffixes .c, .s ou .p ls /usr/[a-z][0-9] Liste de tous les éléments de /usr dont le nom est composé de deux caractères : une minuscule suivie d'un chiffre ls /bin/[!a-z]* Liste de tous les éléments de /bin dont le nom ne commence pas par une minuscule $ echo Je suis sous `pwd` TP : Initiation Unix ENP/ ABDELOUEL Page 17 7.3 Variables du shell Comme dans la plupart des langages, il est possible d'utiliser des variables dans un script. Les variables du shell contiennent des chaînes de caractères. Elles n'ont pas besoin d'être déclarées. Elles prennent vie lors de la première affectation (avant la première affectation, elles ont pour valeur la chaîne vide). Bash, ksh csh Remarques variable=chaine set variable valeur Affectation de valeur à variable Attention, Il ne doit pas y avoir d'espace autour du signe = $variable Valeur de la variable ${variable} Valeur de la variable (permet d'éviter certaines ambiguïtés: si a="var",${a}b renvoie varb alors que $ab est invalide) Exemple ENP="Ecole Nationale Polytechnique" On récupère le contenu de la variable en la préfixant du signe $: echo $ENP Variables pré positionnées Lorsque le shell courant ou un programme en shell démarre, son environnement contient un certain nombre de variables qui sont positionnées dynamiquement, et dont le contenu (pour les principales,) est le suivant : $0 Le nom du programme shell en cours. $1,..${N} Les N paramètres passés au programme (au shell) lors de son appel. $# Le nombre de paramètres passés à l’appel du programme shell (non compris le paramètre $0) $* La liste des paramètres passés à l’appel du programme shell (non compris le paramètre $0) $? Le code d’erreur de la dernière commande exécutée $HOME Votre répertoire principal $PWD Le répertoire courant $PATH La liste des répertoires où le shell est susceptible de trouver les commandes élémentaires à exécuter. Cette variable est toujours positionnée dans les fichiers profile (/etc/profile et .profile) au moment du démarrage $PS1 Le prompt (ce qui s’affiche après chaque ligne de commande en mode interactif) $prompt Ces variables d’environnement sont transmises par le système d’exploitation à tous les processus. Chaque processus hérite des variables de son père (le processus qui l’a lancé, ici en général le shell). Ces variables peuvent être consultées ou modifiées. Exemple : La variable PS1 contient la forme de votre invite : exemple : PS1="[\u@\h \w] 7.4 Les Scripts shell : Les scripts shell sont des programmes courts (et parfois un peu moins courts) interprétés, constitués d'appels de commande et de constructions du langage proposé par le shell correspondant. Ils permettent notamment de contrôler les informations transmises aux programmes et d'analyser de manière rudimentaire les sorties générées par de tels programmes. Pour faire des traitements plus complexes, tout en gardant la souplesse d'utilisation des scripts, on peut faire appel à l'un des nombreux langages de scripts tels que PERL, Python ou encore TCL. Écriture et exécution d'un script Un script shell est un fichier texte contenant des instructions, des commandes et des symboles spéciaux. On exécute le script en passant le nom du fichier en paramètre au shell. % cat exemple #!/bin/sh echo hello % chmod +x exemple % ./exemple Le premier symbole spécial est le #. Tout mot commençant par un # est ignoré et le reste de la ligne également. Le caractère # introduit donc un commentaire. Il existe un commentaire spécial de la forme #!programme que l'on peut mettre sur la première ligne du script. Dans ce cas, si le fichier contenant le script a le droit d'exécution, il peut être exécuté comme un programme normal TP : Initiation Unix ENP/ ABDELOUEL Page 18