Année Universitaire 2013-2014 Ministères de l’enseignement supérieur Institut Supérieur des Etudes Technologiques de Gabès E-mail :[email protected] SUPPORT DE COURS UNIX Elaboré par : TAYARI LASSAAD TECHNOLOGUE A ISET GABES E-mail :[email protected] Cours LINUX(UNIX) Introduction générale Chapitre 0 INTRODUCTION GENERALE AUX SYSTEMES D'EXPLOITATIONS Objectifs: Définir et prouver la nécessité des systèmes d’exploitation. Rappeler les notions de base des systèmes d’exploitation. Mettre le système UNIX dans son contexte. Prérequis: Architecture des ordinateurs. Matériel et systèmes. (MS-DOS, ASSEMBLEUR, Système D’exploitation ...etc.). Plan I/INTRODUCTION: II/Qu’est ce qu’un système d’exploitation? III/ Principes des systèmes d'exploitation: III-1/ Les processus: III-2/ Les systèmes de fichiers: III-3/ Les interpréteurs de commandes (shell): III-4/ Classification des systèmes d'exploitations existants: IV/ Résumé: TAYARI Lassaad Page 1 ISET DE GABES Cours LINUX(UNIX) Introduction générale Chapitre 0 INTRODUCTION GENERALE AUX SYSTEMES D'EXPLOITATIONS I/INTRODUCTION: Sans logiciels, un ordinateur n'est qu'un morceau de matériel inutile. Grâce à ces logiciels, il peut mémoriser, traiter et restituer des informations et servir dans de nombreuses autres activités qui justifient sont utilité. Les logiciels se répartissent en deux grandes catégories: Les programmes système qui permettent le fonctionnement de l'ordinateur. Les programmes d'application qui résolvent les problèmes des utilisateurs. Le système d'exploitation est le programme fondamental des programmes systèmes. Il contrôle les ressources de l’ordinateur et fournit la base sur laquelle seront construits les programmes d’application. Un ordinateur moderne se compose d’un ou plusieurs processeurs, d’une mémoire principale, d’horloges, de terminaux, d’interfaces de connexion à des réseaux et d’autres périphériques d’entées sorties (E/S). Un ordinateur est donc un système fort complexe. L’écriture de programmes qui prennent en compte tous ces éléments et les gèrent correctement est un travail extrêmement difficile. Bien peut de programmes seraient développés, si chaque programmeur devrait connaître le fonctionnement des disques, ainsi que toutes les erreurs qui peuvent apparaître. TAYARI Lassaad Page 2 ISET DE GABES Cours LINUX(UNIX) Introduction générale Il y a quelques années, il est apparu clairement qu’il fallait trouver un moyen de libérer les programmeurs de la complexité du matériel. Ce moyen, qui a évolué petit à petit, consiste à enrober le matériel par une couche de logiciel qui gère l’ensemble de système. Il va falloir en fait présenter au programmeur une interface ou machine virtuelle plus facile à comprendre et à programmer. Cette couche de logiciel est le système d’exploitation. La situation est présentée par la figure si dessous. Système Réservation bancaire d’avion Compilation Edition Contrôle de processus industriel jeux Programmes d’application interpréteur de commande Système d’exploitation Programmes système Langage machine Microprogrammes matériel Dispositif physique Le matériel se trouve au niveau le plus bas et se compose lui-même de deux couches ou plus. La couche la plus basse contient les circuits physiques constitués de circuits intégrés, de fils électriques, d’alimentation, de tube cathodique et de périphériques physiques. De cette nature, leurs constructions et leurs fonctionnements concernent l’ingénieur en électricité. Vient en suite un logiciel de base qui contrôle ces différents périphériques pour fournir une interface plus simple à la couche suivante. Ce logiciel, appelé un microprogramme, se situe généralement dans la mémoire morte « ROM ». Il s’agit en fait d’un interpréteur qui recherche des instructions en langage machine comme ADD, MOV et JMP et les exécuter l’une après l’autre. Le Microprogramme ne fait pas réellement partie du matériel, mais il est toujours décrit dans les manuels des constructeurs d’ordinateurs. Ce qui amène de nombreuses personnes TAYARI Lassaad Page 3 ISET DE GABES Cours LINUX(UNIX) à le considérer comme Introduction générale faisant partie de le « Machine ». Sur certaines machines le microprogramme est implanté dans le matériel et ne constitue pas a lui seul une couche distincte. La fonction primordiale d’un système d’exploitation est de masquer toute la complexité du matériel et de présenter au programmeur un ensemble d’instructions plus simple à utiliser. Par exemple LIRE UN BLOC DE FICHIER est conceptuellement plus simple que d’avoir à ce soucier de déplacer les têtes de lecture puis à ce positionner ...etc. Le reste du logiciel système se trouve au-dessous du système d’exploitation. On y trouve l’interpréteur de commande (shell), les compilateurs, les éditeurs et les programmes de ce type qui ne dépendent pas des programmes d’application. Il faut bien se rendre compte que ces programmes ne font pas partie du système d’exploitation, bien qu’ils soient fournis par les constructeurs d’ordinateurs. Le système d’exploitation est la partie du logiciel qui fonctionne en mode noyau ou mode superviseur. Elle protège le matériel contre les erreurs de manipulation des utilisateurs. Les compilateurs et les éditeurs fonctionnent en mode utilisateur. En fin, on trouve les programmes d’application au-dessus des programmes système. Ces programmes sont écrits pour les utilisateurs pour résoudre leurs problèmes spécifiques tels que le traitement des données commerciales, les calculs scientifiques ...etc. II/Qu’est ce qu’un système d’exploitation? Définition 1: Un système d'exploitation regroupe un certain nombre de fonctions, toutes destinées à coordonner les opérations d’un ordinateur nécessaires à la mise en oeuvre des programmes. Il gère, pour cela, les commandes destinées aux diverses ressources matérielles(mémoire centrale, périphériques d’entrée sortie,...). TAYARI Lassaad Page 4 ISET DE GABES Cours LINUX(UNIX) Introduction générale Définition 2: Un système d'exploitation est la couche logicielle qui transforme l’ordinateur en une machine virtuelle facilement manipulable par un simple utilisateur. En effet, vu l’architecture complexe de l’ordinateur au niveau du langage machine, il est très difficile de pouvoir maîtriser la communication entre le processeur et les différents organes de la machine. D’où la nécessité d’une abstraction simple et de haut niveau qui permet au programmeur de réaliser des fonctions nécessaires sans se préoccuper de la complexité du matériel. Le système d'exploitation est donc un programme qui soustrait le matériel au regard du programmeur et offre une vue agréable à l’ordinateur. III/ Principes des systèmes d'exploitation: L’interface entre le système d'exploitation et les programmes de l’utilisateur est constituée d’un ensemble « d’instructions » « étendues » fournies par le système d'exploitation. Ces instructions étendues sont qualifiées d’appels systèmes. Elles varient d’un système d'exploitation à l’autre. Généralement, les appels systèmes appartiennent à l’une des grandes classes suivantes: soit les processus soit les systèmes de fichiers soit les entrées sorties. III-1/ Les processus: Le processus est un concept clé de tous les systèmes d’exploitation. Un processus est un programme exécutable, ses données et sa pile d’exécution, son compteur ordinal, sont pointeur de pile et les autres registres, ainsi que les autres informations nécessaires à l’exécution du programme. Périodiquement, le système d'exploitation décide d’interrompre un processus en cours et de lancer l’exécution d’un autre. TAYARI Lassaad Page 5 ISET DE GABES Cours LINUX(UNIX) Introduction générale Lorsqu’un processus est temporairement suspendu de telle manière, il faut qu’il puisse retrouver plus tard exactement l’état ou il se trouvait au moment de sa suspension. Il faut donc que toutes les informations dont il a besoin soient explicitement sauvegardées quelque part. Dans un système d'exploitation, les informations relatives à un processus sont sauvegardées dans une table du système d'exploitation. Les appels systèmes les plus importants pour la gestion des processus sont ceux qui concernent la création et le fin des processus. III-2/ Les systèmes de fichiers: La deuxième grande catégorie d’appels systèmes, concerne le système de fichiers. Il faut donc des appels systèmes pour créer et détruire des répertoires et de y mettre ou en Fichier retirer des fichiers. Répertoire Répertoire racine Exemple de ramification d’un système de fichiers TAYARI Lassaad Page 6 ISET DE GABES Cours LINUX(UNIX) Introduction générale III-3/ Les interpréteurs de commandes (shell): Le système d'exploitation est le code qui exécute les appels systèmes (noyau). Les éditeurs, les compilateurs et les interpréteurs de commandes ne font absolument pas partie du système d'exploitation. L'interpréteur de commandes (shell) constitue la première interface entre l’utilisateur et le système d'exploitation. III-4/ Classification des systèmes d'exploitations existant: Mono-tache Mono-utilisateur Multi-utilisateur « Single-user » « Multi-user » MS-DOS « Single tasking » OS/2 WindowsNT Multi- tache OS/9 UNIX « Multi tasking » Windows windows95 Xwindows VMS IV/ Résumé: Dans cette introduction, nous avons examiné le système d'exploitation sous deux angles différents: La gestion des ressources et la machine étendue (virtuelle). Du point de vue de la gestion des ressources, le rôle de système d'exploitation est de gérer au mieux les différentes parties du système. Du point de vue de la machine étendue, le rôle de système d'exploitation est d’offrir aux utilisateurs une machine virtuelle plus facile d’emploi que la machine réelle. TAYARI Lassaad Page 7 ISET DE GABES Cours de LINUX(UNIX) Le Système UNIX Chapitre 1 LE SYSTEME UNIX Objectifs: Introduire le système UNIX à travers sont historique. Définir le système UNIX en précisant ses caractéristiques. Définir le SHELL d’UNIX. Aider l'étudiant a ce familiariser avec l'environnement UNIX à travers la procédure de connexion, quelque commandes simples pour débuter et la procédure de déconnexion. (Un flash) Prérequis: Le chapitre précédent de ce cours d’UNIX et ses Prérequis. Plan I/ Historique II/ Généralité sur le système II-1/ Définition du système UNIX II-2/ Caractéristiques d'UNIX II-3/ Raison du succès d'UNIX II-4/ Structure du système UNIX II-5/ Le SHELL II-6/ Premier contact avec UNIX TAYARI Lassaad Page 7 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX Chapitre 1 LE SYSTEME UNIX I/ Historique Le système UNIX a été développé dans les bell loboratories de la firme américaine AT&T, grâce au travail acharné de l'ingénieur KEN THOMPSON qui a été rejoint par la suite par son collègue DENNIS RITCHIE. Le but des concepteurs d’UNIX était de disposer d'un système d'exploitation interactif opérant sur des petits systèmes, mais dont la puissance est comparable au systèmes d'exploitation des grandes machines. Sa conception a suivi les péripéties suivantes: Apparition de la première version sur DIGITAL PDP7 et PDP8 en 1969. Cette version a été écrite en assembleur et fonctionne en mono utilisateur. Une nouvelle version opérationnelle sur le DIGITAL PDP11 en mode multiprogrammation a été lancée toujours par THOMPSON et DENNIS en 1971. En 1973, réécriture d'UNIX en langage C, lui même développé par DENNIS RITCHIE dans les bell loboratories, brisant la tradition qui associes l'assembleur à tout système d'exploitation. Octroie par bell loboratories aux universités la licence d'utilisation d'UNIX pour des buts académiques. Lancement en 1975 d'UNIX version 6, un produit non "bell loboratories". Extension de l'environnement multiutilisateurs et ajout des utilitaires de gestion de ressources avec l'apparition de la version UNIX PWB (Programmers Work Bench) en 1976. TAYARI Lassaad Page 7 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX En 1978, UNIX a été porté sur le VAX11 à partir de la version 7. De nouveaux utilitaires sont apparus, ainsi que la possibilité de portabilité a été améliorée. 1980, l'université californienne de BERKLEY sort la version UNIX BSD4.1 qui apporte des améliorations sur la gestion de la mémoire virtuelle et des réseaux et introduit l'éditeur plein écran vi. Introduction sur le marché en 1981 de la première version UNIX temps réel par la firme MASCOMP. Lancement en 1982 par AT&T de l'UNIX version 7 et l'UNIX system III, conçu par AT&T. Lancement en 1983 par AT&T de l'UNIX system V avec amélioration de la gestion des mémoires partagées. Toujours en 1983, apparition de la version dérivée d'UNIX conçue pour tourner sur des micro-ordinateurs IBM AT ou compatibles: XENIX de MICROSOFT...etc. A partir de l'année 1991, UNIX a commencé à s'ajuster au temps réel notamment avec les versions UNIX system V.4, VXWORKS de Wind River System et VRTX de Ready Systems. Concurrent Computer met sur le marché un nouvelle version d'UNIX, la RTU 6.0, utilisant l'architecture RISC et conçue à partir du noyaux V.3 d'AT&T mais intégrant l'environnement BERKLEY BSD 4.2. II/ Généralité sur le système II-1/ Définition du système UNIX. UNIX est un ensemble de programmes qui servent de liaison entre un ordinateur et son utilisateur. UNIX possède trois fonctions: Il commande l'ordinateur: Le logiciel du système UNIX chargé de la commande de l'ordinateur est appelé le noyau Kernel ou le SE. Son rôle est l'allocation des ressources matérielles, la gestion de la mémoire, la gestion du système des fichiers et le contrôle de l'accès à l'ordinateur. TAYARI Lassaad Page 8 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX Il sert d'interprète utilisateur-ordinateur: Le logiciel du système UNIX de telle liaison s'appelle le SHELL dont le rôle est de contrôler et d'interpréter les demandes des utilisateurs et d'extraire de la mémoire des programmes associés afin de les exécuter. Il offre un ensemble d'outils de travail destinés à la communication téléphonique, a la manipulation des fichiers, à la programmation et au développement de nouveaux logiciels. APPLICATION SE (UNIX) MATERIEL II-2/ Caractéristiques d'UNIX. Un système d'usage général: L'utilisateur peut effectuer des travaux de toutes sortes comme la programmation, le traitement de texte, la messagerie... Un système interactif: Il offre une interaction entre l'utilisateur et la machine. Un système de temps partagé ou un système multiutilisateur: C'est la technique de partage avec d'autres utilisateurs tout en donnant l'impression à chaque utilisateur qu'il est le seul maître a bord. En effet, le système alloue à chaque travail soumis une tranche de temps pour l'exécution d'une partie ou la totalité de ce travail. Grâce à la rapidité d'exécution du système, il paraît fonctionner simultanément avec tous les utilisateurs. Un système multitâches: Il permet l'exécution de plusieurs programmes simultanément. II-3/ Raison du succès UNIX. Un système portable: Ecrit en langage C, UNIX est supporté par une grande variété de machines allant des micro-ordinateurs jusqu'aux grosses machines. Il présente donc un avantage commercial énorme. TAYARI Lassaad Page 9 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX Un système facilement adaptable aux situations particulières: Le code source d'UNIX, écrit en langage évolué, est disponible. Un système simple d'utilisation et riche en fonctionnalités. Il existe deux sortes d'utilisateurs pour un système UNIX donné: L'administrateur du système: c'est un usager particulier qui a tous les droits, et qui est responsable du bon état du système. Son nom est root . Les autres utilisateurs: C'est l'administrateur qui enregistre un nouvel usager. Les usagers sont rassemblés en groupes. En général un groupe rassemble les personnes qui travaillent sur un même sujet. Pour changer de groupe, il faut le demander a l'administrateur. II-4/ Structure du système UNIX. Le noyau du système UNIX est un bloc qui contient une série de composantes qui assurent la gestion des fichiers, la gestion des processus et la gestion de la mémoire. APPLICATION APPEL SYSTEME UNIX SYSTEME DE GESTION DE FICHIERS BUFFERING GESTION DE MEMOIRE GESTION DE DRIVER DE PERIPHERIQUES PROCESSUS CONTROLE MATERIEL MATERIEL Structure du noyau UNIX TAYARI Lassaad Page 10 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX II-5/ Le SHELL. Pour travailler avec UNIX, il est important de savoir qu'il est possible de communiquer directement avec le noyau de SE. Cette communication passe par un utilitaire qui sert d'intermédiaire entre la saisie des commandes et le noyau du système. Sous UNIX, il est appelé le SHELL (en français, la coquille ou interpréteur de commande). On trouve plusieurs SHELLS tel que: C-SHELL, KORN-SHELL et BOURNE-SHELL). II-6/ Premier contact avec UNIX. Ouverture d'une session UNIX Login : nom de l'utilisateur Password : mot de passe $ c'est le prompt utilisateur, il indique que le système est recevoir des commandes. Changer le mot de passe $passwd permet de créer ou changer le mot de passe $passwd Setting password for user :userx old password : saisie de l'ancien mot de passe new password : saisie du nouveau mot de passe Re-enter new password : validation du nouveau mot de passe. Afficher l'heure et la date $date Mon TAYARI Lassaad Sept 22 09:13:21 Page 11 EET 2006 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX Afficher les utilisateurs, leurs adresses et l'heure et la date de la connexion $ $who adm tty11 May 28 13:59 user1 tty12 May 28 15:12 user2 tty13 May 28 15:13 user7 tty18 May 28 16:40 tty13 May 28 15:13 $ $ $who am i user2 $ Fermeture d'une session: Deux possibilités Avec la commande exit. En appuyant sur ^d (ou contrôle d ). Syntaxe de la commande: Une commande UNIX doit posséder la syntaxe suivante: $ Commande [option1].......[optionN] [arg1] -------[argn] ( ce qui est entre crochets n'est pas toujours obligatoire) TAYARI Lassaad Page 12 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX Exemple: $wc fich1 44 446 3028 $wc -l fich1 fich1 44 fich1 $wc -c fich1 3028 fich1 $wc -w fich1 446 fich1 $ uname [-option] -s : nom du système UNIX courant. -n : nom du noeud. -r : N° de l'édition du système UNIX. -m : nom de la machine. -v : version du système UNIX. -a : toutes les données sous-mentionnées. Affichage des premières et dernières lignes d'un fichier: $head -5 fich1 $tail -3 fich1 Documentation: La commande man permet de consulter la documentation on-line d'UNIX: $man ls TAYARI Lassaad Page 13 ISET DE NABEUL Cours de LINUX(UNIX) Le Système UNIX $man pg TAYARI Lassaad Page 14 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix Chapitre 2 LE SYSTEME DE FICHIERS D'UNIX Objectifs: Connaître la structure du système de fichiers d'UNIX. Manipuler les commandes de base du système de fichier d’UNIX. Prérequis: Les chapitres précédents de ce cours d’UNIX. Plan I/ Structure du système de fichier I-1/ les fichiers normaux I-2/ les fichiers répertoires I-3/ les fichiers spéciaux II/ Répertoire de travail III/ La manipulation des répertoires III-1/création d'un répertoire III-2/ contenu d'un répertoire III-3/ suppression d'un répertoire III-4/ taille des répertoires IV/ La manipulation des fichiers IV-1/ création simple d'un fichier répertoire IV-2/ lecture d'un fichier IV-3/ duplication de fichiers IV-4/ déplacement de fichiers IV-5/ suppression de fichiers IV-6/ autres opérations sur les fichiers V/ Conclusion TAYARI Lassaad Page 15 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix Chapitre 2 LE SYSTEME DE FICHIERS D'UNIX I/ Structure du système de fichier Définition: Un fichier est une suite d'octets, stockées sur une mémoire auxiliaire. Le système UNIX distingue plusieurs types de fichiers. les fichiers normaux (ordinary files) les fichiers répertoires (répertoire ou directory) les fichiers spéciaux (special files ou devices) Chaque fichier possède un nom, un contenu, un endroit où se trouve, sont propriétaire, sa taille et les personnes qui peuvent y accéder. I-1/ les fichiers normaux : contiennent soit des textes soit des programmes exécutables . I-2/ les fichiers répertoires: permettent d'organiser l'espace du disque dur. Les fichiers normaux sont regroupés dans des répertoires. Ces répertoires peuvent contenir euxmêmes des sous-répertoires, des fichiers normaux et des fichiers spéciaux. I-3/ les fichiers spéciaux : représentent les interfaces avec les périphériques gérés par le système d'exploitation. Exemple: console, imprimante et disque. / /boot /UNIX /bin mail TAYARI Lassaad /dev news /etc usern Page 16 /Lib User3 /tmp /usr User2 ISET DE NABEUL User1 Cours de LINUX(UNIX) Le système de fichier d'unix /boot : Premier programme exécuté par la machine, il permet de lancer UNIX. /UNIX : Programme du KERNEL (résident en mémoire). Au fonctionnement, /UNIX est lu, copié dans la mémoire et exécuté. /bin : Contient les utilitaires et programmes exécutables comme cat, date, wc, who, ... /dev : Contient les fichiers spéciaux qui représentent des périphériques comme console, ttyxx, lp, ... /etc : Contient des programmes et fichiers de données pour l'administration du système comme le fichier des mots de passe "passwd" et le fichier des membres de chaque groupe d'utilisateur group. /Lib : Bibliothèque de programmes et de langages. /tmp : contient des fichiers temporaires /usr : /news : Nouveautés dans le domaine d'UNIX /mail : Boite à lettres /userx : Répertoire de l'utilisateur userx. II/ Répertoire de travail Au moment du login, l'utilisateur est placé sur un répertoire propre à lui, relié au répertoire système /usr. On appelle ce répertoire, le répertoire de départ ou répertoire de connexion. A partir de sont répertoire de départ, tout utilisateur peut créer ou modifier ses propres fichiers et répertoires qui doivent êtres situés dans la partie inférieure de l'arborescence à partir du répertoire de départ. L'utilisateur peut aussi remonter le système de fichiers jusqu'à la racine ou se positionner sur un répertoire issu de sont répertoire appelé répertoire de travail ou répertoire courant. Chaque fichier ou répertoire est décrit par sont chemin d'accès par rapport au répertoire courant ou par rapport à la raine. Exemple de chemin d'accès: TAYARI Lassaad Page 17 ISET DE NABEUL Cours de LINUX(UNIX) /usr/user2/fich1 Le système de fichier d'unix : Chemin d'accès de fich1 par rapport à la racine. fich1 : Chemin d'accès de fich1 par rapport au répertoire de connexion de user2. /usr/spool : Chemin d'accès du fichier spool par rapport à la racine. Pour connaître le répertoire courant, ou le répertoire de travail, on dispose de la commande pwd. $pwd Pour se déplacer dans l'arborescence et changer de répertoire, on utilise la commande cd suivie du chemin d'accès du répertoire. $Cd /usr $pwd $cd /usr/spool $pwd pour remonter d'un niveau dans l'arborescence: $cd .. $pwd $cd userx $pwd III/ La manipulation des répertoires III-1/création d'un répertoire Pour créer un répertoire, on utilise la commande mkdir suivie du nom du répertoire (ou des noms des répertoires) à créer TAYARI Lassaad Page 18 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix $mkdir trav $mkdir temps pers III-2/ contenu d'un répertoire La commande ls permet de lister le contenu d'un répertoire en fichiers et sousrepertoire sans distinction Exemple: $ls fich1 pers temps trav virus Pour distinguer entre les fichiers et les répertoires on utilise ls avec l'option -p. Dans ce cas les répertoires serons terminés par / Exemple: $ls fich1 pers/ temps/ trav/ virus TAYARI Lassaad Page 19 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix Pour obtenir une description plus détaillée du contenu du répertoire, on utilise ls avec l'option -f. $Ls -l -rw-rw-- 1 userx group 12 May 29 10:64 fich1 drwxrwxr-x 2 userx group 32 Jun 3 10:45 virus La première colonne représente le mode du fichier: si le premier caractère est d : répertoire -: fichier ordinaire b,c,p: fichier spécial. Les neufs (9) caractères du champs mode décrivent les permissions accordées à ces fichiers et répertoires ( à voir ultérieurement). En suite, on obtient le nombre d'octets dans chaque fichier et répertoire, la et l'heure de sa dernière modification et son nom. $Ls -l / Dans le cas d'un fichier spécial, le champ indiquant le nombre d'octets est remplacé par deux paramètres, le numéro majeur et le numéro mineur. Le numéro majeur permet de codifier le type du périphérique (exemple : 0 pour console, 1 pour les terminaux tty, 2 pour les disques ....etc.) tandis que le numéro mineur permet de différencier les périphériques de même type par des chiffres distincts. $Ls -l /dev III-3/ suppression d'un répertoire La suppression se fait par la commande rmdir: Exemple: TAYARI Lassaad Page 20 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix $rmdir temp $ls -p La même tâche peut être faite avec la commande rm : Exemple $mkdir temp $ls -l $rm -r temp $ls -l III-4/ taille des répertoires La commande du (disk usage) fournit la taille en espace disque occupée par les répertoires et les sous-répertoires. Sa syntaxe est : $ du -option répertoire les options peuvent êtres: a: taille de chaque fichier des répertoires en question. R: générer des messages pour les fichiers ou répertoires non lus s: seules les tailles totales des répertoires sont données. Par défaut, la taille de chaque répertoire et sous-répertoire seront données en blocs. La commande du interprète chaque bloc de 1024 octets en deux blocs de 512 octets (par exemple, un fichier ou répertoire de 500 octets est interprété comme 2 blocs). Exemple $du 1 TAYARI Lassaad .pers Page 21 ISET DE NABEUL Cours de LINUX(UNIX) 1 .trav 20 .tp Le système de fichier d'unix IV/ La manipulation des fichiers IV-1/ création simple d'un fichier répertoire Il est possible de créer un fichier ordinaire soit en utilisant un éditeur de texte comme vi, soit en utilisant la commande cat et la redirection. Exemple: $ cat > nom du fichier ligne1 ligne2 ^d Une fois la ligne est validée, tout ce qui sera saisie sera copié sur le fichier qui peut être fermé et sauvegardé dans le répertoire indiqué en tapant ^d. Exemple : $ cat fich2 Ce fichier est composé de deux lignes et sera sert à tester la commande cat. ^d $ls -l -rw-rw-r-- 1 userx group 12 May 29 10:45 fich1 -rw-rw-r-- 1 userx group 68 Jun 3 11:16 fich2 drwxrwxrwx 2 userx group 32 Jun 3 10:15 temp TAYARI Lassaad Page 22 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix IV-2/ lecture d'un fichier Il est possible de lire un fichier ordinaire soit en utilisant un éditeur de texte comme vi, soit en utilisant la commande cat . Exemple : $cat fich1 $cat fich1 fich2 Dans le cas de fichiers volumineux, on remarque que le défilement sur l'écran est rapide. Donc, il faut y avoir du temps de pause pour l'affichage. Pour cela on peut utiliser la commande pg. pg permet l'affichage de un ou plusieurs fichiers page par page. $pg nom de fichier pg attend des instructions supplémentaires qui peuvent être: h: voir toutes les possibilités de pg L: afficher la ligne suivante <>: Afficher page suivante .: afficher la page courante f: afficher la page d'après $: Afficher la dernière page +iL: Afficher les i lignes suivantes /chaine/ : Rechercher en avant d'une chaîne ?chaîne?: Rechercher en arrière d'une chaîne Exemple: TAYARI Lassaad Page 23 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix $pg fich1 <texte> :h :L :+3L :. :<> :$ :q $ $pg -5 +15 fich1 : affiche fich1 toutes les 5 lignes à partir de la 15 ème ligne. IV-3/ duplication de fichiers Pour dupliquer un fichier, il suffit d'utiliser la commande cp. Syntaxe: $cp source(s) destination source(s) = un ou plusieurs fichiers Exemples: 1- copie de deux fichiers sur un autre répertoire en gardant les mêmes noms: $cp virus fich2 trav $ls trav 2- Duplication d'un fichier sur le même répertoire de travail avec un nom diffèrent: $cp fich2 essai. $ ls -p TAYARI Lassaad Page 24 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix $cat essai 3- Duplication d'un répertoire sur un autre: $cd trav $ls $cp * /usr/userx/pers ou $ cp * ../pers $ls ../pers $cd .. Question: Comment peut-on réaliser le dernier exemple sans changer de répertoire? IV-4/ déplacement de fichiers Pour déplacer un fichier, il suffit d'utiliser la commande mv (move). Syntaxe: $mv source(s) destination Exemples: 1- Déplacement d'un fichier d'un répertoire a un autre sans changement de nom: $mv essai trav/essai $ls -l $ls -l trav 2- Déplacement d'un fichier d'un répertoire a un autre avec changement de nom: $mv trav/essai essai1 $ls -l $ls -l trav TAYARI Lassaad Page 25 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix Attention: Si le fichier de destination existe déjà, la commande mv remplacera son contenu par celui du fichier source. IV-5/ suppression de fichiers Pour supprimer un fichier, on utilise la commande rm (rermove) Syntaxe: $rm [-option] fichier(s) Exemples: $rm trav/fich2 pers/fich2 $ls -p trav pers L'utilisation de l'option i permet au système de poser une question de validation avant d'effacer le fichier. Exemples: $rm -i pers/virus pers/virus: ? n $ls pers $rm -i pers/virus pers/virus: ? y $ls pers IV-6/ autres opérations sur les fichiers La commande file permet de tester sur le contenu d'un fichier. Cette commande permet de deviner le type de fichier invoqué. Syntaxe: TAYARI Lassaad Page 26 ISET DE NABEUL Cours de LINUX(UNIX) Le système de fichier d'unix $file fichier Exemples: $file /bin /bin : directory $file /bin/ed /bin/ed : cannot open for reading $file essai1 essai1 : data V/ Conclusion: Dans ce chapitre nous avons étudié le système de fichier d'UNIX du point de vue de l'utilisateur. En effet, nous avons défini les différents types de fichiers, la structure générale du système de fichier (organisation hiérarchique des répertoires) et les commandes de base pour la manipulation du système de fichier d'UNIX. Par contre, nous n'avons pas évoqué la notion de sécurité qu'offre le système UNIX. Dans le chapitre suivant, on étudiera ce point. TAYARI Lassaad Page 27 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers Chapitre3 SECURITES DES FICHIERS Objectif: Connaître les différentes techniques de sécurité des fichiers sous UNIX Prérequis: Les chapitres précédents de ce cours d’UNIX. Plan I/ INTRODUCTION: II/ NOTIONS D’UTILISATEUR ET DE GROUPE : III/ LES DROITS D’ACCES D’UN FICHIER: IV/ CHANGEMENT DE DROIT D’ACCES : V/ CHANGEMENT DE PROPRIETAIRE ET DE GROUPE VI/ L’INODE: TAYARI Lassaad Page 25 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers Chapitre 3 SECURITES DES FICHIERS I/ INTRODUCTION: A chaque fichier est associé un ensemble de permissions qui octroient les droits d’accès en lecture, en écriture ou en exécution au propriétaire lui- même, aux membres de son groupe de travail ou au différents autres utilisateurs du système . II/ NOTIONS D’UTILISATEUR ET DE GROUPE : 1) l’utilisateur : Au login, l'utilisateur doit introduire sont identificateur, qui correspond d’un nombre uid reconnu par le système. 2) le groupe: Le groupe d’utilisateurs est l’ensemble d’utilisateurs qui peuvent partager les memes fichiers, ou qui travaillent sur le même projet Chaque groupe est identifié par son nom et par un identificateur unique, le gid. Pour connaitre les groupes définis dans un système, on tape: $ cat /etc/group root::0:root ,adm sys::3:root,adm group::50:user1,user2,user3,user4 On obtient donc une liste des groupes dans le système. Chaque nom de groupe est suivi par un champ libre, son gid et enfin l’ensemble des membres (utilisateurs) du groupe. TAYARI Lassaad Page 26 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers 3) Connaitre les utilisateurs et les groupes : le fichier / etc / passwd,qui est le fichier des mots de passe, il contient toute les informations du login pour chaque utilisateur. Ce fichier ne peut etre modifié que par le super-utilisateur, mais peut etre consulté par les autres avec la commande : $ cat / etc/ passwd |pg les entiées de se fichier sont de la forme : log-id : mp : uid : gid: comm: rep-conn: prog -conn: log_id:= identificateur de lutilisateur mp= mot de passe uid: user identifier gid: group identifier comm: facultatif ( reservé pour les commentaires ) rep_con : repertoire de connexion prog_conn: le shell Exemple: $ cat /etc /passwd root: * : 0: 1: superuser:/: bin : *: 2: 2: owner of systeme commandes: / bin: sys :*: 3:3: owner of systeme files :/usr/sys user1 : * : 208 : 50 :: / usr/ user1: / bin /sh user2 : * : 209 : 50 :: / usr / user2:/ bin /sh la commande id permet a l’utilisateur d’afficher son login et son groupe aussi que les uid et gid TAYARI Lassaad Page 27 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers III/ LES DROITS D’ACCES D’UN FICHIER: Les droit d’acces d’un fichier forment un ensemble de trois groupes de troix caracteres chacun : $ ls -l -rwx rwx rwx . . . . . . . . . . . . . . . . . . . fichier Autres Propriétair e Groupe La signification des mentions de ses groupes diffère selon q’il s'agit d’un fichier ordinaire, d’un fichier spécial ou d’un fichier répertoire Pour un fichier ordinaire : r: droit d’accès en lecture w: droit d’accès en écriture x: droit d’exécution si le fichier est exécutable. Pour un répertoire : r: droit de lecture du contenu (ls) w: droit de créer / supprimer des fichiers (cp,mv) x: droit d’opérer dans le répertoire (cd) Exemples : $ ls -l / etc/ passwd -rw-r--r-- root sys ...... /etc/passwd $ ls -l /bin/ ls -rwx--x--x ....... /bin/ls . TAYARI Lassaad Page 28 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers IV/ CHANGEMENT DE DROIT D’ACCES : A la création d’un fichier ou répertoire, c’est le système ( kernel) qui se charge d’accorder ou de refuser la permission au propriétaire, aux membres du groupe et au autres. Ses permissions peuvent être modifiées avec la commande chmod. Seul le propriétaire d’un fichier ou d’un répertoire peut changer les permissions. En effet, il peut décider qui sera autorisé à lire, modifier, créer, supprimer et utiliser ses fichiers et répertoires, et à qui cela sera interdit. Le changement des droits d’accès peut se faire en deux modes : En symbolique ou En absolu notion symbolique : la syntaxe de la commande chmod est : $chmod sujet [operateur ] [ permission] fichier(s). Ou sujet : u : utilisateur et propriétaire. :g : membre du groupe de l’utilisateur. :o : autres utilisateurs du système. :a : tout le monde . operateur :+ : ajouter des droits :- : enlever les droits := : valider les droits cités dans la commande et enlever les autres. permission :r : lecture (fichier) : affichage (répertoire ) TAYARI Lassaad Page 29 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers :w : écriture (fichier) : création ou suppression (répertoires ) :x : exécution (fichier ) : droit d’opérer ( répertoire ) . Exemples: 1- Lister les droits d’accès du fichier virus . $ ls -l virus -rw-r--r-- 1 userx group ........ virus. 2- Ajouter le droit d’exécution au propriétaire et interdire les nom_ membre du groupe d’y accéder : $ chmod a+ x, o-r virus $ ls -l virus -rwx----- 1 userx group ............. virus 3- Enlever le droit du propriétaire à la lecture, et ne permettre au groupe et aux autres que l’execution : $chmod u-r , g=x , o+x $ ls -l virus virus --wx--x--x 1 userx groupe . . . . . . virus 4- lire le fichier virus $ cat virus cat : cannot open virus [ ou access denied virus ] 5- remettre le fichier a l’état initial : $ chmod u= rw , go= r TAYARI Lassaad virus. Page 30 ISET DE NABEUL Cours de LINUX(UNIX) $ ls -l Sécurité des fichiers virus -rw-r--r-- 1 userx group ....... virus $ cat virus ( taper entrer ) notion absolue: syntaxe: $ chmod mode fichier(s) mode : est la représentation octale des permission : - le chiffre 1 correspond au mention r,w ou x - le chiffre 0 correspond au tiret Exemple: Permission rwx rw- 111 110 r-100 correspond le mode 764 1- obtenir les droit d’accès suivants pour le fichier virus: rw--w--w$ chmod 622 virus. $ ls -l virus -rw--w--w- ............ virus 2- protéger le fichier contre toute écriture $ chmod a -w virus $ ls -l virus TAYARI Lassaad Page 31 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers -r--r--r- ............... virus $ cat > virus virus: can not create . 3- remettre les droites d’accès de se ficher et l’état initiale : $ chmod 644 virus $ ls -l virus -rw-r--r-- .......... virus V/ CHANGEMENT DE PROPRIETAIRE ET DE GROUPE 1) changement de propriétaire : Sous Unix le propriétaire a tout les droits sur ses fichiers. En effet, il a le droit de transférer la propriété d’un fichier ou d’un répertoire vers un autre utilisateur. Pour se faire il doit utiliser la commande chown (change owner) attention !!:le changement de propriétaire fait perdre a celui -ci tout droit d’accès sur se fichier, même celui de restaurer la propriété, sauf les droits permis pour les autres. Syntaxe de chown: $ chown nouveaux _ login -id fichier(s) (ou répertoire (s)) ou $ chown nouveau-ind fichier (s) (ou répertoire (s)). Exemple : 1- changement de propriété du fichier essai1: $ ls -l essai1 -rw--r--r-- 1 userx group ........ essai1 $ chown admn essai1 TAYARI Lassaad Page 32 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers $ ls -l essai1 -rw-r--r-- 1 admn group ......... essai 2- remettre le fichier à l’état initial. $ chown userx essai1 . essai1 : not owner . Donc, la propriété ne peut être restaurée que par le nouveau propriétaire. Cette opération se fait a l’aide de l’approche suivante : $ chown usrx /usr/userx/essai 1 2) changement de groupe: Un utilisateur peut choisir pour une de ses fichiers ou répertoires un groupe autre que celui assigné normalement par le kernel. Cette procédure est réalisable par la commande chgrp.(change groupe). La syntaxe de la commande chgrp est: $ chgrp nouveau_groupe fichiers () (ou répertoire (s)) ou $ chgrp nouveau_gid fichier(s) (ou répertoire (s) ) Exemple : 1- changer le groupe du fichier essai1: $ ls -l essai1 -rw-r--r-- 1 userx group .......essai1 $ chgrp sys essai1 $ ls -l essai1 -rw-r--r-- 1 userx sys ....... essai1 Les membres du groupe de travail de userx n’ont plus que le droit de lecture. TAYARI Lassaad Page 33 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers 2- Pour restaurer le groupe d’origine: $ chgrp group essai1 $ chgrp group essai1 -rw-r--r-- 1 userx group .........essai1 Remarque : manipuler les répertoires de la même manière. VI/ L’INODE: Un fichier possède plusieurs informations, tel que le nom, le contenu et d’autres informations comme les permissions et les dates des derniers modifications. ces informations sont sauvegardées dans l’INODE (index mode) avec d’autres données essentielles comme la longueur du fichier, sont emplacement sur le disque ,...etc. 1) Représentation de l'INODE : TAYARI Lassaad Page 34 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers L’INODE est une suite de 64 octets qui définit les caractéristiques d’un fichier (type, permission, adresse des données ). Toutes les INODES sont regroupées en une liste. L’importance des inodes réside dans le fait qu'il sont pour le système comme le nom pour l’utilisateur. $ ls -i 8643 fich1 6286 fich2 $ le i-num d’un fichier est enregistré dans les deux premiers octets du repertoire, et est l’unique connexion entre le nom du fichier et sont contenu. 2) lien d’un fichier : Le nom du fichier dans le répertoire servant de lien entre un nom dans la hiérarchie d’un répertoire et l’inode est appelé le lieu. Le même i-num peut apparaitre dans des répertoires différents avec des nom de fichiers différents grâce a la commande ln: syntaxe: $ ln fichier_ ancien fichier_ nouveau. Le but de cette opération de donner deux noms au même fichier. $ ls -li bidon 6231 -rw-rw-rw 1 ....... bidon $ ln bidon /work/bidonne $ ls -li bidon 6231 -rw-rw-rw 2 ........ bidon $ ls -li bidonne TAYARI Lassaad Page 35 ISET DE NABEUL Cours de LINUX(UNIX) Sécurité des fichiers 6231 -rw-rw-rw 2 /work / bidone nombre de liens . Les deux fichiers pointent donc surs le même inode, ce qui veut dire qu’il ya un seul espace disque associé aux deux noms de fichiers. $ mv bidon bidon0 $ ls -li bidon0 6231 -rw-rw-rw 2 ..... bidon0 $ rm bidon0 $ ls -li bidon work/bidone bidon not fownd 6231 -rw-rw-rw 1 work/bidonne REMARQUE: la commande rm n’élimine pas l’inode, mais élimine le nom du fichier dans le répertoire tout en décrémentant le nombre de liens par 1, les données restent intactes sur le disque. TAYARI Lassaad Page 36 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Chapitre 4 UTILISATION DU SHELL D'UNIX Objectifs: Connaître la structure de la ligne de commande dans le SHELL d'UNIX. Manipuler les méta caractères du SHELL d’UNIX. Introduire la notion de la programmation dans le SHELL d’UNIX. Prérequis: Les chapitres précédents de ce cours d’UNIX. Plan I/ La structure de la ligne de commande I-1/ La forme canonique I-2/ L'association de plusieurs commandes sur la même ligne I-3/ Lancement d'une commande en arrière plan I-4/ La redirection I-5/ Le tube II/ Les méta caractères III/ La programmation dans le SHELL III-1/ types de variables SHELL III-2/ Evaluation des expression arithmétiques III-3/ Les arguments résultats de commandes III-4/ La création de nouvelles commandes III-5/ Affectation de variables en interactif III-6/ Les commandes avec arguments TAYARI Lassaad Page 35 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Chapitre 4 UTILISATION DU SHELL D'UNIX I/ La structure de la ligne de commande: Lorsqu'une commande est lancée par le SHELL, trois fichiers ayant chacun un numéro appelé "file discriptor (fd) " sont ouverts par le système. Ce sont: Le fichier stdin ou standard input (fd=0) Le fichier stdout ou standard output (fd=1) Le fichier stderr ou standard error (fd=2) I-1/ La forme canonique. La commande la plus simple est un mot qui fait appel à un fichier de même nom: Exemple: $ who $ date I-2/ L'association de plusieurs commandes sur la même ligne. Plusieurs commandes peuvent êtres lancés sur la ligne si elles sont séparées par un point virgule ";". Exemple: $ date ; who I-3/ Lancement d'une commande en arrière plan. TAYARI Lassaad Page 36 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C l est possible de profiter de la caractéristique multitâche d'UNIX pour avoir plusieurs commandes qui tournent en même temps et qui proviennent du même utilisateur. Ceci est accompli en faisant exécuter des commandes en arrière plan a l'aide du caractère &. Exemple: $sleep $ 5 (Attende 5 secondes pour donner la main) (Le prompt reçue après 5 secondes ) $(sleep 5 ; date )& date 2108 (l'identificateur du processus) Mon Sept 22 09:13:21 1997 Mon Sept 22 09:13:26 1997 L'avant dernière ligne est le résultat de deuxième commande date, alors que la dernière ligne est celui de la première commande date. On remarque le décalage de 5 secondes dans l'heure. Si le résultat d'une commande lancée en arrière plan n'est pas affichable sur l'écran, la fin du processus n'est pas indiquée par le SHELL. Dans ce cas, il est conseillé de terminer la commande par un message. Exemple: $(ls -l >liste;sleep 10; echo "fini")& 21554 $fini Le mot fini est affiché 10 secondes après l'écriture sur liste. L'exemple d'utilisation le plus courant est l'écriture sur l'imprimante. Chaque tâche lancée en arrière-plan est identifiée par un numéro appelé identificateur de processus (process identifier) ou PID. Les état de ces tâches peuvent êtres consultés sur l'écran grâce à la commande: TAYARI Lassaad Page 37 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C $ ps -f. Les informations obtenues sont: Le nom de l'utilisateur qui a lancé la commande, le numéro du PID de chaque processus, le numéro du PID du processus père, l'heure du début du processus, la durée du processus la commande de lancement Exemple: $sleep 50& 22472 $ps -f UID PID PPID C STIME TTYTIME COMMAND userx 21579 21578 3 14:03:16 P00 0:03 -sh usery 22472 21579 0 14:26:07 P00 0:00 sleep 50 userz 22473 21579 16 14:26:10 P00 0:01 ps -f Connaissant le numéro de la tâche ou son PID, il est possible d'arrêter son exécution. Pour ce faire, il suffit d'envoyer le signal 9 a la tâche désirée à l'aide de la commande kill. Exemple: $Kill -9 22472 (tuer la tâche 22472) 22472 terminated $ps -f TAYARI Lassaad Page 38 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C UID PID PPID C STIME TTYTIME COMMAND userx 21579 21578 3 14:03:16 P00 0:03 -sh userz 22473 21579 16 14:26:10 P00 0:0± ps -f On remarque que le processus (sleep 50) qui avait le PID 22472 à disparu de la liste des processus. I-4/ La redirection. Toute commande d'UNIX suppose l'existence d'un flux de données en entrée qui provient généralement du clavier et un flux de données en sortie qui est généralement affiché sur l'écran. Le clavier est donc considéré comme entrée standard (stdin) et l'écran est considéré comme la sortie standard (stdout). Toute fois, le SHELL permet à l'utilisateur de : Rediriger ses résultats vers un fichier Accepter les données à partir d'un fichier. Les données résultat d'une commande peuvent êtres dirigées vers un fichier au lieu de l'écran en utilisant le caractère ">" si le fichier est nouveau et le caractère ">>" si les données seront ajoutées en fin de fichier. Les syntaxes sont les suivantes: $commande > fichier où $commande >> fichier Exemples: $ $echo toto >temp $cat temp TAYARI Lassaad Page 39 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C toto $echo lolo >>temp $cat temp toto lolo I-5/ Le tube (pipe). C'est un moyen qui permet le simplification de l'exécution de plusieurs commandes quand chaque commande doit prendre comme entrée la sortie de la commande qui la précède. Exemple: $who > f_temp $wc < f_temp $who | wc En général, la séquence de redirection suivante: $commande1 > fichier_temp $commande2 < fichier_temp | commande2 est remplacée par: $commande1 Les données résultat de la commande1 sont les données entrée de la commande2. Exercice: ( a corriger en classe par les étudiants) TAYARI Lassaad Page 40 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Décomposez et interprétez les commandes suivantes: $ls -l | wc -l $ls -l | head -6 | tail -1 $ls -l | tail -8 | tail -2 II/ Les méta caractères Le SHELL possède un ensemble de caractères spéciaux appelés méta artères: Le méta caractère astéries (*) remplace n'importe quelle séquence de caractères: $echo * ls $echo fich.* ls fich.* Le méta caractère point d'interrogation (?) remplace un seul caractère. Exemple: $ls *.? Permet de lister que les fichiers dont les extensions se composent d'un seul caractère. Le méta caractère crochet ([...]) remplace un des caractères contenus entre crochet. Le méta caractère crochet ([^...]) remplace un des caractères non contenus entre crochet. Exemples: $ls essai[0-9] affiche fichiers ayant le nom "essai" et qui se termine par un chiffre (essai1, esaai2,...etc) $ls essai[!5,7] affiche fichiers ayant le nom "essai" et qui ne se termine pas par 5 ou 7. L'interprétation spéciale des méta caractères par le SHELL est annulée soit en les faisant précédé par l'antislash "\", ou en les mettant entre guillemets. TAYARI Lassaad Page 41 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C III/ La programmation dans le SHELL L'un des rôles les plus importants du SHELL est la programmation a de créer de nouvelles procédures et commandes. Le SHELL utilise les variables pour mémoriser et traiter les données. III-1/ types de variables SHELL. Deux (2) types de variables sont traités par le SHELL: les entiers les chaînes de caractères. Le type de variable est implicitement reconnu par le SHELL. Exemple: $var1=167 :var1 est un entier $var2=suite :var2 est une chaîne de caractères. La valeur d'une chaîne de caractères doit être incluse entre guillemets si elle comprend des espaces, des tabulations ou des point-virgules. Le caractère $ doit toujours précéder le nom de la variable, sauf au moment de la déclaration de cette variable. Une variable peut être assignée à une autre variable: Exemple: $ch2=$ch1 (Attention, ici le premier dollar ($) est le prompt d'UNIX) Exercice: Ecrire l'instruction qui permet d'obtenir la réponse suivante du système: TAYARI Lassaad Page 42 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C ch1=première chaîne et ch2= deuxième chaîne III-2/ Evaluation des expression arithmétiques. La commande expr ordonne au chell d'évaluer une expression arithmétique qui peut être composée de variables entières seulement, de constantes entières seulement ou d'une combinaison des deux. Les opérations arithmétiques permises sont: et L'addition + la soustraction - l multiplication \* la division / le reste de la division euclidienne % Les termes de l'expression doivent être séparés par des blancs. Exemples: $ $var1=15 $var2=5 $X1= ` expr $var1 + 1 ` $echo $X1 16 $expr $var1 - $var2 10 TAYARI Lassaad Page 43 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C $X2=` expr $var1 / $var2 ` $echo $X2 3 $X2=` expr $var1 % $var2 ` $echo $X2 0 $ III-3/ Les arguments résultats de commandes. Le résultat d'une commande peut servir comme argument à une autre commande. Dans ce cas, la commande argument doit être à l'intérieur des apostrophes. Exemple: $mail ` cat work/agenda ` < essai1 permet d'envoyer le fichier essai1 à tous les utilisateurs déclarés dans le fichier agenda. Le résultat d'une commande peut aussi être stocké dans une variable et utilisé ultérieurement. Exemple: $date Fri Sep 7 10:7:26 EET 1997 $heure=`date` $echo $heure Fri Sept 7 TAYARI Lassaad 10:7:45 EET 1997 Page 44 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Le résultat paramétré, c'est à dire subdivisé en plusieurs champs par la commande set. Ces champs seront représentés par les paramètres $1, $2, ........., $N Exemple: $ $set `date ` $echo $1 Fri $echo $5 EET $echo $6 1997 $ III-4/ La création de nouvelles commandes. Soit le traitement suivant: $ $cat > cmd1 echo la date est `date ` ^d $cat cmd1 echo la date est `date ` $ TAYARI Lassaad Page 45 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Cette nouvelle commande est lancée en utilisant le fichier comme argument de la redirection en entrée pour le SHELL. La forme générale est: sh < commande ou sh commande Exemple: $ $sh cmd1 la date est Fri Sept 7 10:15:45 EET 1997 $ L'exécution du fichier des commandes peut être simplifier en invoquant seulement son nom. Seulement, l'utilisateur doit posséder de droit d'accès en exécution sur ce fichier. L'exemple suivant montre comment on peut combiner plusieurs commandes utiles pour ne former qu'une seule. $ $Vi etat echo " salut, la date est ` date ` les utilisateurs sont ` who ` mon répertoire est ` pwd ` " TAYARI Lassaad Page 46 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C :wq $sh etat salut, la date est Fri Sept 7 les utilisateurs sont 10:15:45 root user2 EET 1997 tty00 tty02 09:12:44 10:11:08 mon répertoire de travail est /usr/user2 $ III-5/ Affectation de variables en interactif. La commande read permet l'interaction de l'utilisateur avec le système. Exemple: $ $ cat > menu echo "Quel est votre choix 1, 2 ou 3 ?" read choix echo "vous avez choisis $choix" ^d $sh menu Quel votre choix 1, 2 ou 3 ?2 vous avez choisis 2 TAYARI Lassaad Page 47 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C $ III-6/ Les commandes avec arguments. Pour généraliser l'utilisation d'une commande récemment créer il est possible de la paramétrer. Les arguments de la commande sont indiqués par les paramètres $1, $2, $3, .....,$9 dans le fichier. Exemple: $ $cat > cx chmod u+x $1 echo permission execute accordée. ^D $ L'étape suivante consiste à rendre la commande cx elle même exécutable: $ $cx cx cx : execute permission dinied $sh cx cx permission execute accordée. $ Une fois que le fichier ( ou la commande ) cx est rendu exécutable, il peut être utilisé avec de nouveaux arguments sans passer par sh. TAYARI Lassaad Page 48 ISET DE NABEUL Cours Utilisation Du SHELL d’UNIX &C Exemple: $ $ ls -l menu -rw-r--r-- 1 user1 group ......... menu $cx menu permission execute accordée. $ ls -l menu -rwxr--r-- 1 user1 group ......... menu $ Exercice: Modifiez la commande cx pour qu'elle puisse accepter plusieurs arguments en une seule fois. TAYARI Lassaad Page 49 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Chapitre 5 PROGRAMMATION STRUCTUREE DANS LE SHELL Objectifs: Etudier les opérations de tests dans le shell d’UNIX. Etudier les structures de contrôle dans le shell d’UNIX. Etudier les structures de répétition dans le shell d’UNIX. Prérequis: Les chapitres précédents de ce cours d’UNIX. Plan I/TRANSMISSION DE PARAMETRES: II/GESTION DES SIGNAUX ET PROCESSUS: III/LES TESTS DANS LE SHELL D’UNIX: III-1/ Tests sur les caractéristiques des fichiers. III-2/ Tests de comparaison de fichiers. III-3/ Tests sur les valeurs numériques. III-4/ Tests sur les chaînes de caractères. IV/ LES CONDITIONS COMPOSEES: V/ LES STRUCTURES CONDITIONNELLES: V-1/ La structure if-then-else-fi. V-2/ La structure case-in-esac. VI/ LES BOUCLES: VI-1/ La construction for-in-do-done. VI-2/ La construction while-do-done. VI-3/ La construction until-do-done. VI-4/ Sortie d’une boucle. (Break) VI-5/ Saut vers la fin d’une boucle.(continue) VI-6/ La récursivité.² TAYARI Lassaad Page 46 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Chapitre 5 PROGRAMMATION STRUCTUREE DANS LE SHELL I/TRANSMISSION DE PARAMETRES: Une commande SHELL peut travailler avec des arguments qui lui sont transmis lors de son appel via la ligne de commande: $commande param1 param2 ....... paramN Les paramètres de la commande sont référencés par/ $0 Nom de la commande $1 Premier paramètre $2 Deuxième paramètre $N N $# Nombre de paramètres $* Tous les paramètres $$ PID de processus ième paramètre II/GESTION DES SIGNAUX ET PROCESSUS: Durant l’exécution d’un processus, certains signaux concernant ce processus peuvent apparaître: Signal 0 Sortie du SHELL Signal 1 Déconnexion de terminal TAYARI Lassaad Page 47 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Signal 2 Interruption Signal 3 Quit Signal 9 Meurtre du processus Signal 15 Fin normal du processus A l’aide de la commande trap, l’utilisateur peut programmer exécution d’un traitement spécifique lorsque survient un signal. La syntaxe de la commande trap est: $trap `commande(s)` signal Exemple: Programmation de l’interruption à l’émission de ^T par l’utilisateur/ $stty intr ^T Programmation d’un programme utilisateur d’un trap qui tue le processus en cours suit à l’émission d’une interruption. $trap `kill -9 $$` 2 Arrêter le processus en cours exécuter les deux commandes suivantes. $ trap `ls -l ; date ` 2 Inhibition de l’interruption: $trap `` 2 III/LES TESTS DANS LE SHELL D’UNIX: A la fin de l'exécution d’une commande, un code de sortie (dénoté par ?) est positionné. Si la commande s’est bien exécutée (vrai), le code prend la valeur 0 (zéro), sinon (faux), il est différent de 0 (zéro). TAYARI Lassaad Page 48 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Exemple: $ls -l (commande juste) $echo $? 0 (execution OK) $ls -k (commande fausse) $echo $? 2 (exécution erronée) UNIX propose une procédure de TEST pour programmer une condition. Quatre types de test sont disponibles: tests sur les caractéristiques des fichiers tests de comparaison de fichiers tests sur les valeurs numériques tests sur les chaînes de caractères alphanumériques. III-1/ Tests sur les caractéristiques des fichiers. La syntaxe de base est: $test -option fichier où [ -option fichier ] Les différentes possibilités sont: test -f TAYARI Lassaad fichier : Vrai si fichier ordinaire Page 49 ISET DE NABEUL Cours Programmation structuré d’UNIX &C test -d fichier : Vrai si fichier répertoire test -r fichier : Vrai si fichier est accessible en lecture test -w fichier : Vrai si fichier est accessible en écriture. test -x fichier : Vrai si fichier est exécutable. test -c fichier : Vrai si fichier spécial (mode caractère) test -b fichier : Vrai si fichier spécial (mode bloc) test -s fichier : Vrai si fichier non nul Exemple: $test -r fichier où [ -r fichier ] $echo $? 0 III-2/ Tests de comparaison de fichiers. La syntaxe est: test fichier1 opérateur fichier2 où [ fichier1 opérateur fichier2 ] trois possibilités existent: test fichier1 -ef fichier2 : Vrai si les deux fichiers sont liés test fichier1 -nt fichier2 : Vrai si fichier1 est plus récent test fichier1 -ot fichier2 : Vrai si fichier2 est plus récent Attention ses trois tests ne sont pas disponibles sur toutes les versions d'UNIX. TAYARI Lassaad Page 50 ISET DE NABEUL Cours Programmation structuré d’UNIX &C III-3/ Tests sur les valeurs numériques. La syntaxe est : test valeur1 opérateur valeur2 où [ valeur1 opérateur valeur2 ] Les différentes possibilités sont: test val1 -eq val2 :Vrai si val1=val2 test val1 -ne val2 :Vrai si val1val2 test val1 -gt val2 :Vrai si val1>val2 test val1 -ge val2 :Vrai si val1val2 test val1 -lt val2 :Vrai si val1<val2 test val1 -le val2 :Vrai si val1val2 III-4/ Tests sur les chaînes de caractères. Deux types de syntaxes sont possibles: où test option test "chaine1" " chaîne " opérateur "chaine2" Les opérateurs possibles sont: test -z "ch1" : Vrai si la longueur de ch1 est nulle test -n "ch1" test "ch1" = "ch2" : Vrai si ch1 et ch2 sont identiques test "ch1" != "ch2" : Vrai si ch1 et ch2 sont différentes test "ch1" TAYARI Lassaad : Vrai la longueur de ch1 est non nulle : Vrai si ch1 est non nulle. Page 51 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Exemples: $a="ch1" $b="ch2" $test "$a" = "$b" $echo $? 1 $test "$a" != "$b" $echo $? 0 IV/ LES CONDITIONS COMPOSEES: Les opérateurs suivants peuvent êtres utilisés pour former des conditions composées: ! : La négation -a : Le ET binaire -o : Le OU binaire La condition composée doit être représentée de la manière suivante: \(condition\) Exemples: test ! -r fichier [ ! -r fichier ] est vrai si fichier n'est pas autorisé en lecture test \( -w fichier1 -a ! -x fichier2 \) vrai si fichier1 est autorisé en écriture et fichier2 n'est pas exécutable. TAYARI Lassaad Page 52 ISET DE NABEUL Cours Programmation structuré d’UNIX &C V/ LES STRUCTURES CONDITIONNELLES: Le SHELL est un langage de programmation. En effet, il supporte les variables, les structures conditionnelles et les boucles: V-1/ La structure if-then-else-fi. Le schéma de base de cette structure est le suivant: if liste_de_commandes then liste_de_commandes else liste_de_commandes fi si l'exécution de la première liste de commandes s'est bien déroulée, alors la deuxième liste sera exécutée, sinon la troisième sera exécutée. Remarques: La partie else est facultative Si les commandes de if sont séparées par ";", c'est la dernière commande qui sera testée. Si les commandes de if sont séparées par &&, alors elles sont toutes testées. Exemple: if commande1 && commande2 then liste_de_commandes else liste_de_commandes fi Si les commandes de if sont séparées par l'opérateur "||", il suffirait que l'une d'elles soit vraie pour passer à l'exécution des commandes de then. TAYARI Lassaad Page 53 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Exemple: if commande1 || commande2 then liste_de_commandes else liste_de_commandes fi Il est possible d'imbriquer des structures conditionnelles. La syntaxe est: if liste_de_commandes then liste_de_commandes else if liste_de_commandes then liste_de_commandes else liste_de_commandes fi fi ou encore: if liste_de_commandes then liste_de_commandes elif liste_de_commandes then liste_de_commandes else liste_de_commandes fi TAYARI Lassaad Page 54 ISET DE NABEUL Cours Programmation structuré d’UNIX &C Exemple: $cat >filetest if test -x $1 then echo "fichier $1 existe et est exécutable" else echo "fichier $1 n'existe pas ou n'est pas exécutable" fi Ce programme sert à identifier les fichiers exécutables. If test ! -s $1 then echo "fichier $1 n'existe pas" else if test -x $1 then echo "fichier $1 existe et est exécutable" else echo "fichier $1 existe mais n'est pas exécutable" fi fi V-2/ La structure case-in-esac. La structure case-in-esac permet d'effectuer un traitement spécifique selon la valeur de la variable test. La syntaxe est : case $variable in TAYARI Lassaad chaine1) commandes;; chaine2) commandes;; Page 55 ISET DE NABEUL Cours Programmation structuré d’UNIX &C . . chaineN) commandes;; esac La commande case compare la variable aux chaînes spécifiées et exécute les commandes relatives au chaînes qui correspondent. Exemple: choix d'un couleur parmi plusieurs: echo "choisir une lettre parmi R B N J" read choix case $choix in "R") echo "ROUGE";; "B") echo "BLEU";; "N") echo "NOIR";; "J") echo "JAUNE";; esac VI/ LES BOUCLES: VI-1/ La construction for-in-do-done. Cette construction permet de répéter le même traitement pour des valeurs différents d'une variable. Il y a autant de boucles que de valeurs. La syntaxe est : for variable in val1 val2 val3 ...... valN do TAYARI Lassaad Page 56 ISET DE NABEUL Cours Programmation structuré d’UNIX &C commande1 commande2 . commandeN done Les valeurs que peut prendre la variable peuvent être des paramètres, exemple $1, $2,...., ou le paramètre global $*. Exemples: test sur la permission en exécution pour 3 fichiers. $Cat >exec for fichier in fichier1 fichier2 fichier3 do [ -x $fichier ] echo $? done Ce test peut être paramètré pour agir sur un nombre illimité de fichiers. for fichier in $* for fichier do do [ -x $fichier ] [ -x $fichier ] echo $? echo $? done TAYARI Lassaad done Page 57 ISET DE NABEUL Cours Programmation structuré d’UNIX &C VI-2/ La construction while-do-done. Cette boucle exécute une suite de commandes tant qu'une condition est vrai. La syntaxe est: while condition do commande1 commande2 . . commandeN done Donc tant que la condition est vraie, exécuter les commandes. La condition peut être simple ou composée. Exemples: Programmation d'un compteur: $cat compteur compteur=1 while test $compteur -le 20 TAYARI Lassaad Page 58 ISET DE NABEUL Cours Programmation structuré d’UNIX &C do echo $compteur compteur=` expr $compteur + 1 ` done Affichage des utilisateurs toutes les minutes: $cat >qui while true ( où while : ) do who sleep 60 done ^d $sh qui& VI-3/ La construction until-do-done. Cette construction permet de répéter une séquence de commandes jusqu'à ce que la condition soit vrai, c'est à dire quelle fonctionne a l'inverse de la boucle while-do-done. Sa syntaxe est: until condition do commande1 commande2 TAYARI Lassaad Page 59 ISET DE NABEUL Cours Programmation structuré d’UNIX &C . . commandeN done Donc, cette construction permet d'exécuter les commandes tant que la condition n'est pas satisfaite (condition fausse). La condition est testée la première. Exemples: Programmation d'un compteur: $cat compteur compteur=1 until test $compteur -gt 20 do echo $compteur compteur=` expr $compteur + 1 ` done VI-4/ Sortie d’une boucle. (Break) L'utilisation de l'expression while true ou while : permet de conduire a une boucle infinie. Pour quitter cette boucle, on peut utiliser la commande break[n] où n est le nombre de niveaux de boucles imbriquées à sauter (1 par défaut) Exemple: Somme des notes d'un étudiant: TAYARI Lassaad Page 60 ISET DE NABEUL Cours Programmation structuré d’UNIX &C $cat>somme compteur=1 somme=0 while true do echo "entrez la $compteur ième note :" read note if test $note -eq 999 then break else compteur= ` expr $compteur +1 ` somme=` expr $somme + $note ` fi done echo "La somme est $somme" VI-5/ Saut vers la fin d’une boucle.(continue) Contrairement à la commande break, la commande continuee permet de sauter vers la fin d'une boucle sans la quitter forcement. Exemple: Déplacement des fichiers exécutables sur un nouveau répertoire "binaire". $Cat > copie mkdir binaire for fichier do TAYARI Lassaad Page 61 ISET DE NABEUL Cours Programmation structuré d’UNIX &C if test -x $fichier then cp $fichier binaire/$fichier echo " fichier $fichier sur binaire " else continuee fi done ^d $sh copie * VI-6/ La récursivité. Une procédure est dite récursive si elle fait appel à elle-même. Le paramètre $0 qui indique le nom de la procédure est très souvent utilisé. Exemple: Affichage de tous les sous-répertoires de l'utilisateur: $cat > repliste if [ -d $1 ] then echo "$1 est un répertoire" for j in $1/* do $0 $j done TAYARI Lassaad Page 62 ISET DE NABEUL Cours Programmation structuré d’UNIX &C fi ^d TAYARI Lassaad Page 63 ISET DE NABEUL Cours Les filtres d’UNIX &C Chapitre 6 LES FILTRES Objectif: Connaître et manipuler les différentes techniques de recherche, d'organisation et d'accès aux données se trouvant dans le système de fichier (fichiers et répertoires). Prérequis: Les chapitres précédents de ce cours d’UNIX. Plan I/ La commande grep: (recherche dans le texte) II/ la commande sort: (tri et fusion) III/ La commande find: (recherche de fichiers) IV/ La commande awk: (balayage dans le texte) IV-1/ Les variables prédéfinis de awk IV-2/Les opérateurs et fonctions pré-définies de awk IV-3/ Les modèles de awk IV-4/ Les structures de contrôle de awk V/ Conclusion TAYARI Lassaad Page 59 ISET DE SFAX ~ A.U 97/98 Cours Les filtres d’UNIX &C Chapitre 6 LES FILTRES I/ LA COMMANDE GREP: (RECHERCHE DANS LE TEXTE) La commande grep permet la recherche, dans un ou plusieurs fichiers, des lignes qui correspondent à une séquence donnée. Sa syntaxe est: $grep [-option] séquence [fichier(s)] Parmi les options de grep: -v : Affichage des lignes qui ne contiennent pas la séquence. -c : Affichage du nombre d'occurrence. -l : Affichage des noms de fichiers contenant la séquence. -n : Chaque ligne affichée est numérotée. -y : Confondre les minuscules et les majuscules. Exemples: 1- recherche du mot "amitié" dans le fichier humanite $grep amitié humanite $grep -v amitié humanite $grep -n amitié humanite 2- savoir si l'utilisateur user2 est connecté: TAYARI Lassaad Page 60 ISET DE GABES Cours Les filtres d’UNIX &C $who|grep user2 La commande grep supporte les métacaractères: Caractères spéciaux Signification [.......] identification d'une plage pour une série de caractères. [^......] négation de la plage indiquée. . n'importe quel caractère y compris l'espace * caractère de répétition, agit sur le caractère précèdent. ^ symbolise un début de ligne dans un critère de recherche. $ matérialise la fin de le ligne \{.......\} caractère de répétition. Entre les accolades vous pouvez définir librement le nombre de survenances possibles pour le caractère précèdent. Exemples: 1- Trouver et afficher toutes les lignes du fichier timbre commençant par une majuscule. $grep '^[A-Z].*' timbre ou $grep '^[A-Z]\{1,\}' timbre 2- afficher les processus de tous les utilisateurs userx $ ps -f|grep user.* 3- afficher à partir du fichier /etc/passwd les utilisateurs qui commencent par les lettres 'a' jusqu'à 'e': $grep '^[a-e].*' /etc/passwd Exercice : Expliquez la commande suivante: $grep '^[a-e].*[:]$' /etc/.passwd La commande grep n'est qu'un membre d'une famille qui comprend deux autres commandes dérivées: egrep et fgrep. TAYARI Lassaad Page 61 ISET DE GABES Cours Les filtres d’UNIX &C Le programme fgrep recherche plusieurs séquences à la fois. Sa syntaxe est: ou fgrep -option expr_reg fgrep -option -f fichier(s) fich_expr fichier(s) Le programme egrep interprète des expressions régulières, utilisant les parenthèses et l'opérateur logique "ou". Sa syntaxe est la même que fgrep. Exemples: 1- recherche de deux mots dans le fichier "virus": $fgrep 'programmeur >programme' virus 2- Affichage des lignes de /etc/passwd contenant les utilisateurs userx et quelques utilisateurs IIX : $egrep 'user*|II[1-5]' /etc/passwd 3- affichage d'un mot et quelques dérivés: $egrep 'programm(es|e|ation)' virus II/ LA COMMANDE SORT: (TRI ET FUSION) Le programme sort à pour rôle de trier un ou plusieurs fichiers ligne par ligne. Le tri se fait sur la base de clés de tri qui peuvent êtres un ou plusieurs champs de la ligne ou une partie d'un champ. La syntaxe est: sort -option +pos1 -pos2 fichier_in -o fichier_out parmi les options de sort: TAYARI Lassaad Page 62 ISET DE GABES Cours Les filtres d’UNIX &C -r : tri en ordre inverse -n : tri en ordre numérique -d : seuls sont considérés l'alphabet, les chiffres et le "blanc" -u : suppression de tous les lignes doubles, sauf un. Pos1 et pos2 indiquent le début et la fin de la clé de tri et peuvent prendre le valeurs m ou m.n: + m.n est interprétée comme le (n+1)ème caractère du (m+1)ème champ -m.n est interprétée comme le nème caractère du m ème champs. Exemples: 1- tri des utilisateurs courants: $who|sort 2- tri en ordre croissant: du fichier "fich1": $sort -r fich1 3- tri et fusion de deux fichiers "fich1" et "fich2" sur le troisième champ. Le résultat est sauvegardé dans fich3. $Sort +2 fich1 fich2 -o fich3 4- tri des utilisateurs selon l'heure de connexion: $who |sort +4 Le tri peut se faire selon plusieurs clés de tri: un clé primaire (déclaré en premier lieu) et des clés secondaires (déclarés après le clé primaire. Exemple: TAYARI Lassaad Page 63 ISET DE GABES Cours Les filtres d’UNIX &C tri des processus en cours: le premier champ est le clé primaire et le deuxième est le clé secondaire. $ps -f|sort +0 +1 III/ LA COMMANDE FIND: (RECHERCHE DE FICHIERS) La commande find sert à parcourir l'arborescence des répertoires à la recherche des fichiers. Pour ce faire, il va falloir fixer des critères de recherche. La commande find parcourt les répertoires et leurs sous-repertoires de manière récursive, à la recherche de fichiers. Trois indication sont nécessaires a l'exécution de la commande find. 1- répertoire de recherche (spécification) 2- les critères de recherche à mettre en oeuvre 3- comportement si un fichier répond aux critères. La syntaxe de la commande find est la suivante: find répertoires [critères _de_séléction] [option_de_commande] Si aucune indication n'est faite, la commande find recherche tous les fichiers. Il est possible de mentionner des options de recherche pour limiter la recherche. Si cette commande à trouvée un fichier correspondant au critère, il est traité par les options de commande. On peut utiliser -print, -exec et -ok. TAYARI Lassaad Page 64 ISET DE GABES Cours Les filtres d’UNIX &C Les options de choix utilisables pour la recherche sont: OPTION SIGNIFICATION -name fichier recherche par nom de fichier -type type recherche par type de fichier -user nom recherche par propriétaire -group nom recherche par groupe -size nombre recherche par taille -atime jour recherche par date du dernier accès -mtime jour recherche par date de dernière modification -ctime jour recherche par date de création -perm droit recherche par droit d'accès -lien nombre recherche par nombre de lien Pour toutes les options en dehors de -name, -type, -user, -group et -perm, les nom d'options sont complétés par des valeurs. Ces chiffres peuvent aussi êtres précédés des signes "+" ou "-". "+" signifie "supérieur à". "-" signifie "inférieur à". Exemple: pour trouver tous les fichiers de répertoire /work ayant plus de quatre liens: $find /work -lien +4 -print L'option -exec introduit une commande qui sera exécuté si un fichier correspondant au critère de sélection est trouvé: TAYARI Lassaad Page 65 ISET DE GABES Cours Les filtres d’UNIX &C Attention ! ! La commande placée derrière -exec doit se terminer par "/;". si on veut accéder, dans la commande placée derrière -exec, au fichier qui vient d'être trouvé, on doit utiliser l'abréviation {}. Exemple: Si on veut exécuter ls -l pour chaque fichier trouvé: $find . -user user3 -exec ls -l {}\; Pour l'option de commande -ok, on applique la même syntaxe que pour -exec. Mais dans cas, il sera demandé si on souhaite exécuter cette commande. Si la réponse est "y", la commande find exécute la commande qui suit l'option -ok. Exemple: $find . -ok rm{}\; <rm................>?n Si plusieurs options sont spécifiés, elles sont censées êtres liées par un lien logique/ ! pour la négation logique -a pour le ET logique -o pour le OU logique Exemples: 1- Afficher tous les fichiers qui sont soit des répertoires soit dont le nom termine par "ier", à partir du répertoire actif: $find . \(-type d -o -name "*ier"\) - print 2- Afficher tous les répertoires placés sous le répertoire actif et commençant par une minuscule: $find . -name "[a-z]*" -type d -print ou $find . \(-name "[a-z]*" -a -type d\) -print TAYARI Lassaad Page 66 ISET DE GABES Cours Les filtres d’UNIX &C 3- Afficher tous les fichiers ayant une taille supérieure à 400 blocs (200 ko) $find . -type f -size +400 -print 4- Afficher tous les fichiers appartenant a user2. La recherche est effectuée dans le répertoire /dev et /usr/user2. $Find /dev /usr/user2 -user user2 -exec ls -l {]\; IV/ LA COMMANDE awk: (BALAYAGE DANS LE TEXTE) L'utilitaire awk lit ligne par ligne dans un fichier spécifié ou par le canal d'entrée standard. Chaque ligne est subdivisée en champs. La syntaxe de base est: awk 'programme' fichiers ou awk -f progfile fichiers Si le programme est lu à partir d'un fichier, le programme est un ensemble de conditions et d'actions écrites de la façon suivante: condition1 {action1} condition2 {action2} . . . . . . conditionN {actionN} Le module awk traite les fichiers en entrée article par article. Chaque ligne est comparée aux différentes conditions du programme. Si la séquence est vraie, alors l'action est exécutée. IV-1/ Les variables prédéfinis de awk Le programme awk divise automatiquement chaque ligne en champs qui sont normalement délimités par des "blancs" ou <TAB>. Ces champs auront pour noms TAYARI Lassaad Page 67 ISET DE GABES Cours Les filtres d’UNIX &C $1,$2,......,$NF. La constante $0 se réfère à l'article entier. Les différentes variables de awk sont: VARIABLE SIGNIFICATION FILENAME nom du fichier en entrée courant FS séparateur de champs des articles en entrée. NF nombre de champs des articles en entrée NR nombre des articles en entrée RS séparateur d'articles en entrée OFS séparateur de champs des articles en sortie ORS séparateur d'articles en sortie IV-2/Les opérateurs et fonctions pré-définies de awk Les conditions du programme awk peuvent êtres des expressions régulières, comme c'est le cas de grep et egrep, ou des conditions composées avec l'utilisation d'opérateurs divers, de fonctions prédéfinies et de structures conditionnelles semblables à ceux du langage C (if, while, do, for, break, continue...). Par exemple, la structure suivante: $awk '/expression régulière / {print}' fichiers Permet de parcourir les fichiers citées et d'afficher chaque ligne qui comprend l'expression mentionnée. Si l'expression est omise, toutes les lignes seront affichées. Si l'action est omise, c'est l'action print qui sera prise par défaut. Les opérations utilisées sont les même que celles utilisé dans le langage C. Les fonctions pré-définies de awk sont multiples. Les plus utilisées sont: TAYARI Lassaad Page 68 ISET DE GABES Cours Les filtres d’UNIX &C FONCTION DESCRIPTION index(seq1,seq2) donne la position de se2 dans seq1 length(seq) donne la longueur en caractères de seq split(seq,a,fs) divise la séquence seq en n éléments de tableau a[1], a[2],.....,a[n] et où fs est le séparateur de champs (FS par défaut). La valeur de n est donnée en sortie. substr(seq,m,n) donne les n caractères de la sous-séquence de seq qui commence à la position m. getline lecture de la ligne suivante. Exemples: 1- Subdivision du résultat de who en plusieurs champs et affichage des noms triés, date et nombre des champs: $who|awk '{print $1,$NF,NF}' |sort 2- Affichage des lignes du fichier fich1 qui contiennent un nombre impair de mots: $awk 'NF%2!=0 {print $0}' fich1 3- Affichage des lignes de fich1 qui dépassent les 75 colonnes: $awk 'length>75 {print}' fich1 4- Affichage des caractères indésirables pour les lignes qui dépassent les 75 colonnes: $cat fichprg length > 75 {print "résidu ligne ", NR,, substr($0,75,NR)} ^d $awk -f fichprg fich1 IV-3/ Les modèles de awk TAYARI Lassaad Page 69 ISET DE GABES Cours Les filtres d’UNIX &C awk à une multitude de possibilités permettant de former des modèles de sélection de ligne. On distingue quatre formes possibles: critère vide critère fixe comparaison critère de recherche a- critère vide: utilisé à chaque fois qu'on souhaite appliquer une action à l'ensemble des lignes. Il suffit d'omettre le critère devant l'accolade ouverte de l'action. b- critère fixe: Il y a deux critère BEGIN et END. Les actions liées à ces critères sont exécutés avant la lecture de la première ligne ou après la lecture de la dernière ligne du fichier. Exemple: $awk ' BEGIN { print "début de traitement" } { print $1,$3 } END { print "fin de traitement" } ' fich1 TAYARI Lassaad Page 70 ISET DE GABES Cours Les filtres d’UNIX &C c- comparaison: Un critère peut contenir une expression, donc des opérations de comparaison. (les mêmes opérateurs que le langage C.) Exemple: $awk ' $2>=5 {print $1,$2}' fich1 d- critère de recherche: Pour la recherche, awk utilise des méta caractères. Ces méta caractères sont les mêmes que celles de grep, mais placés entre back slash. Exemple: $awk ' /[0-9]/1[0-9]/ {print } ' fich1 IV-4/ Les structures de contrôle de awk awk dispose d'une série de structures de contrôle concernant: les décisions les boucles les sauts contrôlés. a- les décisions:( le if ) même syntaxe que pour le langage C. Exemple: $awk ' ...... . NF==7 { if($2=="") { TAYARI Lassaad Page 71 ISET DE GABES Cours Les filtres d’UNIX &C print $1 "message" } } ......... ' fichier b- les boucles: trois boucles sont possibles: while, do-while et for même syntaxe que pour le langage C. Exemples: utilisation de while: $awk ' { i=NF while (i>0) { print $i i=i-1 (ou i--) } } ' fichier utilisation de for $awk ' { TAYARI Lassaad Page 72 ISET DE GABES Cours Les filtres d’UNIX &C for(i=NF;i>0;i--) { print $i } } ' fichier c- les sauts contrôlés: Pour le contrôle des boucles: on utilise les instruction break et continue (comme pour le langage C. Pour le contrôle du programme : on utilise next :Demande à awk d'interrompre le traitement de la ligne active et de lire immédiatement la ligne suivante. exit :Termine le programme. Attention !!! Dans tous les cas, les actions de la critère fixe END seront exécutés et le programme ne sera abandonné qu'après. TAYARI Lassaad Page 73 ISET DE GABES