GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – En quoi le lien symbolique /proc//exe diffère-t-il des liens symboliques ordinaires ?

Si je démarre un processus et que j'en supprime ensuite le binaire, je peux toujours le récupérer à partir de /proc/<pid>/exe :

$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe                           
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe 
  File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
  Size: 0           Blocks: 0          IO Block: 1024   symbolic link

Par contre, si je fais moi-même un lien symbolique, supprime la cible et tente de copier :

cp: cannot stat ‘sleep’: No such file or directory

/proc est une interface avec le noyau. Alors ce lien symbolique pointe-t-il réellement vers la copie chargée en mémoire, mais avec un nom plus utile ? Comment fonctionne le exe le lien fonctionne, exactement ?

Réponse acceptée :

/proc/<pid>/exe ne suit pas la sémantique normale des liens symboliques. Techniquement, cela peut être considéré comme une violation de POSIX, mais /proc est un système de fichiers spécial après tout.

/proc/<pid>/exe apparaît comme un lien symbolique lorsque vous stat ce. C'est un moyen pratique pour le noyau d'exporter le chemin d'accès qu'il connaît pour l'exécutable du processus. Mais lorsque vous ouvrez réellement ce "fichier", il n'y a aucune procédure normale de lecture du contenu suivant d'un lien symbolique. Au lieu de cela, le noyau vous donne simplement accès directement à l'entrée de fichier ouverte.

Notez que lorsque vous ls -l un /proc/<pid>/exe pseudofile pour un processus dont l'exécutable a été supprimé la cible du lien symbolique a la chaîne " (supprimé)" à la fin de celui-ci. Cela n'aurait normalement aucun sens dans un lien symbolique :il n'y a certainement pas de fichier qui vit dans le chemin cible avec un nom qui se termine par " (supprimé)".

tl;dr Le proc l'implémentation du système de fichiers fait sa propre magie avec la résolution des noms de chemin.


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Linux - Comment obtenir l'adresse IPv4 d'une interface à partir de /proc ?

  3. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  4. Linux – Que signifie la lettre « u » dans /dev/urandom ?

  5. Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

Fichiers /proc/cpuinfo et /proc/meminfo sous Linux

Comment mapper les périphériques /dev/sdX et /dev/mapper/mpathY à partir du périphérique /dev/dm-Z

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Comment obtenir le nombre de CPU/cœurs sous Linux depuis la ligne de commande ?

Pourquoi sur certains systèmes Linux, le système de fichiers racine apparaît-il comme /dev/root au lieu de /dev/<real device node> dans mtab ?

Les sites Web doivent-ils vivre dans /var/ ou /usr/ selon l'utilisation recommandée ?