web-dev-qa-db-fra.com

"/ proc / self" - Modification dynamique d'un lien symbolique

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)

4
IanC

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

3
heemayl