我正在研究 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 ,而如果是其他进程,假设:/proc
bash
cd /proc/self
cd
/proc/<PID>/
<PID>
bash
cat
$ cat /proc/self/comm
cat
除非内核提供了一些接口来更改值,否则您绝对不应该更改 中的任何内容/proc
。例如,内核提供了/proc/sys/
在运行时更改内核参数的接口,尽管您大多数情况下应该使用sysctl
它来更改值,/proc/sys/
而不是直接编辑任何文件。对内核内部数据结构的错误处理会导致系统不可用甚至系统崩溃。