cd /proc/$$/root/bin
cd /bin
在两个目录上运行ls
命令后,我发现两个目录的内容相同(只不过是命令列表)。
两个目录中有相同命令列表有什么特殊原因吗?
答案1
/proc
是一个“虚拟”文件系统公开一些与内核和进程相关的细节。
$$
是shell 变量给出运行它的 shell 的 PID。
/proc/$$/root
是符号链接到当前 shell 看到的根目录。如果您chrooting。
简而言之,两者看起来完全相同,因为它们是同一目录。如果执行,ls -ld /proc/$$/root
您将看到它是 的符号链接/
,因此/proc/$$/root/bin
和/bin
是同一目录。
答案2
这是因为它们实际上是相同的目录¹:
$ test /proc/$$/root/bin -ef /bin; echo $?
0
(-ef
测试检查两个路径是否引用同一个文件对象。)
/proc/$$/root
对于和也同样如此/
,因为
$ readlink /proc/$$/root
/
¹除非您所处的chroot
环境中可能指向/proc/$$/root
不同的目录。