Initiation aux syst`emes de type Unix - Jean-Matthieu
Transcription
Initiation aux syst`emes de type Unix - Jean-Matthieu
Initiation aux systèmes de type Unix Labo-Unix - http://www.labo-unix.net 2001-2002 1 Initiation aux systèmes de type Unix Table des matières Introduction 3 1 L’organisation du système de fichier 4 2 Apprehender le système 2.1 Les terminaux . . . . . . . . . . . . . . . . 2.2 Le SHELL . . . . . . . . . . . . . . . . . . 2.3 Où trouver de l’aide . . . . . . . . . . . . 2.3.1 Au niveau des commandes utilisées 2.3.2 Les pages de manuel . . . . . . . . 2.3.3 Les fichiers “info” . . . . . . . . . . 2.3.4 Resources sur le “Net” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 6 7 8 10 3 Découverte de quelques commandes de bases 11 4 “Pipes” et Redirections 4.1 Les flux standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 “Pipes” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 13 5 Gestion des droits des fichiers 5.1 Comment sont organisés les droits d’un fichier/répertoire ? 5.2 Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Changement de propriétaire et de groupe . . . . . . . . . . 5.4 Gestion des comptes utilisateurs et groupes . . . . . . . . . 5.4.1 Ajouter/Modifier/Effacer un utilisateur . . . . . . . 5.4.2 Ajouter/Modifier/Effacer un groupe . . . . . . . . . 5.4.3 Le fichier login.defs . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 14 17 17 18 19 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Gestion des disques 6.1 Partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Organisation de quelques périphèriques dans le “/dev/” . 6.1.2 Edition de la table des partitions . . . . . . . . . . . . . 6.1.3 Formatage de la partition au système de fichier souhaité 6.2 Association periphérique / point de montage . . . . . . . . . . . 6.2.1 Utilisation de la commande “mount” . . . . . . . . . . . 6.2.2 Le fichier “/etc/fstab” . . . . . . . . . . . . . . . . . . . 6.2.3 Gestion de l’espace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 21 22 24 24 25 25 27 7 Gestion des processus 7.1 Lister les processus . . . . . . . . . . . . 7.2 Envoi de signaux aux processus . . . . . 7.3 Arrière plan / Avant plan / Detachement 7.4 Modification des priorités du “Scheduler” . . . . . . . . 27 28 31 32 32 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix 8 Approche élémentaire du reseau 8.1 Configurer son adresse IP dynamiquement 8.2 Configurer son adresse IP manuellement . 8.3 Selection du routeur par defaut . . . . . . 8.4 Selection des DNS (Domain Name Server) . . . . 32 32 32 33 33 9 Envirronnement graphique 9.1 Configuration de XFree86 . . . . . . . . . . . . . . . . . . . . . . . 33 34 10 Recompiler son noyau 10.1 Le noyau GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . 35 35 11 Le “boot loader” 11.1 Lilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 “GRUB” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 12 Phases du “boot” 38 Références 41 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Introduction Nés de la volonté de Ken Thompson et Dennis Ritchie tous deux de Bell Labs, de faire un système d’exploitation à la fois multitâches et multi-utilisateurs, UNIX a vu le jour dans les années 1970, alors que le projet MULTICS auquel ils avaient participé au début, piétine. Dans la philosophie qui a accompagné la création d’UNIX, il était question de concevoir de petits programmes ne faisant qu’un nombre limités de tâches, mais le faisant bien. S’est posé ensuite rapidement le moyen de les combiner, d’où la naissance des “pipes” et redirections. Pour ces utilitaires de l’époque, il était fastidieux de réecrire les programmes en assembleur lors de l’achat de nouvelles machines. C’est dans ce but qu’est né le B puis le C qui offrait plus d’avantages. Depuis cette période, une quantité astronomique d’Unix ont vu le jour dont, parmi eux des Unix gratuits, comme celui de l’université de Berkeley dont sont dérivés les célèbres OpenBSD[1], NetBSD[2], FreeBSD[3], TrustedBSD[4], BSDi[5]. . . Pour ce qui est de GNU/Linux[6], il a vu le jour dans les années 1990 par un étudiant de l’époque en reste mainteneur officiel, Linus Torvald. Paralèllement à celà s’est développé une philosophie nouvelle, pour le partage des connaissances et ce, protègé par une license qui garantirait l’ouverture des fichiers sources et la possibilités des les modifier (c’était tous le contraire de la philosophie informatique de l’époque) sans devoir des droits à qui que se soit. C’est la naissance de la GPL (“Gnu Public License”) et de la FSF (“Free Software Foundation”) tous deux fondés par Richard Stallman. Depuis cette période, les Unix “conventionnels”, ont fait leurs preuves et leur temps, et sont mort de leur manque d’ouverture vers le monde et les nouvelle technologies. En effet, la plupart des Unix étaient vendus avec les machines dont ils etait ultra-propriétaires. Désormais, la machine a fait marche arrière grâce aux biens faits de l’ouverture des sources qui est en partie à l’origine de l’engouement de plus en plus prononcé qui se fait á leur égard, mais qui est surtout à l’origine de leur support exceptionnel par des milliers de passionnés. Nous allons tenter de vous initier à ce monde qui peut paraı̂tre un peu hardu au départ, mais dévoile rapidement tous ses charmes. Si vous vous retrouvez nez à nez avec des erreurs absoluments inacceptables, que vous pensez que tout ou partie de ce cours n’est pas bon, envoyez un e-mail à [email protected]. Bien sûr nous restons ouvert à toute remarque constructive ou non. 4 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix 1 L’organisation du système de fichier Sur quelqu’Unix (sauf peut-être Darwin) que ce soit, vous ne devriez pas avoir de problèmes pour vous retrouver, puisqu’utilisant sensiblement la même arborescence de fichiers. La plupart du temps, les Unix essaient de se conformer au FHS [7] (“File Hierarchy Standard”). Le principe général est de regroupement par type de fichier ou par type d’utilisation au sein d’un même répertoire. Par exemple, les fichiers d’aide de type man seront regroupés dans les répertoires “/usr/man”, “/usr/local/man”. Voici comment s’organise un système de fichiers de type Unix en général : 5 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix / | +| +| +| +| +| +| +| +| +| +| +| | | | | | | | | | | | | | | +- bin/ commandes de bases pour tous les utilisateurs boot/ fichiers concernant le "bootloader" dev/ peripheriques etc/ configuration generale du systeme home/ repertoires d’arrivee des utilisateurs lib/ bibliotheques mnt/ points de montages root/ repertoire d’arrivee pour le root sbin/ executables systemes tmp/ fichiers temporaires usr/ | +- bin | +- sbin | +- lib | +- share | +- include | +- X11R6 | +- local var | +| +| +| +| +| +| +| +| +- executables specifiques aux utilisateurs executalbes systemes dispensables bibliotheques necessaires au developpement Donnees independantes de l’architecture Contient les fichiers header. Tous ce qui concerne X Window arborescence locale lock fichiers blockes log fichiers de log cache caches d’applications lib informations concernant l’etat de certains executables mail boite aux lettre utilisateurs opt donnees variables pour /opt run donnees sur des executables en cours d’execution spool files d’attentes tmp donnees temporaires sauvegardees meme apres un reboot 6 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Suivant les UNIX sur lesquels nous pouvons nous retrouver, certains autres répertoire peuvent apparaı̂tre, comme “/proc” qui contient quantités d’informations sur le noyau GNU/Linux remises à jour en temps réel. Dans les chapitres qui vont suivre, nous allons nous déplacer dans les diffèrentes parties de notre arborescence mettant ainsi le doigt sur l’utilité de chacune d’elle. 2 2.1 Apprehender le système Les terminaux En général, lorsqu’on arrive sur un système Unix, la première chose que l’on voit est une invite de commande demandant d’entrer un nom d’utilisateur et un mot de passe. C’est ce que l’on appelle un terminal. Dans des temps désormais immemoriaux, il y avait un terminal par utilisateur connecté à un serveur au moins équivalent à votre pire 386 SX 33. Maintenant, vous pouvez avoir plusieurs terminaux virtuel sur une machine, permettant ainsi de faire plusieurs choses en même temps. En général on y accède par la combinaison de touche “Alt+Fn” où Fn est une touche de fonction. Nous n’allons pas détailler dans ce qui va suivre comment faire, mais il est possible d’avoir un terminal sur le port série, le réseau, avec des “emulateurs” de terminaux . . . Imaginez que par ce biais, vous pouvez administrer un super-calculateur avec un simple minitel. Celà n’a de prime abord que peu d’intérêt, mais peut s’avèrer particulièrment pratique dans certains cas. 2.2 Le SHELL Le SHELL est un interprèteur de commandes. C’est lui qui va nous permettre d’exécuter les diffèrents utilitaires que nous allons utiliser dans ce qui va suivre. C’est sur lui qu’on arrive lorsqu’on s’est authentifié. Il en existe beaucoup dont bash (faisant partie de la norme POSIX), zsh, ksh, csh, tcsh, ash . . .L’intérêt d’avoir un shell plutôt qu’un autre dépends des fonctionnalités offertes par chacun, et donc de l’utilisation que l’on peut en avoir. Il est interressant de savoir, qu’il dispose d’une syntaxe utile pour la génération de scripts. – http ://www.gnu.org/software/bash/bash.html – http ://www.zsh.org – http ://www.kornshell.com – http ://www.tcsh.org 2.3 Où trouver de l’aide Voici une des nombreuses forces des systèmes UNIX ; la gestion de l’aide. Elle est disponible á la fois sur le système dans des versions plus ou moins détaillées et bien sûr sur Internet. 2.3.1 Au niveau des commandes utilisées Pratiquement chaque commande dispose d’une aide indiquant son fonctionnement général ainsi q’un résumé des diverses options qu’il est possible de lui passer. 7 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Elle est accessible par les options “-h” ou “–help”. Exemple : <prompt_shell> man --help man, version 1.5h usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list] [-m system] [-p string] name ... a c d D f h k K t w : : : : : : : : : : find all matching entries do not use cat file print gobs of debugging information as for -d, but also display the pages same as whatis(1) print this help message same as apropos(1) search for a string in all pages use troff to format pages for printing print location of man page(s) that would be displayed (if no name given: print directories that would be searched) W : as for -w, but display filenames only C M P S m p file path pager list system string use file’ as configuration file set search path for manual pages to path’ use program pager’ to display pages colon separated section list search for alternate system’s man pages string tells which preprocessors to run e - [n]eqn(1) p - pic(1) t - tbl(1) g - grap(1) r - refer(1) v - vgrind(1) <prompt_shell> 2.3.2 : : : : : : Les pages de manuel Les pages de manuel, autrement dit, les “man pages”. Elles sont organisées en catégories classées de 1 à 8 dont voici la représentation : 1. Commandes utilisateurs (Ex : “man”) 2. Appels systèmes (Ex : “socket”) 3. Fonctions de la libc (Ex : “printf”) 4. Organisation de certains fichiers et protocoles (Ex : “nfs”) 5. Jeux et utilitaires sympas sur le système 6. Divers (Ex : “socket”) 7. Commandes d’administration Nous pouvons constater, que les manuels font non seulement réference à des utilitaires et commandes, mais aussi à des fonctions de la libc, des et même d’autres bibliothèques de programmation et des appels systèmes. C’est un aspect très pratique lorsqu’on développe, pour obtenir les prototypes des fonctions, leur valeurs de retour, le détail de ce qu’elles fonts. . . L’utilisation des manuels est très simple ; “man fonction ou commande”. La première chose à faire afin de bien se servir des manuels à notre disposition est “man man”. La disposition des informations au sein des manuels restera la même 8 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix d’une commande à l’autre, et d’une fonction à láutre. Il peut arriver que plusieurs manuels utilisent le même nom pour y accèder, il suffit alors de préciser en paramètre de la commande “man” dans quelle section rechercher. C’est le cas notamment de la fonction “socket” disponible à la fois dans la section 2 et la section 7 des manuels. Il suffit alors de faire soit “man 2 socket” ou “man 7 socket” pour avoir l’aide souhaitée. Biensûr cette démarche n’est faisable que lorsquón connait le nom des commandes ou des fonctions. Comment faire lorsque ce n’est pas le cas ? Tout simplement en faisant “man -k mot clé”, “apropos mot clé” ou bien “whatis mot clé”. Vous obtiendrez ainsi la liste des manuels contenant le mot clé désigné. <prompt_shell> man -k socket QSocketNotifier (3qt) - Support for socket callbacks accept (2) - accept a connection on a socket bind (2) - bind a name to a socket connect (2) - initiate a connection on a socket fuser (1) - identify processes using files or sockets getpeername (1) - get information about this or that end of the socket’s connection getsockname (2) - get socket name getsockopt, setsockopt (2) - get and set options on sockets listen (2) - listen for connections on a socket netpipes (1) - a package to manipulate BSD TCP/IP stream sockets perlipc (1) - Perl interprocess communication (signals, fifos, pipes, safe subprocesses, sockets, a recv, recvfrom, recvmsg (2) - receive a message from a socket send, sendto, sendmsg (2) - send a message from a socket sockdown (1) - shutdown(2) a socket socket (2) - create an endpoint for communication socket (n) - Open a TCP network connection socketcall (2) - socket system calls socketpair (2) - create a pair of connected sockets socklist (8) - display list of open sockets <prompt_shell> whatis socket socket (2) - create an endpoint for communication socket (n) - Open a TCP network connection <prompt_shell> Lorsque vous êtes dans un “man”, diverses commandes sont accessibles dont voici les plus interressantes : – <espace >- Avance dans le manuel d’une page entière. – <entrée >- Avance dans le manuel d’une ligne. – b - Recule dans le manuel d’une page – / <mot ou regexp >- Recherche l’occurence d’un mot ou d’une expression regulière1 . – q - Quitte le manuel Pour avoir la liste complètes des commandes accessibles dans un manuel, allez voir dans le manuel de “less” qui est une des commandes que “man” utilise pour éditer le fichier d’aide. 2.3.3 Les fichiers “info” Il existe encore une autre méthode pour accèder à une aide plus détaillée que les “man pages” ; ce sont les “info files”. Ils se trouvent généralement dans les répertoires “/usr/info”, “/usr/share/info” ou “/usr/local/info” et sont accessibles par le biais 1 C’est le motif d’une chaı̂ne de caractère 9 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix de la commande “info nom fichier info”. De même que pour “man” il est possible de retrouver dans quels fichiers “info” trouver les informations souhaitées en utilisant “info –apropos mot cle”. <prompt_shell> info -k socket "(libc)Socket Addresses" -- address of socket "(libc)Socket Addresses" -- binding a socket address "(libc)Byte Order" -- byte order conversion, for socket "(libc)Closing a Socket" -- closing a socket "(libc)Socket Concepts" -- communication style (of a socket) "(libc)Connecting" -- connecting a socket "(libc)Creating a Socket" -- creating a socket "(libc)Socket Pairs" -- creating a socket pair "(libc)Socket Concepts" -- data loss on sockets "(libc)Datagrams" -- datagram socket "(libc)Socket Concepts" -- domain (of socket) "(libc)Internet Namespace" -- Internet namespace, for sockets "(libc)Sockets" -- interprocess communication, with sockets "(libc)Socket Options" -- level, for socket options "(libc)Listening" -- listening (sockets) "(libc)Local Namespace" -- local namespace, for sockets "(libc)Socket Concepts" -- loss of data on sockets "(libc)Socket Addresses" -- name of socket "(libc)Socket Concepts" -- namespace (of socket) "(libc)Creating a Socket" -- opening a socket "(libc)Socket Pairs" -- opening a socket pair "(libc)Socket Concepts" -- protocol (of socket) "(libc)Transferring Data" -- reading from a socket "(libc)Closing a Socket" -- shutting down a socket "(libc)Sockets" -- socket "(libc)Socket Addresses" -- socket address (name) binding "(libc)Socket Concepts" -- socket domain "(libc)Socket Concepts" -- socket namespace "(libc)Socket Options" -- socket option level "(libc)Socket Options" -- socket options "(libc)Socket Pairs" -- socket pair "(libc)Socket Concepts" -- socket protocol "(libc)Closing a Socket" -- socket shutdown "(libc)Connecting" -- socket, client actions "(libc)Closing a Socket" -- socket, closing "(libc)Connecting" -- socket, connecting "(libc)Creating a Socket" -- socket, creating "(libc)Connecting" -- socket, initiating a connection "(libc)Accepting Connections" -- sockets, accepting connections "(libc)Listening" -- sockets, listening "(libc)Listening" -- sockets, server actions "(libc)Socket Concepts" -- stream (sockets) "(libc)Socket Concepts" -- style of communication (of a socket) "(libc)Out-of-Band Data" -- urgent socket condition "(libc)Transferring Data" -- writing to a socket "(libc)Creating a Socket" -- socket "(libc)Socket Pairs" -- socketpair "(libc)Constants for Sysconf" -- _SC_PII_SOCKET "(libc)Socket-Level Options" -- SOL_SOCKET "(libc)Socket-Level Options" -- sys/socket.h <1> "(libc)Socket Option Functions" -- sys/socket.h <2> "(libc)Sending Datagrams" -- sys/socket.h <3> "(libc)Socket Data Options" -- sys/socket.h <4> "(libc)Receiving Data" -- sys/socket.h <5> 10 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix "(libc)Sending Data" -- sys/socket.h <6> "(libc)Socket Pairs" -- sys/socket.h <7> "(libc)Constants for Sysconf" -- _SC_PII_SOCKET "(libc)Socket-Level Options" -- SOL_SOCKET "(libc)Socket-Level Options" -- sys/socket.h <1> "(libc)Socket Option Functions" -- sys/socket.h <2> "(libc)Sending Datagrams" -- sys/socket.h <3> "(libc)Socket Data Options" -- sys/socket.h <4> "(libc)Receiving Data" -- sys/socket.h <5> "(libc)Sending Data" -- sys/socket.h <6> "(libc)Socket Pairs" -- sys/socket.h <7> "(libc)Closing a Socket" -- sys/socket.h <8> "(libc)Creating a Socket" -- sys/socket.h <9> "(libc)Internet Namespace" -- sys/socket.h <10> "(libc)Local Namespace Details" -- sys/socket.h <11> "(libc)Reading Address" -- sys/socket.h <12> "(libc)Setting Address" -- sys/socket.h <13> "(libc)Address Formats" -- sys/socket.h <14> "(libc)Communication Styles" -- sys/socket.h <prompt_shell> Le déplacement au sein d’un fichier info est diffèrent de celui d’un “man”. Les fichiers info se composent de noeuds (titres de parties) et de pages relatives à ces noeuds. Voici une petite liste de commande utiles pour se déplacer dans les fichiers info : – n - Se déplacer au noeud suivant. – p - Se déplacer au noeud précédent. – u - Remonter d’un noeud – <entrée >sur un titre avec une étoile - Se déplace dans ce noeud – <espace >- Descend d’une page dans la page courante 2.3.4 Resources sur le “Net” Les “HOW-TO” Cette fois nous entrons dans le monde plus spécifique de GNU/Linux. Les “Howto” sont des guides et didactitiel sur des domaines bien particuliers (Ex : Comment enregistrer des CD sous Linux). Ils sont disponibles sous plusieurs formats et sont accessible sur le site [8] dédié qui est le site officiel du projet LDP (“Linux Documentation Project”). Vous retrouverez notamment sur ce site, les “man-pages” à jour traduits dans diverses langues, pour ceux qui náiment pas la langue de Shakespeare. Le “Handbook” de FreeBSD Pour ceux qui utilisent FreeBSD, à sur leur site dans la section “Handbook”[9], vous trouverez, un peu à la manière des “How-To” des didactitiels sur comment faire telles ou telles tâches. Documentation pour NetBSD NetBSD, dont le but essentiel est d’être portable sur un maximum d’architec11 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix tures dispose également d’un bonne documentation sur leur site dans la partie “documentation”[10]. 3 Découverte de quelques commandes de bases Nous allons lister ici, une suite de commandes indispensables à l’administration de votre machine sous UNIX : Operations sur fichiers et répertoires ls rep Liste le contenu d’un repertoire (-R pour lister les autres repertoires rencontrés. cp source destination Copie un fichier source vers un fichier destination (-R pour un repertoire). mv source destination Bouge le contenu de d’un fichier ou repertoire source vers fichier ou repertoire de destination (Utilisé aussi pour renommer un fichier ou repertoire). mkdir rep Créé un repertoire. rm fichier Efface un fichier (-r pour effacer un repertoire en entier). ln source destination Crèe un lien destination qui va pointer sur source (pour un lien symbolique, il suffit d’ajouter l’option “-s”) touch fichier ou repertoire Met à jour la date de modification du fichier. Lecture de fichier cat fichier Lit le contenu du fichier. more fichier Lit le contenu d’un fichier page par page. (Il doit lire l’intègralité du fichier avant de l’afficher). less fichier Comme “more” sauf qu’il n’est pas obligé de lire l’intègralité du fichier. tail fichier N’affiche que les dernières lignes d’un fichier (d’autres options permettent de spécifier combien de lignes afficher). find répertoire options Permet de rechercher des fichiers suivant une quantité incroyable de critères. grep ”” fichier Re Il y en a bien d’autres, mais à ce stade, il n’est pas encore nécessaire de les voirs. Nous les découvrirons au fur et à mesure des thèmes qui vont suivre. Lorsqu’on liste le contenu d’un répertoire, la diffèrence entre un fichier ne saute pas aux yeux. Pour ce faire, nous allons ajouter l’options -l à la commande ls. <prompt_shell> cd /tmp <prompt_shell> mkdir un_repertoire <prompt_shell> touch un_fichier <prompt_shell> ln -s un_fichier un_lien <prompt_shell> ls un_fichier un_lien un_repertoire <prompt_shell> ls -l total 4 -rw-r--r-1 ualc galc 0 Dec 12 3 00:42 un_fichier Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix lrwxrwxrwx 1 ualc drwxr-xr-x 2 ualc <prompt_shell> galc galc 10 Dec 4096 Dec 3 00:42 un_lien -> un_fichier 3 00:42 un_repertoire Il suffit de regarder la partie à l’extrême gauche du terminal. Un fichier ordinaire est symbolisé par un “-”, un répertoire par un “d” et un lien symbolique par un “l”. Pour les autres champs : |-> Type de fichier | | |-> Droits sur le fichier | __________________________ |/ \ -rw-r--r-1 ualc galc 0 Dec 3 00:42 un_fichier | | \__________/ |-> Nombre de liens |-> Date de modification | |-> Taille du fichier 4 “Pipes” et Redirections Nous voici confronté à une des choses qui a contribué à l’engouement de beaucoup de personnes pour le monde Unix. Les “Pipes” et “Redirections”. 4.1 Les flux standards Les flux standards sont au nombre de trois ; STDIN (0), STDOUT(1) et STDERR (2). STDIN n’est ni plus ni moins que l’entrée au clavier (dite “entrée standard”), STDOUT la sortie à l’écran (dite “sortie standard”) et STDERR la sortie standard des erreurs. 4.1.1 Redirections Ainsi, si nous exécutons un programme comme “ls”, il va afficher le résultat à l’écran, donc sur la sortie standard. Il est possible de rediriger ces diffèrents flux vers des fichiers, d’autres flux. . . Ceci se fait par le biais des signes “<” et “>”. Une commande “commande >un fichier” va crèer un fichier “un fichier” contenant le résultat de la commande “commande”. De même, avec le signe “<” au lieu de “>” aurait utilisé le contenu du fichier “un fichier” en entrée de la commande “commande”. Ca n’est pas très clair, regardez l’exemples : <prompt_shell> <prompt_shell> total 4872 drwxr-xr-x 2 drwxr-xr-x 22 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 lrwxrwxrwx 1 -rwxr-xr-x 1 -rwxr-xr-x 1 cd /tmp ls -la /bin root root root root root root root root root bin root root root bin bin root bin bin 4096 4096 3180 54905 477692 295012 5 27380 6708 Nov Nov Jan May Mar Sep Nov May May 13 27 19:40 . 27 19:40 .. 22 2001 arch 22 2001 attr 22 2000 bash 3 1999 bash1 10 2000 bunzip2 -> bzip2 18 2000 bzip2 18 2000 bzip2recover Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 ... <prompt_shell> <prompt_shell> total 4872 drwxr-xr-x 2 drwxr-xr-x 22 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 lrwxrwxrwx 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 -rwxr-xr-x 1 ... <prompt_shell> root root root root bin root root bin 10332 3366 61019 11200 May 13 Feb 8 May 22 Sep 27 2000 2001 2001 1999 cat catchsegv chacl chgrp ls -la /bin > un_fichier cat un_fichier root root root root root root root root root root root root root bin root root root bin bin root bin bin bin root root bin 4096 4096 3180 54905 477692 295012 5 27380 6708 10332 3366 61019 11200 Nov Nov Jan May Mar Sep Nov May May May Feb May Sep 27 19:40 . 27 19:40 .. 22 2001 arch 22 2001 attr 22 2000 bash 3 1999 bash1 10 2000 bunzip2 -> bzip2 18 2000 bzip2 18 2000 bzip2recover 13 2000 cat 8 2001 catchsegv 22 2001 chacl 27 1999 chgrp Si on utilise plusieurs fois des redirections sur un même fichier avec ce que l’on a vu, le fichier est écrasé à chaque fois. Pour éviter celà il est possible d’utiliser “<<” à la place de “<” et “>>” à la place de “>” ; auquel cas les données seront concaténées dans le fichier. 4.1.2 “Pipes” Les “pipes” (“—”) quand à eux sont “des voies de communication” d’un processus vers un autre. Par exemple si nous faisons “commande 1 — commande 2”, le résultat de la commande “commande 1” va être utilisé en entrée de la commande “commande 2”. Il est possible de chaı̂ner ce type de commande autant que l’on veut. Comme au-dessus, rien de tel qu’un exemple : <prompt_shell> <prompt_shell> lrwxrwxrwx 1 -rwxr-xr-x 1 -rwxr-xr-x 1 <prompt_shell> lrwxrwxrwx 1 -rwxr-xr-x 1 -rwxr-xr-x 1 <promp_shell> 5 ls -la /bin > un_fichier grep "bzip" un_fichier root root 5 root bin 27380 root bin 6708 ls -la /bin | grep "bzip" root root 5 root bin 27380 root bin 6708 Feb 12 May 18 May 18 2001 bunzip2 -> bzip2 2000 bzip2 2000 bzip2recover Feb 12 May 18 May 18 2001 bunzip2 -> bzip2 2000 bzip2 2000 bzip2recover Gestion des droits des fichiers Comment se gèrent sous Unix les politiques de droits des fichiers ? Pour ce faire, nous avons à notre disposition une liste d’outils dont “chmod”, “chown” et “chgrp”. 5.1 Comment sont organisés les droits d’un fichier/répertoire ? -rw-r--r-- 1 ualc galc 0 Dec 14 3 00:42 un_fichier Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix (1)(2)(3) 1. 2. 3. 4. 5. (4) (5) Droits pour le propriétaire du fichier ou répertoire Droits pour le groupe spécifié Droits pour le reste du monde Propriétaire du fichier ou répertoire Groupe auquel s’affectent les droits spécifiés en (2) Les trois premières valeurs citées sont elles-mêmes divisées en trois parties (la signification sur un fichier et sur un répertoire ne sera pas toujours la même) : Fichier r - Accès en lecture (4) w - Accès en écriture (2) x - Permet l’exécution (1) Repertoire r - Permet de lister le contenu du répertoire (4) w - Droits d’écriture dans le repertoire (2) x - Permet de traverser le repertoire (1). A la place des “flags” d’exécution, il est possible d’avoir soit un “t” soit un “s”. Appliqué sur un répertoire “t” indique que seul les propriétaires du répertoire et les créateurs des fichiers dans celui-ci pourront les effacer. Pour le “s”, si il est présent pour les droits du propriétaire, il est appelé “suid bit” ou “set uid bit”. Lorsqu’un utilisateur va exécuter ce fichier il va hériter des droits du propriétaire pour l’exécution. C’est particulièrement utile pour permettre à certaines fonctionnalités normalement accessible qu’au “root” de l’être également pour d’autres utilisateurs. Si le “s” est fixé sur le groupe, les propriétés sont les mêmes qu’au dessus, mais s’appliquent sur le groupe. 5.2 Mise en place Pour mettre en place les droits, nous allons utiliser “chmod droits fichier ou repertoire” où les droits peuvent s’exprimer là encore, de deux façons diffèrentes. – Soit par une suite de valeurs octales. – Soit par une suite de signes de type “r”, “w”, “x” plus explicites. Dans le premier cas, nous aurons 3 ou 4 valeurs octales qui corresponderont à l’addition des valeurs (entre parenthèse dans la liste de droits ci-dessus) de chaque droits souhaités pour respectivement, le propriétaire, le groupe et le reste du monde. Imaginons que nous souhaitions affecter les droits de lecture, écriture et exécution au propriétaire, lecture et exécution pour le groupe, et exécution seule pour le reste du monde. Nous devrons procéder comme suit : lecture, écriture, exécution : 4 + 2 +1=7 lecture, exécution : 4 + 1 = 5 lecture : 1 = 1 Nous devrons alors faire la commande “chmod 754 fichier ou répertoire”. Ce n’est toujours pas très clair ? Pas de problème regardez l’exemple suivant : 15 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix <prompt_shell> cd /tmp <prompt_shell> mkdir repalc <prompt_shell> ls -l total 4 drwxr-xr-x 2 ualc galc 4096 Dec 4 <prompt_shell> chmod 751 repalc <prompt_shell> ls -l total 4 drwxr-x--x 2 ualc galc 4096 Dec 4 <prompt_shell> chmod 111 repalc <prompt_shell> ls -l total 4 d--x--x--x 2 ualc galc 4096 Dec 4 <prompt_shell> chmod 222 repalc <prompt_shell> ls -l total 4 d-w--w--w2 ualc galc 4096 Dec 4 <prompt_shell> chmod 444 repalc <prompt_shell> ls -l total 4 dr--r--r-2 ualc galc 4096 Dec 4 <prompt_shell> touch repalc/un_fichier touch: repalc/un_fichier: Permission denied <prompt_shell> chmod 300 repalc <prompt_shell> ls -l total 4 d-wx-----2 ualc galc 4096 Dec 4 <prompt_shell> touch repalc/un_fichier <prompt_shell> cd repalc <prompt_shell> ls ls: .: Permission denied <prompt_shell> 00:34 repalc 00:34 repalc 00:34 repalc 00:34 repalc 00:34 repalc 00:49 repalc Voici comment faire pour la seconde méthode. Le principe est très simple ; il suffit de préfixer d’un identifiant “o” (le reste du monde), “u” (propriétaire) ou “g” (groupe) pour indiquer sur qui les droits vont prendre effet, puis on préfixe d’un “+” ou d’un “-” aux expressions “r”, “w”, “x” pour dire que l’on souhaite activer ou désactiver ces droits. Toujours aussi peu clair, reprenons le cas d’étude précédent : lecture, écriture, exécution : u+rwx lecture, exécution : g+rx-w lecture : o+r-wx Nous devrons alors appliquer la commande suivante “chmod u+rwx,g+rx-w,o+rwx fichier ou répertoire”. Si nous voulons faire exactement pareil que la session précédente d’exemple : <prompt_shell> <prompt_shell> <prompt_shell> total 4 drwxr-xr-x 2 <prompt_shell> <prompt_shell> total 4 drwxr-x--x 2 <prompt_shell> <prompt_shell> total 4 d--x--x--x 2 <prompt_shell> <prompt_shell> cd /tmp mkdir repalc ls -l ualc galc 4096 Dec 4 00:34 repalc chmod u+rwx,g+rx-w,o+r-wx repalc ls -l ualc galc chmod u-rx,g-x ls -l 4096 Dec 4 00:34 repalc ualc galc 4096 Dec 4 00:34 repalc chmod u+w-x,g+w-x,o+w-x repalc ls -l 16 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix total 4 d-w--w--w2 ualc galc 4096 Dec 4 00:34 repalc <prompt_shell> chmod u+r-w,g+r-w,o+r-w repalc <prompt_shell> ls -l total 4 dr--r--r-2 ualc galc 4096 Dec 4 00:34 repalc <prompt_shell> touch repalc/un_fichier touch: repalc/un_fichier: Permission denied <prompt_shell> chmod u+wx-r,g-r,o-r repalc <prompt_shell> ls -l total 4 d-wx-----2 ualc galc 4096 Dec 4 00:49 repalc <prompt_shell> touch repalc/un_fichier <prompt_shell> cd repalc <prompt_shell> ls ls: .: Permission denied <prompt_shell> Pour ce qui est des “suid”, “sgid” et “sticky” bits, nous allons procèder comme suit avec des valeurs octales : <prompt_shell> <prompt_shell> <prompt_shell> total 4 drwxr-xr-x 2 -rw-r--r-1 <prompt_shell> <prompt_shell> total 4 drwxr-xr-t 2 -rw-r--r-1 <prompt_shell> <prompt_shell> total 4 drwxr-xr-t 2 -rwxr-sr-x 1 <prompt_shell> <prompt_shell> total 4 drwxr-xr-t 2 -rwsr-xr-x 1 <prompt_shell> touch un_fichier mkdir repalc ls -l ualc galc 4096 Dec ualc galc 0 Dec chmod 1755 repalc ls -l 4 01:30 repalc 4 01:29 un_fichier ualc galc 4096 Dec ualc galc 0 Dec chmod 2655 un_fichier ls -l 4 01:30 repalc 4 01:29 un_fichier ualc galc 4096 Dec ualc galc 0 Dec chmod 4655 un_fichier ls -l 4 01:30 repalc 4 01:29 un_fichier ualc galc ualc galc 4 01:30 repalc 4 01:29 un_fichier 4096 Dec 0 Dec Maintenant avec l’autre méthode : <prompt_shell> <prompt_shell> <prompt_shell> total 4 drwxr-xr-x 2 -rw-r--r-1 <prompt_shell> <prompt_shell> total 4 drwxr-xr-t 2 -rw-r--r-1 <prompt_shell> <prompt_shell> total 4 touch un_fichier mkdir repalc ls -l ualc galc ualc galc chmod +t repalc ls -l 4096 Dec 0 Dec 4 01:30 repalc 4 01:29 un_fichier ualc galc 4096 Dec ualc galc 0 Dec chmod g+xs un_fichier ls -l 4 01:30 repalc 4 01:29 un_fichier 17 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix drwxr-xr-t 2 -rwxr-sr-x 1 <prompt_shell> <prompt_shell> total 4 drwxr-xr-t 2 -rwsr-xr-x 1 <prompt_shell> 5.3 ualc galc 4096 Dec ualc galc 0 Dec chmod u+x,g-s un_fichier ls -l 4 01:30 repalc 4 01:29 un_fichier ualc galc ualc galc 4 01:30 repalc 4 01:29 un_fichier 4096 Dec 0 Dec Changement de propriétaire et de groupe Interressons nous désormais au moyen de changer un fichier ou répertoire de propriétaire. Dans ce contexte ce sont “chown” et “chgrp” qui vont nous venir en aide. Nous verrons que ce dernier n’est pas indispensable. La syntaxe est simple “chown nouveau propriétaire fichier ou repertoire”, “chgrp nouveau groupe fichier ou repertoire”, ou bien encore “chown nouveau propriétaire :nouveau groupe fichier ou répertoire”. Biensûr, les groupes et utilisateurs doivent exister. Pour ce faire nous pouvons consulter le contenu des fichiers “/etc/passwd” et “/etc/group”. <prompt_shell> cd /tmp <prompt_shell> touch un_fichier <prompt_shell> ls -l un_fichier -rw-r--r-1 danseurf users 0 Dec <prompt_shell> cat /etc/group root::0:root bin::1:root,bin,daemon daemon::2:root,bin,daemon sys::3:root,bin,adm adm::4:root,adm,daemon tty::5: lp::7:lp mem::8: kmem::9: man::15: nobody::98:nobody nogroup::99: users::100:ualc console:x:101: nofiles:x:4243: <prompt_shell> chown nobody:nobody un_fichier -rw-r--r-1 nobody nobody 0 Dec <prompt_shell> 5.4 4 01:29 un_fichier 4 01:29 un_fichier Gestion des comptes utilisateurs et groupes Les comptes utilisateurs et les groupes sont les entités qui vont vous permettre de vous authentifier, de gèrer des droits d’accès à certains fichiers ou utilitaires. . .D’avoir une première approche de la securité de votre système. Par défaut, vous êtes en utilisateur “root” sur votre système, lorsque vous venez juste de l’installer. Il est préconisé de n’utiliser ce compte que pour des tâches administratives ; surtout lorsqu’on débute. On évite ainsi d’irremediable commande du type “rm -rf /”. Dans ce cas, le résultat est garantit. Pour ce faire nous avons à notre disposi- 18 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix tion, quelques utilitaires qui vont modifier les fichiers “/etc/passwd”, “/etc/group”, “/etc/shadow” et “/etc/gshadow”. 5.4.1 Ajouter/Modifier/Effacer un utilisateur Le fichier “/etc/passwd” est composé de plusieurs champs : “1 :2 :3 :4 :5 :6 :7” 1. 2. 3. 4. 5. 6. 7. Nom de l’utilisateur Anciennement l’emplacement du mot de passe en crypté. UID ( Identifiant unique de l’utilisateur ) GID ( Identifiant de groupe primaire auquel appartient l’utilisateur ) Commentaires sur l’utilisateur “Home directory”, répertoire d’arrivée lors du login Emplacement du shell choisi Avec la montée en puissance des machines, le mot de passe, á l’origine présent dans “/etc/passwd”, donc lisibles par tous le monde, même cryptés s’est retrouvé dans le fichier “/etc/shadow”, qui lui n’est normalement lisible que par le root, afin d’éviter des attaques de type “Brute force” ou “attaque par dictionnaire”. Ce n’est pas forcément le cas sur un certain nombre de systèmes comme IRIX ou Solaris, même si ce type de politique peut être mis en place. Par convention, il a été definit que les UID de 0 à 999 étaient réservés à une utilisation système, et que le root avait l’UID 0 (ainsi que le GID 0). Comme le fichier “/etc/passwd”, “/etc/shadow” est composé de plusieurs champs qui va contenir le mot de passe crypté et les diverses informations quand à son delais d’expiration. Pour la création d’un compte utilisateur nous allons utiliser “useradd”, “usermod” pour le modifier et “userdel” pour l’effacer, “passwd” pour changer son mot de passe et “chage” pour modifier ses paramètres d’expiration. Imaginons que nous souhaitions un créer un compte avec les contraintes suivantes : – Le compte doit s’appeler “bob” – Le mot de passe sera “totoenslip” – Son “home directory” sera dans le /home – Qu’il soit désacivé le 21 décembre 2006 – Qu’il fasse partie du groupe “users” – Que sont shell soit “zsh” placé dans “/usr/bin/” Pour savoir comment passer les paramètre “useradd” ou “man useradd”. Biensûr il faut être root pour faire celà. <prompt_shell> useradd -e 2006-12-21 -g users -s /usr/bin/zsh bob <prompt_shell> tail -n 1 /etc/passwd /etc/shadow ==> /etc/passwd <== bob:x:1014:100::/home:/usr/bin/zsh ==> /etc/shadow <== bob:!:11661:0:99999:7::13503: <prompt_shell> passwd bob Changing password for bob Enter the new password (minimum of 5, maximum of 127 characters) Please use a combination of upper and lower case letters and numbers. 19 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix New password: ************************************************** Re-enter new password: ******************************************************** Password changed. <prompt_shell> tail name -n 1 /etc/passwd /etc/shadow ==> /etc/passwd <== bob:x:1014:100::/home:/usr/bin/zsh ==> /etc/shadow <== bob:$1$/hxYw1Z/$VsqArdENg1cxhVsaQE1FY1:11661:0:99999:7::13503: <prompt_shell> Petite remarque, lorsque vous regardez dans le répertoire “/home/” vous devriez voir qu’un répertoire du nom de l’utilisateur s’est créé. C’est un paramètre par défaut. Si vous souhaitiez en avoir d’autres, il possible de les fixer par l’option “-D”. Ainsi vous éviterez de repasser une multitude de fois les même paramètres. Maintenant je souhaite : – Changer le shell pour mettre à la place “bash” qui se trouve dans “/bin/”. – Le mot de passe doit être changé tous les 30 jours. – Je souhaite avertir l’utilisateur 4 jours avant qu’il doit changer son mot de passe. Cette fois, nous allons utiliser “passwd”, “chage” et ”usermod” (allez toujours voir dans les man assosciés pour avoir de plus amples informations) : <prompt_shell> passwd -x 30 -w 4 bob <prompt_shell> tail -n 1 /etc/shadow bob:$1$/hxYw1Z/$VsqArdENg1cxhVsaQE1FY1:11661:0:30:4::13503: <prompt_shell> usermod -s /bin/bash bob <prompt_shell> tail -n 1 /etc/passwd bob:x:1014:100::/home:/bin/bash <prompt_shell> chage -l bob Minimum: 0 Maximum: 30 Warning: 4 Inactive: -1 Last Change: Dec 05, 2001 Password Expires: Jan 04, 2002 Password Inactive: Never Account Expires: Dec 21, 2006 <prompt_shell> Remarque : lorsque vous êtes connecté avec un nom d’utilisateur, il est possible dans le shell courant de prendre les droits d’un autre utilisateur avec la commande “su nom utilisateur” (“su - nom utilisateur” pour utiliser les variables d’envirronement propres à cet utilisateur). 5.4.2 Ajouter/Modifier/Effacer un groupe Maintenant, nous allons nous interresser aux fichiers “/etc/group” et “/etc/gshadow”. Là encore, comme il est possible de mettre un mot de passe pour les groupes, et que “/etc/group” est lisible par tous les utilisateurs, les “shadow utils” sont là pour veiller dans le fichier “/etc/gshadow”. Les gestion des groupes sous Unix permet un niveau de délégations de droits à un ou plusieurs utilisateurs. Ainsi, un utilisateur peut administrer les utilisateurs qui font partie d’un certain groupe, et le mot de 20 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix passe qui l’accompagne. Ce n’est pas utilisé très souvent, mais celà reste tout de même interressant à connaı̂tre. Voici comment s’organisent les champs de “/etc/gshadow” : 1 :2 :3 :4 1. Nom du groupe 2. Mot de passe du groupe 3. GID (Identifiant unique du groupe) 4. Liste des utilisateurs en faisant partie, séparés par une virgule Les outils qui vont être utilisés pour modifier ces fichiers sont “groupadd”, “groupmod”, “gpasswd”, “groupdel” et “passwd”. Nous voulons créer un groupe s’appelant “galc” et dont le GID sera “5445” et pour lequel bob sera membre. <prompt_shell> groupadd galc <prompt_shell> tail -n 1 /etc/group /etc/gshadow ==> /etc/group <== galc:x:4245: ==> /etc/gshadow <== galc:!:: <prompt_shell> gpasswd -M bob galc <prompt_shell> tail -n 1 /etc/group /etc/gshadow ==> /etc/group <== galc:x:4245:bob ==> /etc/gshadow <== galc:!::bob <prompt_shell> Très simple, non ? Maintenant, je souhaiterai renommer le groupe que je viens de créer en “groupe bidon”. <prompt_shell> groupmod -n groupe_bidon galc <prompt_shell> tail -n 1 /etc/group /etc/gshadow ==> /etc/group <== groupe_bidon:x:4245:bob ==> /etc/gshadow <== groupe_bidon:!::bob <prompt_shell> Pour ce qui est de mettre un mot de passe au niveau du groupe (“passwd g nom du groupe”) et les paramètres pour définir un ou plusieurs utilisateurs en tant qu’administrateur d’un groupe (“gpasswd -A nom utilisateur nom groupe”) reportez-vous aux “man pages” respectives. Lorsque nous sommes dans un groupe, (en général le primaire, par défaut), pour beneficier des droits d’un groupes diffèrent du notre, il suffit d’utiliser la commande “newgrp nom groupe”. Comme pour un changement d’utilisateur, on vous demandera d’entrer le mot de passe du groupe. 5.4.3 Le fichier login.defs Ce fichier paufine un peu la logique de securité données autour des mots de passe et authentifications. Il contient un certain nombre de mots clés auxquels on peu affecter des valeurs. Ils permettent par exemple de gèrer combien de fois il va 21 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix être possible de réessayer son mot de passe, combien de temps va s’écouler entre les diffèrentes tentatives. . . 6 Gestion des disques Que vous souhaitiez utiliser une partition fat32, ntfs, hpfs, iso9660 ou bien d’autres, il y a de grandes chances pour que ce soit supporté. De même, alors que vous éstimez que votre espace disque n’est plus suffisant, il vous suffira de “monter” une partition de votre nouveau disque dur et le “brancher” à n’importe quelle partie de votre arborescence. Une fois la petite tâche administrative effectuée, votre arborescence semblera être la même que celle que vous aviez auparavant, l’espace disque en plus. 6.1 Partitionnement Les outils de partitionnement seront diffèrent d’un Unix à l’autre. Dans l’état actuel de la documentation, nous allons nous interresser au monde Linux. Pour cette tâche, l’utilitaire sous GNU/Linux s’appele “fdisk” auquel nous allons passer en paramètre le chemin vers le periphèrique à partitionner. 6.1.1 Organisation de quelques périphèriques dans le “/dev/” Nous avons vu précédemment que nous avions dans le repertoire “/dev/” les entrées de divers periphèriques. Ces entrées sont caractèrisée comme des fichiers. Il peuvent d’ailleurs très bien se comporter comme tels. Sur certains d’entre eux, essayer de faire un cat ou tout simplement de rediriger la sortie d’un fichier ou d’un programme vers eux, vous obtiendrez un certain nombre de choses inattendues. Un test probant consiste à rediriger un fichier binaire vers “/dev/audio”, vos oreilles devraient apprécier. Les disques sont diffèrenciés suivant qu’ils sont IDE ou SCSI. Sur la plupart des installations de votre GNU/Linux, les periphèriques IDE seront caractèrisés par des entrées du type “hdalpha” où alpha correspond à l’emplacement du périphèrique sur la chaı̂ne IDE qui sera definit par une lettre. Ainsi, si nous souhaitons accèder au periphèrique “master” du premier controleur IDE, le périphèrique se nommera “hda”. De même, si nous souhaitons accèder à la seconde partition de ce même disque, il suffira d’ajouter le numero de la partition au nom du périphèrique (pour l’exemple : “hda2”). Pour les périphèriques SCSI, la démarche reste la même, hors mis que les entrées seront du type “sdalpha” pour le disque, “scdnum” pour les lecteurs cd. . .Même si cette notation est la plus fréquemment rencontrée, une autre approche du répertoire “/dev/” se developpe petit à petit ; c’est celle que propose le “devfs”. Le principe consiste à rendre plus lisible le contenu du “/dev/” avec des répertoires symbolisant par exemple que nous souhaitons acceder à un periphèrique SCSI, sur tel chaı̂ne, tel ID. . .Voici ce que pourrait donner láccès à un lecteur cd scsi : “/dev/scsi/host0/bus0/target4/lun0/cd” C’est quand même bien plus compréhensible. Cette approche est du même type que celle qu’on peut retrouver sur IRIX (Unix de Silicon Graphics) par exemple. 22 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Si vous ne savez pas comment retrouver l’appelation de certains périphèrique, l’utilitaire “dmesg” devrait vous venir en aide. Voici un exemple de comment peuvent se representer les peripheriques via “dmesg” qui reprend les messages donnés par le noyau lors du boot ou l’ont peut distinguer le nom qu’a affecté le noyau à deux disques SCSI et leurs partitions : ... SCSI device sda: 8925000 512-byte hdwr sectors (4570 MB) /dev/scsi/host0/bus0/target3/lun0: p1 SCSI device sdb: 17836668 512-byte hdwr sectors (9132 MB) /dev/scsi/host0/bus0/target6/lun0: p1 p2 p3 < p5 p6 > ... 6.1.2 Edition de la table des partitions Une fois que nous avons cerné le périphèrique à éditer, nous allons pouvoir éditer la table des partitions. Sur un système GNU/Linux, vous allez être contraint de crèer au-moins deux partitions. La première va contenir le “/”, et la seconde va être le “swap”. Pour le reste, si vous souhaitez avoir une partition pour “/usr”, “/tmp” ou autre, libre à vous, et c’est même plutôt conseillé pour un soucis d’intègrité du système. Nous verrons comment procèder pour associer par exemple “/dev/hda3” avec “/usr”. Imaginons que nous souhaitons partitionner notre “master” sur le premier controleur IDE. Nous voulons disposer d’une partition de “swap” de 128 Mo et le reste du disque pour le repertoire root (“/”). Voyons par la pratique : <prompt_shell> fdisk /dev/hda The number of cylinders for this disk is set to 1826. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): p Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1826, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1826, default 1826): +128M Command (m for help): p Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders Units = cylinders of 16065 * 512 bytes Device Boot /dev/hda1 Start 1 End 17 Blocks 136521 Id 83 23 System Linux Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 2 First cylinder (18-1826, default 18): Using default value 18 Last cylinder or +size or +sizeM or +sizeK (18-1826, default 1826): Using default value 1826 Command (m for help): p Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 1 17 136521 83 Linux /dev/hda2 18 1826 14530792+ 5 Extended Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (18-1826, default 18): Using default value 18 Last cylinder or +size or +sizeM or +sizeK (18-1826, default 1826): Using default value 1826 Command (m for help): p Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders Units = cylinders of 16065 * 512 bytes Device Boot /dev/hda1 /dev/hda2 /dev/hda5 Start 1 18 18 End 17 1826 1826 Blocks 136521 14530792+ 14530761 Id 83 5 83 System Linux Extended Linux Command (m for help): t Partition number (1-5): 1 Hex code (type L to list codes): L 0 1 2 3 4 5 6 7 8 9 a b c e f Empty FAT12 XENIX root XENIX usr FAT16 <32M Extended FAT16 HPFS/NTFS AIX AIX bootable OS/2 Boot Manag Win95 FAT32 Win95 FAT32 (LB Win95 FAT16 (LB Win95 Ext’d (LB 18 1b 1c 1e 24 39 3c 40 41 42 4d 4e 4f 50 51 AST Windows swa Hidden Win95 FA Hidden Win95 FA Hidden Win95 FA NEC DOS Plan 9 PartitionMagic Venix 80286 PPC PReP Boot SFS QNX4.x QNX4.x 2nd part QNX4.x 3rd part OnTrack DM OnTrack DM6 Aux 61 63 64 65 70 75 80 81 82 83 84 85 86 87 8e SpeedStor GNU HURD or Sys Novell Netware Novell Netware DiskSecure Mult PC/IX Old Minix Minix / old Lin Linux swap Linux OS/2 hidden C: Linux extended NTFS volume set NTFS volume set Linux LVM 24 a6 a7 b7 b8 c1 c4 c6 c7 da db e1 e3 e4 eb f1 OpenBSD NeXTSTEP BSDI fs BSDI swap DRDOS/sec (FATDRDOS/sec (FATDRDOS/sec (FATSyrinx Non-FS data CP/M / CTOS / . DOS access DOS R/O SpeedStor BeOS fs SpeedStor Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix 10 OPUS 11 Hidden FAT12 12 Compaq diagnost 14 Hidden FAT16 <3 16 Hidden FAT16 17 Hidden HPFS/NTF Hex code (type L to Changed system type 52 CP/M 93 Amoeba f4 53 OnTrack DM6 Aux 94 Amoeba BBT f2 54 OnTrackDM6 9f BSD/OS fd 55 EZ-Drive a0 IBM Thinkpad hi fe 56 Golden Bow a5 BSD/386 ff 5c Priam Edisk list codes): 82 of partition 1 to 82 (Linux swap) SpeedStor DOS secondary Linux raid auto LANstep BBT Command (m for help): p Disk /dev/hda: 255 heads, 63 sectors, 1826 cylinders Units = cylinders of 16065 * 512 bytes Device Boot /dev/hda1 /dev/hda2 /dev/hda5 Start 1 18 18 End 17 1826 1826 Blocks 136521 14530792+ 14530761 Id 82 5 83 System Linux swap Extended Linux Command (m for help): w Syncing disks <prompt_shell> Il est clair, qu’hormis son nom, “fdisk” est très loin de son homologue sous DOS. Une remarque concèrnant les partitions bootables ou non, si vous souhaitez “booter” sur une partition plutôt qu’une autre, lors de l’invite de commande de “fdisk”, il est possible de taper la commande “a” qui va vous demander sur quel partition mettre le “flag” indiquant où vous souhaitez démarrer. Autre remarque, l’identifiant affecté aux partitions suit la notation suivante : – Les partitions primaires auront un identifiant allant de 1 à 4 compris – Les partitions logiques auront des identifiants superieurs ou égaux à 5 6.1.3 Formatage de la partition au système de fichier souhaité Une fois encore, les utilitaires vont varier d’un Unix à l’autre. Comme ci-dessus, nous allons nous cantonner pour l’instant au cadre de GNU/Linux. La plupart du temps, il suffira d’appeler la commande “mknom du fs” suivit de la partition. Toutefois, en ce faisant, les paramètres par defauts s’appliqueront, si ce n’est pas ce que vous souhaitez (Ex : changer la taille des blocs), tapez simplement “man mknom du fs”, “man mkfs”, ou “mkfs -h”. 6.2 Association periphérique / point de montage Une fois nos partitions “prêtes à l’emploi” parceque nous les avons conçu ou tout simplement parcequ’elles existent déjà (Ex : des partitions Windows2k), il va falloir qu’on puisse y accèder quelquepart dans notre arborescence. Celà peut se faire n’importe où. Par convention, on dispose dans le répertoire “/mnt/” les répertoires qui vont être assosciés aux péripheriques n’intervenants pas dans l’arborescence “principale” tels que les lecteurs cd, disquette, zip, partitions Windows. . .Une fois que nous avons définit l’endroit qui servira pour accèder à une partition ou péripherique, et que nous l’avons créé par la simple utilisation de “mkdir”, il va falloir faire l’assosciation péripherique et cette entrée préparée que l’on appelle “point de montage”. 25 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Ce processus d’assosciation est naturellement appelé, “montage”. 6.2.1 Utilisation de la commande “mount” La commande “mount”, comme son nom l’indique va permettre de monter des partitions, et “umount” les démonter. La syntaxe générale est la suivante : mount -t type de fs /dev/péripherique ou partition /point de montage Appelée seule, “mount” affiche les montages actuels avec leur type de fichiers respectifs et les options entre parenthèses. Ces informations peuvent également être trouvées dans le fichier “/etc/mtab”. Il est possible en plus de l’argument “-t” lui en passer d’autres, dont “-o” qui permet de definir les options. Elles peuvent par exemple permettre à tous le monde de monter la partition, qu’à certaines personnes, qu’on n’ait les droits qu’en lecture ou en lecture/écriture. Exemple de montage d’un lecteur CD : <prompt_shell> mount /dev/hda5 on / type ext2 (rw) none on /proc type proc (rw) <prompt_shell> ls /mnt/Cd <prompt_shell> mount -o ro -t iso9660 /dev/hdc /mnt/Cd <prompt_shell> ls /mnt/Cd BOB SINCLAR - Champs Elys?es Dimitri from Paris - A Night at the Playboy Mansion Etienne de Crecy - Tempovision Live at Queen by DJ Alan Thompson - Trade Moby - Play Superfunk - Hold Up <prompt_shell> mount /dev/hda5 on / type ext2 (rw) none on /proc type proc (rw) /dev/hdc on /mnt/Cd type iso9660 (ro) <prompt_shell> cat /etc/mtab /dev/hda5 / ext2 rw 0 0 /dev/hda6 /mnt/Perso ext2 rw,noexec,nosuid,nodev 0 0 none /dev/pts devpts rw,gid=5,mode=620 0 0 none /proc proc rw 0 0 /dev/hdc /mnt/Cd iso9660 ro 0 0 <prompt_shell> Il devient rapidement pénible de définir à la main, les arguments de la commande “mount”, surtout pour des lecteurs utilisés souvent comme les lecteurs cd. Heureusement, comme toujours (ou presque), il y a une solution. 6.2.2 Le fichier “/etc/fstab” Grâce à ce fichier, “mount” va pouvoir faire la relation seul en lui passant seulement, soit le point de montage, soit le péripherique, en paramètre entre les diverses options et le type du système de fichier. Il s’organise comme ceci : périphérique point de montage type fs options dump fsck periphérique par exemple “/dev/hda1” point de montage par exemple “/” type fs par exemple “iso9660” 26 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix options diverses et variées, par exemple “rw”2 dump Mis à un ou à zero permet de spécifier à l’utilitaire “dump” s’il doit sauvegarder cette partition ou non. fsck Mis à un pour le “/” et à deux pour les autres partitions, indique qu’il est necessaire de faire une vérification du système de fichier (on met à zero si ce n’est pas nécessaire). Le principe de démontages est très simple, il suffit pour ce faire d’utiliser “umount partition ou point de montage”. Toutefois, il y a une règle à respecter pour démonter une partition, c’est qu’aucune application ne l’utilise. Il peut en effet arriver que vous cherchiez quelquechose et que vous souhaitiez démonter la partition pour en activer une nouvelle (Ex : un cd). Si êtes placés dans un des répertoires de ce même lecteur, il ne vous sera pas possible de le faire. Cette tâche de savoir “qui utilise quoi” est grandement facilitée par la commande “fuser” (sous GNU/Linux du moins). Elle va vous permettre d’envoyer des messages aux utilisateurs concernés pour qu’ils arrêtent d’eux-même le processus incriminés, d’envoyer un signal à tous les processus utilisant une certaine partie de notre arborescence. . . <prompt_shell> fuser -v / / USER root root root root root root root root root root root root root root root root root root root root root root root root root root ualc root ualc root ualc PID 1 2 3 4 5 6 94 98 101 103 105 108 110 120 123 125 126 127 128 129 130 131 132 133 1461 9022 9024 9297 9305 10689 12017 ACCESS .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .rc.. .r... .r... .rc.. .r... .r... .r... .r... .r... .r... .rc.. .r... .r... .r... .r... .rc.. .r... .rc.. .r... .r... .r... COMMAND init keventd ksoftirqd_CPU0 kswapd bdflush kupdated dhcpcd syslogd klogd inetd sshd crond atd gpm qmail-send agetty agetty agetty agetty agetty splogger qmail-lspawn qmail-rspawn qmail-clean agetty sshd zsh sshd zsh zsh zsh 2 Il faut tout de même préciser que d’un système de fichier à l’autre, les options disponibles ne seront pas les mêmes. Par exemple, le système de fichier “vfat” ne supportera pas la gestion des droits sur les fichiers 27 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix root root ualc ualc 12607 12733 32634 32644 .rc.. .r... .r... .r... sshd fuser ptrace ptrace <prompt_shell> 6.2.3 Gestion de l’espace Une fois les partitions montées, il est necessaire, si ce n’est indispensable de savoir quel espace reste disponible sur nos diverses partitions pour savoir combien de DiVX on peut encore mettre, quelle taille font tels ou tels fichiers. . . Nous avons pour connaı̂tre l’espace restant sur les partitions montées, “df” et pour la taille des fichiers ou répertoires, “du”. Les exemples pour ce genre de commandes étant plus fort qu’une explication qui serait juste les reflets de “man df” et “man du”, voilà : <prompt_shell> df -h Filesystem /dev/hda5 /dev/hda6 /dev/hdc <prompt_shell> df -h Filesystem Type /dev/hda5 ext2 /dev/hda6 ext2 none devpts none proc /dev/hdc iso9660 <prompt_shell> du -h 3.8M /sbin <prompt_shell> du -h 472k /bin/bash <prompt_shell> Size Used Avail Use% Mounted on 3.9G 2.9G 802M 79% / 1004M 440M 512M 46% /mnt/Toto 598M 598M 0 100% /mnt/EnShort -T -a Size Used Avail Use% Mounted on 3.9G 2.9G 802M 79% / 1004M 440M 512M 46% /mnt/Toto 0 0 0 - /dev/pts 0 0 0 - /proc 598M 598M 0 100% /mnt/EnShort -s /sbin /bin/bash Lorsqu’il devient indispensable de trouver de la place, il va falloir utiliser des commandes pour compresser les données trops conséquentes. Ceci va être rendu possible par des utilitaire comme “zip”, “rar”, “gzip”, “bzip2”. Les deux derniers de cette liste sont les plus couremments rencontrés sous Unix. Le plus interressant au niveau intègrité des données et qualité de compression, s’avère être “bzip2”. Sa grosse particularité consiste a pouvoir récupèrer, même partiellement, une archive si elle a été endommagée. Cependant l’algorithme utilisé est efficace, mais plus lents que les autres. Tout dépend de la machine dont vous disposez et de l’utilisation que vous voulez faire de vos archives. 7 Gestion des processus Comme nous l’avons constaté, ce n’est pas parceque nous sommes en ligne de commande qu’on se retrouve sous un MS-DOS ; un UNIX ca ne gère pas qu’une tâche à la fois, et il est possible de “dialoguer” avec elles. L’interêt réside notemment dans la capacité “de faire le café” tout en “pressant une orange”. Tout ceci ne peut s’exécuter en même temps si vous n’avez que deux bras (CPU). Il va falloir s’organiser (notion d’ordonnancement et de priorités) pour exécuter les táches correctement. Tout à coup, une deuxième paire de bras vous a poussé à l’issue d’une 28 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix nuit étrange ; vous avez alors le potentiel d’exécuter à peu près deux fois plus de choses en un mm̂em temps, si toutefois votre cerveau est capable de le gèrer (notions de capacite du noyau à utiliser des architectures multiprocessus). Il est donc tout naturel d’avoir toute une série d’utilitaires dédiés à consulter létat des divers processus, à vérifier qu’ils se comportent conformément à ce qu’on attend d’eux, et à modifier leur priorités. 7.1 Lister les processus Pour ce faire, nous avons quatres commandes principales : ps Permet de lister les processus suivant un certain nombre de critères. jobs Permet de lister les processus dans lancés dans le shell courant. pstree Permet de lister les processus suivant dans un arbres indiquant les liens de parentés entre eux. top Permet d’avoir un suivit de l’évolution des processus, et ce faisant, d’effectuer des traitement comme pourrait le faire ps, mais de façon interactive. Voici un exemple d’utilisation de “ps” <prompt_shell> PID TTY 12758 pts/4 12872 pts/4 <prompt_shell> PID TTY 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 94 ? 98 ? 101 ? 103 ? 105 ? 108 ? 110 ? 120 ? 123 ? 125 tty2 126 tty3 127 tty4 ... <prompt_shell> USER PID root 1 root 2 root 3 root 4 root 5 root 6 root 94 root 98 root 101 ps TIME CMD 00:00:00 zsh 00:00:00 ps ps ax STAT TIME COMMAND S 2:35 init SW 0:00 [keventd] SWN 0:00 [ksoftirqd_CPU0] SW 418:11 [kswapd] SW 0:00 [bdflush] SW 0:02 [kupdated] S 0:00 /sbin/dhcpcd eth1 S 0:26 /usr/sbin/syslogd S 0:17 /usr/sbin/klogd -c 3 S 0:00 /usr/sbin/inetd S 0:36 /usr/local/sbin/sshd S 0:00 /usr/sbin/crond -l10 S 0:00 /usr/sbin/atd -b 15 -l 1 S 0:00 gpm -m /dev/psaux -t ps2 S 0:00 qmail-send S 0:00 /sbin/agetty 38400 tty2 linux S 0:00 /sbin/agetty 38400 tty3 linux S 0:00 /sbin/agetty 38400 tty4 linux ps auxww %CPU %MEM 0.0 0.1 0.0 0.0 0.0 0.0 0.8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.2 VSZ 344 0 0 0 0 0 332 1788 1296 RSS 64 0 0 0 0 0 52 232 180 TTY ? ? ? ? ? ? ? ? ? STAT S SW SWN SW SW SW S S S 29 START TIME COMMAND Nov02 2:35 init Nov02 0:00 [keventd] Nov02 0:00 [ksoftirqd_CPU0] Nov02 418:12 [kswapd] Nov02 0:00 [bdflush] Nov02 0:02 [kupdated] Nov02 0:00 /sbin/dhcpcd eth1 Nov02 0:26 /usr/sbin/syslogd Nov02 0:17 /usr/sbin/klogd -c 3 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix root 103 root 105 root 108 daemon 110 root 120 qmails 123 root 125 nux root 126 nux ... <prompt_shell> 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.4 0.4 0.0 0.0 0.2 0.0 1772 2288 1348 1360 1268 1256 1220 0.0 0.0 1220 252 264 300 60 8 132 4 ? ? ? ? ? ? tty2 S S S S S S S Nov02 Nov02 Nov02 Nov02 Nov02 Nov02 Nov02 0:00 0:36 0:00 0:00 0:00 0:00 0:00 /usr/sbin/inetd /usr/local/sbin/sshd /usr/sbin/crond -l10 /usr/sbin/atd -b 15 -l 1 gpm -m /dev/psaux -t ps2 qmail-send /sbin/agetty 38400 tty2 li 4 tty3 S Nov02 0:00 /sbin/agetty 38400 tty3 li Nous avons respecivement affichés les processus de notre terminal courant et nous appartenant, ceux dans tous les terminaux et pour tous les utilisateurs, et ceux dans tous les terminaux pour tous les utilisateurs, avec des informations sur les utilisateurs, l’état de la memoire et les arguments qui leurs sont passés en entier (ils ne seront pas tronqués par la fin de la largeur du terminal). Au milieu de tout une quantités d’informations, celles qui vont les plus nous interresser sont le PID (“Process ID”), et l’état du processus (“STAT”). Le PID est un identifiant unique par processus. Dans ce cadre, il y a une notion d’héritage ; un processus parent qui exécute par des procédés de type “fork” un autre processus se verra être le père de celui-ci. En gardant à l’esprit ce principe, il y a donc un processus qui est le père de tous les autres. C’est le cas, et son nom est “init” qui a pour PID de 1. Cette notion d’héritage est particulièrement flagrante avec la commande “pstree” (cf exemple ci-dessous). Pour ce qui est de de la partie “STATUS”, les lettres symbolisent ceci : D En sommeil imperturbable (ce qui arrive souvent à certain modules kernel) R En cours d’exécution S En sommeil T Stoppé ou “tracé” (notamment pour le débugage) Z Zombie (peut arriver lorsqu’un processus n’a pas attendu la fin de l’exécution de l’un de ses fils) Tous ces indicateurs sont autant de moyens pour connaı̂tre à chaque instant l’état d’un processus, pour voir si il est planté par exemple. Voici comme cité précédemment une sortie du programme “pstree” : <prompt_shell> pstree init-+-6*[agetty] |-atd |-crond |-dhcpcd |-gpm |-inetd---2*[in.talkd] |-keventd |-klogd |-2*[ptrace] |-qmail-send-+-qmail-clean | |-qmail-lspawn | |-qmail-rspawn | -splogger |-sshd-+-sshd---zsh---zsh-+-jed 30 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix | | -mpg123 | |-sshd---zsh---zsh---ytalk | |-2*[sshd---zsh---ytalk] | -sshd---zsh---zsh---pstree ‘-syslogd <prompt_shell> Cette fois une sortie du programme “jobs” (Attention cette commande est une commande interne au shell) : <prompt_shell> jobs [1] suspended (tty output) [2] + suspended (tty output) [3] - suspended man man <prompt_shell> vi pouet vi toto Une fois encore, nous pouvons distinguer l’état du processus, un identifiant qui pourra nous servir dans les commandes qui vont suivre. Voyons désormais une sortie typique du programme “top” permettant de suivre l’évolution d’un ou plusieurs processus dans le temps : 12:54am up 34 days, 23:02, 5 users, load average: 0.00, 0.00, 0.00 56 processes: 43 sleeping, 2 running, 0 zombie, 11 stopped CPU states: 0.2% user, 1.0% system, 0.0% nice, 0.5% idle Mem: 62668K av, 60376K used, 2292K free, 0K shrd, 476K buff Swap: 136512K av, 3020K used, 133492K free 21128K cached PID 12909 12949 1 2 3 4 5 6 94 98 101 103 105 108 110 120 123 125 126 127 USER root root root root root root root root root root root root root root daemon root qmails root root root PRI 17 18 8 9 19 9 9 9 9 9 9 9 9 8 9 9 9 9 9 9 NI 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SIZE RSS SHARE STAT 1476 1476 1272 R 1344 1344 1140 R 72 64 44 S 0 0 0 SW 0 0 0 SWN 0 0 0 SW 0 0 0 SW 0 0 0 SW 52 52 32 S 276 232 192 S 264 180 152 S 280 252 212 S 340 264 200 S 328 300 252 S 132 60 52 S 68 8 8 S 156 132 100 S 64 4 4 S 64 4 4 S 64 4 4 S LIB %CPU %MEM TIME COMMAND 0 3.8 2.3 0:52 mpg123 0 1.9 2.1 0:00 top 0 0.0 0.1 2:35 init 0 0.0 0.0 0:00 keventd 0 0.0 0.0 0:00 ksoftirqd_CPU0 0 0.0 0.0 418:12 kswapd 0 0.0 0.0 0:00 bdflush 0 0.0 0.0 0:02 kupdated 0 0.0 0.0 0:00 dhcpcd 0 0.0 0.3 0:26 syslogd 0 0.0 0.2 0:17 klogd 0 0.0 0.4 0:00 inetd 0 0.0 0.4 0:36 sshd 0 0.0 0.4 0:00 crond 0 0.0 0.0 0:00 atd 0 0.0 0.0 0:00 gpm 0 0.0 0.2 0:00 qmail-send 0 0.0 0.0 0:00 agetty 0 0.0 0.0 0:00 agetty 0 0.0 0.0 0:00 agetty Ici nous avons énormément d’informations concèrnant l’état général du système avec la memoire utilisée, le nombre de processus actifs, le taux d’occupation du processeur, et le même type d’informations détaillées cette fois par processus. La signification des champs est la suivante (et directement tirée du “man top”) : PID - Identifiant du processus USER - Le proprietaire du processus PRI - Priorité de la tâche (plus le chiffre est petit plus la tâche est prioritaire). SIZE - Taille du processus en memoire incluant la partie donnée et la pile. 31 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix RSS - Quantité totale de memoire occupée par la tâche (les bibliothèques chargées sont comptabilisées pour les programme ELF). SHARE - Quantité de memoire partagée. STAT - La même definition des lettres que celle faı̂te au-dessus avec en plus “a” ou “<” pour indiquer une priorité infèrieure à zero, “N” pour l’inverse et “W” pour les processus issue du “Swap” (le “man” précise que celà ne fonctionne pas pour les parties inhérentes au noyaux). LIB - Nombre de pages occupées par les bibliothèques (sauf pour les executables au format ELF ; autant dire que ca ne fonctionne quasiment jamais) %CPU - Taux d’occupation du(des) processeur(s) par ce processus. Il peut être superieur à 100% dans le cadre de machine ayant plusieurs processus. %MEM - Taux d’occupation de la memoire physique du processus TIME - Temps total d’exécution au sein du(des) processeur(s) depuis que le processus est lancé. COMMAND - C’est comme le “Port Salut” A ce stade, il vous est possible de “monitorer” l’etat de vos processus et . . .c’est tout. Comment intéragir avec eux ? Comment les supprimer de la mémoire ? 7.2 Envoi de signaux aux processus Ce procédé se concentre essentiellement autour de la commande “kill”. Il n’est pas comme son nom pourrait le laisser supposer, dédié à “tuer” des processus. Il va permettre de faire effectuer un certain nombre de tâches à l’un ou plusieurs d’entres-eux. Tout dépend finalement comment les programmes réagissent aux signaux qui leurs sont envoyés. Pour obtenir la liste des signaux disponibles il suffit de taper dans la l’invite de commande du shell “kill -l”. Ensuite, lorsque vous souhaitez envoyer un signal à un processus, il suffit de récupèrer son PID et faire “kill -NOMSIGNAL ou son identifiant PID1 PID2 . . .”. Si aucun nom de signal n’est passé en paramètre, c’est le “SIGTERM” qui est utilisé par defaut. Il est souvent utiliser pour arrêter un processus. Si celui-ci persiste, vous pouvez utiliser le “SIGKILL” qui ne peut être intercepté et évité par le processus, le forçant ainsi à se terminer (c’est une methode très pratique lorsque Netscape plante). D’autres signaux comme “SIGHUP” permet aux processus qui le gèrent comme tel de les redémarrer en lisant éventuellement leur fichier de conf. . . <prompt_shell> kill -l HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS <prompt_shell> kill -l TERM 15 <prompt_shell> ps PID TTY TIME CMD 10689 pts/1 00:00:00 zsh 12739 pts/1 00:00:00 jed 13040 pts/1 00:00:00 ps <prompt_shell> kill -9 12739 [1] + killed jed /tmp/bozoenshort <prompt_shell> 32 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix 7.3 Arrière plan / Avant plan / Detachement Le shell prévoit en général les outils “bg”, “fg” et “disown” afin de gèrer les processus. Respectivement permettant de mettre en arrière plan, avant plan un processus et de le détacher de son propriétaire. Le shell fournit également des raccourcis clavier permettant de faire ce genre de tâches. “Ctrl+z” permet notamment de mettre en arrière plan le processus courant. <prompt_shell> man man & [1] 13095 [1] + suspended (tty output) <prompt_shell> vi pouet& [2] 13106 [2] + suspended (tty output) <prompt_shell> jobs [1] - suspended (tty output) [2] + suspended (tty output) <prompt_shell> fg %1 ... man man vi pouet man man vi pouet Imaginons que vous souhaitez qu’un processus (au hasard un client ftp) continue son exécution, et ce même lorsque vous quittez la session de votre shell. La solution consiste à se désattribuer le processus par le biais de la commande “disown PID”. Attention, ce faisant vous n’aurez aucun moyen de vous le réapproprier. 7.4 Modification des priorités du “Scheduler” Nous avons vu précédemment que les processus avaient des priorités. Elles sont modifiable aussi bien au moment du lancement du programme, qu’après , respectivement, grâce à “nice” et “renice”. Nous avons également vu que la priorité d’un processus et d’autant plus grande que la valeur de son “nice” est petite. Il n’y a plus qu’à se lancer, la syntaxe étant très simple ; “nice -n PRIORITE INC OU DEC commande args. . .” et “renice PRIORITE -p PID” par exemple. Il faut manier l’odonnancement des processus avec precautions, surtout lorsqu’on est root ou il est possible de mettre des priorités de +20 à -20. 8 Approche élémentaire du reseau Nous allons aborder rapidement dans cette section ce qu’il est nécessaire de faire pour bénéficier d’un reseau. 8.1 Configurer son adresse IP dynamiquement Pour ce faire, sur GNU/Linux et la famille BSD, “dhclient interface” ou “dhcpcd interface”. 8.2 Configurer son adresse IP manuellement Quel que soit l’Unix sur lequel vous vous retrouverez, vous aurez accès à l’utilitaire “ifconfig”. Sa syntaxe est relativement simple. Imaginons que nous souhaitions affecter à notre interface eth0 l’adresse 192.16.2.1 avec un masque de 255.255.224.0. 33 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix <prompt_shell> ifconfig -a eth0 Link encap:Ethernet HWaddr 00:50:DA:44:2E:A5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:7 Base address:0xec00 eth1 Link encap:Ethernet HWaddr 00:10:5C:66:1A:58 inet addr:172.16.0.3 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1323940 errors:119 dropped:0 overruns:0 frame:270 TX packets:1007937 errors:0 dropped:0 overruns:0 carrier:0 collisions:1468 txqueuelen:100 Interrupt:11 Base address:0xe080 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:69 errors:0 dropped:0 overruns:0 frame:0 TX packets:69 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 <prompt_shell> ifconfig eth0 192.16.2.1 netmask 255.255.224.0 <prompt_shell> ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:50:DA:44:2E:A5 inet addr:192.16.2.1 Bcast:192.16.2.255 Mask:255.255.224.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:7 Base address:0xec00 <prompt_shell> 8.3 Selection du routeur par defaut Celà peut s’avèrer pratique d’avoir la possibilité de sortir sur Internet, par exemple. Pour celá, si vous êtes si ce n’est pas votre machine qui est directement connectée, il va falloir passer par un routeur. Nous allons, pour ce faire, utiliser “route”. Imaginons que celle qui nous interresse soit 192.16.2.254 : <prompt_shell> route add default gw 192.16.2.254 8.4 Selection des DNS (Domain Name Server) Cette configuration se trouve dans un fichier se nommant “/etc/resolv.conf”. En voici sa syntaxe : domain nom de domaine nameserver DNS primaire nameserver DNS secondaire 9 Envirronnement graphique Mais non, il n’y a pas qu’une console en mode texte sous Unix. Si nous voulons utiliser le formidable GIMP, jouer à Quake3 ou Parsec, lancer Mozilla ou Opera, il 34 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix va nous falloir configurer ce qu’on appelle XFree86. C’est un “serveur graphique” sur lequel vont pouvoir se greffer les applications précédemment évoquées. Ses capacités ne se limitent pas à celà. Par son intermediaire, nous allons pouvoir exporter l’affichage d’une machine distante vers une machine locale (nous sommes sur des Unix ; le reseau c’est quand même important). Cependant, il n’est pas capable de gèrer le multifenêtrage et un envirronnement de bureau. Pour celà nous allons avoir ce qui s’appelle des “Window Manager” et des “Desktop Manager”. Pour les premiers, nous avons “enlightenment”, “windowmaker”, “blackbox”, “sawfish” et beaucoups d’autres. Il peuvent être particulièrement magnifique suivant les thèmes. En effet, il sont pour la majorité configurables à volontés. Pour estimer ce qu’il est possible de faire il suffit d’aller sur “http ://www.themes.org”. Pour ce qui est des “Desktop Manager” nous en avons deux à notre disposition ; “GNOME” et “KDE”, eux aussi particulièrment sympathiques. 9.1 Configuration de XFree86 Nous allons utiliser “Xf86config” pour configurer notre serveur X comme il faut. Celui-ci est en mode texte, et fait partie de XFree86 ; suivant les votre Unix et distribution (pour celles reposant sur GNU/Linux) vous aurez probablement à votre disposition des interfaces plus pratiques que celle que nous allons utiliser (le programme “xf86cfg” est lui aussi présent en standard avec XFree86 et permet une configuration en mode graphique). Toutefois, si les configurations en mode graphique échouent, il faudra se rabattre sur la version texte. Nous ne detaillerons pas ici toutes les étapes (à part si vous le souhaitez vraiment, auquel cas envoyez nous un mail) puisque celà variera d’une machine à l’autre et les questions sont suffisamment explicites. Une fois que vous aurez répondu á toutes les questions, la configuration sera gardée dans le fichier “/etc/X11/XF86Config” que vous pourrez editer si besoin est. Si vous avez l’impression que votre écran scintille beaucoup ou est particulièrement moiré, essayez de récupèrer les specifications précises de votre écran et passez les bon paramètres de fréquence horizontale et verticale au moment où on vous le demande, ou allez dans la partie du fichier “XF86Config” qui contient celà : ... # ********************************************************************** # Monitor section # ********************************************************************** # Any number of monitor sections may be present Section "Monitor" Identifier # # # # # "My Monitor" HorizSync is in kHz unless units are specified. HorizSync may be a comma separated list of discrete values, or a comma separated list of ranges of values. NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR’S USER MANUAL FOR THE CORRECT NUMBERS. HorizSync 30-90 35 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix # # # # # # # # HorizSync 30-64 HorizSync 31.5, 35.2 HorizSync 15-25, 30-50 # multisync # multiple fixed sync frequencies # multiple ranges of sync frequencies VertRefresh is in Hz unless units are specified. VertRefresh may be a comma separated list of discrete values, or a comma separated list of ranges of values. NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR’S USER MANUAL FOR THE CORRECT NUMBERS. VertRefresh 50-160 EndSection ... Une fois ceci fait, si lorsque vous démarrez votre machine vous n’avez accès qu’au mode texte pour vous authentifier, tapez la commande “startx”. En ce faisant, ce programme va consulter le contenu du fichier “.xinitrc” se trouvant dans votre “Home Directory” pour connaı̂te ce qu’il doit lancer. Si cela fonctionne et mais que vous n’avez pas de “Window Manager” vous pouvez appuyer sur “Ctrl-AltBackspace” pour quitte la “session X” courante. 10 Recompiler son noyau L’une des grandes puissances des Unix libres consiste en la capacité de pouvoir recompiler son noyau, et ainsi l’optimiser pour l’utilisation que nous en avons. En ce faisant, nous gagnons de la place en memoire puisque tous les pilotes de péripheriques inutiles sont retirés, nous pouvons rajouter des fonctionnalités disponibles dans les sources standards du noyau ou utiliser un mécanisme de “patch” lorsqu’une tierce personne a programmé une fonctionnalité au niveau du noyau dont on peut avoir besoin. 10.1 Le noyau GNU/Linux Il est disponible sur quantités de sites (cf Références) mirroirs. Au moment de l’écriture de ce document la version actuelle est la 2.4.16. Vous pouvez mettre les sources dans “/usr/src/” et faire pointer le lien symbolique “/usr/src/linux” vers l’emplacement des sources de votre nouveau noyau. Une fois ceci fait, placez-vous dans le repertoire contenant les sources et vous pouvez taper les commandes suivantes3 : – make config - C’est l’interface de configuration en mode texte – make menuconfig - C’est toujours du mode texte, mais joli cette fois – make xconfig - C’est l’interface de configuration sous X. Elle s’avère ne pas être particulièrement pratique. Une fois ceci fait, il ne vous reste qu’à vous promener dans les divers repertoires proposés en indiquant si souhaiter intègrer la fonctionnalités sur laquelle vous vous trouvez en statique dans le noyau ([X]), en module ([M]) ou pas du tout ([ ]). Si vous n’êtes pas sûr des choix à faire vous pouvez consulter à la fois l’aide proposée, 3 Si vos sources ont déjà été compilées, vous pouvez taper “make clean” pour effacer les fichiers issus de la compilation, et garder le fichier de configuration, et “make mrproper” pour tout réinititialiser. 36 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix ou en trouver d’autres dans le repertoire “/usr/src/linux/Documentations/”. Si vous ne savez pas quel materiel est présent dans votre machine, il y a plusieurs moyens de le savoir. Tout d’abord, vous pouvez consulter les messages de démarage avec la commandes “dmesg” ou encore, vous pouvez consulter le contenu des divers fichiers présents dans le “/proc” (interressez vous surtout aux fichiers ayant un nom explicite). Pour le reste il y a quelque utilitaires comme “lspci” ou “lsisa” qui permettre de connaı̂tre le materiel présent sur la machine (en pci et isa). Lors de votre selection de ce qui doit être mis ou nom dans le noyau, verifiez bien que le système de fichier présent sur le “/” est bien en statique dans le noyau. Une fois que vous avez terminé votre selection lorsque vous quittez l’interface, on vous demande de sauvegarder, ce que vous faites. Le fichier dans lequel sera enregistré les diverses informations de votre future noyau est “/usr/src/linux/.config”. Il vous faut maintenant créer diverses dépendances utiles pour la compilation avec “make dep”. Ensuite vous allez compiler la partie statique du noyau par la commande “make bzImage”. Celà va prendre un certain temps et placer le resultat de la compilation dans “/usr/src/linux/arch/votre archi/boot/bzImage”. Lorsque la compilation est terminée il faut compiler les modules et les installer (“make modules” et “make modules install”). Cette dernière phase va installer les modules dans “/lib/modules/version du noyau”. Voici le résumé de ce qu’il faut faire : 1. make clean ou make mrproper si besoin 2. make config , make menuconfig ou make xconfig 3. make dep 4. make bzImage 5. make modules 6. make modules install Une fois ces diverses étapes terminées, il va falloir indiquer à notre “bootloader” quelle noyau utiliser pour démarrer le système. 11 Le “boot loader” Le “boot loader” est une application lancée avant n’importe quel système d’exploitation qui va pouvoir gèrer comment tel ou tel système doit démarrer, avoir une liste avec un choix (typiquement, votre Unix et un Windows, ou encore plusieurs versions d’un noyau). Il en existe de nombreux dont GRUB, Lilo, Silo. . . Nous allons voir comment modifier les fichiers de configuration de GRUB et Lilo pour prendre en compte un nouveau noyau GNU/Linux (au hasard). 11.1 Lilo Lilo (Linux Loader) est probablement le “boot loader” le plus répendu sous les distributions à base de GNU/Linux. Son fichier de configuration se trouvant à cet emplacement “/etc/lilo.conf” ressemble à ceci : 37 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix <prompt_shell> cat /etc/lilo.conf # Emplacement du secteur de boot boot = /dev/hda # Temps d’attente avant de d\’emarrer sur # l’image par defaut delay = 10 # Quel syst\‘eme sur lequel il doit d\’emarrer par defaut default = Nouveau_noyau # Emplacement de l’image du noyau sur le disque image = /boot/vmlinuz-2.4.14 # Nom qui sera affiche dans le menu au moment du boot label = Vieux_noyau # Quelle partition sur laquelle le noyau doit demarrer root = /dev/hda1 read-only # Ce qu’il faudrait rajouter avec un nouveau noyau image = /boot/vmlinuz-2.4.16 label=Nouveau_noyau root= /dev/hda1 read-only # Exemple d’entr\’ee pour d\’emarrer sur Windows other = /dev/hda3 label = Windows table = /dev/hda <prompt_shell> lilo Vieux_noyau Nouveau_noyau * <prompt_shell> Il est important, une fois qu’on a modifié la configuration de “lilo” de taper la commande du même nom pour que les données soient écriture où de droit. 11.2 “GRUB” GRUB pour GRand Unified Bootloader utilise le fichier de configuration qui se trouve normalement dans “/boot/grub/menu.lst”. Voici comment faire la meme chose que lilo dans l’exemple précédent : <prompt_shell> cat /boot/grub/menu.lst # Temps d’attente avant de d\’emarrer sur # l’image par defaut timeout 30 # Quel syst\‘eme sur lequel il doit d\’emarrer par defaut default 1 # Nom qui sera affiche dans le menu au moment du boot title Vieux_noyau # Quelle partition sur laquelle le noyau doit demarrer. 38 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix # Le comptage commence a 0, donc pour la premiere partition # du premier disque dur c’est (hd0,0) root (hd0,0) # Emplacement de l’image du noyau sur le disque kernel /boot/vmlinuz-2.4.14 root=/dev/hda1 ro # Ce qu’il faudrait rajouter avec un nouveau noyau title Nouveau_noyau root (hd0,0) kernel /boot/vmlinuz-2.4.16 root=/dev/hda1 ro # Exemple d’entree pour un Windows title Windows rootnoverify (hd0,0) makeactive chainloader +1 <prompt_shell> Ici il n’y a pas besoin de taper une commande pour enregistrer les données. GRUB étant capables de lire les partitions sur lesquelles se trouve la configuration, ce n’est pas necessaire. Une fois les modifications des fichiers de configuration des “boot loader” terminée, il ne reste qu’à rebooter et selectionner ce sur quoi nous souhaitons démarrer. 12 Phases du “boot” Lorsque le “boot loader” nous demande sur quel système démarrer, et que vous choisissez un Unix que se passe-t’il (nous n’allons pas descendre au niveau CPU et memoire) ? La première étape consiste à charger le noyau an memoire et d’en executer le code. Lors de son execution, il met en place un certain nombre de mécanismes de protection de la memoire, et cherche ensuite sur la partition qu’on lui a indiquée comme contenant le repertoire racine “/”, un utilitaire qui se nome “init”, qui luimême va consulter son fichier de configuration (“/etc/inittab”) et en executer le contenu. C’est à ce niveau que sont éxécutés les scripts de démarage pour la gestion du reseau, du montage des disques, des mise en place de terminaux virtuels. . . Ce qui explique pourquoi, lorsqu’on liste les processus, il dipose d’un PID de 1 et qu’il est le père, grand-père, arrière-grand-père. . . de tous les autres processus. En général il y a plusieurs mode d’initialisation symbolisés par des chiffres de 0 à 6 et A, B et C. Il ont tous une vocation particulière. Certain vont nous permettre de demarrer en mode administration (“single user”) ou il n’y aura pas d’autres utilisateurs de connectés sur la machine, et qui ne pourront pas le faire dans ce mode. Il peut permettre également de demarrer avec une authentification graphique, d’executer des scripts lorsqu’on souhaite redemarrer ou stopper notre machine, ou encore lorsque la machine reçoit un signal du système de sauvegarde qui arrive en fin de batterie. . . Pour passer d’un “mode d’init” à un autre, il suffit de taper “init ID” où l’ID est le numero d’initialisation souhaités tel qu’il est defini dans “/etc/inittab”. 39 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Chaque ligne du fichier “inittab” se compose comme suit : id:nivaux_d_init:action:commande_ou_script id Permet d’identifier la tâche à executer (nombre de caractères compris entre 1 et 4). niveaux d init Ce sont les numeros d’init dans lesquels le script ou la commande s’executera. action Ici on spécifie comment doit réagir “init” ; s’il doit attendre que la tâche du processus lancé soit terminée ou non, s’il doit “ressusciter” le processus lorsqu’il meurt. . . commande ou script C’est comme le “Port-Salut” Voici un exemple d’inittab issue d’une Slackware : # # # # # # # # # # # inittab This file describes how the INIT process should set up the system in a certain run-level. Version: @(#)inittab 2.04 17/05/93 MvS 2.10 3.00 02/10/95 02/06/1999 PV PV Author: Miquel van Smoorenburg, <[email protected]> Modified by: Patrick J. Volkerding, <[email protected]> # These are the default runlevels in Slackware: # 0 = halt # 1 = single user mode # 2 = unused (but configured the same as runlevel 3) # 3 = multiuser mode (default Slackware runlevel) # 4 = X11 with KDM/GDM/XDM (session managers) # 5 = unused (but configured the same as runlevel 3) # 6 = reboot # Default runlevel. (Do not set to 0 or 6) id:3:initdefault: # System initialization (runs when system boots). si:S:sysinit:/etc/rc.d/rc.S # Script to run when going single user (runlevel 1). su:1S:wait:/etc/rc.d/rc.K # Script to run when going multi user. rc:2345:wait:/etc/rc.d/rc.M # What to do at the "Three Finger Salute". ca::ctrlaltdel:/sbin/shutdown -t5 -rf now # Runlevel 0 halts the system. l0:0:wait:/etc/rc.d/rc.0 # Runlevel 6 reboots the system. l6:6:wait:/etc/rc.d/rc.6 40 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix # What to do when power fails (shutdown to single user). pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING" # If power is back before shutdown, cancel the running shutdown. pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK" # If power comes back in single user mode, return to multi user mode. ps:S:powerokwait:/sbin/init 3 # The getties in multi user mode on consoles an serial lines. # # NOTE NOTE NOTE adjust this to your getty or you will not be # able to login !! # # Note: for ’agetty’ you use linespeed, line. # for ’getty_ps’ you use line, linespeed and also use ’gettydefs’ c1:1235:respawn:/sbin/agetty 38400 tty1 linux c2:1235:respawn:/sbin/agetty 38400 tty2 linux c3:1235:respawn:/sbin/agetty 38400 tty3 linux c4:1235:respawn:/sbin/agetty 38400 tty4 linux c5:1235:respawn:/sbin/agetty 38400 tty5 linux c6:12345:respawn:/sbin/agetty 38400 tty6 linux # Runlevel 4 used to be for an X window only system, until we discovered # that it throws init into a loop that keeps your load avg at least 1 all # the time. Thus, there is now one getty opened on tty6. Hopefully no one # will notice. ;^) # It might not be bad to have one text console anyway, in case something # happens to X. x1:4:wait:/etc/rc.d/rc.4 # End of /etc/inittab La valeur de l’init sur laquelle démarrer par defaut est définie au début du fichier avec “initdefault”. Nous pouvons constater qu’à la fin du fichier, un utilitaire est lancé du nom de “agetty”. C’est lui qui va gèrer les sessions des terminaux virtuels au niveau physique. Donc voilà la boucle est bouclées, vous connaissez désormais quelques ficelles des monstres Unix qui je n’en doute pas, vous plairons et dont vous avez pu évaluer la puissance, la robustesse et la grande modularité. 41 Labo-Unix - Supinfo Paris - 2001/2002 Initiation aux systèmes de type Unix Références [1] http ://www.openbsd.org [2] http ://www.netbsd.org [3] http ://www.freebsd.org [4] http ://www.trustedbsd.org [5] http ://www.bsdi.com [6] http ://www.linux.com [7] http ://www.pathname.com/fhs/ [8] http ://www.linuxdoc.org [9] http ://www.freebsd.org/doc/en US.ISO8859-1/books/handbook/index.html [10] http ://netbsd.org/Documentation/ [11] http ://www.freshmeat.net [12] http ://www.slashdot.org 42 Labo-Unix - Supinfo Paris - 2001/2002