我使用df检查我安装的任何文件系统是否接近满。我有一份cron的工作,如果他们中的任何一个都超过90%,我就会发电子邮件给我。
问题是,一些应用程序(Ubuntu发行版)现在是使用snap安装的,它创建了一个专门为该应用程序挂载的只读文件系统。正如df所报告的那样,它们总是100%满的。我想这是适当的,因为他们是只读的,不能得到更充分的。我想将它们排除在df输出之外。
df有一个-x, --exclude-type=TYPE命令行标志,看起来很有用,但是手册页没有记录TYPE的可能值,所以我不确定是否可以使用它排除只读文件系统。
下面是我的一个系统上的df输出示例:
$ df --output=pcent,target
Use% Mounted on
0% /dev
1% /run
7% /
1% /dev/shm
1% /run/lock
0% /sys/fs/cgroup
100% /snap/gnome-3-26-1604/74
100% /snap/gnome-characters/139
100% /snap/core/5662
100% /snap/gnome-system-monitor/57
100% /snap/gnome-calculator/238
100% /snap/gnome-logs/45
100% /snap/gtk-common-themes/701
100% /snap/core/5742下面是由cron运行的脚本:
#!/bin/bash
set -e
THRESHOLD_PERCENT=90
host=`hostname -f`
df --output=pcent,target | while read line
do
if [[ "$line" != Use* ]]
then
percent=${line/\%*/};
if (( percent >= THRESHOLD_PERCENT ))
then
file=${line/* /}
echo "$percent% disk usage on $host:$file"
fi
fi
done我想删除所有这些完整的快照条目和任何其他文件系统,可能被挂载在未来只读。
发布于 2018-11-01 11:11:22
df中使用的文件系统类型引用文件系统的格式,如ext4。
您可以通过过滤/proc/mounts (或mount的输出)为rw找到读写文件系统,然后使用这些来过滤df的输出。
您不能使用来自rw的所有/proc/mounts条目,因为它还包含您不希望在列表中出现的/proc之类的条目。
<#>编辑
#!/bin/bash
df --output=pcent,target | grep -f <(awk '$4 ~ /^rw.*/ { print $2"$" }' /proc/mounts)发布于 2018-11-01 11:20:28
据我所知,df不知道挂载选项,因为有挂载命令。它可以用来获取设备列表,并将它们作为参数传递给df。如下所示:
df --output=pcent,target $(mount -t ext4 | grep rw | cut -d" " -f1)
它通过文件系统ext4进行筛选,然后对那些具有挂载选项rw的用户进行筛选,清理用于df的输出,然后将设备列表传递给df。您可以在mount中使用$(...)命令,以便正确地进行筛选。
https://unix.stackexchange.com/questions/479102
复制相似问题