如何检查 /proc/ 是否已安装?
不鼓励使用 /etc/mtab,因为它可能不一致。
使用 /proc/mounts 也不是一个选项,因为如果 /proc/ 未安装,则可能不存在(尽管检查其存在可能是执行此检查的一种方法。
进行此检查的最佳方法是什么?
答案1
您可以运行mount
不带任何参数的命令来获取当前安装的列表。该文件应该具有类似的数据,但正如您所说,如果文件系统混乱、不可写或另一个程序弄乱了它,则/etc/mtab
这可能与实际安装的数据不一致。您可以通过要求列出所有类型的挂载来/etc
获取有关 proc 挂载的特定信息,如下所示:mount
proc
mount -l -t proc
编辑:看起来您可以使用将文件夹stat
的设备/proc
与 的设备进行比较/
来至少判断是否安装了除根文件系统之外的其他内容:
[[ $(stat -c %d%D /proc) != $(stat -c %d%D /) ]] && echo "Something is mounted at /proc"
答案2
测试 是否存在/proc/mounts
。运行mount
是不好的,因为如果/proc
没有安装,它将从/etc
.
理论上可能还有其他东西/proc
。但这在实践中极不可能:如果/proc/mounts
存在并且/proc
不是proc
文件系统,那么您无论如何都不能信任有关您的环境的任何信息。如果你真的担心,你可以检查文件系统类型是否为proc
:(df -PT /proc | awk 'NR==2 && $2=="proc" {print 1}'
需要Linux实用程序df
,Busybox中没有相应的选项)。相反,理论上,可能有一个 proc 文件系统安装在不同的位置;没有简单的方法可以使用 shell 命令找到它(df
读取/proc/mounts
枚举文件系统)。在实践中,只需检查/proc/mounts
.
答案3
如果你想要(或多或少)保证 /proc 上的文件系统实际上是 proc 而不是其他一些文件系统或看起来像它的目录结构,你可以调用statfs()
并检查类型,0x9fa0
是 proc 的值。
答案4
mountpoint
许多 Linux 安装上都有一个名为“avaiable”的工具。如果第一个参数是挂载点,则退出代码为 0。