Vous êtes sur la page 1sur 28

Chapitre 13 - Où les données sont stockées

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

La sortie affiche une variété de répertoires nommés et numérotés. Il existe un


répertoire numéroté pour chaque processus en cours d'exécution sur le système,
où le nom du répertoire correspond à l' ID de processus (PID) du processus en
cours d'exécution.
Par exemple, les chiffres 72désignent le PID 72, un programme en cours
d'exécution, qui est représenté par un répertoire du même nom, contenant de
nombreux fichiers et sous-répertoires décrivant ce processus en cours
d'exécution, sa configuration, l'utilisation de la mémoire et de nombreux autres
éléments.
Sur un système Linux en cours d'exécution, il existe toujours un ID de processus
ou PID 1.
Il existe également un certain nombre de fichiers normaux dans
le /procrépertoire qui fournissent des informations sur le noyau en cours
d'exécution :

Dossier Contenu

/proc/cmdline Informations transmises au noyau lors de son


premier démarrage, telles que les paramètres de

3
Dossier Contenu

ligne de commande et les instructions spéciales

/proc/ Informations sur l'utilisation de la mémoire par le


meminfo noyau

/proc/modules Une liste des modules actuellement chargés dans


le noyau pour ajouter des fonctionnalités
supplémentaires

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.

--- statistiques de ping localhost.localdomain ---


1 paquets transmis, 0 reçu, 100% de perte de paquets, temps 10000

13.2.1 Hiérarchie des processus


Lorsque le noyau termine le chargement pendant la procédure de démarrage, il
démarre le processus init et lui attribue un PID de 1. Ce processus démarre
ensuite d'autres processus système et chaque processus se voit attribuer un PID
dans un ordre séquentiel.
Considère ceci
Sur un système basé sur System V , le processus init serait
le /sbin/initprogramme. Sur un système basé sur systemd , le /bin/systemdfichier
est généralement exécuté mais est presque toujours un lien vers
l' /lib/system/systemdexécutable.
Quel que soit le type de processus d'initialisation du système en cours
d'exécution, les informations sur le processus peuvent être trouvées dans
le /proc/1répertoire.
Lorsque l'un ou l'autre des processus init démarre d'autres processus, ils peuvent
à leur tour démarrer des processus, qui peuvent démarrer d'autres processus,
encore et encore. Lorsqu'un processus démarre un autre processus, le processus
qui effectue le démarrage est appelé le processus parent et le processus qui est
démarré est appelé le processus enfant . Lors de l'affichage des processus, le
PID parent est étiqueté PPID.
Lorsque le système fonctionne depuis longtemps, il peut éventuellement
atteindre la valeur PID maximale , qui peut être visualisée et configurée via
le /proc/sys/kernel/pid_maxfichier. Une fois que le plus grand PID a été utilisé,

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 :

 initest le parent delogin


 loginest l'enfant deinit

 loginest le parent debash


 bashest l'enfant delogin

 bashest le parent depstree


 pstreeest l'enfant debash

13.2.2 Affichage de l'instantané du


processus
Une autre façon de visualiser les processus consiste à utiliser
la pscommande. Par défaut, la pscommande affiche uniquement les processus en
cours d'exécution dans le shell actuel. Ironiquement, même si vous essayez
d'obtenir des informations sur les processus, la pscommande s'inclut dans la
sortie :

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

Si vous exécutez psavec l'option --forest, alors, similaire à la pstreecommande, elle


affiche des lignes indiquant la relation parent et enfant :

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

Pour pouvoir afficher tous les processus du système, exécutez la ps


auxcommande ou la ps -efcommande :

sysadmin@localhost : ~ $ ps aux | tête


USER PID %CPU %MEM VSZ RSS TTY STAT HEURE DE DÉMARRAGE
COMMANDE
racine 1 0.0 0.0 17872 2892 ? Ss 08:06 0:00 /sbin ?? /init
journal système 17 0.0 0.0 175744 2768 ? Sl 08:06 0:00 /usr/sbin/rsyslogd -c5
racine 21 0.0 0.0 19124 2092 ? Ss 08:06 0:00 /usr/sbin/cron
racine 23 0.0 0.0 50048 3460 ? Ss 08:06 0:00 /usr/sbin/sshd
lier 39 0,0 0,0 385988 19888 ? SSL 08:06 0:00 /usr/sbin/named -u bind
racine 48 0.0 0.0 54464 2680 ? S 08:06 0:00 /bin/connexion -f
administrateur système 60 0.0 0.0 18088 3260 ? S 08:06 0:00 -bash
administrateur système 122 0.0 0.0 15288 2164 ? R+ 16:26 0:00ps aux
administrateur système 123 0.0 0.0 18088 496 ? J+ 16:26 0:00 -bash
sysadmin@localhost : ~ $ ps -ef | tête

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 -e | grep firefox


6090 pts/0 00:00:07 firefox

L'envoi de la sortie à un téléavertisseur tel que la lesscommande peut également


rendre la sortie de la pscommande plus gérable.
Un administrateur peut être plus préoccupé par les processus d'un autre
utilisateur. Il existe plusieurs styles d'options pris en pscharge par la commande,
ce qui donne différentes manières d'afficher les processus d'un utilisateur
individuel. Pour utiliser l'option UNIX traditionnelle pour afficher les processus
d'un utilisateur spécifique, utilisez l' -uoption :

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

13.2.3 Visualisation des processus en


temps réel
Alors que la pscommande fournit un instantané des processus en cours
d'exécution au moment où la commande est exécutée, la topcommande a une
interface dynamique basée sur l'écran qui met régulièrement à jour la sortie des
processus en cours d'exécution. La topcommande est exécutée comme suit :

sysadmin@localhost : ~ $ haut

Par défaut, la sortie de la topcommande est triée en fonction du pourcentage de


temps CPU que chaque processus utilise actuellement, les valeurs les plus
élevées étant répertoriées en premier, ce qui signifie que les processus les plus
gourmands en CPU sont répertoriés en premier :

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

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+


COMMAND
1 racine 20 0 18376 3036 2764 S 0.0 0.0 0:00.12 init
9 syslog 20 0 191328 5648 3100 S 0.0 0.0 0:00.04 rsyslogd

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

Il existe une grande quantité de commandes interactives qui peuvent être


exécutées à partir du topprogramme en cours d'exécution. Utilisez la
touche H pour afficher une liste complète.
L'un des avantages de la topcommande est qu'elle peut être laissée en cours
d'exécution pour rester au top des processus à des fins de surveillance. Si un
processus commence à dominer ou à s'enfuir avec le système, il apparaîtra par
défaut en haut de la liste présentée par la topcommande. Un administrateur qui
exécute la commande top peut alors effectuer l'une des deux actions suivantes :

Clé Action

K Terminez le processus d'emballement.

R Ajustez la priorité du processus.


Appuyer sur la touche K pendant l' topexécution de la commande invitera
l'utilisateur à fournir le PID, puis un numéro de signal. L'envoi du signal par
défaut demande l'arrêt du processus, mais l'envoi du signal numéro 9,
le KILLsignal, force l'arrêt du processus.
En appuyant sur la touche R pendant que la topcommande est en cours
d'exécution, l'utilisateur demandera au processus de renice , puis à une valeur de
gentillesse. Les valeurs de gentillesse peuvent aller de -20 à 19 et affecter la
priorité. Seul l'utilisateur racine peut utiliser une valeur de gentillesse qui est un
nombre inférieur à celui actuel, ou une valeur de gentillesse négative, ce qui
entraîne l'exécution du processus avec une priorité accrue. Tout utilisateur peut
fournir une valeur de gentillesse supérieure à la valeur de gentillesse actuelle, ce
qui entraîne l'exécution du processus avec une priorité réduite.
Un autre avantage de la topcommande est qu'elle peut fournir une représentation
globale de l'occupation actuelle du système et de la tendance dans le temps.

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

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+


COMMAND
1 racine 20 0 18376 3036 2764 S 0.0 0.0 0:00.12 init
9 syslog 20 0 191328 5648 3100 S 0.0 0.0 0:00.04 rsyslogd
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
Les moyennes de charge affichées dans la première ligne de sortie de
la topcommande indiquent à quel point le système a été occupé au cours des
dernières une, cinq et quinze minutes. Ces informations peuvent également être
visualisées en exécutant la uptimecommande ou directement en affichant le
contenu du /proc/loadavgfichier :
Remarque : Pour quitter le topprogramme et revenir à l'invite, tapez q .

sysadmin@localhost : ~ $ cat /proc/loadavg


0,12 0,46 0,25 1/254 3052

 Charge moyenne :

0,12 0,46 0,25 1/254 3052


Les trois premiers chiffres de ce fichier indiquent la charge
moyenne au cours des derniers intervalles d'une, cinq et quinze
minutes.
 Nombre de processus :

0,12 0,46 0,25 1/254 3052

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 :

0,12 0,46 0,25 1/254 3052


La cinquième valeur est la dernière valeur PID qui a exécuté du
code sur le CPU.
Le nombre signalé comme charge moyenne est proportionnel au nombre de
cœurs de processeur capables d'exécuter des processus. Sur un processeur
monocœur, une valeur de un ( 1) signifie que le système est entièrement
chargé. Sur un processeur à quatre cœurs, une valeur de 1signifierait que le
système n'est chargé qu'à 1/4 ou 25 %.
Une autre raison pour laquelle les administrateurs aiment garder la topcommande
en cours d'exécution est la possibilité de surveiller l'utilisation de la mémoire en
temps réel. La topet la freecommande affichent des statistiques sur l'utilisation
globale de la mémoire.
La topcommande peut également afficher le pourcentage de mémoire utilisé par
chaque processus, de sorte qu'un processus qui consomme une quantité
excessive de mémoire peut être rapidement identifié.

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.

13.3.1 Affichage de la mémoire


L'exécution de la freecommande sans aucune option fournit un instantané de la
mémoire utilisée à ce moment.

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

Si vous souhaitez surveiller l'utilisation de la mémoire dans le temps avec


la freecommande, vous pouvez l'exécuter avec l' -soption (fréquence de mise à
jour) et spécifier ce nombre de secondes. Par exemple, l'exécution de
la freecommande suivante mettrait à jour la sortie toutes les dix secondes :

sysadmin@localhost : ~ $ free -s 10
total utilisé buff/cache partagé gratuit disponible
Mémoire : 132014640 47304084 77189512 3008 7521044 84085528
Échange : 134196220 42544 134153676

total utilisé buff/cache partagé gratuit disponible


Mémoire : 132014640 47302928 77190668 3008 7521044 84086684
É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 :

 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
 Statistiques de la mémoire physique :

 total des tampons partagés gratuits utilisés en cache


 Mem : 32953528 26171772 6781756 0 4136 22660364
 -/+ tampons/cache : 3507272 29446256
 Échange : 0 0 0
 Ajustement de la mémoire :
La troisième ligne représente la quantité de mémoire physique
après avoir ajusté ces valeurs en ne tenant pas compte de la
mémoire utilisée par le noyau pour les tampons et les
caches. Techniquement, cette mémoire "utilisée" pourrait être
"récupérée" si nécessaire :

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
 Mémoire d'échange :
La quatrième ligne de sortie fait référence à la mémoire d'échange ,
également appelée mémoire virtuelle. Il s'agit de l'espace sur le
disque dur qui est utilisé comme mémoire physique lorsque la
quantité de mémoire physique devient faible. Effectivement, cela
donne l'impression que le système a plus de mémoire qu'il n'en a,
mais l'utilisation de l'espace de swap peut également ralentir le
système :

total des tampons partagés gratuits utilisés mis en cache

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.

13.4 Fichiers journaux


Lorsque le noyau et divers processus s'exécutent sur le système, ils produisent
une sortie qui décrit leur fonctionnement. Une partie de cette sortie est affichée
en tant que sortie standard et erreur dans la fenêtre du terminal où le processus a
été exécuté, bien que certaines de ces données ne soient pas envoyées à
l'écran. Au lieu de cela, il est écrit dans divers fichiers. Ces informations sont
appelées données de journal ou messages de journal .
Les fichiers journaux sont utiles pour de nombreuses raisons ; ils aident à
résoudre les problèmes et à déterminer si un accès non autorisé a été tenté ou
non.
Certains processus peuvent consigner leurs propres données dans ces fichiers,
d'autres processus s'appuient sur un processus distinct (un démon ) pour gérer
ces fichiers de données de journalisation.
Noter
Syslog est le terme utilisé de manière presque générique pour décrire la
journalisation dans les systèmes Linux, car il est en place depuis un certain
temps. Dans certains cas, lorsqu'un auteur parle de syslog , ce qu'il veut vraiment
dire, c'est le système de journalisation actuellement utilisé sur cette distribution .
Les démons de journalisation diffèrent de deux manières principales dans les
distributions récentes. L'ancienne méthode de journalisation du système consiste
en deux démons (nommés syslogdet klogd) travaillant ensemble, mais dans les
distributions plus récentes, un seul service nommé rsyslogdcombine ces deux
fonctions et plus en un seul démon.
Dans les distributions encore plus récentes, celles basées sur systemd, le démon
de journalisation est nommé journald, et les journaux sont conçus pour permettre

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

boot.log Les messages générés en tant que services


sont lancés lors du démarrage du système.

cron Messages générés par le cronddémon pour


les travaux à exécuter de manière
récurrente.

dmesg Messages générés par le noyau lors du


démarrage du système.

maillog Messages produits par le maildémon pour


les messages électroniques envoyés ou
reçus.

messages Messages du noyau et d'autres processus


qui n'appartiennent pas ailleurs. Parfois
nommé syslogd' messagesaprès le démon qui
écrit ce fichier.

secure Messages provenant de processus


nécessitant une autorisation ou une
authentification (comme le processus de

16
Dossier Contenu

connexion).

journal Messages de la configuration par défaut


du systemd-journald.service; peut être
configuré dans le /etc/journald.conffichier
entre autres endroits.

Xorg.0.lo Messages du serveur X Windows (GUI).


g

Vous pouvez afficher le contenu de divers fichiers journaux à l'aide de deux


méthodes différentes. Tout d'abord, comme avec la plupart des autres fichiers,
vous pouvez utiliser la catcommande ou la lesscommande pour autoriser la
recherche, le défilement et d'autres options.
La deuxième méthode consiste à utiliser la journalctlcommande sur les systèmes
basés sur systemd, principalement parce que le /var/log/journalfichier contient
maintenant souvent des informations binaires et que l'utilisation des
commandes catou lesspeut produire un comportement d'écran confus à partir des
codes de contrôle et des éléments binaires dans les fichiers journaux.
Les fichiers journaux font l'objet d'une rotation , ce qui signifie que les anciens
fichiers journaux sont renommés et remplacés par des fichiers journaux plus
récents. Les noms de fichiers qui apparaissent dans le tableau ci-dessus peuvent
avoir un suffixe numérique ou de date ajouté : par exemple, secure.0ou secure-
20181103.
La rotation d'un fichier journal se produit généralement sur une base régulière :
par exemple, une fois par semaine. Lorsqu'un fichier journal fait l'objet d'une
rotation, le système arrête d'écrire dans le fichier journal et y ajoute un
suffixe. Ensuite, un nouveau fichier portant le nom d'origine est créé et le
processus de journalisation se poursuit à l'aide de ce nouveau fichier.
Avec la plupart des démons modernes, un suffixe de date est utilisé. Ainsi, à la
fin de la semaine se terminant le 3 novembre 2018, le démon de journalisation
peut arrêter d'écrire dans /var/log/messages(ou /var/log/journal), renommer ce
fichier /var/log/messages-20181103, puis commencer à écrire dans un
nouveau /var/log/messagesfichier.

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 :

sysadmin@localhost : ~ $ fichier /var/log/wtmp


/var/log/wtmp : données

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.

13.5 Messages du noyau


Le /var/log/dmesgfichier contient les messages du noyau générés lors du
démarrage du système. Le /var/log/messagesfichier contient des messages du
noyau qui sont produits lorsque le système est en cours d'exécution, mais ces
messages sont mélangés avec d'autres messages provenant de démons ou de
processus.
Bien que le noyau n'ait normalement pas son propre fichier journal, il est
possible d'en configurer un en modifiant soit le /etc/syslog.conffichier, soit
le /etc/rsyslog.conffichier. De plus, la dmesgcommande peut être utilisée pour
afficher le tampon circulaire du noyau , qui contient un grand nombre de
messages générés par le noyau.‌ 
Sur un système actif ou connaissant de nombreuses erreurs de noyau, la capacité
de ce tampon peut être dépassée et certains messages peuvent être perdus. La
taille de ce tampon est définie au moment de la compilation du noyau, il n'est
donc pas trivial de le modifier.
L'exécution de la dmesgcommande peut produire jusqu'à 512 kilo-octets de texte,
il est donc recommandé de filtrer la commande avec un tuyau vers une autre
commande comme lessou . grepPar exemple, si un utilisateur résolvait des
problèmes avec un périphérique USB, la recherche du texte USBavec
la grepcommande est utile. L' -ioption est utilisée pour ignorer la casse :

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

13.6 Norme de hiérarchie du système de


fichiers
Parmi les normes prises en charge par la Fondation Linux figure la norme de
hiérarchie du système de fichiers (FHS) , qui est hébergée à
l'URL http://www.pathname.com/fhs/ .
Une norme est un ensemble de règles ou de lignes directrices qu'il est
recommandé de suivre. Cependant, ces directives peuvent certainement être
enfreintes, soit par des distributions entières, soit par des administrateurs sur des
machines individuelles.
La norme FHS catégorise chaque répertoire système de plusieurs manières :

 Un répertoire peut être classé comme partageable ou non, en


indiquant si le répertoire peut être partagé sur un réseau et utilisé
par plusieurs machines.
 Le répertoire est placé dans une catégorie contenant soit des
fichiers statiques (le contenu des fichiers ne changera pas) soit
des fichiers variables (le contenu des fichiers peut changer).

Pour effectuer ces classifications, il est souvent nécessaire de se référer à des


sous-répertoires sous le niveau supérieur des répertoires. Par exemple,
le /varrépertoire lui-même ne peut pas être classé comme partageable ou non
partageable, mais l'un de ses sous-répertoires, le /var/mailrépertoire, est
partageable. Inversement, le /var/lockrépertoire ne doit pas être partageable.

19
Non partageable Partageable

Variable /var/lock /var/mail

Statique /etc /opt

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

/ The base of the structure, or root of the


filesystem, this directory unifies all
directories regardless of whether they
are local partitions, removable devices
or network shares

20
Director
y Contents

/bin Essential binaries like the ls, cp,


and rm commands, and be a part of the
root filesystem

/boot Files necessary to boot the system, such


as the Linux kernel and associated
configuration files

/dev Files that represent hardware devices


and other special files, such as
the /dev/null and /dev/zero files

/etc Essential host configurations files such


as the /etc/hosts or /etc/passwd files

/home User home directories

/lib Bibliothèques essentielles pour prendre


en charge les fichiers exécutables dans
les répertoires /binet/sbin

/lib64 Bibliothèques essentielles construites


pour une architecture spécifique. Par
exemple, le /lib64répertoire des
processeurs compatibles AMD/Intel x86
64 bits

21
Director
y Contents

/media Point de montage pour support


amovible monté automatiquement

/mnt Point de montage pour monter


temporairement les systèmes de fichiers
manuellement

/opt Emplacement d'installation du logiciel


tiers facultatif

/proc Système de fichiers virtuel pour que le


noyau rapporte les informations de
processus, ainsi que d'autres
informations

/root Répertoire d'accueil de l'utilisateur root

/sbin Binaires système essentiels


principalement utilisés par l'utilisateur
root

/sys Système de fichiers virtuel pour les


informations sur les périphériques
matériels connectés au système

/srv Emplacement où les services


spécifiques au site peuvent être

22
Director
y Contents

hébergés

/tmp Répertoire où tous les utilisateurs sont


autorisés à créer des fichiers
temporaires et qui est censé être effacé
au démarrage (mais ce n'est souvent pas
le cas)

/usr Deuxième hiérarchie


Fichiers non essentiels pour une
utilisation multi-utilisateurs
/usr/local Troisième hiérarchie
Fichiers pour les logiciels ne provenant
pas de la distribution
/var Quatrième hiérarchie
Fichiers qui changent avec le temps
/var/cache Fichiers utilisés pour la mise en cache
des données d'application
/var/log La plupart des fichiers journaux
/var/lock Verrouiller les fichiers pour les
ressources partagées
/var/spool Fichiers spool pour l'impression et le
courrier

23
Director
y Contents

/var/tmp Fichiers temporaires à conserver entre


les redémarrages
Les deuxième et troisième hiérarchies, situées sous les
répertoires /usret /usr/local, répètent le modèle de nombreux répertoires clés
trouvés sous la première hiérarchie ou le système de fichiers racine. La
quatrième hiérarchie, le /varrépertoire, répète également certains des répertoires
de niveau supérieur tels que lib, optet tmp.
Alors que le système de fichiers racine et son contenu sont considérés comme
essentiels ou nécessaires pour démarrer le système, les
répertoires /var, /usret /usr/localsont considérés comme non essentiels pour le
processus de démarrage. Par conséquent, le système de fichiers racine et ses
répertoires peuvent être les seuls disponibles dans certaines situations, comme le
démarrage en mode mono-utilisateur, un environnement conçu pour dépanner le
système.
Le /usrrépertoire est destiné à contenir des logiciels destinés à être utilisés par
plusieurs utilisateurs. Le /usrrépertoire est parfois partagé sur le réseau et monté
en lecture seule.
La /usr/localhiérarchie est destinée à l'installation de logiciels qui ne proviennent
pas de la distribution. Ce répertoire est souvent utilisé pour les logiciels
compilés à partir du code source.

13.6.1 Organisation au sein de la


hiérarchie du système de fichiers
Bien que la norme FHS soit utile pour une compréhension détaillée de la
disposition des répertoires utilisés par la plupart des distributions Linux, ce qui
suit fournit une description plus générale de la disposition des répertoires tels
qu'ils existent sur une distribution Linux typique.

Répertoires d'accueil des utilisateurs


Le /homerépertoire a un répertoire en dessous pour chaque compte
d'utilisateur. Par exemple, un utilisateur bobaura un répertoire personnel
de /home/bob. Généralement, seul l'utilisateur bobaura accès à ce
24
répertoire. Sans disposer d'autorisations spéciales sur d'autres répertoires, un
utilisateur ne peut créer des fichiers que dans son répertoire personnel,
le /tmprépertoire et le /var/tmprépertoire.

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.

Binaires spécifiques à l'utilisateur


Les répertoires binaires destinés à être utilisés par des utilisateurs non privilégiés
incluent :

 /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.

Binaires restreints à la racine


D'autre part, les sbinrépertoires sont principalement destinés à être utilisés par
l'administrateur système (l'utilisateur root). Ceux-ci comprennent généralement :

 /sbin
 /usr/sbin
 /usr/local/sbin

Certaines applications d'administration tierces peuvent également utiliser des


répertoires tels que :

 /usr/local/application/sbin
 /opt/application/sbin

Selon la distribution, la PATHvariable peut ne pas contenir tous les


répertoires binet possibles sbin. Pour exécuter une commande dans l'un de ces
25
répertoires, le répertoire doit être inclus dans la PATHliste des variables, ou
l'utilisateur doit spécifier le chemin d'accès à la commande.

Répertoires d'applications logicielles


Contrairement au système d'exploitation Windows, où les applications peuvent
avoir tous leurs fichiers installés dans un seul sous-répertoire sous le C:\Program
Filesrépertoire, les applications sous Linux peuvent avoir leurs fichiers dans
plusieurs répertoires répartis dans le système de fichiers Linux. Pour les
distributions dérivées de Debian, vous pouvez exécuter la commande pour
obtenir la liste des emplacements de fichiers. Dans les distributions dérivées de
Red Hat, vous pouvez exécuter la commande pour obtenir la liste des
emplacements des fichiers appartenant à cette application.dpkg -L packagenamerpm
-ql packagename
Les fichiers binaires du programme exécutable peuvent aller dans
le /usr/binrépertoire s'ils sont inclus avec le système d'exploitation, ou bien ils
peuvent aller dans les répertoires /usr/local/binou /opt/application/bins'ils
proviennent d'un tiers.
Les données de l'application peuvent être stockées dans l'un des sous-répertoires
suivants :

 /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.

Répertoires de données variables


Le /varrépertoire et nombre de ses sous-répertoires peuvent contenir des données
qui changent fréquemment. Si votre système est utilisé pour le courrier
électronique, alors soit /var/mailou /var/spool/mailest normalement utilisé pour
stocker les données de courrier électronique des utilisateurs. Si vous imprimez à
partir de votre système, le /var/spool/cupsrépertoire est utilisé pour stocker
temporairement les travaux d'impression.
En fonction des événements consignés et de la quantité d'activités qui se
produisent, le système détermine la taille de votre fichier journal. Sur un
système occupé, il peut y avoir une quantité considérable de données dans les
fichiers journaux. Ces fichiers sont stockés dans le /var/logrépertoire.
Bien que les fichiers journaux puissent être utiles pour résoudre les problèmes,
ils peuvent causer des problèmes. Une préoccupation majeure pour tous ces
répertoires est qu'ils peuvent remplir rapidement l'espace disque sur un système
actif. Si le /varrépertoire n'est pas une partition séparée, le système de fichiers
racine peut devenir plein et provoquer le plantage du système.

27
28

Vous aimerez peut-être aussi