![为什么当 ls "dir" 给出总数为 0 时 [ -d "dir/proc" ] 为真(可能与 chroot / proc 有关)?](https://linux22.com/image/200078/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%20ls%20%22dir%22%20%E7%BB%99%E5%87%BA%E6%80%BB%E6%95%B0%E4%B8%BA%200%20%E6%97%B6%20%5B%20-d%20%22dir%2Fproc%22%20%5D%20%E4%B8%BA%E7%9C%9F%EF%BC%88%E5%8F%AF%E8%83%BD%E4%B8%8E%20chroot%20%2F%20proc%20%E6%9C%89%E5%85%B3%EF%BC%89%EF%BC%9F.png)
我正在制作 liveUSB iso 文件,做了很多安装,再加chroot script
上mount -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
。