GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Symlink /proc//exe Berbeda Dari Symlink Biasa?

Jika saya memulai suatu proses dan kemudian menghapus binernya, saya masih dapat memulihkannya dari /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

Di sisi lain, jika saya membuat tautan simbolis sendiri, hapus target dan coba salin:

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

/proc adalah antarmuka ke kernel. Jadi, apakah tautan simbolis ini benar-benar menunjuk ke salinan yang dimuat di memori, tetapi dengan nama yang lebih berguna? Bagaimana cara exe tautan berfungsi, tepatnya?

Jawaban yang Diterima:

/proc/<pid>/exe tidak mengikuti semantik normal untuk tautan simbolik. Secara teknis ini mungkin dianggap sebagai pelanggaran terhadap POSIX, tetapi /proc bagaimanapun juga adalah sistem file khusus.

/proc/<pid>/exe tampaknya menjadi symlink ketika Anda stat dia. Ini adalah cara yang nyaman bagi kernel untuk mengekspor nama path yang diketahuinya untuk proses yang dapat dieksekusi. Tetapi ketika Anda benar-benar membuka "file" itu, tidak ada prosedur normal membaca isi symlink berikut. Sebaliknya kernel hanya memberi Anda akses ke entri file yang terbuka secara langsung.

Perhatikan bahwa ketika Anda ls -l sebuah /proc/<pid>/exe pseudofile untuk proses yang eksekusinya telah dihapus, target symlink memiliki string "(dihapus)" di akhir. Ini biasanya tidak masuk akal dalam symlink:pasti tidak ada file yang hidup di jalur target dengan nama yang diakhiri dengan ” (dihapus)”.

tl;dr proc implementasi sistem file melakukan hal ajaibnya sendiri dengan resolusi nama jalur.


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Linux – Bagaimana Cara Mendapatkan Alamat IPv4 Untuk Antarmuka Dari /proc?

  3. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  1. Linux – Apa Arti Huruf 'u' Di /dev/urandom?

  2. CentOS / RHEL :Cara Memulihkan dari file /etc/passwd yang dihapus

  3. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Mengapa pada beberapa sistem Linux, sistem file root muncul sebagai /dev/root bukan /dev/<real device node>di mtab?

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?