为什么当 ls "dir" 给出总数为 0 时 [ -d "dir/proc" ] 为真(可能与 chroot / proc 有关)?

为什么当 ls "dir" 给出总数为 0 时 [ -d "dir/proc" ] 为真(可能与 chroot / proc 有关)?

我正在制作 liveUSB iso 文件,做了很多安装,再加chroot scriptmount -t proc proc /proc脚本(chroot对我来说是新事物,当我进行一些“清理”并且使用 chroot 运行的脚本不再运行时,我注意到了这个问题)。现在我的情况很奇怪,系统怎么可能有这样的行为?

$ if [ -d "newdir/proc" ]; then echo 1;fi
1
$ if [ -d "newdir/pro" ]; then echo 1;fi
$ sudo ls -al "newdir"
total 0

问题还在于umount newdir输出“目标正忙”。findmnt | grep proc不再显示“newdir/proc”行。

添加1:

$ sudo ls -al "newdir/media/root/usb" # another mount
total 0
$ sudo ls -al "newdir/media/root"
total 0
$ sudo ls -al "newdir/media"
total 0

如果它能有所作为的话,newdir那就是在tmpfs系统中。

添加2:
根据@Bart 的答案的建议,我运行lsof并意识到我有另一个终端,我chroot newdir可以在其中查看脚本的 IIRC 结果。现在我退出了 chroot,lsof | grep nwdir不再输出那些 bash 命令的列表,只输出有关fuse.gvfsd-fuse和 的警告fuse /run/user/1000/doc。对于以下情况仍然相同:

$ sudo ls -al "newdir/media/root"
total 0

然而,在那之后我能够在输出中执行无错误的操作umount newdir,然后sudo ls -al "newdir/media/root"给出no such file.

聚苯乙烯通过此处的帮助确定了意外行为的原因:未使用 chroot 关闭终端。但是,我已经阅读了如何使用打开进程的句柄访问文件,但这里“重影”证明了普通的运行方式ls我仍然希望我能看到解释为什么/如何这样工作。

答案1

procfs甚至不是真正的文件系统,而是内存内容和当前正在运行的进程的表示。您所看到的表明某些进程在 chroot Mounted 中创建了文件proc,但没有退出并且仍然使用该目录中的文件引用。

lsof | grep /newdir/proc应该显示哪些进程仍在使用不存在的位置。

您想要的可能是将其绑定安装到 chroot 内的某个位置:

mkdir -m 0555 newdir/proc
mount --bind /proc newdir/proc

并不是mount -t

相关内容