Je me promenais sur le système de fichiers Linux, ce qui semble être un bon moyen de comprendre son fonctionnement. Sous UNIX, "tout est un fichier", je regardais donc /dev/stdin
et remarquais qu'il s'agissait d'un lien virtuel à /proc/self/fd/0
. J'ai donc décidé d'aller jeter un coup d'œil au dossier /proc
, trouvant que /proc/self
était en fait un lien virtuel vers /proc/{PID}
. Pour être plus précis, le PID est celui de la commande ls -l /proc/self
que je lance pour vérifier sa valeur.
Ma théorie est que le lien symbolique est modifié à chaque fois qu'un programme tente de le lire, pour pointer vers le bon dossier de processus PID. Est-ce que le noyau effectue chaque lecture du dossier /proc
? Je ne pense pas que vous ayez réellement besoin de lire le fichier pour obtenir le résultat de ls
sinon nous ne pourrions pas voir les fichiers avec une autorisation 700. Le changement de lien symbolique se produit-il lorsque le /proc
le dossier est accédé?
Pour aller encore plus loin: Ce type de contrôle est-il restreint pour le noyau lui-même ou certaines applications peuvent-elles l'utiliser? (Peut-être en vérifiant quand un dossier est en cours d'accès pour changer dynamiquement son contenu/liens en fonction de "qui" le fait)
/proc
est un point de montage pour procfs
(sorte de tmpfs
, vit en mémoire), qui est une interface avec la structure de données interne du noyau. Tout ce que vous voyez dans /proc
est directement renseigné par Linux et également maintenu par le noyau lui-même.
/proc/self
est un lien symbolique vers le répertoire /proc/<PID>
, où <PID>
est l'ID de processus du processus accédant à /proc
à cet instant même. Ainsi, dans bash
si vous faites cd /proc/self
, vous serez cd
-id dans le /proc/<PID>/
, où <PID>
est le PID de cette instance de bash
, alors que si un autre processus, disons pour cat
:
$ cat /proc/self/comm
cat
Vous ne devez absolument rien changer dans /proc
sauf si le noyau fournit une interface pour changer les valeurs. Par exemple, le noyau fournit l'interface /proc/sys/
pour modifier les paramètres du noyau au moment de l'exécution, même si la plupart du temps, vous devez utiliser sysctl
pour modifier les valeurs sous /proc/sys/
plutôt que de modifier directement un fichier. Une mauvaise gestion de la structure de données interne du noyau entraînerait un système inutilisable ou même une panne du système.