Introduction `a UNIX
Transcription
Introduction `a UNIX
Introduction à UNIX Vincent Roca Université Pierre et Marie Curie (Paris6) LIP6 - CNRS, thème Réseaux et Performances 8, rue capitaine Scott; 75015 Paris; FRANCE téléphone: (+33) 1.44.27.75.14; fax: (+33) 1.44.27.87.32 [email protected]; http://www-rp.lip6.fr/∼roca Version 1.4c, novembre 1999 Résumé: Ce document est une introduction à l’utilisation d’un système Unix. Au dela des commandes usuelles, nous introduisons également les principales notions sous-jacentes. Ainsi nous espérons permettre une compréhension en profondeur de ce système et de sa mise en oeuvre. En revanche ce document n’a pas pour objectif d’être un guide d’administration Unix. 2 Copyright (c) 1999 Vincent Roca; all rights reserved Ce texte est copyrighté et n’est pas dans le domaine public. Sa reproduction est cependant autorisée à condition de respecter les conditions suivantes : • Si ce document est reproduit pour les besoins personnels du reproducteur, toute forme de reproduction (totale ou partielle) est autorisée. • Si ce document est reproduit dans le but d’être distribué à de tierces personnes il devra être reproduit dans son intégralité sans aucune modification. Cette notice de copyright devra donc être présente. De plus il ne devra pas être vendu. Cependant, dans le seul cas d’un enseignement gratuit, une participation aux frais de reproduction pourra être demandée, mais elle ne pourra être supérieure au prix du papier et de l’encre composant le document. Toute reproduction sortant du cadre précisé ci-dessus est interdite sans accord préalable de l’auteur. Contents 1 Introduction 1.1 Historique . . . . . . . . . . . . . . . 1.2 La fondation FSF et le projet GNU . 1.2.1 La fondation FSF . . . . . . 1.2.2 Le projet GNU . . . . . . . . . . . . . . . . . . . . 5 6 7 7 7 2 Gestion des utilisateurs 2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Les fichiers /etc/passwd et /etc/group . . . . . . . . . . 2.1.2 Choisir un bon mot de passe . . . . . . . . . . . . . . . 2.1.3 Le fichier /etc/shadow . . . . . . . . . . . . . . . . . . . 2.1.4 La gestion centralisée des utilisateurs: NIS et NIS+ . . 2.2 Commandes UNIX . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Lancer une nouvelle session sur la machine locale . . . . 2.2.2 Lancer une nouvelle session sur une machine distante: la 2.2.3 Obtenir ou changer ses caractéristiques . . . . . . . . . 2.2.4 Informations sur les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . connexion à distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 10 11 11 12 12 12 12 13 13 3 Système de fichiers 3.1 Formattage, partition et système de fichiers . . 3.1.1 Formattage . . . . . . . . . . . . . . . . 3.1.2 Partition . . . . . . . . . . . . . . . . . 3.1.3 Système de fichiers local . . . . . . . . . 3.2 L’arborescence de fichiers UNIX . . . . . . . . 3.3 Système de fichiers distant: NFS . . . . . . . . 3.4 Propriétaire et droits d’un fichier . . . . . . . . 3.4.1 Principes généraux . . . . . . . . . . . . 3.4.2 Droits d’accès appliqués à un répertoire 3.5 Notion de quotas . . . . . . . . . . . . . . . . . 3.6 Commandes Unix . . . . . . . . . . . . . . . . . 3.6.1 Chemins relatifs et absolus . . . . . . . 3.6.2 Gestion des répertoires et fichiers . . . . 3.6.3 Informations sur les systèmes de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 16 16 16 16 16 17 18 18 19 19 20 20 20 20 4 Le Shell 4.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Lequel choisir ? . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Notions de variables et d’environnement . . . . . . . . . . 4.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Quelques variables d’environnement . . . . . . . . 4.4 Configuration de l’environnement . . . . . . . . . . . . . . 4.4.1 Fichier /etc/profile commun en ksh ou bash . . . . 4.4.2 Fichiers de configuration en ksh ou bash . . . . . . 4.4.3 Fichiers de configuration en csh ou tcsh . . . . . . 4.5 Quelques fonctionnalités utiles de sh et ses successeurs . . 4.5.1 Les métacaractères ou caractères de remplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 24 25 25 25 25 26 26 27 27 28 28 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 CONTENTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 29 29 30 30 30 31 32 32 33 5 Systèmes de fenêtrage 5.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Les “window managers” . . . . . . . . . . . . . . . . . . . . . . . 5.3 Configuration d’un système de fenêtrage . . . . . . . . . . . . . . 5.3.1 Lancement de l’environnement graphique . . . . . . . . . 5.3.2 Configuration de l’espace de travail en mode automatique 5.3.3 Configuration de l’espace de travail en mode manuel . . . 5.3.4 Configuration du “window manager” . . . . . . . . . . . . 5.3.5 Configuration des applications . . . . . . . . . . . . . . . 5.3.6 Configuration du clavier . . . . . . . . . . . . . . . . . . . 5.3.7 Configuration de xterm . . . . . . . . . . . . . . . . . . . 5.4 Sécurité sous X Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 36 36 36 36 37 37 37 38 38 39 40 40 40 6 Quelques outils 6.1 man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 La commande info de GNU . . . . . . . . . . . . . . . . . . . . 6.3 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 cpio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 compress/uncompress et gzip . . . . . . . . . . . . . . . . . . . 6.7 L’outil d’archivage/compression zip/unzip . . . . . . . . . . . . 6.8 Les Mtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.9 Bilan sur l’utilisation des disquettes . . . . . . . . . . . . . . . 6.10 head et tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.11 wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.12 diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.13 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.14 Editeur vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.15 Editeur emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.16 a2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.17 ghostview et acroread . . . . . . . . . . . . . . . . . . . . . . . 6.18 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.19 ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.20 Les commandes “remote” . . . . . . . . . . . . . . . . . . . . . 6.21 Le service de messagerie . . . . . . . . . . . . . . . . . . . . . . 6.21.1 Format des adresses mail . . . . . . . . . . . . . . . . . 6.21.2 Format des messages . . . . . . . . . . . . . . . . . . . . 6.21.3 Ajout d’une signature . . . . . . . . . . . . . . . . . . . 6.21.4 Transférer des fichiers binaires avec uuencode/uudecode 6.21.5 Les extensions du service de messagerie . . . . . . . . . 6.21.6 Les messages de taille (très) importante . . . . . . . . . 6.22 Le débugger gdb et ses extensions xxgdb et ddd . . . . . . . . . 6.23 LATEX: un outil de formatage de documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 44 44 44 45 45 46 46 46 47 47 47 47 47 48 49 49 49 49 50 50 51 52 52 52 52 53 53 53 53 4.6 4.7 4.5.2 La substitution de commandes . . . . . . . . . . . . . . 4.5.3 Bilan sur l’utilisation des différents caractères quote . . 4.5.4 La notion d’alias . . . . . . . . . . . . . . . . . . . . . . 4.5.5 Redirection des E/S standards . . . . . . . . . . . . . . 4.5.6 Exécution à la chaine . . . . . . . . . . . . . . . . . . . 4.5.7 Exécution en séquence . . . . . . . . . . . . . . . . . . . 4.5.8 Exécution en premier plan ou arrière plan . . . . . . . . 4.5.9 La gestion des processus/jobs . . . . . . . . . . . . . . . 4.5.10 Accès à un historique et profile de l’interface utilisateur Ecriture de scripts . . . . . . . . . . . . . . . . . . . . . . . . . Aller plus loin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter 1 Introduction 5 6 CHAPTER 1. INTRODUCTION 1.1 Historique Unix a une longue histoire. La chronologie suivante montre les différentes souches (lignées) ainsi que leurs principales versions : Les deux souches Unix principales La souche originelle des Bell Labs 1969 1ère version par Thomson et Ritchie (1969) : Philosophie : (1) “small is beautifull” (on favorise les petits fichiers, petits blocs, etc.) (2) “building blocks” (3) “keep it simple and stupid” (algorithmes simples dès que possible) (4) on fait le moins de traitements possibles dans le noyau. 1971 Version 1 1972 Version 2 1973 Unix réécrit en C 1974 Version 5 1975 Version 6 1978 Version 7 La souche AT&T 1981 System III 1983 System V 1985 System V R2.0 1986 System V R2.1 1987 System V R3 1989 System V R4.0, fusion des souches System V et SunOS 4.x System V R4.2 La souche de l’Université de Californie, Berkeley UNIX 32 V BSD 4.1 1983 BSD 4.2 (1983) 1986 BSD 4.3 (1986) 1988 BSD 4.3 Tahoe (1988) 1990 BSD 4.3 Reno (1990) 1993 BSD 4.4 (1993) Ces deux souches, SystemV et BSD, ont eu une très grande importance et les apports de chacune a fortement marqué le domaine. De nombreuses versions constructeur d’Unix dérivent soit de l’une, soit de l’autre. La souche de l’Open Software Foundation) C’est une souche industrielle issue du consortium OSF regroupant de nombreux constructeurs informatiques. Elle se voulait comme une alternative aux souches AT&T/BSD. Elle est technologiquement très avancée. 1990 OSF OSF OSF OSF 1.0 1.1 1.2 1.3 Souches libres issues de BSD Elles dérivent toutes deux de la souche BSD 4.4. • NetBSD 1.2 (1997) • FreeBSD 2.2 (1997) La souche NetBSD se voulait initialement multiplateformes (PC, Sun, Mac...). La souche FreeBSD était pour sa part orientée PC. Cette distinction n’est plus aussi vraie aujourd’hui. 7 1.2. LA FONDATION FSF ET LE PROJET GNU Souche Linux de Linus Torvalds; université d’Helsinky Développée indépendamment des souches AT&T et BSD. Elle est souvent qualifiée de “Unix like” car elle se conforme à la norme POSIX 1003.1. 1991 1994 1997 1999 Linux Linux Linux Linux 0.02 1.0 2.0 2.2 On distingue deux niveaux de maturité: • Les souches stables: ce sont des souches destinées à être utilisées par tous. Se reconnaissent par le deuxième chiffre de la version qui est pair (e.g. version 2.0.35). • Les souches de développement: ce sont des souches intermédiaires qui permettent le travail et l’intégration de nouvelles fonctionalités. Se reconnaissent par le deuxième chiffre de la version qui est impair (e.g. version 2.1.23). La durée de vie d’une telle souche est très faible afin de pouvoir avoir un noyau le plus à jour possible vis-à-vis des nouveaux développements. L’installation de Linux se fait par le biais de “distributions”, c’est-à-dire de packages contenant le noyau Linux, certaines applications, des outils d’installation, des fichiers de configuration légerement différents, etc. On trouve : • Slackware • SuSE • Debian (plus orientée développement) • RedHat (peut être la plus connue/installée, prévue pour une utilisation générale). Ainsi on ne confondra pas le niveau du noyau avec celui de la distribution (e.g. en octobre 1999, RedHat 6.1 incluant le noyau Linux 2.2.12). Si Linux est un Unix non commercial, en revanche les distributions le sont, mais à un tarif dérisoire ! 1.2 1.2.1 La fondation FSF et le projet GNU La fondation FSF La FSF (Free Software Fundation) a été fondée au début des années 80 par R. M. Stallman. Son but est le développement de logiciels libres, c’est-à-dire que l’on peut copier, modifier et redistribuer librement. La seule contrainte est que les sources de ces logiciels doivent être disponibles gratuitement pour quiconque en fait la demande. Ces logiciels peuvent être vendus mais c’est en pratique rarement le cas puisqu’il existe toujours un moyen légal de se les procurer gratuitement. 1.2.2 Le projet GNU GNU signifie “GNU is Not Unix” (définition récursive). Son but est de développer un système d’exploitation complet, distribué suivant les règles de la FSF, et distinct d’Unix (d’où son nom). Le projet a débuté avec la réalisation d’un éditeur, emacs. A suivi un compilateur C afin de pouvoir compiler le futur système, gcc. Depuis un certain nombre de personnes se sont jointes afin d’écrire toutes sortes d’utilitaires. Quelques réalisations majeures de GNU sont : emacs éditeur très puissant, personnalisable. Il existe des variantes telles que xemacs doté d’une interface graphique plus attrayante, pico-emacs qui est pour sa part allégé pour un chargement plus rapide. . . gcc compilateur C et C++. Extremmement utilisé pour de nombreuses architectures (PC, Sun, SGI, etc.) et versions du systèmes Unix du fait de la qualité du code produit et de la facilité de prise en compte du jeu d’instruction d’un nouveau processeur. gdb débugger symbolique très puissant associé à gcc. De nombreuses commandes Unix (tar, awk, lex, yacc, find, ls, make, etc.) existent dans une version GNU et sont souvent plus puissants que la commande d’origine. Pour plus amples informations sur la FSF et le projet GNU, on se referera à [9]. 8 CHAPTER 1. INTRODUCTION Chapter 2 Gestion des utilisateurs 9 10 CHAPTER 2. GESTION DES UTILISATEURS 2.1 2.1.1 Principe Les fichiers /etc/passwd et /etc/group Ces fichiers ont les droits suivants : -rw-r--r--rw-r--r-- 1 root 1 root sys sys 2242 Jul 30 13:48 /etc/passwd 347 Jul 8 16:09 /etc/group Le fichiers /etc/passwd À chaque utilisateur sont associés des attributs permettant une identification précise et donnant des informations contextuelles (nom complet, voir localisation) et administratives (répertoire principal, shell, etc.). Ces informations sont regroupées dans le fichier /etc/passwd. Exemple : roca:vFId6pGw5.rAc:50164:50056:Vincent Roca:/home/roca:/usr/bin/ksh • Le premier champ d’une ligne de /etc/passwd est le nom de login (huit caractères maximum). • Le deuxième champ, d’une longueur de 13 caractères, est construit à partir du mot de passe crypté de l’utilisateur. Lors d’une connexion, le mot de passe fourni est utilisé pour refaire le calcul et le résultat comparé à celui contenu dans ce champ. Des attributs supplémentaires permettent éventuellement de limiter dans le temps la validité d’un mot de passe. Il est possible à l’administrateur d’invalider toute tentative de connexion en remplissant ce champ avec un mot invalide (“*” par exemple). • Chaque utilisateur possède un numéro d’identification (UID ou User IDentifier). Ici : 50164. L’interêt de distinguer l’identification par nom de login et par UID est de permettre un stockage compact de l’information. Ainsi à chaque fichier est associé l’UID de son propriétaire et non son login. • Un utilisateur appartient à un groupe lui même caractérisé par un numéro de groupe (GID, ou Group IDentifier). Ici : 50056. • Vient ensuite un champ textuel donnant des informations supplémentaires sur l’utilisateur (nom complet en général). • Puis on trouve le répertoire principal de l’utilisateur, ici /home/roca. • Enfin on trouve le shell lancé lors de la connexion, /usr/bin/ksh (voir chapitre 4). Le fichier /etc/group Les groupes sont déclarés dans le fichier /etc/group. Exemple : bin::1:root,bin,daemon sirac::50056: ecrins::50057:roca Tout utilisateur possède un groupe par défaut (celui précisé dans /etc/passwd). Un utilisateur peut en changer (commande newgrp) à condition d’y être autorisé. Ainsi l’utilisateur roca pourra passer de son groupe d’origine, sirac, au groupe ecrins. Il aura ainsi accès aux fichiers accessibles au groupe ecrins. Sur certains systèmes, e.g. NetBSD, la commande newgrp a disparu au profit d’un système implicite. Un utilisateur pourra accéder directement à tous les fichiers accessibles à partir de l’un quelconque des groupes auxquels /etc/group l’autorise. 11 2.1. PRINCIPE Les utilisateurs particuliers Il existe des utilisateurs particuliers : Nom root deamon bin sys adm lp UID 0 1 2 (SysV) ou 3 (BSD) 3 (SysV) 4 (SysV) ou 3 (BSD) 71 (SysV) ou 9 (BSD) Rôle super-utilisateur utilisateur fictif des démons (rarement utilisé en pratique) propriétaire de /bin et /usr/bin utilisateur système propriétaire des fichiers de log impression Le compte root est le plus célèbre et son UID est 0 sur tous les systèmes. Il a accès à toutes les ressources de la machine et à tous les fichiers d’administration. Il peut créer et modifier les comptes utilisateurs (le mot de passe en particulier). Certains de ces utilisateurs sont sinon fictifs et ne permettent pas la création d’une session (le champ passwd crypté contient “*”). 2.1.2 Choisir un bon mot de passe Logiciels de craquage de mots de passe Le logiciel Crack tente de craquer les mots de passe utilisateurs. Il exploite des dictionnaires sur différents thêmes, construit de faux mots de passe en leur appliquant des variations (majuscules, suffixes, renversements, etc.), les chiffre, puis compare le résultat avec les mots de passe chiffrés des utilisateurs. Il construit peu à peu sa propre base de mots de passe chiffrés afin d’accélerer les traitements la fois d’après. Efficacité : sur un fichier de 403 mots de passe (réels), Crack a trouvé 100 mots en 40 heures sur un Sun Sparc10/40[2]. Technique pour choisir son mot de passe Il existe deux règles : • Sept caractères au minimum, huit caractères de préférence (la puissance des machines permet un crackage brutal des mots de passe plus courts). Les éventuels caractères supplémentaires sont ignorés. • Choisir une phrase et prendre les premières lettres des mots, la ponctuation, etc. Exemple : la phrase “Maitre Corbeau, que vous me semblez beau.” donnera le mot de passe MC,qvmsb. On évitera cependant les phrases trop célèbres qui pourraient être elles aussi connues des logiciels de craquage (et de ce point de vue l’exemple est très criticable !). 2.1.3 Le fichier /etc/shadow Les logiciels de craquage ont besoin de connaitre les mots de passe chiffrés des utilisateur. Ceci est aisé sur les anciens systèmes puisque le fichier /etc/passwd contient ces informations et est lisible par tous. Pour améliorer la sécurité, sur les nouveaux systèmes, ce fichier est découpé en deux : • /etc/passwd que tout utilisateur peut continuer de consulter mais qui ne contient plus les mots de passe cryptés • /etc/shadow1 qui contient les mots de passe cryptés et qui ne peut être consulté que par le root. -r-------- 1 root sys 1117 Sep 12 14:48 /etc/shadow Cette technique réduit considérablement le risque de craquage brutal des mots de passe. 1 nom variant d’un système à un autre; s’appelle /etc/master.passwd sous FreeBSD 12 CHAPTER 2. GESTION DES UTILISATEURS 2.1.4 La gestion centralisée des utilisateurs: NIS et NIS+ NIS (Network Information Server) permet une gestion centralisée d’informations d’administration. Une machine privilégiée (dite “serveur NIS primaire”) maintient à jour les fichiers concernés (tel /etc/passwd mais pas seulement) et d’autres stations (dites “clients NIS”), membres d’un même groupe de machines (“domaine NIS”), consultent ces fichiers (“map NIS”). Puisque le serveur NIS est une machine critique, on crée des serveurs NIS secondaires qui peuvent répondre aux requêtes des clients en cas de problème du primaire. Exemple : lors d’un ls -l le système a besoin d’afficher en clair le login du propriétaire de chaque fichier à partir de son UID. Ceci nécessite une requête au serveur NIS qui répond en envoyant l’information voulue. La commande ls -l reprend alors son execution comme si l’information avait été lue dans /etc/passwd. 2.2 Commandes UNIX Les commandes UNIX relatives aux utilisateurs sont les suivantes : 2.2.1 Lancer une nouvelle session sur la machine locale login nom_de_login La commande login permet de lancer une session sous le nom d’un autre utilisateur. Procède par recouvrement2 . A la fin de la sous session, l’utilisateur est “délogé”. Les fichiers d’initialisation (voir chapitre 4) sont exécutés. su su nom_de_login su su - nom_de_login La commande su permet de lancer une session sous le nom d’un autre utilisateur (par défaut le root) sans se déloger. Au retour de la sous-session, on retombe sur la session initiale (à la différence de login). Sans l’option -, la session est créée sans exécuter les fichiers d’initialisation de l’utilisateur. À l’inverse, l’utilisation de l’option - permet de retrouver tout l’environnement de la session, de même que pour un login (par exemple on acquiert le répertoire HOME du nouvel utilisateur). 2.2.2 Lancer une nouvelle session sur une machine distante: la connexion à distance Les commandes rlogin et telnet ont le même but : permettre une connexion à distance (figure 2.1). Cependant leur origine est différente : rlogin Origine Berkeley. Connexion entre systèmes Unix seulement à l’origine, désormais porté sur d’autres systèmes. telnet Standard (RFC854) permettant la connexion entre systèmes hétérogènes. Propose de nombreuses options de contrôle de la communication. Dans la pratique peu de différences existent entre ces deux commandes. Notons que telnet permet de contacter un autre service que le démon telnetd en spécifiant son numéro de port TCP. Cette possibilité est très utilisé pour vérifier que tel service (correspondant au numéro de port) répond (c’est à dire que le démon associé est actif). Les autorisations de connexion sans mot de passe Il est possible d’autoriser des connexions à distance sans mot de passe. Pour cela il faut déclarer dans le fichier $HOME/.rhosts de la machine cible (soit “machine2” sur la figure 2.1) tous les couples (login, machine) autorisés à s’y connecter directement. L’utilisation de .rhosts sera nécessaire avec certaines commandes “remote” (voir chapitre 6). Exemple : 2 En fait login effectue un exec en interne d’où le recouvrement. 13 2.2. COMMANDES UNIX utilisateur machine1 session1 machine2 session2 telnet/rlogin Figure 2.1: Connexion à distance par rlogin ou telnet. $ more ~/.rhosts roca typhon.lip6.fr roca typhon Attention l’utilisation de ce mécanisme peut mener très loin (et sans que l’on soit au courant !) si la personne que l’on autorise à utiliser son compte autorise lui-même quelqu’un d’autre à faire de même etc. On préferera une technique telle que la création d’un groupe dédié si l’on veut permettre à un groupe d’utilisateurs de travailler conjointement sur un projèt. 2.2.3 Obtenir ou changer ses caractéristiques id who am i passwd (ou yppasswd si NIS est utilise) newgrp nouveau_groupe 2.2.4 who Informations sur les utilisateurs 14 CHAPTER 2. GESTION DES UTILISATEURS Chapter 3 Système de fichiers 15 16 CHAPTER 3. SYSTÈME DE FICHIERS 3.1 Formattage, partition et système de fichiers Un disque, plus généralement un support à accès direct, n’est pas de suite utilisable. Formattage (souvent fait d’origine), partitionnement et création d’un système de fichiers sont les trois étapes indispensables. 3.1.1 Formattage Cette étape consiste en la préparation du support physique. C’est ici que la géométrie du disque est précisée en termes de nombre de cylindres, nombre de têtes, nombre de secteurs et nombre de pistes. Cette étape est donc d’un très bas niveau et sera rarement mise en oeuvre par les utilisateurs. Une exception cependant est le formattage de bas niveau d’une disquette. Ceci peut se faire par la commande fdformat. Ce formattage permettra ensuite la création d’un système de fichier Unix sur la disquette (cf. ci-dessous). 3.1.2 Partition Une partition est un découpage logique du disque. Cela revient à découper un disque physique en plusieurs disques virtuels indépendants. Une partition a donc une taille fixée une fois pour toute. Découper un disque en plusieurs partitions a de multiples avantages : • des tailles trop importantes sont difficiles à gérer (les sauvegardes automatiques sont souvent faites avec comme granularitée la partition) • permet d’éviter un débordement d’une partition à une autre (cloisonement entre partitions systèmes et utilisateurs) • permet de gérer les droits de lecture/écriture partition par partition (voir le fichier /etc/fstab ou équivalent) • permet d’installer plusieurs systèmes d’exploitation sur le disque dans des partitions différentes L’inconvénient est qu’une partition peut être pleine alors que les autres sont largement sous-utilisées ! La seule solution consiste alors à sauver le contenu des partitions, les détruire, et en créer de nouvelles ! Ou bien acheter un nouveau disque. . . Ou encore acheter un système AIX, HPUX. . . qui permettent une augmentation dynamique de la taille d’une partition :-) 3.1.3 Système de fichiers local Un système de fichiers (ou FS, “file system”) est une structure logique que l’on ajoute à chaque partition afin de permettre son exploitation (manipulation des blocs, stockage d’une arborescence de fichiers, notion d’“inode”, etc.). • Sur les systèmes BSD, le système de fichier habituel est FFS (“Fast File System”). UFS en est une évolution. • Sous Linux, le système de fichiers habituel est Ext2fs. • Sous Ouindoze, il y a plusieurs systèmes : FAT16, FAT32 3.2 L’arborescence de fichiers UNIX On trouvera généralement les répertoires suivants : / : Appelé racine. /bin : Contient les utilitaires et commandes indispensables. /dev : Contient les “devices”, ou fichiers spéciaux permettant d’accéder aux périphériques physiques (/dev/rmt* : lecteurs de bandes, /dev/fd* : lecteur de disquettes, disque etc.) et aux périphériques logiques (pseudo-terminaux, services réseaux TCP et UDP, etc.). /etc : Contient les fichiers de configuration tels que /etc/passwd, /etc/hosts. . . 17 3.3. SYSTÈME DE FICHIERS DISTANT: NFS /lib : Contient les bibliothèques (“library” en anglais) indispensables (fichiers *.a 1 ou *.so 2 ). /root : Répertoire principal de l’utilisateur “root”. /sbin : Contient les commandes d’administration indispensables. /tmp : Contient les fichiers temporaires créés par le système ou un utilisateur. Chacun y a accès et peut y déposer des informations. Cependant /tmp peut être réinitialisé à tout moment (par exemple lors du boot, tous les soirs, etc.). /usr : Contient les fichiers et commandes supposées non indispensables. Sans lui le système fonctionne mais n’est pas réellement utilisable. /usr/X11 : les librairies et commandes relatives au système de fenêtrage X11. Contient en particulier /usr/X11/bin (la plupart des utilitaires en mode graphique, “window managers”, jeux. . . ), /usr/X11/lib et /usr/X11/man. /usr/bin : les autres utilitaires et commandes. /usr/local : utilitaires et commandes additionnelles propres au site. Contient en général un grand nombre de choses très, très utiles ! A avoir absolument dans son PATH. /usr/lib : les autres bibliothèques. /usr/include : fichiers d’include C, *.h. /usr/sbin : les commandes d’administration un peu moins importantes. /var : Contient les fichiers temporaires gérés par le système ainsi que des fichiers de taille variable. /var/log : Contient les fichiers de “log”, c’est à dire les traces de tous les évenements étant survenus : problèmes, connexions, reboot. . . /var/spool : Contient le courrier, les impressions en cours, etc. /home ou /comptes ou /users : Contient les répertoires principaux des utilisateurs. Il fait souvent partie d’une partition indépendante. Cette arborescence, très incomplete, est donnée à titre d’exemple. Dans la pratique le type de système (SystemV versus BSD) influera, ainsi que les spécificités locales au site. Ainsi sur un système V (Solaris) on trouvera en plus : /usr/5bin : utilitaires et commandes pour un profil SystemV. /usr/ucb : utilitaires et commandes pour un profil BSD 3 . /usr/ucblib : Comme /usr/lib mais pour le profil BSD. /usr/ucbinclude : Comme /usr/include mais pour le profil BSD. 3.3 Système de fichiers distant: NFS Principes de NFS NFS (Network File System) est un système de fichiers permettant à une machine d’exploiter le disque d’une autre machine via le réseau. On distingue (figure3.1) : le client NFS : il s’agit de la machine accédant au système de fichiers distant, et le serveur NFS : il s’agit de la machine exportant un système de fichiers local à des machines distantes. Le bon fonctionnement de NFS nécessite que d’autres services soient opérationnels : • le réseau, puisque l’accès au système distant passe par le réseau, 1 bibliothèque statique, c’est à dire linkée avec l’executable lors de la compilation dynamique, c’est à dire linkée lors du lancement de l’executable 3 l’ordre d’apparition de /usr/ucb et /usr/5bin dans la variable PATH donnera le profil recherché 2 bibliothèque 18 CHAPTER 3. SYSTÈME DE FICHIERS machine1 - client NFS machine2 - Serveur NFS accès transparent à la partition /home distante partition /home connexion à travers le réseau Figure 3.1: Montage par NFS d’une partition. • la synchronisation des horloges des différentes machines collaborant à travers NFS (afin d’avoir une vue cohérente des dates de modification des fichiers4 ), • l’unicité des UID des utilisateurs entre les différentes machines afin de ne pas avoir de problèmes de droit d’accès5 . Un montage NFS nécessite par ailleurs que le serveur autorise le client à “monter” (terme technique) le système de fichiers distant localement (ficher /etc/exports pour les systèmes BSD). Notons aussi que le “point de montage” du FS distant au sein du FS local peut se faire à différents endroits. Ainsi il peut y avoir des différences dans l’arborescence des machines clientes. Montage NFS des répertoires principaux des utilisateurs Par défaut, un utilisateur ayant un compte sur les machines A et B aura un répertoire principal sur le disque de chacune des machines. Accéder aux fichiers qu’il a stocké sur B lorsqu’il se trouve sur A nécessitera l’emploi d’un outil de copie à travers le réseau (e.g. FTP, voir chapitre 6). Afin d’éviter ces problèmes et d’avoir une arborescence unique disponible quelle que soit la machine où l’on se trouve, on identifie un “serveur de HOMES”, i.e. une machine disposant d’un gros disque qui contiendra le répertoire principal de chaque utilisateur. Le système de fichiers associé est alors exporté vers toutes les machines distantes sur lesquelles travaillent les utilisateurs. Les avantages sont multiples : • plus de confort pour l’utilisateur qui retrouve tous ses fichiers quelle que soit la machine qu’il utilise, • une gestion centralisée de tous les comptes utilisateurs, très utile dans le cas des sauvegardes, Cela se paye en revanche par un temps d’accès un peu plus important, une charge réseau plus élevée, et l’impossibilité de travailler en cas de problème réseau. 3.4 Propriétaire et droits d’un fichier 3.4.1 Principes généraux $ ls -l *.ps -rw-rw-r-1 roca sirac 492518 Sep 3 12:12 Bourne.Shell.ps L’utilisateur propriétaire du fichier est “roca”. Il peut être changé avec la commande chown. Par exemple : chown truc_muche Bourne.Shell.ps Le groupe propriétaire du fichier est “sirac”. Il peut être changé avec la commande chgrp. Par exemple : chgrp ecrins Bourne.Shell.ps À chaque fichier sont associés des droits. Voici le résultat du listage de tous les fichiers (même cachés, c’est à dire commançant par un ”.”) du répertoire local : $ ls -la drwxr-xr-x drwxr-xr-x -rw-rw-r-4 C’est 5 I.e. 2 roca 14 roca 1 roca sirac sirac sirac 512 Sep 1024 Sep 492518 Sep 8 16:04 . 8 15:23 .. 3 12:12 Bourne.Shell.ps indispensable pour des outils tels que make qui reposent sur la comparaison des dates de modification. à l’UID 50056 des machines A et B correspond bien la même personne physique. 3.5. NOTION DE QUOTAS 19 Le d initial (resp. son absence) indique un répertoire (resp. un fichier). Chacun des trois groupes de trois caractères qui suit indique les droits qu’ont respectivement : • l’utilisateur (abbrégé par u, ou ”user”, dans la commande chmod), • les membres du groupe de l’utilisateur (abbrégé par g, ou ”group”, dans la commande chmod), et • tous les autres utilisateurs (abbrégé par o, ou ”others”, dans la commande chmod). Ces droits sont : r indique un droit de lecture. w indique un droit d’écriture. x indique un droit d’exéctution. La commande permettant leur modification est : chmod <u et/ou g et/ou o><+ ou -><r et/ou w et/ou x> fichier(s) Ainsi, pour enlever toute possibilité d’accès ‘a tout le monde en dehors de l’utilisateur pour le fichier Bourne.Shell.ps, on utilisera : chmod go-rwx Bourne.Shell.ps Ces droits étant stockés sous forme numérique par le système, il est également possible de rentrer ces valeurs par une suite de 1 à 3 digits octals6 . Chaque digit code les droits rwx: r correspond à 4 w correspond à 2 x correspond à 1 Il suffit alors de faire la somme des droits désirés pour respectivement l’utilisateur, le groupe, les autres. chmod 0640 Bourne.Shell.ps passe les droits en : -rw-r-----. 3.4.2 Droits d’accès appliqués à un répertoire Le même principe de droits s’applique également aux répertoires, la signification précise des droits étant la suivante : r autorise à lister le contenu du répertoire w autorise la création de fichiers (l’autorisation décriture pour un fichier déja existant est régie par les droits du fichier!) x autorise à rentrer dans le répertoire 3.5 Notion de quotas Les quotas permettent un partage équitable de l’espace disque entre les utilisateurs. On attribue à chacun une taille maximale d’occupation du disque. Un débordement est toléré pendant quelques jours. Au dela de ce délai, plus aucun fichier nouveau ne pourra être créé tant que l’utilisateur ne sera pas repassé sous son quota. Avantage par rapport à la technique consistant à avoir une partition par utilisateur : plus grande facilité d’administration (sauvegarde, configuration), de plus l’espace non utilisé par un utilisateur peut être mis à profit par un autre. 6 Il est en fait possible de spécifier un 4ème digit. Il permet de spécifier certaines propriétés qui dépassent le cadre de ce manuel. 20 CHAPTER 3. SYSTÈME DE FICHIERS 3.6 3.6.1 Commandes Unix Chemins relatifs et absolus Deux types de chemins existent: • absolue, c’est à dire spécifié à partir de la racine. Exemple : /usr/X11/bin/fvwm. • relatif, c’est à dire spécifié à partir de la position courante. Exemple : doc/cours/intro_unix.ps, ../../cours/tp. Le répertoire courant peut être désigné par “.” et le répertoire précédant par “..”. 3.6.2 Gestion des répertoires et fichiers mkdir nom_de_repertoire rmdir nom_de_repertoire cd cd cd cd cd cd nom_du_repertoire . .. ou bien cd ~ ~/nom_de_repertoire ~nom_d_utilisateur pwd ls ls ls ls ls -l -a -d -t mv ancien_nom nouveau_nom (convient pour renommer ou déplacer un fichier ou un répertoire) ln -s fichier_existant nouveau_lien cp fichier_original fichier_copie rm rm -f rm -r rm -rf Attention à : rm -rf * cat nom_fichier more nom_fichier 3.6.3 df df -k df . mount Informations sur les systèmes de fichiers (sur BSD) (sur Systeme V) 21 3.6. COMMANDES UNIX du du -k du -s du -ks * Exemples sous Linux $ df Filesystem /dev/hda3 /dev/hda6 1024-blocks Used Available Capacity Mounted on 437191 402157 12455 97% / 429352 379963 27215 93% /home On voit que se trouvent deux partitions seulement, toutes deux locales (visible par le nom des partitions en /dev/hda). Exemples sous Solaris $ df -k Filesystem /dev/dsk/c0t3d0s0 /dev/dsk/c0t3d0s3 /proc fd /dev/dsk/c0t3d0s4 swap meije:/comptes meije:/promethee kbytes used 24063 19495 239943 172855 0 0 0 0 163223 105903 55748 236 1918374 1253717 1837939 1582685 avail capacity 2168 90% 43098 81% 0 0% 0 0% 41000 73% 55512 1% 472820 73% 71461 96% Mounted on / /usr /proc /dev/fd /opt /tmp /comptes /promethee Cet exemple montre la présence de deux montages NFS (pour les répertoires utilisateurs), exportés par la machine meije. Les autres systèmes sont locaux (visible par la présence de /dev/dsk/). 22 CHAPTER 3. SYSTÈME DE FICHIERS Chapter 4 Le Shell 23 24 CHAPTER 4. LE SHELL 4.1 Principes Le shell est le premier processus d’une session. Sa nature est précisée dans le fichier /etc/passwd (cf. Chapitre 2). Il a deux rôles : • Interpréteur de commandes : Il constitue l’interface entre l’utilisateur et le système et permet, selon les shells : – l’écriture et l’éxecution des commandes, – l’accès à un historique, – l’édition de lignes de commandes, – la completion, – la gestion des entrées/sorties, – la création d’alias, – la gestion des jobs, etc. • Langage de programmation : Cette programmation peut se faire de façon interactive (en ligne) ou non (scripts, ou fichiers de commandes). Le shell possède de nombreuses fonctions de contrôle, commandes internes (builtin), mécanismes de substitution de paramètres, etc. Son fonctionnement en tant qu’interpréteur est le suivant : Ouverture des E/S standards entrée standard (stdin, ou fd=0), par défaut le clavier sortie standard (stdout, ou fd=1), par défaut l’écran sortie erreur standard (stderr, ou fd=2), par défaut l’écran Lecture sur l’entrée standard lecture de la commande jusqu’à la fin de ligne (\n) interpretation des méta-caractères et opérateurs Lancement de la commande recherche du nom de la commande à l’aide du PATH (path) en premier plan : fork()/exec(commande)/wait()/prompt en arrière plan : fork()/exec(commande)/prompt Exemple : /bin/sh attente... l’utilisateur tape "date" creation d’un clone /bin/sh attente... /bin/sh (fork) lancement de la commande (exec) fin (exit) /bin/date Figure 4.1: Utilisation de la commande date en premier plan. Pourquoi créer un nouveau processus pour éxecuter la commande ? • indépedance du shell vis à vis de la commande. En cas de plantage, le shell n’est pas affecté. • permet de lancer plusieurs commandes en tache de fond. NB: on ne peut pas revenir en arrière apres un exec. Le recouvrement est définitif. 25 4.2. LEQUEL CHOISIR ? 4.2 Lequel choisir ? De nombreux shells existent : sh (”Bourne shell”, Steve Bourne) shell historique dont l’avantage est d’être disponible sur tous les Unix. ksh (”Korn shell”) shell normalisé POSIX (P1003.2) et ISO (HP, Solaris). Puissant. C’est le shell par défaut sous Solaris. bash (”GNU Bourne again shell” de Brian Fox et Chet Ramey) ksh augmenté d’origine FSF, qui possède la complétion. C’est le shell par défaut sous Linux. Tester c’est adopter ! zsh (”Z shell”) Ksh du domaine public. Peu utilisé. csh (”C-shell”, Bill Joy) shell BSD, disponible sur tous les Unix, un peu plus puissant que sh, mais incompatible et insuffisant pour une utilisation courante (pas d’historique). tcsh (”Toronto C-shell”) version largement améliorée de csh, avec la complétion, shell tres utilisé. Un tableau comparatif pour l’utilisation de ces shells est donné ci-dessous. Il en ressort que sh est à préferer absolument pour l’écriture de scripts du fait qu’il est disponible sur toutes les machines, alors que bash ou tcsh sont à privilégier dans le cas d’une utilisation en tant qu’interface utilisateur. Shell sh ksh bash zsh csh tcsh 4.3 interface utilisateur très limitée bonne très bonne bonne moyenne très bonne programmation sûre, toujours disponible normalisée normalisée normalisée à déconseiller à déconseiller Notions de variables et d’environnement 4.3.1 Principe Le shell permet la définition de variables par : NOM_VARIABLE=valeur On pourra ensuite les référencer au sein du shell. En revanche, par défaut ces variables ne sont pas transmises aux processus créés par le shell. Pour qu’une variable puisse être transmise lors du execve (par exemple DISPLAY), il faut qu’elle fasse partie de l’environnement. Cela se fait en “exportant” ces dernières au moyen des commandes : export NOM_VARIABLE pour ksh setenv NOM_VARIABLE pour tcsh 4.3.2 Quelques variables d’environnement Les variables d’environnement permettent de parametrer son environnement de travail. Certaines ont des valeurs par défaut (initialisées dans le fichier de configuration commun par exemple). Toutes sont personalisables dans la théorie, mais en pratique mieux vaut réflechir avant :-) PATH : suite de chemins d’accès aux exécutables Exemple: PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11/bin:/usr/local/bin:. L’ordre des chemins dans cette variable est important puisqu’il détermine l’ordre de recherche. Ainsi, si deux versions d’une même commande existent, sera utilisée celle qui est trouvée en premier. La présence d’un “.” dans cette variable permet d’exécuter les commandes se trouvant dans le répertoire courant. Par contre il est préférable que le “.” se trouve après les répertoires systèmes pour des raisons de sécurité1 . 1 Il se peut en effet qu’un utilisateur mal intentionné a ît installé une version modifiée d’une commande usuelle telle que ls dans le répertoire /tmp. Tout utilisateur ayant un “.” avant /bin dans sa variable PATH et ayant fait un cd /tmp exécutera alors la fausse commande ls ! 26 CHAPTER 4. LE SHELL LD LIBRARY PATH : suite de chemins d’accès aux bibliothèques. Même syntaxe que PATH. MANPATH : suite de chemins d’accès aux manuels. Même syntaxe que PATH. HOME : chemin d’accès au répertoire initial de l’utilisateur. Répertoire par défaut pour cd USER : l’utilisateur courant PWD : répertoire courant. Positionné automatiquement par cd PS1 : prompt principal du shell en mode interpréteur. En général “$ ” pour un utilisateur, et “# ” sous root PS2 : prompt secondaire du shell en mode programmation TERM : type de terminal (essayer vt100 ou xterm en cas de problèmes avec un éditeur) DISPLAY : adresse de l’écran. Le format de la variable est <nom de la station>:<numero d’ecran>[.0] EDITOR ou VISUAL : éditeur par défaut à utiliser (vi, emacs, etc.) PRINTER : imprimante par défaut et bien d’autres encore. . . On pourra visualiser les valeurs courantes d’une variable ou de toutes les variables par : env echo $PATH 4.4 Configuration de l’environnement Elle se fait à deux endroits différents : • dans des fichiers de configuration communs gérés par l’administrateur, et • dans des fichiers de configuration individuels gérés par l’utilisateur. La localisation et la syntaxe de ces fichiers dépend du shell choisit. 4.4.1 Fichier /etc/profile commun en ksh ou bash Ce fichier d’initialisation commun est un point de passage obligé pour tous les logins. On y définit des variables d’environnement à très longue durée de vie. Il est fourni par le constructeur et adapté par l’administrateur aux spécificités locales. Il n’est pas modifiable par l’utilisateur. Exemple : # positionne les droits des nouveaux fichiers a 0777 - 027 # soit 0750 (rwxr-x---). umask 027 USER=‘logname‘ # chemins minimaux pour les commandes et les manuels. PATH=/usr/local/bin:/usr/ucb:/bin:/usr/bin:/usr/X11/bin MANPATH=/usr/local/man:/usr/man:/usr/lang/man MAIL=/var/spool/mail/$USER # nom de la machine et de l’OS. HOSTNAME=‘uname -n‘ OS=‘uname -s‘ REL=‘uname -r‘ OSREL=${OS}${REL} export USER PATH MANPATH MAIL HOSTNAME OS REL OSREL 4.4. CONFIGURATION DE L’ENVIRONNEMENT 4.4.2 27 Fichiers de configuration en ksh ou bash Il s’agit du fichier $HOME/.profile. Il contient les initialisations propres à l’utilisateur. On peut y : • redéfinir (ou étendre) des variables proposées par /etc/profile (bien réfléchir avant !) • définir de nouvelles variables : export VARIABLE=valeur • exécuter des commandes et scripts d’initialisation (exemple: modification des droits d’accès par défaut avec umask ) Pour prendre en compte des modifications du .profile, il faut alors : • soit sortir de la session et se loger de nouveau, • soit “ressourcer” le fichier par l’une des commandes : source .profile . .profile . ~/.profile Exemple de .profile : export PATH=$PATH:$HOME/bin:. # nouveaux chemins personnels export DISPLAY=:0 export PRINTER=lB110 # imprimante par defaut alias ll=’ls -l’# quelques alias utiles alias la=’ls -la’ umask=077 # donc: 0777 - 0077 donne les droits 0700, soit rwx-----# tout fichier cree aura par defaut ces droits restreints A la différence de ksh, en bash on peut trouver : • .bashrc_login : exécuté au login seulement d’un shell interactif de login • .bashrc_logout : exécuté à la fin de session • .profile : exécuté au login seulement en l’absence de .bashrc_login • .bashrc : exécuté en cas d’un shell interactif non login (par exemple depuis le shell courant on lance un nouveau shell). Le plus simple est de n’avoir qu’un fichier .profile et de créer un lien de .bashrc vers .profile. Cela évite bien des problèmes (par exemple lorsque l’on se retrouve sous ksh parce que bash n’est pas disponible) et va dans le sens d’une plus grande simplicité. 4.4.3 Fichiers de configuration en csh ou tcsh Ce sont les fichiers : • .cshrc/.tcshrc : Fichier d’initialisation d’un C-shell réinterprété à chaque invocation du csh/tcsh (donc pour chaque commande lancée) • .login : Fichier d’initialisation d’un login C-shell interprété à chaque login (après .[t]cshrc) définition de nouvelles variables peut-être “ressourcé” par : source .login C’est ici que l’on met l’appel à /usr/games/fortune • .logout : Fichier de clôture d’une session C-shell C’est ici que l’on met le clear de l’écran Exemple de syntaxe : setenv DISPLAY ma_console:0 28 CHAPTER 4. LE SHELL 4.5 Quelques fonctionnalités utiles de sh et ses successeurs 4.5.1 Les métacaractères ou caractères de remplacement • Le constructeur * permet de désigner une chaine de caractères quelconque, éventuellement vide. Ainsi : * désigne tous les fichiers (hors fichiers cachés débutant par un “.”) *.ps désigne tous les fichiers ayant l’extension .ps • Le constructeur ? permet de désigner un caractère quelconque non vide. Ainsi : ? désigne tous les fichiers d’un seul caractère exemple.? désigne tous les fichiers du type exemple.X • Le constructeur [] permet de désigner un caractère quelconque parmis une liste. Ainsi : v[123].txt désigne les fichiers v1.txt, v2.txt, et v3.txt v[1-5].txt désigne les fichiers v1.txt, etc. jusqu’à v5.txt [a-zA-Z]* désigne les fichiers commençant par une lettre minuscule ou majuscule (attention à ne pas utiliser [a-Z] qui conduit à une erreur puisque les codes ASCII des majuscules sont avant ceux des minuscules !). On peut se servir du constructeur [!] pour exclure des caractères pris parmis une liste. Ainsi : *[!a-z] désigne tous les fichiers se terminant par autre chose qu’une lettre minuscule. Le problème des métacaractères La génération de noms comportant des métacaractères pose problème. Pour dénoter de manière littérale les métacaractères, plusieurs solutions sont possibles : • On l’entoure de simples quotes ’. • Dans une chaine entourée de doubles quotes ", tous les caractères sont pris littéralement sauf $ ‘ et \ (backslash) afin de permettre la substitution de variables et de commandes. Pour rendre littéral les caractères $ ‘ et \, on les fait précéder d’un \. • Sinon (soit à l’extérieur d’une chaine délimitée par ’ ou ") on le fait précéder du caractère \. De façon générale, le backslash est souvent un caractère d’échappement. Exemples • Détruire le fichier de nom “bi*zare” qui contient (par erreur) le caractère “*” : rm "bi*zare" rm ’bi*zare’ • Détruire tous les fichiers qui contiennent (par erreur) le caractère “*” : rm *"*"* rm *’*’* • Désigner tous les fichiers du répertoire courant dont le nom, d’au moins trois caractères, commence par un “.” : ls .??* 4.5. QUELQUES FONCTIONNALITÉS UTILES DE SH ET SES SUCCESSEURS 4.5.2 29 La substitution de commandes On veut affecter à une variable le résultat de l’exécution d’une commande. Pour cela on encadrera la commande par des caractères backquote ‘. Exemple : on veut affecter à la variable LISTE la liste des fichiers du type *.txt. LISTE=‘ls *.txt‘ 4.5.3 Bilan sur l’utilisation des différents caractères quote ’. . . ’ (simple quote) : chaine non interprétée ”. . . ” (double quote) : chaine de caractères avec substitution de commandes et de variables (les caractères $, ‘ et backslash ont une signification particulière) ‘. . . ‘ (back quote) : substitution de commandes Exemple : Pour obtenir un prompt du type nom_machine:login>, on pourra utiliser : export PS1="‘uname -n‘:‘logname‘> " 4.5.4 La notion d’alias On peut facilement redéfinir le nom de commandes complexes (ou de suites de commandes) au moyen de alias (raccourcis). Ainsi on trouvera souvent dans les fichiers de configuration : alias ll=’ls -l’ alias la=’ls -la’ alias rm=’rm -i’ en ksh, ou bien : alias ll alias la alias rm ls -l ls -la rm -i en tcsh. (pour ceux qui ont peur de faire des gaffes : -i pour interactif) NB : ne pas confondre le caractère simple quote ’ avec les doubles quote ou back quote. 4.5.5 Redirection des E/S standards On a vu que trois fichiers d’E/S spéciaux existent : E/S entrée standard sortie standard sortie erreur standard “file descriptor” stdin, ou fd 0 stdout, ou fd 1 stderr, ou fd 2 valeur par défaut clavier écran écran On peut redéfinir (on dit aussi rediriger) ces E/S standards au niveau du shell au moyen des caractères < et > pour respectivement l’entrée et la sortie standard (on peut les voir comme des flèches). Exemples d’utilisation La commande bc offre la possibilité d’effectuer des calculs simples en ligne. Ainsi : $ bc 5+2 7 quit On peut aussi créer un fichier donnees comportant des lignes de calcul (ici la ligne : 5+2) et demander à bc de le traiter : 30 CHAPTER 4. LE SHELL $ bc <donnees 7 De même pour envoyer le résultat des calculs dans un fichier : $ bc <donnees >resultat et pour éviter d’écraser le fichier s’il existait déja (cad l’ouvrir en mode ajout) : $ bc <donnees >>resultat Les exemples vus ne s’appliquent qu’à l’entrée standard et à la sortie standard. Le mécanisme est en fait plus général et s’applique en particulier à la sortie erreur. Ainsi : commande 2> nom_fichier envoie la sortie erreur dans le fichier (sans espace). commande numero>&numero envoie la sortie de numéro précisé en premier paramètre dans la sortie précisée en deuxième paramètre (sans espaces nulle part). Ainsi : cc -o essais essais.c > resultat 2>&1 à ne pas confondre avec : cc -o essais essais.c 2>&1 > resultat qui ne fait vraiment pas la même chose car l’ordre de déclaration est important. Dans le deuxième cas stderr prend la valeur de stdout alors que ce dernier a encore sa valeur par défaut ! 4.5.6 Exécution à la chaine On peut cascader plusieurs commandes en chainant à chaque fois la sortie standard de la précédente commande avec l’entrée standard de la commande suivante (figure 4.2. Ce chainage se fait gràce à des ”pipes” (ou tubes). On peut ainsi chainer un nombre quelconque de commandes. stdin stdout stdin ls -l ... stdout more pipe Figure 4.2: Exécution à la chaine de deux commandes. Exemple : $ ls -l /usr/bin | more 4.5.7 Exécution en séquence On peut également exécuter en séquence des commandes. Une commande ne démarre alors que lorsque la commande précédente est achevée. Exemple : pour compiler un noyau Linux après avoir mis à jour toutes les dépendances. On sait que cela va prendre un certain temps et entrer les trois commandes d’un coup permet de ne pas avoir à surveiller en permanence l’évolution de la compilation. $ make dep; make clean; make zImage 4.5.8 Exécution en premier plan ou arrière plan Afin d’éviter que le shell n’attende la fin de la commande courante, on peut lancer celle-ci en tache de fond. Cela se fait en ajoutant un caractère & en fin de ligne. Exemple : $ gcc -Wall -o essais essais.c & 4.5. QUELQUES FONCTIONNALITÉS UTILES DE SH ET SES SUCCESSEURS 4.5.9 31 La gestion des processus/jobs Informations sur les processus On utilisera: ps pour obtenir des informations sur les processus lancés par l’utilisateur courant (dans toutes ses incarnations). On utilisera: ps axl sous Linux ps -elf sous Solaris pour obtenir des informations sur tous les processus de la machine (systèmes et utilisateurs). Exemple : sous Linux ps axl a donné : $ ps axl FLAGS UID 100 0 40 0 40 0 40 0 40 0 40 0 40 0 140 0 140 0 100140 0 100040 2 140 0 100140 1 100140 0 100140 0 40 0 40 0 100140 0 140 0 100140 0 140 0 100100 50164 100100 0 100100 0 100100 0 100100 0 100100 0 100140 0 100100 0 100100 0 100100 0 40 0 0 50164 0 50164 100100 0 100000 50164 100000 50164 100000 50164 0 50164 100000 50164 100 50164 100 50164 100 50164 100000 50164 PID 1 2 3 4 5 6 7 79 171 180 191 202 213 228 239 251 262 274 288 300 318 331 332 333 334 335 336 339 392 425 541 337 340 355 356 359 360 361 363 366 393 426 543 986 PPID 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 318 331 340 355 355 359 359 359 363 392 425 541 543 PRI NI 0 0 0 0 -12 -12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12 -12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 -12 -12 0 0 0 0 12 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 10 0 14 0 SIZE 776 0 0 0 0 0 0 748 800 920 788 800 772 780 832 924 956 1024 1324 756 1092 1456 740 740 740 740 740 732 3176 3116 3256 1104 1168 1840 8632 1096 2108 2124 1628 1428 1204 1180 1180 972 RSS 388 0 0 0 0 0 0 356 432 548 412 448 340 400 408 576 584 656 816 336 500 944 308 308 308 296 296 232 2304 2188 2436 564 772 656 4720 564 1184 1224 988 684 812 788 788 520 WCHAN link get_more_bu alloc_area_ setup_DMA setup_DMA setup_DMA setup_DMA load_aout_b link syslog nanosleep nanosleep link link link link link link link nanosleep link register_sy SHATransfor SHATransfor SHATransfor SHATransfor SHATransfor nanosleep link link link sigsuspend register_sy register_sy register_sy link link link link register_sy SHATransfor register_sy STA S SW SW< SW SW SW SW S S S S S S S S S S S S S S < S S S S S S S S S S S < S S R S S S S S S S S R TTY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 2 3 4 5 6 ? 1 1 1 ? 1 1 ? 1 1 1 1 1 p2 p0 p3 p3 TIME 0:03 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:02 0:06 0:02 0:00 0:00 0:00 2:49 0:00 0:00 0:00 0:06 0:01 0:00 0:00 0:00 0:00 COMMAND init (kflushd) (kswapd) (nfsiod) (nfsiod) (nfsiod) (nfsiod) kerneld syslogd klogd /usr/sbin/atd crond portmap inetd lpd rpc.mountd rpc.nfsd /usr/sbin/amd -a /.autom sendmail: accepting conn gpm -t ps/2 /usr/local/bin/xntpd /bin/login -- roca /sbin/mingetty tty2 /sbin/mingetty tty3 /sbin/mingetty tty4 /sbin/mingetty tty5 /sbin/mingetty tty6 update (bdflush) nxterm -display :0.0 -T nxterm -display :0.0 -T xterm -display :0.0 -T x /usr/local/bin/xntpd -bash xinit /usr/X11R6/bin/Xwrapper sh /home/roca/.xinitrc xclock -geometry 50x50-8 xload -update 3 -nolabel fvwm /usr/X11R6/lib/X11/fvwm/ -bash -bash -bash ps axl On constate que bon nombre de processus (démons) ont comme parent (champ PPID) le processus 1 de propriétaire root (UID 0). Sinon la session en cours a comme père le processus de PID 331, à savoir /bin/login roca ce qui est normal. 32 CHAPTER 4. LE SHELL Suspension d’un processus Supposons que l’on a lancé une commande en premier plan. Le shell attend sa fin. On peut alors suspendre le processus en tapant : CTRL-Z Le processus devient alors un “job” connu du shell. Un job est un processus particulier du point de vue de ses relations avec son père (shell). Si un processus est identifié par un identificateur unique au niveau du système, un job se voit attribuer en plus un numéro unique au niveau du shell courant seulement. On pourra le désigner par “%” suivi de son numéro. Plus généralement, on peut également suspendre un autre job ou processus par : stop numero_de_processus stop %numero_de_job Reprendre l’exécution d’un processus/job On utilisera : fg ou bg pour le redémarrer respectivement en premier plan ou en arrière plan. Détruire un processus/job On utilisera : kill numero_de_processus kill %numero_de_job pour envoyer un signal de type SIGTERM. Un processus pouvant choisir d’ignorer ce signal, la commande kill peut ne pas avoir d’effet. À l’inverse : kill -9 numero_de_processus kill -9 %numero_de_job génère un signal SIGKILL qu’un processus ne peut ignorer ni redéfinir. La destruction du processus est donc assurée (si l’on a les droits requis). 4.5.10 Accès à un historique et profile de l’interface utilisateur Deux profils d’interface utilisateur existent: un profile vi et un profile emacs. Ainsi les utilisateurs de l’un ou de l’autre de ces éditeurs pourront retrouver les commandes usuelles lorsqu’ils voudront éditer une ligne et accéder à l’historique, faire des recherches dans celui-ci. . . Sous ksh/bash, la commande : set -o vi permet de sélectionner le profile vi. De même la commande : set -o emacs permet de sélectionner le profile emacs (surement plus intuitif pour les non initiés). NB : il existe une ancienne version d’historique utilisant la commande history. Elle est désormais tombée en désuétude. 4.6 Ecriture de scripts Voici quelques exemples de scripts Bourne shell (sh). Cette section donne seulement quelques pistes pour l’écriture de scripts. On se réferera à [3] pour de plus amples informations. On regardera également les interpréteurs awk et perl très couramment employés lors de l’écriture de scripts. Exemple 1 #!/bin/sh # Ce script renomme tous les fichiers dont l’extension est # donnee en premier parametre en remplacant cette extension # par celle donnee en deuxieme parametre. if [ $# != 2 ]; then echo "bad arguments" echo "usage: $0 from_ext to_ext" 4.7. ALLER PLUS LOIN. . . 33 exit 1 fi l_files=‘ls *.$1‘ for i in $l_files do new_name=‘basename $i $1‘$2 mv $i $new_name echo "file $i renamed to $new_name" done Exemple 2 files=‘find $2 -print‘ for i in $files ; do output=‘grep -n $1 $i‘ if [ -n "$output" ] ; then echo "****** $i:\n$output" fi done NB : On rappelle que la commande grep recherche une chaine de caractères dans un fichier. De plus l’option -n de if retourne vrai si la longueur d’une chaine est non nulle. • Que fait ce script ? • Quel nom lui donneriez-vous ? 4.7 Aller plus loin. . . On se reportera avec profit aux références suivantes : • [3] pour le Bourne Shell, • [6] pour le Korn Shell, et • [5] pour csh et tcsh. 34 CHAPTER 4. LE SHELL Chapter 5 Systèmes de fenêtrage 35 36 CHAPTER 5. SYSTÈMES DE FENÊTRAGE 5.1 Principes 5.1.1 Historique Le projet X-Xindow a débuté au MIT en 1984. Il est issu de la fusion des projets Athena du MIT et du système de fenêtrage W de l’université de Stanford. D’où son nom, X, lettre suivant W dans l’alphabet. X n’est pas un produit commercial mais un Freeware. La version distribuée actuellement (1997) est X11R6. Il a servi de base à plusieurs systèmes de fenêtrage constructeurs : Openwindows : origine : Sun Microsystems “look and feel” OPENLOOK Motif : origine : OSF “look and feel” Motif X Window System : origine : MIT “look and feel” MIT Athena 5.1.2 Architecture X-Window est un système de gestion de fenêtres, pouvant fonctionner de façon transparente à travers un réseau, et basé sur une architecture client/serveur. Il est destiné à la création et la manipulation de fenêtres sur des écrans de type bitmap. Il permet de développer des applications graphiques (appelées clients) indépendamment du matériel, du système d’exploitation, de la localisation des machines, et de l’aspect de l’interface graphique (pris en charge par une application spécifique, le “window manager”, cf. ci-dessous). Terminologie : serveur X Désigne la machine où se trouve l’écran physique. C’est lui qui fournit les ressources utilisées par les clients, d’où son nom. client Désigne les applications graphiques (y compris les “window manager”). machine1 gère clavier écran, souris échanges locaux (IPC) serveur X client1 lib X11 export DISPLAY=:0 connexion à travers le réseau (TCP) machine2 client2 lib X11 export DISPLAY=machine1:0 Figure 5.1: Relations clients/serveur dans l’architecture X11. La communication client/serveur (figure 5.1) est prise en charge par la librairie X11. Celle-ci assure une communication transparente entre client et serveur, que ceux ci soient sur la même machine (on utilise alors des mécanismes de communication locale) ou sur des machines différentes (on utilise alors des communications réseau). Ceci est complètement caché aux applications (clients). La seule contrainte est de positionner correctement la variable DISPLAY puisque c’est celle-ci qui permet d’annoncer à la librairie X11 où se trouve le serveur X. 5.2 Les “window managers” Un utilisateur n’accède pas directement à X-Window, mais utilise un “window manager” ou gestionnaire de fenêtres. Ce gestionnaire de fenêtres apporte une interface utilisateur graphique (ou GUI, Graphical User Interface) caractéristique. Vu de X-windows, il s’agit d’un client au même titre que les autres applications. De très nombreux gestionnaires existent : 5.3. CONFIGURATION D’UN SYSTÈME DE FENÊTRAGE 37 olwm : OPENLOOK Window Manager Développé par un groupe de constructeurs dont Sun, AT&T, XEROX, etc. mwm : Motif Window Manager Développé par l’OSF twm : Gestionnaire de fenêtre standard X Développé par le MIT olvwm : Version “bureau virtuel” de olwm tvtwm : Version “bureau virtuel” de twm fvwm : F? Virtual Window Manager Redesigné à partir de twm avec comme objectif de limiter les besoins en mémoire, et offrir un bureau virtuel. fvwm2 : une variante de fvwm fvwm95 : encore une variante de fvwm avec un look-and-feel “ouindoze” afterstep : dérive de fvwm windowmaker : dérive de fvwm enlightment : dérive de fvwm cde : Common Desktop Environment kde : K Desktop Environment Très puissant et convivial, de nombreux utilisateurs, distribué sous licence GNU à l’URL : http://www.kde.org/ gnome : (GNU Network Object Model Environment) Le dernier projet d’environnement graphique de GNU, très ambitieux (arrive avec de nombreuses applications dans tous les domaines). À suivre sur: http://www.gnome.org/ La configuration de ces différents gestionnaires est sauvée au sein de fichiers présents dans le répertoire principal de l’utilisateur (.olwmrc, .mwmrc, .twmrc, .fvwmrc. . . ). La syntaxe utilisée est bien sûr différente. 5.3 Configuration d’un système de fenêtrage 5.3.1 Lancement de l’environnement graphique Le lancement de l’environnement graphique peut se faire de deux façons : • Automatiquement, la console étant d’emblée en mode graphique grace au démon xdm. • Manuellement, au moyen de la commande xinit, (ou openwin dans le cas d’un Sun). NB : sur certains systèmes on trouvera des scripts appellés xstart, ou startx pour lancer automatiquement xinit. 5.3.2 Configuration de l’espace de travail en mode automatique xdm recherche un fichier $HOME/.xsession dans le répertoire principal de l’utilisateur. Noter que ce fichier doit avoir des droits d’éxécution puisqu’il s’agit d’un script. Exemple de fichier .xsession : 38 CHAPTER 5. SYSTÈMES DE FENÊTRAGE #!/bin/sh # no -f in the previous line so .profile gets run to set $PATH twm & xrdb -load "$HOME/.Xresources" # Ajout des definitions utilisateurs xclock -geometry 50x50-0+0 & xbiff -geometry 50x50-51+0 & xterm -geometry 80x24 -T login On prendra soin de lancer en tache de fond les commandes qui ne retournent pas immédiatement. La dernière commande en revanche devra être lancée en premier plan car sa fin conduit la session graphique à s’achever elle aussi. Ainsi, dans l’exemple précédent, faire un exit dans la fenêtre login conduit à la fermeture de la session. L’option geometry permet quant à elle de préciser : • la taille (en pixel dans le cas de xclock/xbiff ou en caractères dans le cas de xterm), et • la position de la fenêtre par rapport à un coin. Ainsi : +0+0 aligne la fenêtre sur le coin supérieur gauche de l’écran, -0+0 aligne la fenêtre sur le coin supérieur droit, +0-0 aligne la fenêtre sur le coin inférieur gauche, et -0-0 aligne la fenêtre sur le coin inférieur droit. Ceci se conçoit très bien en se souvenant que l’écran est numéroté de gauche à droite et de haut en bas. Le caractère + indique une position par rapport à l’origine, et le caractère - une position par rapport à la limite de l’écran. Si aucun fichier n’est trouvé, alors xdm lance le “window manager” par défaut du système. En cas d’erreur dans le fichier de configuration (par exemple on oublie de lancer la dernière commande en premier plan), alors il se peut que l’on n’aît plus la main. Une solution consiste alors à valider le mot de passe (dans la fenêtre xdm) par F1 au lieu de enter. On obtient alors une fenêtre dans laquelle on peut éditer le fichier .xsession. Une autre solution consiste à passer par la session d’un autre utilisateur, à se loguer sous son nom, puis à modifier le fichier (on est en mode texte). 5.3.3 Configuration de l’espace de travail en mode manuel xinit recherche un fichier $HOME/.xinitrc dans le répertoire principal de l’utilisateur et le cas échéant l’éxécute (c’est un script). Exemple de fichier .xinitrc : #!/bin/sh xrdb -load "$HOME/.Xresources" # Ajout des definitions utilisateurs xclock -geometry 50x50-0+0 & xterm -geometry 80x24+0-0 & twm Là aussi on prendra soin à lancer en tache de fond les commandes qui ne retournent pas immédiatement. La dernière commande en revanche devra être lancée en premier plan car sa fin conduit xinit à s’achever lui aussi. Si aucun fichier n’est trouvé, alors xinit exécute : xterm 5.3.4 -geometry +1+1 -n login -display :0 Configuration du “window manager” Nous n’abordons ici que la configuration de twm. Elle se fait facilement au sein du fichier $HOME/.twmrc. On y trouvera en particulier la définition des menus déclenchés par les bouttons de la souris. Extrait de fichier .twmrc : 5.3. CONFIGURATION D’UN SYSTÈME DE FENÊTRAGE 39 menu "button1" { "LOGIN" f.title "machine1" !"xterm -display $DISPLAY -T machine1 -ls -sb -sl 400 -vb -geometry 80x24 -e rlogin machine1.lip6.fr &" "machine2" !"xterm -display $DISPLAY -T machine2 -ls -sb -sl 400 -vb -geometry 80x24 -e rlogin machine1.lip6.fr &" } menu "button2" { "TOOLS" "xbiff" "xcalc" "xclock" "xlock" "xterm" "xv" } menu "button3" { "WINDOW MGMT" "Screen Refresh" "Move" "Resize" "Raise" "Lower" "Destroy" "Zoom" "Mouse fast" "Mouse int" "Mouse slow" " " "ICONES" "TWM" } menu "ICONES" { "Show Icon Mgr" "Hide Icon Mgr" } menu "TWM" { "twm Version" "Source .twmrc" "Exit twm" } f.title !"xbiff &" !"xcalc &" !"xclock -geometry 80x80 -update 1 &" !"xlock -mode blank &" !"xterm -geometry 80x24 -ls -sb -sl 400 -display $DISPLAY &" !"xv &" f.title f.refresh f.move f.resize f.raise f.lower f.destroy f.zoom !"xset m 5 1 &" !"xset m 3 1 &" !"xset m 1 1 &" f.title f.menu "ICONES" f.menu "TWM" f.showiconmgr f.hideiconmgr f.version f.twmrc f.quit En fait la configuration manuelle par édition du fichier de ressources est de plus en plus pénible du fait de la complexité croissante des environnements. Avec les environnements modernes (i.e. post fvwm), ce n’est plus d’actualité et cette opération se fait graphiquement. 5.3.5 Configuration des applications La personalisation des applications se fait au moyen des fichiers $HOME/.Xdefaults ou $HOME/.Xresources et de la commande xrdb. Voici un exemple de fichier .Xresources : emacs*Geometry: 80x65-0-0 emacs*Background: rgb:5b/76/86 emacs*Foreground: white 40 CHAPTER 5. SYSTÈMES DE FENÊTRAGE emacs*Cursor: white emacs*BorderColor: white emacs*Font: 6x10 Xmris.Up: Up Xmris.Down: Down Xmris.Left: Left Xmris.Right: Right Il suffit alors d’utiliser la commande : $ xrdb -load $HOME/.Xresources 5.3.6 Configuration du clavier La configuration du clavier se fait au moyen de la commande xmodmap et du fichier \$HOME/.Xmodmap. On pourra se réferrer à [8]. 5.3.7 Configuration de xterm La commande xterm permet de créer une nouvelle fenêtre de travail en mode texte. De très nombreux paramêtres sont définissables. Exemple : xterm -ls -sb -sl 2000 -vb & • -ls (“login shell”) permet de prendre en compte les fichiers d’initialisation après login (e.g. .profile). • -sb (“scrollbar”) permet d’accéder à un ascenceur. • -sl 2000 (“scroll lines”) permet de spécifier le nombre de lignes sauvegardées et accessibles par l’ascenceur. On utilisera avec profit une valeur supérieure aux 64 par défaut. Par contre cela nécessitera plus de mémoire ! • -vb (“visual bell”) permet d’avoir un “flash” à l’écran plutot qu’un “bip” en cas d’erreur. Au sein de la fenêtre xterm, on pourra aussi accéder à des menus de configuration. Pour cela on utilise : CTRL-bouton_gauche (envoit de signaux), CTRL-bouton_milieu (nombreuses options), et CTRL-bouton_droit (taille des fontes). 5.4 Sécurité sous X Windows Le système X-Windows étant distribué, les clients peuvent venir de n’importe quelle machine du réseau, et sur ces machines de n’importe quel utilisateur. La couche de sécurité de X11 a pour but de n’autoriser l’accès qu’à des machines ou utilisateurs spécifiques. On a deux possibilités : Utilisation du mécanisme xhost L’autorisation se fait sur la base de l’ adresse IP de la machine cliente. Cela signifie que n’importe qui se connectant sur cette machine peut contrôler l’écran du serveur. Cette méthode n’est théoriquement valable que sur des systèmes monoutilisateur (typiquement des ordinateurs personnels). Exemples : xhost + inox.lip6.fr xhost + xhost - xenon.lip6.fr xhost Le caractère + permet d’autoriser une machine (ou toutes les machines) alors que le caractère - permet d’interdire l’accès à une machine. Il faut noter que ces commandes ne peuvent s’exécuter que sur le serveur puisque c’est lui qui doit autoriser les machines clientes. 5.4. SÉCURITÉ SOUS X WINDOWS 41 Utilisation du mécanisme xauth L’autorisation se fait sur la base d’une clé (qui peut être combinée avec un protocole de partage de fichiers réseau comme NFS ou un “remote shell”). L’autorisation est donc au niveau de l’utilisateur lui-même, ou du moins de la connaissance d’une clé d’accès. Une utilisation courante de xauth consiste à extraire l’information (clé) sur le serveur, puis à la transmettre à la machine cliente par un “remote shell” qui exécute xauth. Cela donne : xauth extract - $DISPLAY | rsh machine_cliente xauth merge Celà nécessite bien sûr que l’on ait l’autorisation d’exécuter un rsh sur la machine cliente (le fichier .rhosts sur cette dernière machine doit contenir une ligne pour la machine serveur X). 42 CHAPTER 5. SYSTÈMES DE FENÊTRAGE Chapter 6 Quelques outils 43 44 CHAPTER 6. QUELQUES OUTILS 6.1 man Manuel en ligne. Essentiel en cas de doute ou pour connaitre les paramètres d’une commande. . . Les manuels sont organisés en sections. En particulier : • Section 1 : commandes utilisateur • Section 2 : appels système • Section 3 : fonctions des bibliothèques C. Des sous-sections sont définies : – 3c est consacrée à la bibliothèque C, – 3m à la bibliothèque mathématique, – 3n à la bibliothèque réseaux, etc. Par défaut man ne donne le manuel que de la première section où il trouve la commande cherchée. Dans le cas où plusieurs entrées ont le même nom, alors il faudra soit spécifier la bonne section (option -s ou -S, ou bien directement le numéro), soit toutes les passer en revue (option -a). Existe aussi une version X11 du man : xman. 6.2 La commande info de GNU La documentation des outils GNU se fait non avec le man (les pages man ne sont plus maintenues à jour) usuel mais avec l’outil info. Celui-ci permet de se déplacer dans l’arborescence de l’aide GNU, d’effectuer des recherches, etc. 6.3 find Sa syntaxe générale est : find chemins expressions De très nombreuses utilisations sont possibles. Par exemple : • Liste de fichiers : C’est l’utilisation la plus simple de find. Ainsi : $ find /etc -print /etc /etc/hosts /etc/csh.cshrc /etc/exports /etc/group /etc/host.conf /etc/hosts.allow /etc/hosts.deny /etc/motd /etc/passwd /etc/mtab /etc/profile /etc/protocols /etc/securetty /etc/services [...] La présence de l’option -print est indispensable. Dans le cas contraire, le résultat de la recherche n’est pas affiché. • Recherche d’un fichier dans une arborescence : find repertoire -name nom_fichier_cherche -print La présence de l’option -print est ici aussi indispensable pour obtenir l’affichage des fichiers trouvés. 45 6.4. CPIO • Exécuter une commande Unix sur certains fichiers : Par exemple, pour changer de mode de tous les fichiers d’un répertoire, on utilisera : find repertoire -exec chmod u+w {} \; L’option -exec permet d’exécuter une commande Unix classique sur les fichiers sélectionnés par find. Chaque fichier sélectionné peut être désigné dans la commande par {}. Enfin la commande doit se finir par un \;. Pour détruire tous les fichiers core : find repertoire -name core -print -exec rm {} \; L’option -print permet d’afficher les fichiers qui sont détruits. • Créer une archive : find est souvent utilisée couplée à la commande d’archivage cpio pour créer des archives. Exemple : find repertoire -print | cpio -ocBd > /dev/rmt0 La raison en est que find produit une liste de fichiers avec leur chemin d’accès complet, chose que ne permet pas la commande ls. Cette liste désigne alors les fichiers concernés par l’archivage. 6.4 cpio Permet de créer une archive sur disque (on spécifie un nom de fichier), bande (on spécifie le device de la bande, en général de la forme /dev/rmt), ou disquette (en général /dev/fd). Comme cpio lit sur son entrée standard et écrit sur sa sortie standard, il faudra en général redéfinir celles-ci. cpio -o permet de créer une archive, alors que cpio -i permet de lire une archive. Exemple : find . -print | cpio -ocv > /tmp/archive_doc.cpio crée le fichier d’archive /tmp/archive_doc.cpio contenant tous les fichiers du répertoire courant et en dessous. L’option c permet d’avoir des entêtes en ASCII afin d’améliorer la portabilité. cpio -icvd < /tmp/archive_doc.cpio recopie dans le répertoire courant tous les fichiers de l’archive /tmp/archive_doc.cpio en créant au besoin les répertoires (option d). 6.5 tar De même que cpio, tar permet de créer une archive sur disque (on spécifie un nom de fichier dont l’extension est par convention .tar), bande (on spécifie le device de la bande, en général de la forme /dev/rmt), ou disquette (en général /dev/fd). tar est plus simple d’emploi car il ne nécessite pas d’être couplé à cpio. tar cvf /dev/fd0 . crée (option c pour “create”) une archive sur disquette à partir de tous les fichiers contenus dans le repertoire courant et en dessous. tar tvf /dev/fd0 examine (option t pour “table of contents”) le contenu du fichier d’archive se trouvant sur la disquette. Aucun fichier n’est extrait ! tar xvf /dev/fd0 extrait (option x pour “extract”) le contenu du fichier d’archive se trouvant sur la disquette et recopie les fichiers dans le répertoire courant. La version GNU de tar permet de compresser/décompresser dans la foulée l’archive. Il suffit d’ajouter l’option “z”. Par convention l’extension d’un tel fichier d’archive est .tgz. 46 CHAPTER 6. QUELQUES OUTILS 6.6 compress/uncompress et gzip Permettent la compression/décompression de fichiers. Le fichier compressé a par convention l’extension .Z. compress fichier uncompress fichier.Z On preferrera en général gzip, plus rapide et conduisant à de meilleurs taux de compression que compress. En revanche il peut ne pas être installé sur toutes les machines (logiciel GNU). Le fichier compressé a par convention l’extension .gz. gzip fichier gzip -d fichier.gz 6.7 L’outil d’archivage/compression zip/unzip Cet outil, à l’instar de gzip et tar, permet de créer des archives qui sont d’emblée compressées. Le fichier est par convention nommé .zip. Il s’utilise comme suit : zip fichier_d_archive.zip fichier zip -r fichier_d_archive.zip repertoire Pour décompresser l’archive, on utilisera : unzip fichier_d_archive.zip 6.8 Les Mtools Il est possible d’accéder en lecture/écriture à une disquette formattée sous DOS. Pour cela on utilisera les outils du package mtools : * * * * * * * * * * * * * * * * * * mattrib: mbadblocks: mcd: mcopy: mdel: mdeltree: mdir: mformat: minfo: mlabel: mmd: mmount: mpartition: mrd: mmove: mren: mtype: xcopy: change MS-DOS file attribute flags tests a floppy disk, and marks the bad blocks in the FAT change MS-DOS directory copy MS-DOS files to/from Unix delete an MS-DOS file recursively delete an MS-DOS directory display an MS-DOS directory add an MS-DOS filesystem to a low-level formatted floppy get information about an MS-DOS filesystem. make an MS-DOS volume label make an MS-DOS subdirectory mount an MS-DOS disk create an MS-DOS as a partition remove an MS-DOS subdirectory move or rename an MS-DOS file or subdirectory rename an existing MS-DOS file display contents of an MS-DOS file recursively copy a dos directory into another Très pratique pour échanger des fichiers entre DOS et Unix. Cependant, si l’on désire sauvegarder sur disquette des fichiers/arborescence Unix, on aura intérêt à utiliser tar ou cpio. En effet, les Mtools génèrent des problèmes de noms (8+3 caractères, en majuscules) du fait des limitations de DOS. 6.9. BILAN SUR L’UTILISATION DES DISQUETTES 6.9 47 Bilan sur l’utilisation des disquettes Trois techniques existent donc pour exploiter un support type disquette : • les mtools qui permettent un accès immédiat et simple à une disquette formattée sous DOS. • la création d’une archive directement sur la disquette, que ce soit par cpio ou par tar (cf. exemples). Simple mais une erreur du support magnétique (mauvais bloc) conduira à l’impossibilité d’exploiter l’archive1 . Il faut donc impérativement contrôler l’archive après création. • la création et le montage d’un système de fichier UNIX sur la disquette (section 3.1.3). Plus complexe mais totalement intégré à l’arborescence UNIX. Ces trois techniques sont donc fortement complémentaires. 6.10 head et tail Ces commandes permettent respectivement l’affichage des premières et dernières lignes (nombre paramétrable) d’un fichier. head -n nombre_de_lignes fichier 6.11 wc La commande wc (“word count”) permet d’obtenir le nombre de charactères (wc -c fichier), de mots (wc -w fichier), ou de lignes (wc -l fichier) d’un ou plusieurs fichiers. 6.12 diff Permet la comparaison de deux fichiers et l’affichage des différences. $ cat fichier1.txt Ceci est un fichier de test. $ cat fichier2.txt Ceci est un fichier de test different du premier. $ $ diff fichier1.txt fichier2.txt 1c1,2 < Ceci est un fichier de test. --> Ceci est un fichier de test different > du premier. La commande rapporte les différences observées entre les deux fichiers et fait des rapports : “c” indique un changement entre la ligne “1” du premier fichier et les lignes “1 à 2” du deuxième. Suivent précédés du caractère “<” et/ou “>” les lignes en question. D’autres codes existent : “a” pour indiquer un ajout, “d” pour indiquer une suppression. 6.13 grep Permet de faire des recherches de chaines de caractères dans des fichiers. Extremmement utile donc. $ grep roca /etc/* /etc/group:invite::200:roca /etc/group:sirac::50056:roca /etc/group:ecrins::50057:roca /etc/passwd:roca:Scs0qsrFixhnz:60164:50056:Vincent Roca:/home/roca:/bin/bash 1 Il n’y a pas de formattage de bas niveau susceptible de mettre de coté les mauvais blocs. 48 CHAPTER 6. QUELQUES OUTILS auxquelles s’ajoutent de nombreuses lignes de messages d’erreur (l’utilisateur ne possède pas de droit de lecture, ou bien il s’agit ’un répertoire, non d’un fichier). 6.14 Editeur vi Cet éditeur peut sembler compliqué à utiliser, mais il est très puissant (ce qui reste un doux euphémisme), et de plus a l’avantage considérable de fonctionner sur tous les systèmes, quelle que soit leur origine et le type d’installation (même les plus élémentaires). Il possède trois modes: déplacement : C’est le mode par défaut. Il permet le déplacement à l’aide des touches du curseur sur n’importe quel caractère de l’écran. On le quitte généralement: • pour passer en mode d’insertion en tapant i (insertion), a (ajout) ou o (nouvelle ligne). . . • pour passer en mode de commande en tapant : (commande) ou / (recherche). commande : Il permet d’entrer des commandes similaires à celles de ed, l’éditeur ligne d’Unix. On quitte ce mode en executant la commande spécifiée avec RETURN. insertion : Ce mode permet d’entrer des caractères. On y rentre par i a A o O. . . On quitte ce mode avec ESCAPE (si l’on ne sait plus dans quel mode on se trouve, taper ESCAPE). En cas de “panne” (crash de la machine, déconnexion brutale, etc.), on pourra récuperer un état très proche de l’état avant panne grace à l’option : vi -r fichier On pourra se référer à [1]. Quelques commandes ed utiles sous vi • Supprimer 8 lignes à partir d’un numéro de ligne donné : :numero_ligne,numero_ligne+8d • Idem à partir de la ligne courante : :.,.+8d • Supprimer tout le texte depuis la ligne courante jusqu’à la fin du fichier : :.,$d • Supprimer la première occurence d’une expression dans tout le texte (par exemple les “> ” ajoutés par le mail lors d’un forward) : :1,$s/> // • Substituer un mot à un autre : :1,$s/mot_initial/mot_nouveau/g • Mettre en commentaires (à la mode C++) 8 lignes à partir de la ligne courante : :.,.+8ds/^/\/\/ / 49 6.15. EDITEUR EMACS Les options internes de vi L’éditeur vi possède un certain nombre d’options internes que l’utilisateur peut sélectionner à tout moment. On obtient leur liste par : :set all On active une option par : :set nom_option ou bien :set nom_option=valeur On supprime une option par : :set no nom_option Quelques options utiles : autotindent indentation automatique number numérotation automatique Extensions de vi Des extensions à vi existent : vim (VI improved) Très puissant, à utiliser absolument (d’ailleurs on n’a pas le choix) lorsque c’est disponible (e.g. Linux). gvim Version graphique de vi. viper C’est le mode émulation vi sous emacs. On dispose de l’interface graphique d’emacs tout en utilisant les commandes (au moins les principales) de vi. 6.15 Editeur emacs On se rapportera à [8]. 6.16 a2ps Effectue la mise en page de fichiers texte (listings par exemple) avant impression. Le fichier généré est un postscript et est envoyé sur la sortie standard. a2ps fichier.txt > fichier.ps a2ps -n fichier.txt > fichier.ps L’option -n demande la numérotation des lignes du fichier. 6.17 ghostview et acroread L’outil ghostview permet la visualisation de fichiers au format postscript. L’outil gv qui lui a désormais succédé est beaucoup plus convivial. L’outil acroread (tm) (“acrobat reader” de la société Adobe) permet la visualisation de fichiers au format pdf. Un outil similaire dans le domaine public (avec binaire et sources) est xpdf. Il est cependant beaucoup plus limité. En revanche, créer des documents au format pdf nécessite de disposer de l’outil commercial Adobe spécifique. 6.18 ping Permet de tester l’accessibilité (réseau) d’une machine. Il existe deux types d’utilisation : • Le test d’accessibilité simple. On vérifie qu’une machine peut être atteinte. Ainsi sous Solaris on utilisera : $ ping xenon.lip6.fr xenon.lip6.fr is alive (dans le cas Solaris) 50 CHAPTER 6. QUELQUES OUTILS Une réponse positive ne permet pas d’affirmer que la machine est fonctionnelle, simplement qu’elle est en mesure de communiquer (très précisement qu’elle est accessible par le protocole ICMP). • La mesure de la qualité de transmission (taux de pertes, temps moyen d’aller-retour). C’est le défaut sous les systèmes autres que Solaris : $ ping xenon.lip6.fr (dans le cas non Solaris) $ ping -s xenon.lip6.fr (dans le cas Solaris) PING xenon.lip6.fr: 56 data bytes 64 bytes from xenon.lip6.fr (192.199.61.33): icmp_seq=0. time=61. ms 64 bytes from xenon.lip6.fr (192.199.61.33): icmp_seq=1. time=47. ms ^C ----xenon.lip6.fr PING Statistics---2 packets transmitted, 2 packets received, 0% packet loss round-trip (ms) min/avg/max = 47/54/61 6.19 ftp Voici un résumer des principales commandes disponibles sous la ligne de commande FTP : help ls ou dir bin : Indispensable pour transferer des fichiers non textes. En effet, dans le cas contraire une interprétation des octets transmis est effectuée. get et put : Rappatrier ou envoyer un fichier. Le nom du fichier doit être complêtement spécifié. mget et mput : Rappatrier ou envoyer un ou plusieurs fichiers. Utilisation possible du “*”. Par défaut une confirmation est demandée. prompt : permet d’éviter la demande de confirmation lors d’un mget ou mput. Très utile lorsque l’on doit transférer de nombreux fichiers. hash : demande l’affichage d’un marqueur à chaque bloc (de taille 1024, 4096, etc. suivant les systèmes) reçu. Cela permet de suivre le bon déroulement du transfert. FTP permet d’accéder à des serveurs anonymes, c’est-à-dire pour lesquels l’on n’a pas besoin d’avoir un compte sur la machine serveur. Le login à utiliser est alors “anonymous”, ou ce qui est équivalent (mais plus rapide à taper) “ftp”. Il est alors d’usage de donner son adresse mail en guise de mot de passe. 6.20 Les commandes “remote” Cette catégorie regroupe en particulier les commandes : rsh (“remote shell”) exécution d’un shell à distance. Syntaxe : rsh machine commande rsh machine rsh se connecte à la machine distante, et y exécute la commande. Les E/S standards sont redéfinies pour que l’exécution distante apparaisse locale. Si aucune commande n’est spécifiée, alors rsh effectue un rlogin sur la machine. Il est d’ailleurs souvent utilisé à cette fin. Exemple : rsh machine2 ls -l /tmp > contenu.txt La liste des fichiers sous /tmp de machine2 est envoyée dans le fichier local contenu.txt. 6.21. LE SERVICE DE MESSAGERIE 51 rcp (“remote copy”) copie de fichiers entre machines distantes. Syntaxe : rcp [-r] source destination où source et destination sont soit un fichier ou répertoire local, soit un fichier ou répertoire distant. Dans ce dernier cas la syntaxe est : machine:fichier login@machine:fichier suivant que l’on a ou non le même nom de login. Aucun mot de passe n’est demandé, ce qui nécessite que la machine locale soit déclarée dans le fichier $HOME/.rhost distant (voir chapitre 2. Exemple : rcp machine2:$HOME/doc/rapport.ps . rcp fichier.c machine2:$HOME/projet Des versions sécurisées existent. Elles guarantissent la confidentialité des échanges et en cas d’interception des paquets par un tiers, ce dernier ne pourra lire les informations qui sont chiffrées (à moins de casser la clé mais c’est un autre problème). Ces versions sont à privilégier absolument 2 . . . ssh (“secure shell”) S’utilise de la même façon que rsh. scp (“secure copy”) S’utilise de la même façon que rcp. 6.21 Le service de messagerie Il fait intervenir : • des agents de transfert qui acheminent les messages de façon asynchrone. Il s’agit en général de sendmail dans le monde Unix. Le protocole de transfert de mails est alors SMTP, ou “Simple Mail Transfer Protocol”. • des programmes utilisateurs pour la lecture et l’écriture de messages. C’est ce dernier qui accède à la boite aux lettres de l’utilisateur. On peut citer : – mail, – mailx, – elm, – pine, – xmh et exmh, – netscape, – emacs. Certains de ces outils (tel elm) s’utilisent en mode texte ce qui est d’un secours inappréciable lorsque l’on est connecté à distance et que l’on ne peut exporter le DISPLAY (parce que l’on traverse un firewall par exemple). 2 Avez vous déja vu transiter votre mot de passe en clair sur le réseau lorsque tcpdump intercepte les paquets d’une session telnet ? Cela fait froid dans le dos. 52 CHAPTER 6. QUELQUES OUTILS 6.21.1 Format des adresses mail De nombreux formats d’adresses mail existent. Ils doivent tous être acceptés. Ainsi : [email protected] Adresse générique à préférer. [email protected] Adresse simple ne mentionnant que le nom de login. [email protected] Adresse avec nom de login et machine de login. Ce format est à éviter car il est trop précis. Il a en revanche l’intéret de fonctionner lorsque l’on n’est connu que dans la machine et non dans la base lip6.fr (dans ce cas là). Dans la mesure du possible on se restreindra à l’adresse générique qui fournit le minimum d’informations (et donc qui a le plus de chance de rester valable longtemps tout en limitant les risques de piratage). 6.21.2 Format des messages Un courrier est composé de deux parties : • un corps de message contenant l’information utilisateur, et • un entête contenant des informations de routage du message (manipulées par le sendmail) et des information initialisées par l’utilisateur (sujet, destinataire(s), etc.). Parmis l’entête on trouvera entre autres : To : le ou les destinataires principaux du message CC (carbon copy) : personne à qui sera envoyée une copie du message BCC (blind carbon copy) : idem mais sans que les autres destinataires en soient informés From : premiere ligne du message, donne l’identité de l’expéditeur, ou le propriétaire de la liste dans le cas où le message a été envoyé sur une liste. Sender expéditeur réel du message 6.21.3 Ajout d’une signature Il est possible de créer un fichier de signature qui sera ensuite automatiquement inséré à la fin des mails. Il s’agit en général de $HOME/.signature (vérifier sur la configuration du mailer). 6.21.4 Transférer des fichiers binaires avec uuencode/uudecode Le service de messagerie a certaines limites, et en particulier les données sont des caractères ASCII sur 7 bits. Les longueurs de lignes sont elles aussi limitées. Le service de messagerie tel quel est donc inadapté à l’envoi de données binaires (exécutable ou fichier compressé par exemple). NB : les mailers évolués (e.g. netscape Communicator) gèrent automatiquement l’encodage/décodage (voir MIME ci-dessous). Encodage et transfert La transformation binaire vers ASCII 7 bits se fait sous le shell par : uuencode fichier_bin_source fichier_apres_decodage > fichier_uuencode Le premier paramêtre est le fichier binaire source. Le deuxième est le nom du fichier a créer apres réception et décodage par le destinataire du courrier. Enfin comme uuencode envoie le fichier encodé sur la sortie standard, il faut rediriger celle-ci dans un fichier. On peut alors transferer le fichier fichier_uuencode par mail. 6.22. LE DÉBUGGER GDB ET SES EXTENSIONS XXGDB ET DDD 53 Décodage après réception Après réception du message, il faut l’éditer afin de supprimer les entêtes du mails et éventuels commentaires ajoutés par l’emetteur. Le retour au fichier binaire se fait alors par : uudecode fichier_uuencode Un fichier binaire de nom celui précisé lors de l’encodage (fichier_apres_decodage) est alors crée. 6.21.5 Les extensions du service de messagerie Il s’agit de : ESMTP (Extended SMTP) MIME (Multipurpose Internet Mail Extensions) : apporte une forte structuration du corps du message en spécifiant la nature des données transportées : texte, images, audio, video au format MPEG, multiparties, message pour encapsuler un autre message application pour tout le reste. L’encodage des données peut lui aussi être spécifié : 7 bits, 8 bits, binaire, hors ASCII 7 bits (ou “quoted printable”), en base 64. Ceci sera le plus souvent automatiquement géré par le mailer (notion de document attaché). 6.21.6 Les messages de taille (très) importante Certains agents de transferts sont configurés pour réagir d’une certaine façon aux messages de taille importante (de l’ordre du Méga-octet et au dessus). Celà peut consister : • en un découpage du message en fragments de taille réduite, • en une troncature du message (le plus courant), voir • en le refus pur et simple du message. On utilisera avec avantage un outil de compression dans la cas d’un fichier important. Il faudra alors : compresser le fichier, puis uuencoder le fichier compressé. Après réception du message la démarche inverse devra être adoptée : décodage puis décompression. On pourra également utliiser un utilitaire de découpage de fichier. 6.22 Le débugger gdb et ses extensions xxgdb et ddd TO DO. . . 6.23 LATEX: un outil de formatage de documents En dépit de son aspect vieillot et peu convivial, cet outil (libre) permet de créer des documents de qualité professionelle (de nombreux éditeurs imposent son utilisation) sous de nombreux systèmes. Il s’agit en fait d’un ensemble d’outils et de “packages” qui permettent d’écrire des documents en mode texte (donc avec votre éditeur de texte préferé) en spécifiant manuellement les instructions de formatage (c’est là que c’est un peu compliqué puisqu’il s’agit par exemple de savoir que \emph{mon texte} permet de mettre en exergue le bloc : mon texte. Une fois le texte saisi, on doit “compiler” (et oui :-) le fichier d’extension .tex avec : latex fichier.tex Cette commande va générer, s’il n’y a pas d’erreur grave, un fichier d’extension .dvi qui peut être visualisé par : xdvi fichier.dvi On peut aussi, à partir du fichier .dvi générer un fichier postscript par : 54 CHAPTER 6. QUELQUES OUTILS dvips fichier.dvi -o fichier.ps Utiliser LATEXn’est donc pas abérent, même si par ailleurs des traitements de textes WYSIWYG reluisants existent. Un apprentissage progressif des possibilités de LATEXvous permettra d’arriver facilement à des résultats de qualité irréprochable, surtout si vous restez proche de la présentation “standard” (et sans criser parce que ce @#!* de @}[! a encore planté). Le présent document (ainsi que la plupart de ceux cités en bibliographie ont été réalisés sous LATEX. Pour en savoir plus. . . [7]. Bibliography [1] S. Bourne, “Le système Unix”, InterÉditions, ISBN 2-7296-0014-0, 1991. [2] T. Besançon, P. David, J. Marchand, “Administration système Unix (version 2.0)”, ftp://ftp.lps.ens.fr/pub/users/besancon/cookbook/2.0/, 1er avril 1996. Ce document (trés volumineux) n’est en aucun cas un guide d’introduction à Unix mais certaines sections pourront cependant être lues avec intéret. [3] B. Cassagne, “Le Bourne shell (sh)”, Institut IMAG, Grenoble, ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/SHELL/Bourne.Shell.ps, septembre 1991. Document très sérieux et didactique sur l’utilisation du shell historique. Un must à posséder absolument ! [4] P. Dax, “Le Shell : notes mlv.fr/ dr/COURS/shell.html, 1997. de cours”, ENST, Paris, http://massena.univ- [5] P. Dubois, “Using csh and tcsh”, O’Reilley and Associates, Inc., ISBN 1-56592-132-1, août 1997. [6] JF. Pujol, “Guide du KornShell sous UNIX”, Institut IMAG, ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/SHELL/Korn.Shell.ps, août 1993. Grenoble, [7] Christian Rolland, “LATEXpar la pratique”, Éditions O’Reilly, 1ère édition, ISBN 2-84177-073-7, octobre 1999. Une des trés nombreuses références sur LATEX. [8] M. Schaefer, “Courte information sur le système Unix et les réseaux informatiques”, Alphanet NF, http://www.pasteur.fr/other/computer/unix/unixguide.html, ou bien ftp://ftp.univlyon1.fr/pub/doc/francais/unixguide/2.123/, août 1995. Ce guide, qui a les mêmes objectifs que le présent document, pourra être consulté avec intéret (il m’a d’ailleurs servi de base pour certains aspects :-) Il reste cependant assez confus dans son organisation. [9] R. Stallman, “GNU’s Not Unix!” http://www.fsf.org/, 1999. [10] On trouvera de nombreuses documentations système, langage, outils sur le site de l’IMAG : ftp://ftp.imag.fr/pub/archive/unix/DOC.UNIX/, A aller voir absolument. . . Le présent guide a très largement bénéficié (et s’est souvent inspiré) des ouvrages et documents précédents. Que leurs auteurs respectifs en soient vivement, vivement, remerciés. Un grand merci également à Le Hong Ly pour sa relecture. 55