GNU/Linux >> Znalost Linux >  >> Linux

Linux – jak se liší symbolický odkaz /proc//exe od běžných symbolických odkazů?

Pokud spustím proces a poté smažu jeho binární soubor, mohu jej stále obnovit z /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

Na druhou stranu, pokud vytvořím symbolický odkaz sám, smažu cíl a pokusím se zkopírovat:

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

/proc je rozhraní k jádru. Ukazuje tedy tento symbolický odkaz ve skutečnosti na kopii nahranou v paměti, ale s užitečnějším názvem? Jak funguje exe odkaz funguje, přesně?

Přijatá odpověď:

/proc/<pid>/exe nedodržuje běžnou sémantiku pro symbolické odkazy. Technicky se to může považovat za porušení POSIX, ale /proc je nakonec speciální souborový systém.

/proc/<pid>/exe se při stat jeví jako symbolický odkaz to. Toto je pro jádro pohodlný způsob, jak exportovat cestu, kterou zná pro spustitelný soubor procesu. Ale když skutečně otevřete tento „soubor“, neexistuje žádný z běžných postupů čtení následujícího obsahu symbolického odkazu. Místo toho vám jádro poskytuje přímý přístup k otevřené položce souboru.

Všimněte si, že když ls -l a /proc/<pid>/exe pseudosoubor pro proces, jehož spustitelný soubor byl smazán, cíl symbolického odkazu má na konci řetězec „(deleted)“. To by normálně bylo v symbolickém odkazu nesmyslné:v cílové cestě rozhodně neexistuje soubor s názvem končícím na „ (smazáno)“.

tl;dr proc implementace souborového systému prostě dělá své vlastní kouzlo s rozlišením cest.


Linux
  1. /proc/[pid]/pagemaps a /proc/[pid]/maps | linux

  2. Jak získat počet CPU/jádr v Linuxu z příkazového řádku?

  3. Jak zjistit, ze které složky běží proces?

  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Linux – propojení /proc/mnt s /proc/mounts?

  3. Měly by weby žít ve /var/ nebo /usr/ podle doporučeného použití?

  1. Linux – Jak otestovat, zda je blokové zařízení pouze pro čtení z /sys nebo /proc?

  2. CentOS / RHEL :Jak obnovit ze smazaného souboru /etc/passwd

  3. Jak získám cestu k procesu v Unixu / Linuxu