“/proc/self”——动态更改软链接

“/proc/self”——动态更改软链接

我正在研究 Linux 文件系统,这似乎是了解其工作原理的好方法。在 UNIX 中,“一切都是文件”,所以我查看了一下/dev/stdin,发现它是指向 的软链接/proc/self/fd/0。所以我决定去看看/proc文件夹,发现它/proc/self实际上是指向 的软链接。更准确地说,PID 是我发出的检查其值的命令/proc/{PID}之一。ls -l /proc/self

我的理论是,每次程序尝试读取软链接时,软链接都会发生变化,以指向正确的 PID 进程文件夹。内核是否在每次收到读取文件夹的请求时都执行此操作/proc?我认为您不需要实际读取文件来获取输出ls,否则我们将无法看到具有 700 权限的文件,那么/proc访问文件夹时软链接是否会发生变化?

更进一步说:这种控制是否仅限于内核本身,或者某些应用程序可以利用它?(也许检查何时访问文件夹,以根据“谁”在执行此操作动态更改其内容/链接)

答案1

/proc是 的挂载点procfs(有点像tmpfs,驻留在内存中),它是内核内部数据结构的接口。 您在 中看到的任何内容/proc都直接由 Linux 填充,并且由内核本身维护。

/proc/self是目录的符号链接/proc/<PID>,其中是当时<PID>正在访问的进程的进程 ID 。因此,如果您在 中执行,您将进入,其中是该实例的 PID ,而如果是其他进程,假设:/procbashcd /proc/selfcd/proc/<PID>/<PID>bashcat

$ cat /proc/self/comm
cat

除非内核提供了一些接口来更改值,否则您绝对不应该更改 中的任何内容/proc。例如,内核提供了/proc/sys/在运行时更改内核参数的接口,尽管您大多数情况下应该使用sysctl它来更改值,/proc/sys/而不是直接编辑任何文件。对内核内部数据结构的错误处理会导致系统不可用甚至系统崩溃。

相关内容