我的目标是一致地验证是否添加了一些新的安装点,我需要通过 df 命令来验证这一点
因此,以下命令实际上查看 df ,如果有新的安装点,我们可以看到变化
watchdf
但我问我们是否可以通过 bash 脚本跟踪 df 信息,该脚本将打印“添加了新挂载点”,如果新挂载点出现在 df 中是否可能?
答案1
观察 的输出df
是一个坏主意,因为它的输出无法可靠地处理,并且它不包括所有已安装的文件系统(除非您使用-a
GNU 或 busybox 实现的选项)。
在 Linux(util-linux
2.20 及更高版本)上,您可以用于findmnt -p
轮询挂载点上的更改。
poll(events=POLLPRI)
该命令的工作原理是在文件描述符上执行只读打开操作,/proc/self/mountinfo
以便在事件发生时立即报告事件(安装、卸载)。但它不会检测到正在重命名的挂载点。
请注意,它仅检测当前挂载命名空间中的更改(就像观看df
一样)。
答案2
您可以使用这样的脚本:
x=""
while :; do
df="$(awk '{print $1,$2}' /proc/mounts)" # only the first two fields are relevant
if [ "$x" != "$df" ]; then # only diff the contents when something has changed
diff <(echo "$df") <(echo "$x") \ # compare the two values
--unchanged-line-format='' \
--old-line-format='mounted: %L' \
--new-line-format='unmounted: %L'
fi
x="$df"
sleep 1 # can be increased
done
根据中的信息/proc/mounts
,脚本每 1 秒循环一次并检查是否有更改。diff
比较旧值和新值并格式化输出。
例如,当脚本运行时,输出将如下所示:
mounted: //srv/share /mountpoint
unmounted: /dev/sdb1 /media