********************* * Système GNU/Linux * ********************* Sommaire : noyau, espace utilisateur, démarrage, arborescence, partitions, types de fichiers, droits d'accès Source : "Debian Lenny", Raphaël Hertzoz et Roland Mas, éd. Eyrolles. Linux = noyau Distributions = Debian, Ubuntu (dérivée de Debian), Suse, Mandriva, etc. Distributions spécialisées : PureDyne, Ubuntu Studio, Apodio, Edubuntu, etc. Construction en couches, des couches basses, proches du matériel, aux couches hautes, proches de l'utilisateur. Tout est fichier dans Linux. Tout est modulaire, grâce au système de paquet, chaque fonction peut-être partagée entre plusieurs processus en même temps. ********* * Noyau * ********* - pilotage du matériel - gestion du système de fichiers - fonctions partagées - gestion des processus (programmes en cours d'exécution) > multi-tâches (ordonnancemnt des processus en fonction de leur priorité) - gestion des permissions > multi-utilisateurs. ********************** * Espace utilisateur * ********************** - processus : init, et les autres - démons (daemon, .d) : processus en tâche de fond sans interface graphique - communication inter-processus (IPC) : si les processus ne pouvaient renvoyer d'informations, ils seraient inutiles - fichier - pipe (tube) : nommé (PID, identifiant) ou signaux - ouvrir zone mémoire - réseau - bibliothèques de fonctions : collection de fragments de programmes. Les fonctions sont partagées entre plusieurs processus. De nombreuses applications font appel aux mêmes fonctions. ********************** * Démarrage de Linux * ********************** Voir l'image "DemarrageLinux.jpg", présente dans le répertoire de ce fichier. -- 1 - BIOS (Basic Input/Output System) : reconnaissance du matériel (disques durs, etc.), charge le MBR (Master Boot Record), le chargeur de démarrage. -- 2 - GRUB : chargeur de démarrage, trouve et charge le noyau sur le disque et l'exécute. -- 3 - Noyau Linux : bases communes aux programmes du système. Le noyau monte la partition contenant la racine de l'arborescence (voir plus loin, arborescence des fichiers Linux), et démarre le premier programme "init". -- 4 - Espace utilisateur - 4.1: premier processus "init", processus parent à tous les processus. - 4.2: processus fils de "init", on dit que ce sont des "fork" de "init" : - /etc/init.d/rcS : Premier programme exécuté. C'est un script qui exécute tous les programmes du répertoire /etc/rcS.d/ (chargement des pilotes, configuration du réseau, montage des partitions, etc.). Le "S" à la fin, signifie "Start", et le "K" "Kill". (~) % ls /etc/rcS.d README S06keyboard-setup@ S41nbd-client@ S49console-setup@ S55urandom@ S70screen-cleanup@ S70x11-common@ Le "@" signifie que ce sont juste des liens symboliques qui pointent vers les véritables localisations des programmes. Vérifiable avec la commande "ls -l /etc/rcS.d". Dans le répertoire /etc/init.d/, il y a donc à la fois des scripts qui lancent des programmes et les programmes eux-mêmes. Les programmes qui ont été lancés, s'appellent aussi "daemon" pour le ".d" à la fin. pour lancer un programme, on peut exécuter la commande "/etc/init.d/service restart", ou "invoke-rc.d", pour l'arrêter "/etc/init.d/service stop". Par exemple : "sudo /etc/init.d/ssh stop", pour arrêter le programme (ou "service") ssh. Autre commande possible : "sudo service ssh stop". - 4.3: "init" reprend la main et exécute ensuite les programmes associés au niveau d'exécution de l'utilisateur. Par défaut, c'est le niveau 2. Vérifiable par la commande "runlevel". Il exécuté le script "/etc/init.d/rc 2" qui démarre tous les services du répertoire "/etc/rc2.d" débutant par la lettre "S". Le nombre qui suit sert à classer alphanumériquement les services pour les démarrer dans le bon ordre. (~) % ls /etc/rc2.d/ README S20cinestart@ S20liquidsoap@ S50cups@ S99acpi-support@ S99laptop-mode@ S99rtirq@ S16ssh@ S20das-watchdog@ S20lpd@ S50rsync@ S99grub-common@ S99ondemand@ S20akiradrelease@ S20icecast2@ S20sysfsutils@ S70pppd-dns@ S99jackd@ S99rc.local@ ***************************** * Arborescence des fichiers * ***************************** Source : http://www.debian.org/releases/stable/s390/apcs02.html.fr Debian GNU/Linux adhère à la norme sur l'organisation des systèmes de fichiers ("Linux-HFS (Hierarchic file system)") pour le nommage des fichiers et des répertoires. Cette norme permet aux utilisateurs et aux auteurs de logiciel de prévoir l'emplacement des fichiers et des répertoires. Le répertoire racine est simplement représenté par la barre oblique /. Au niveau de la racine, tous les systèmes Debian incluent ces répertoires : Répertoire Contenu ---------- -------------------------------------------------------------------- / Répertoire racine du système de fichiers. bin Binaires (exécutables) des commandes essentielles boot Fichiers statiques pour le programme d'amorçage dev Fichiers des pilotes de périphériques etc Configuration système propre à la machine home Répertoires personnels des utilisateurs lib Bibliothèques partagées et modules noyaux essentiels media Points de montage pour les supports amovibles mnt Point de montage pour les montages temporaires proc Répertoire virtuel pour les informations système (noyaux 2.4 et 2.6) root Répertoire personnel de l'utilisateur root sbin Exécutables système essentiels sys Répertoire virtuel pour les informations système (noyaux 2.6) tmp Fichiers temporaires usr Hiérarchie secondaire var Données variables srv Données pour les services fournis par le système opt Répertoire pour d'autres logiciels *************************************** * Montage des partitions : /etc/fstab * *************************************** Source : http://www.freebsd.org/doc/fr/books/handbook/dirstructure.html L'organisation de l'arborescence des répertoires est essentielle pour obtenir une compréhension globale du système. Le concept le plus important à saisir est celui du répertoire racine, ``/''. Ce répertoire est le premier a être monté au démarrage et il contient le système de base nécessaire pour préparer le système d'exploitation au fonctionnement multi-utilisateurs. Le répertoire racine contient également les points de montage pour les autres systèmes de fichiers qui sont montés lors du passage en mode multi-utilisateurs. Un point de montage est un répertoire où peuvent être greffés des systèmes de fichiers supplémentaires au système de fichiers parent (en général le système de fichiers racine). Les points de montage standards incluent /mnt et /media. Ces répertoires sont en général référencés par des entrées dans le fichier /etc/fstab. /etc/fstab est une table des divers systèmes de fichiers et de leur point de montage utilisé comme référence par le système. La plupart des systèmes de fichiers présents dans /etc/fstab sont montés automatiquement au moment du démarrage par la procédure rc(8) à moins que l'option noauto soit présente. >> Voir aussi : http://www.presence-pc.com/tests/ubuntu-linux-guide-23120/5/ ****************************** * Multi-boot avec /etc/fstab * ****************************** J'ai un multi-boot avec trois systèmes d'exploitations différents : Windows XP, Xubuntu, PureDyne. J'ai en plus, deux partition "data" et "bonus" où je partage toutes mes données entre ces trois partitions. Pour monter automatiquement au démarrage toutes ces partitions : - 1. Créer des répertoires pour accueillir ces nouveaux points de montage de façon permanente. En pratique, il s'agit juste de créer des répertoires pour chaque partition dans le répertoire "/media". - 2. Pour éditer correctement le fichier "/etc/fstab", en ajoutant les bonnes informations, il faut connaître l'emplacement physique de la partition (/dev/sd?) et son type de système de fichiers (fat32, ntfs, ext3, ext4, etc.) - 3. Ensuite il faut éditer le fichier, l'enregistrer et redémarrer. --------------------------------- Exemple de mon fichier /etc/fstab --------------------------------- (~) % cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid -o value -s UUID' to print the universally unique identifier # for a device; this may be used with UUID= as a more robust way to name # devices that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/sda7 during installation UUID=00592502-cf62-43c9-bccf-cf7c4f2eee31 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda6 during installation UUID=5124b3e4-75fd-451c-a6a9-3af480f7d052 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0 /dev/sda1 /media/windows ntfs-3g defaults 0 0 /dev/sda2 /media/xubuntu ext3 defaults 0 0 /dev/sda3 /media/data ntfs-3g defaults 0 0 /dev/sda5 /media/bonus ntfs-3g defaults 0 0 ----------------------- 1-Créer les répertoires ----------------------- (~) % mkdir /media/windows /media/xubuntu /media/data /media/bonus ------------------------------- 2-Connaître l'état des partitions ------------------------------- (~) % fdisk -l Disque /dev/sda: 250.1 Go, 250059350016 octets 255 têtes, 63 secteurs/piste, 30401 cylindres Unités = cylindres de 16065 * 512 = 8225280 octets Identifiant de disque : 0x39a0399f Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 2611 20972826 7 HPFS/NTFS /dev/sda2 2612 5043 19533824 83 Linux /dev/sda3 8356 30401 177084495 7 HPFS/NTFS /dev/sda4 5044 8355 26603640 5 Etendue /dev/sda5 6722 8060 10741760 7 HPFS/NTFS /dev/sda6 8060 8355 2375680 82 Linux swap / Solaris /dev/sda7 5044 6721 13478472 83 Linux Pour savoir à quel numéro est attribué un /dev/sda?, faites un montage temporaire dans /mnt. Créer un répertoire /mnt/tmp par exemple. (~) % mkdir /mnt/tmp Monter les partition inconnues, et visualiser les fichiers. (~) % mount /dev/sda1 /mnt/tmp (~) % ls /mnt/tmp Affiche les répertoires de cette partition. Donc on sait quel est cette partition. (~) % unmount /mnt/tmp Pour démonter la partition. Faire pareil avec /dev/sda3, /dev/sda5 et /dev/sda2 (dans mon cas) Si le système ne permet pas de monter les partitions ntfs, alors il faut installer le paquet le permetatnt : $ sudo aptitude install ntfs-3g Une solution plus simple est envisageable, en lancant gparted avec sudo : $ sudo gparted --------------------- 3-Editer "/etc/fstab" --------------------- (~) % nano /etc/fstab Ajouter ces lignes : /dev/sda1 /media/windows ntfs-3g defaults 0 0 /dev/sda2 /media/xubuntu ext3 defaults 0 0 /dev/sda3 /media/data ntfs-3g defaults 0 0 /dev/sda5 /media/bonus ntfs-3g defaults 0 0 ************************************ * Les différents types de fichiers * ************************************ Linux reprend le principe général des systèmes Unix suivant lequel "tout est fichier" (ou presque). En effet, la quasi-totalité des composants du système est représentée sous la forme de fichiers. Cela peu surprendre de prime abord, mais dès que l'on a compris le principe, cela facilite énormement la programmation et la maintenance du système. Les différentes types de fichiers sont visualisables avec la commande "ls -l". La première lettre nous donne le type de fichiers : - "-" : les fichiers normaux : ce sont des collections d'octets. Il n'existe pas de différence entre les fichiers texte et les fichiers binaires. - "d" (directory) : les répertoires : ce sont des fichiers contenant les noms des fichiers et leurs numéros d'inode. Un répertoire contient toujours deux sous répertoires spéciaux '.' et '..' qui correspondent respectivement au répertoire courant et au répertoire père. - "l" : les liens symboliques : permettent de présenter une image d'un fichier sous un autre nom ou à un autre endroit sans dupliquer les données. Un lien symbolique "pointe" vers un autre fichier, appelé fichier cible. La notion de lien symbolique peut être comparée à celle de raccourcis sous Windows, à la différence qu'ici, cette notion est prise en charge dans le système de base alors que, sous Windows, il s'agit d'un ajout tardif qu'il est assez facile de contourner. - "b" : les fichiers spéciaux en mode bloc : sont les portes sur les périphériques fonctionnant par blocs de données (ex : disques). L'accès à un périphérique en mode bloc peut se faire aléatoirement (accès à n'importe quel emplacement du fichier). - "c" : les fichiers spéciaux en mode caractère : sont les portes vers les périphériques fournissant ou consommant les données octet par octet. L'accès à un périphérique en mode caractère ne peut se faire que séquentiellement (accès successif à chaque emplacement du fichier), si bien qu'il est impossible d'accéder au bloc n avant de parcourir le bloc n-1. Ce type d'accès séquentiel est assez bien illustré par le fonctionnement d'un lecteur de bande. - "p" : les tubes nommés "FIFO" : permettent à deux processus sans relation de parenté de s'échanger des données comme par un tube. L'écriture et la lecture dans un tube sont nécessairement séquentielles. L'écriture rempli le tube, la lecture le vide. On dit que la lecture des données d'un tube est destructives. ********************************* * Les pilotes en mode caractère * ********************************* Ces pilotes sont accessibles à travers des fichiers spéciaux appelés égalements noeuds (nodes). Ces fichiers sont localisés sur le répertoire /dev et sont caractérisés par deux valeurs numériques: * Le MAJEUR (MAJOR) qui identifie le pilote * Le MINEUR (MINOR) qui représente une sous-adresse en cas de présence de plusieurs périphériques identiques, controlés par un même pilote. L'exemple ci-dessous donne la liste des fichiers spéciaux associés aux pilotes des ports séries: $ ls -l /dev/ttyS* crw------- 1 root tty 4, 64 mai 5 1998 /dev/ttyS0 crw------- 1 root tty 4, 65 mai 5 1998 /dev/ttyS1 crw------- 1 root tty 4, 66 mai 5 1998 /dev/ttyS2 crw------- 1 root tty 4, 67 mai 5 1998 /dev/ttyS3 Dans ce cas la, le majeur vaut 4 et les mineurs vont de 64 à 67. Pour créer une nouvelle entrée dans le répertoire /dev, on utilisera la commande mknod: $ mknod /dev/monpilote c majeur mineur Le c indique que l'on crée un noeud pour un pilote en mode caractère. Si l'on désirait créer une entrée pour un pilote en mode bloc, on utiliserait la même commande avec un b à la place du c. La liste des majeurs utilisés par le noyau LINUX est disponible dans le fichier Documentation/devices.txt de l'arborescence des sources du noyau. A partir du moment ou le noeud est créé et le pilote installé, on peut accèder au périphérique en utilisant les commandes standards de LINUX comme: $ echo "une commande" > /dev/monpilote pour écrire sur le périphérique. $dd bs=1 count=10 < /dev/monpilote pour lire 10 caractères du péripéhrique. On peut bien entendu accèder au périphérique en utilisant des langages évolués comme le C, exemple: int fd = open ("/dev/monpilote", O_RDWR); pour ouvrir un descripteur de fichier associé au périphérique. char *s = "une commande"; write (fd, s, strlen(s)); pour écrire une chaîne sur le périphérique. char buf[256]; read (fd, buf, n); pour lire n caractères du périphérique. close (fd); pour terminer l'accès au périphérique. ****************************************** * Les propriétés des fichiers sous Linux * ****************************************** Source : Thierry COLAS, auteur original du document « Lignes de commandes - le pense bête de COAGUL » Dans le monde UNIX, tout est fichier. Par exemple, la communication avec les périphériques physiques de l’ordinateur se fait au moyen de fichiers d’un type particulier. Les caractéristiques des fichiers peuvent être visualisées à l’aide de la commande : [user@localhost]$ ls -la drwx------ 11 root root 1024 nov 5 15:31 ./ drwxr-xr-x 20 root root 1024 nov 5 15:30 ../ -rw------- 1 root root 9821 nov 4 15:19 .viminfo -rw------- 1 root root 11748 nov 5 13:10 .bash_history lrwxrwxrwx 1 root root 47 nov 5 13:10 .odbc -> /etc/skel/odbc.ini Voyons la signification de chaque colonne : - Colonne 1 : Attributs des fichiers ------------------------------------ Le premier caractère donne le type de fichier Caractère Description --------- ----------- - pour un fichier ordinaire d pour un répertoire l pour un lien symbolique s pour une socket p pour un pipe nommé b fichier spécial (de périphérique) en mode bloc c fichier spécial (de périphérique) en mode caractère Les 9 caractères suivants (en fait 3 groupes de 3) donnent les modes (droits) d’accès du fichier : Tout fichier dans le monde Unix possède un certain nombre de droits qui vont caractériser les opérations possibles sur ce fichier. Ces droits sont : Caractère Description --------- ----------- r droit en lecture (read). - Tout fichier qui possède cette caractéristique peut être lu. w droit en écriture (write). Le fichier pourra être supprimé, renommé ou son contenu modifié. x droit d’exécution (pour un fichier) ou de parcours (pour un répertoire) (execute). Sous unix, il n’y a pas d’extension standard pour les fichiers programmes tels que .exe, .com, .bat ... C’est le droit d’éxécution qui fait d’un fichier qu’il est exécutable, et ce, quelque soit son nom ou son éventuelle extension. Dans le cas des répertoires, ce droit permet de traverser le répertoire. Attention traverser ne veut pas dire lire ou écrire. Je peux traverser un répertoire sur lequel je n’ai pas de droit en lecture ou en écriture, ce sont deux choses différentes. s set uid ou set gid. Nous n’en parlerons pas pour l’instant. t sticky bit. Nous n’en parlerons pas pour l’instant. Pour résumer : Le premier triplet indique les droits du propriétaire du fichier. Le second indique les droits des membres du groupe du propriétaire du fichier. Le dernier indique les droits pour le reste du monde sur le fichier. r w x r w x r w x - Colonne 2 : Liens physiques ----------------------------- On trouve dans cette colonne le nombre de liens physiques sur le fichier. Je passe sur cette notion dans l’immédiat. - Colonne 3 : Propriétaire -------------------------- On trouve le nom (user name) du propriétaire du fichier. Si le propriétaire n’est pas connu sur le système (pas d’entrée dans /etc/passwd), c’est le numéro d’utilisateur (user id) qui est indiqué. - Colonne 4 : Groupe -------------------- On trouve le nom du groupe (user group) du propriétaire du fichier. Si le groupe n’est pas connu sur le système (pas d’entrée dans /etc/group), c’est le numéro de groupe (group id) qui est indiqué. - Colonne 5 : Taille -------------------- On trouve ici la taille du fichier. Elle peut être affichée en octets (o), kilo-octets (ko), méga-octets (Mo), ...suivant les cas. - Colonne 6, 7 et 8 : Date et heure ----------------------------------- C’est la date et l’heure de la dernière modification du fichier. - Colonne 9 : Nom ----------------- La dernière colonne informe sur le nom du fichier et dans le cas de certains shells (bash par exemple) le dernier caractère indique le type de fichier : Caractère Description --------- ----------- / pour un répertoire. @ pour un lien symbolique. = pour un socket. - Récapitulatif --------------- Type Proprio Groupe Autres Liens Prop. Groupe Taille Date - heure Nom d rwx --- --- 11 root root 1024 nov 5 15:31 ./ d rwx r-x r-x 20 root root 1024 nov 5 15:30 ../ - rw- --- --- 1 root root 9821 nov 4 15:19 .viminfo - rw- --- --- 1 root root 11748 nov 5 13:10 .bash_history l rwx rwx rwx 1 root root 47 nov 5 13:10 .odbc -> /etc/skel/odbc.ini