Académique Documents
Professionnel Documents
Culture Documents
13.1 Présentation
Rappel
Lorsque la plupart des gens font référence à Linux, ils font en réalité référence à
une combinaison de logiciels appelée GNU/Linux , qui définit le système
d'exploitation . GNU est le logiciel libre qui entoure le noyau et fournit des
équivalents open source de nombreuses commandes UNIX courantes. La partie
Linux de cette combinaison est le noyau Linux , qui est le cœur du système
d'exploitation. Le noyau est chargé au démarrage et reste en cours d'exécution
pour gérer tous les aspects du fonctionnement du système.
Une implémentation du noyau Linux comprend de nombreux sous-systèmes qui
font partie du noyau lui-même et d'autres qui peuvent être chargés de manière
modulaire en cas de besoin. Les fonctions clés du noyau Linux incluent une
interface d'appel système, la gestion des processus, la gestion de la mémoire, les
systèmes de fichiers virtuels, la mise en réseau et les pilotes de périphériques.
En bref, via un shell, le noyau accepte les commandes de l'utilisateur et gère les
processus qui exécutent ces commandes en leur donnant accès à des
périphériques tels que la mémoire, les disques, les interfaces réseau, les claviers,
les souris, les moniteurs, etc.
Un système Linux typique contient des milliers de fichiers. Le Filesystem
Hierarchy Standard fournit une ligne directrice pour les distributions sur la
façon d'organiser ces fichiers. Il est important de comprendre le rôle du noyau
Linux et comment il traite et fournit des informations sur le système sous les
systèmes de fichiers /procet /sys pseudo .
1
13.2 Processus
Le noyau permet d'accéder aux informations sur les processus actifs via
un pseudo système de fichiers visible sous le /procrépertoire. Les périphériques
matériels sont mis à disposition via des fichiers spéciaux sous le /devrépertoire,
tandis que les informations sur ces périphériques peuvent être trouvées dans un
autre pseudo système de fichiers sous le /sysrépertoire.
Les pseudo-systèmes de fichiers semblent être de vrais fichiers sur le disque
mais n'existent qu'en mémoire. La plupart des pseudo-systèmes de fichiers tels
que ceux qui /procsont conçus pour apparaître comme un arbre hiérarchique
partant de la racine du système de répertoires, fichiers et sous-répertoires, mais
en réalité n'existent que dans la mémoire du système et ne semblent résider que
sur le périphérique de stockage que le le système de fichiers racine est activé.
Le /procrépertoire contient non seulement des informations sur les processus en
cours d'exécution, comme son nom l'indique, mais il contient également des
informations sur le matériel système et la configuration actuelle du noyau.
Le /procrépertoire est lu et ses informations sont utilisées par de nombreuses
commandes différentes sur le système, y compris, mais sans s'y
limiter top, free, , mount, umountet bien d'autres. Il est rarement nécessaire pour un
utilisateur d'exploiter /procdirectement le répertoire - il est plus facile d'utiliser
les commandes qui utilisent ses informations.
Voir un exemple de sortie ci-dessous :
sysadmin@localhost : ~ $ ls /proc
2
1 cpuinfo irq modules sys
128 crypto kallsyms monte sysrq-trigger
17 périphériques kcore mtrr sysvipc
21 diskstats key-users net thread-self
23 clés dma pagetypeinfo timer_list
39 pilote kmsg partitions timer_stats
60 execdomains kpagecgroup sched_debug tty
72 fb kpagecount schedstat disponibilité
systèmes de fichiers acpi kpageflags version scsi
buddyinfo fs loadavg self version_signature
interruptions de bus verrouille slabinfo vmallocinfo
cgroups iomem mdstat softirqs vmstat
cmdline ioports meminfo stat zoneinfo
consoles ipmi divers swaps
Dossier Contenu
3
Dossier Contenu
Encore une fois, il est rarement nécessaire d'afficher ces fichiers directement, car
d'autres commandes offrent une sortie plus conviviale et une autre façon
d'afficher ces informations.
Considère ceci
Alors que la plupart des "fichiers" sous le /procrépertoire ne peuvent pas être
modifiés, même par l'utilisateur root, les "fichiers" sous le /proc/sysrépertoire
sont potentiellement destinés à être modifiés par l'utilisateur root. La
modification de ces fichiers modifie le comportement du noyau Linux.
La modification directe de ces fichiers n'entraîne que des modifications
temporaires du noyau. Pour rendre les modifications permanentes (persistantes
même après le redémarrage), des entrées peuvent être ajoutées à la section
appropriée du /etc/sysctl.conffichier.
Par exemple, le /proc/sys/net/ipv4répertoire contient un fichier
nommé icmp_echo_ignore_all. Si ce fichier contient un 0caractère zéro, comme
il le fait normalement, le système répondra aux icmpdemandes. Si ce fichier
contient un seul 1caractère, le système ne répondra pas aux icmprequêtes :
sysadmin@localhost : ~ $ su -
Mot de passe:
root@localhost : ~ # cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0
root@localhost : ~ # ping -c1 localhost
PING localhost.localdomain (127.0.0.1) 56(84) octets de données.
64 octets de localhost.localdomain (127.0.0.1) : icmp_seq=1 ttl=64 time=0.026
ms
4
--- statistiques de ping localhost.localdomain ---
1 paquets transmis, 1 reçu, 0% de perte de paquets, temps 0ms
rtt min/moy/max/mdev = 0,026/0,026/0,026/0,000 ms
root@localhost : ~ # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
root@localhost : ~ # ping -c1 localhost
PING localhost.localdomain (127.0.0.1) 56(84) octets de données.
5
le système "passe" et continue de manière transparente en attribuant des valeurs
PID qui sont disponibles au bas de la plage.
Les processus peuvent être « cartographiés » dans un arbre généalogique de
couplages parents et enfants. Si vous souhaitez visualiser cet arbre, la
commande l' pstreeaffiche :
sysadmin@localhost : ~ $ pstree
init-+-cron
|-connexion---bash---pstree
|-nommé---18*[{nommé}]
|-rsyslogd---2*[{rsyslogd}]
`-sshd
Si vous deviez examiner la relation entre les processus parent et enfant à l'aide
de la sortie de la commande précédente, cela pourrait être décrit comme suit :
sysadmin@localhost : ~ $ ps
PID TTY TIME CMD
6054 ? 00:00:00 coup
6
6070 ? 00:00:01 xyeux
6090 ? 00:00:01 firefox
6146 ? 00:00:00ps
sysadmin@localhost : ~ $ ps --forest
PID TTY TIME CMD
6054 ? 00:00:00 coup
6090 ? 00:00:02 \_ firefox
6180 ? 00:00:00 \_ tiret
6181 ? 00:00:00 \_ xyeux
6188 ? 00:00:00 \_ps
7
UID PID PPID C STIME TTY HEURE CMD
racine 1 0 0 08:06 ? 00:00:00 /sbin ?? /init
journal système 17 1 0 08:06 ? 00:00:00 /usr/sbin/rsyslogd -c5
racine 21 1 0 08:06 ? 00:00:00 /usr/sbin/cron
racine 23 1 0 08:06 ? 00:00:00 /usr/sbin/sshd
lier 39 1 0 08:06 ? 00:00:00 /usr/sbin/named -u bind
racine 48 1 0 08:06 ? 00:00:00 /bin/connexion -f
administrateur système 60 48 0 08:06 ? 00:00:00 -bash
administrateur système 124 60 0 16:46 ? 00:00:00 ps-ef
administrateur système 125 60 0 16:46 ? 00:00:00 tête
La sortie de tous les processus exécutés sur un système peut être écrasante. Dans
les exemples précédents, la sortie de la pscommande était filtrée par
la headcommande, de sorte que seuls les dix premiers processus étaient
affichés. Si vous ne filtrez pas la sortie de la pscommande, vous devrez
probablement faire défiler des centaines de processus pour trouver ce qui
pourrait vous intéresser.
Un moyen courant de réduire le nombre de lignes de sortie que l'utilisateur peut
avoir à trier consiste à utiliser la grepcommande pour filtrer les lignes d'affichage
de sortie qui correspondent à un mot-clé, tel qu'un nom de processus. Par
exemple, pour afficher uniquement les informations sur le firefoxprocessus,
exécutez une commande telle que :
sysadmin@localhost : ~ $ ps -u root
PID TTY TIME CMD
8
1 ? 00:00:00 démarrage
13 ? 00:00:00 cron
15 ? 00:00:00 ssh
43 ? 00:00:00 connexion
sysadmin@localhost : ~ $ haut
top - 00:26:56 jusqu'à 28 jours, 20:53, 1 utilisateur, charge moyenne : 0,11, 0,15,
0,17
Tâches : 8 au total, 1 en cours d'exécution, 7 en sommeil, 0 à l'arrêt, 0 zombie
%Cpu(s) : 0,2 us, 0,2 sy, 0,0 ni, 99,6 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem : 13201464+total, 76979904 libres, 47522152 utilisés, 7512580
buff/cache
Swap KiB : 13419622+total, 13415368+gratuit, 42544 utilisé. 83867456 dispo
Mem
9
13 racine 20 0 28356 2552 2320 S 0.0 0.0 0:00.00 cron
15 racine 20 0 72296 3228 2484 S 0.0 0.0 0:00.00 sshd
24 lier 20 0 878888 39324 7148 S 0.0 0.0 0:02.72 nommé
43 racine 20 0 78636 3612 3060 S 0.0 0.0 0:00.00 connexion
56 administrateur système 20 0 18508 3440 3040 S 0.0 0.0 0:00.00 bash
72 administrateur système 20 0 36600 3132 2696 R 0.0 0.0 0:00.03 haut
Clé Action
10
top - 00:26:56 jusqu'à 28 jours, 20:53, 1 utilisateur, charge moyenne : 0,11,
0,15, 0,17
Tâches : 8 au total, 1 en cours d'exécution, 7 en sommeil, 0 à l'arrêt, 0 zombie
%Cpu(s) : 0,2 us, 0,2 sy, 0,0 ni, 99,6 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem : 13201464+total, 76979904 libres, 47522152 utilisés, 7512580
buff/cache
Swap KiB : 13419622+total, 13415368+gratuit, 42544 utilisé. 83867456 dispo
Mem
Charge moyenne :
11
La quatrième valeur est une fraction qui indique le nombre de
processus exécutant actuellement du code sur le CPU 1et le nombre
total de processus 254.
Dernier PID :
13.3 Mémoire
La mémoire sur un système Linux moderne est régie et gérée par le noyau. La
mémoire matérielle du système est partagée par tous les processus du système,
via une méthode appelée adressage virtuel . La mémoire physique peut être
référencée par un certain nombre de processus, dont chacun peut penser qu'il est
capable d'adresser plus de mémoire qu'il ne le peut réellement. L'adressage
virtuel permet à de nombreux processus d'accéder à la même mémoire sans
conflits ni plantages. Pour ce faire, il alloue certaines zones d'un disque dur
physique (ou virtuel) à utiliser à la place de la RAM physique. La mémoire est
divisée en blocsd'unités de taille égale qui peuvent être adressées comme
n'importe quelle autre ressource du système. Non seulement le système peut
accéder à la mémoire à partir des adresses système locales, mais il peut
également accéder à la mémoire située ailleurs, comme sur un autre ordinateur,
un périphérique virtuel ou même sur un volume physiquement situé sur un autre
continent !
12
Bien qu'un examen détaillé de l'adressage mémoire Linux dépasse le cadre de ce
cours, il est important de noter la différence entre l'espace utilisateur et
l'espace noyau . L'espace noyau est l'endroit où le code du noyau est stocké et
exécuté. Cela se trouve généralement dans une plage d'adresses mémoire
«protégées» et reste isolé des autres processus avec des privilèges
inférieurs. L'espace utilisateur, quant à lui, est disponible pour les utilisateurs et
les programmes. Ils communiquent avec le noyau via des API "d'appel système"
qui agissent comme intermédiaires entre les programmes réguliers et le
noyau. Ce système de séparation des programmes potentiellement instables ou
malveillants du travail critique du noyau est ce qui donne aux systèmes Linux la
stabilité et la résilience sur lesquelles les développeurs d'applications s'appuient.
sysadmin@localhost : ~ $ gratuit
total des tampons partagés gratuits utilisés mis en cache
Mémoire : 32953528 26171772 6781756 0 4136 22660364
-/+ tampons/cache : 3507272 29446256
Échange : 0 0 0
sysadmin@localhost : ~ $ free -s 10
total utilisé buff/cache partagé gratuit disponible
Mémoire : 132014640 47304084 77189512 3008 7521044 84085528
Échange : 134196220 42544 134153676
13
Pour faciliter l'interprétation de la freesortie de la commande, les options -mou -
gpeuvent être utiles en affichant la sortie en mégaoctets ou en gigaoctets,
respectivement. Sans ces options, la sortie est affichée en octets :
Lors de la lecture de la sortie de la freecommande :
En-tête descriptif :
14
Mémoire : 32953528 26171772 6781756 0 4136 22660364
-/+ tampons/cache : 3507272 29446256
Échange : 0 0 0
Si la quantité de mémoire et d'échange disponible devient très faible, le système
commencera à terminer automatiquement les processus, ce qui rendra critique la
surveillance de l'utilisation de la mémoire du système. Un administrateur qui
remarque que le système manque de mémoire libre peut utiliser topou killpour
mettre fin aux processus de son choix, plutôt que de laisser le système choisir.
15
principalement une sortie texte, mais aussi binaire. La méthode standard pour
afficher les journaldjournaux basés sur - consiste à utiliser
la journalctlcommande.
Quel que soit le processus démon utilisé, les fichiers journaux eux-mêmes sont
presque toujours placés dans la /var/logstructure de répertoires. Bien que
certains noms de fichiers puissent varier, voici quelques-uns des fichiers les plus
courants que l'on trouve dans ce répertoire :
Dossier Contenu
16
Dossier Contenu
connexion).
17
Bien que la plupart des fichiers journaux contiennent du texte, qui peut être
visualisé en toute sécurité avec de nombreux outils, d'autres fichiers tels que les
fichiers /var/log/btmpet /var/log/wtmpcontiennent du binaire. En utilisant
la filecommande, les utilisateurs peuvent vérifier le type de contenu du fichier
avant de l'afficher pour s'assurer qu'il peut être affiché en toute
sécurité. La filecommande suivante est classée /var/log/wtmpcomme data, ce qui
signifie généralement que le fichier est binaire :
Pour les fichiers contenant des données binaires, des commandes sont
disponibles pour lire les fichiers, interpréter leur contenu, puis générer du
texte. Par exemple, les commandes lastbet lastpeuvent être utilisées pour
afficher respectivement les fichiers /var/log/btmpet ./var/log/wtmp
Le lastbnécessite des privilèges root pour être exécuté dans notre environnement
de machine virtuelle.
18
sysadmin@localhost : ~ $ dmesg | grep-i usb
usbcore : nouveau pilote d'interface enregistré usbfs
usbcore : nouveau hub de pilote d'interface enregistré
usbcore : nouveau pilote de périphérique enregistré usb
ehci_hcd : pilote de contrôleur hôte USB 2.0 "amélioré" (EHCI)
ohci_hcd : pilote de contrôleur hôte USB 1.1 "ouvert" (OHCI)
ohci_hcd 0000:00:06.0 : nouveau bus USB enregistré, numéro de bus attribué 1
usb usb1 : Nouveau périphérique USB trouvé, idVendor=1d6b, idProduct=0001
usb usb1 : Nouvelles chaînes de périphérique USB : Mfr=3, Product=2,
SerialNumber=1
19
Non partageable Partageable
The FHS standard defines four hierarchies of directories used in organizing the
files of the filesystem. The top-level or root hierarchy follows:
Director
y Contents
20
Director
y Contents
21
Director
y Contents
22
Director
y Contents
hébergés
23
Director
y Contents
Répertoires binaires
Les répertoires binaires contiennent les programmes que les utilisateurs et les
administrateurs exécutent pour démarrer des processus ou des applications
s'exécutant sur le système.
/bin
/usr/bin
/usr/local/bin
Parfois, des logiciels tiers stockent également leurs fichiers exécutables dans des
répertoires tels que :
/usr/local/application/bin
/opt/application/bin
De plus, il n'est pas rare que chaque utilisateur ait son propre binrépertoire situé
dans son répertoire personnel ; par exemple, /home/bob/bin.
/sbin
/usr/sbin
/usr/local/sbin
/usr/local/application/sbin
/opt/application/sbin
/usr/share
/usr/lib
/opt/application
/var/lib
Le fichier lié à la documentation peut être stocké dans l'un des sous-répertoires
suivants :
/usr/share/doc
/usr/share/man
/usr/share/info
Les fichiers de configuration globale pour une application sont plus susceptibles
d'être stockés dans un sous-répertoire sous le /etcrépertoire, tandis que les
fichiers de configuration personnalisés (spécifiques à un utilisateur) pour
l'application sont probablement dans un sous-répertoire caché du répertoire
personnel de l'utilisateur.
26
Répertoires de la bibliothèque
Les bibliothèques sont des fichiers qui contiennent du code partagé entre
plusieurs programmes. La plupart des noms de fichiers de bibliothèque se
terminent par une extension de fichier .so, ce qui signifie objet partagé .
Plusieurs versions d'une bibliothèque peuvent être présentes car le code peut être
différent dans chaque fichier même s'il peut exécuter des fonctions similaires à
celles d'autres versions de la bibliothèque. L'une des raisons pour lesquelles le
code peut être différent, même s'il peut faire la même chose qu'un autre fichier
de bibliothèque, est qu'il est compilé pour s'exécuter sur un type de processeur
différent. Par exemple, il est typique pour les systèmes qui utilisent du code
conçu pour les processeurs de type Intel/AMD 64 bits d'avoir à la fois des
bibliothèques 32 bits et des bibliothèques 64 bits.
Les bibliothèques qui prennent en charge les programmes binaires essentiels
trouvés dans les répertoires /binet /sbinse trouvent généralement
dans /libou /lib64.
Pour prendre en charge les exécutables /usr/binet , les répertoires de
bibliothèque et sont généralement utilisés./usr/sbin/usr/lib/usr/lib64
Pour prendre en charge les applications qui ne sont pas distribuées avec le
système d'exploitation, les répertoires de
bibliothèque /usr/local/libet /opt/application/libsont fréquemment utilisés.
27
28