我想知道在 FreeBSD 中是否有办法将磁盘容量作为数值获取。
我不想使用,df
因为它不返回单个数值,du -sch /
需要花费太多时间进行总结。
也许有一个可通过 sysctl 访问的变量?我试过了,sysctl -a -d | grep -e disk
但没有找到任何东西。
提前致谢,
斯特芬
答案1
物理磁盘使用情况打印机的快速草图awk
(注:仅在 Linux 上尝试过):
#!/bin/sh
while ! [ $# -eq 0 ]; do
df --block-size=1G | awk '$1 ~ /\/dev\/'"${1}"'/ {free+=$4; total+=$2} END {printf "%4s: %4sG / %4sG\n", "'"${1}"'", free, total}'
shift
done
将上述脚本保存为 egdfsum
并以以下形式运行:
$ dfsum sda sdb
sda: 19G / 916G
sdb: 59G / 1834G
编辑:带有标题和磁盘自动检测的更新版本:
#!/bin/sh
df --block-size=1G | awk '
BEGIN {printf "%-5s%5s %5s\n", "disk", "free", "total"}
!match($1, "^/dev/([[:alpha:]]+)", disk) {next} \
{free[disk[1]]+=$4; total[disk[1]]+=$2} \
END {for (var in free) printf "%3s: %4sG / %4sG\n", var, free[var], total[var]}'
注意:这需要gawk
。
再次编辑:
#!/bin/sh
df --block-size=1G |\
awk '
BEGIN {
printf "%-5s%5s %5s\n", "disk", "free", "total"
}
!match($1, "^/dev/([[:alpha:]]+)[[:digit:]]", disk) {next}
{
free[disk[1]]+=$4
total[disk[1]]+=$2
}
END {
for (var in free) {
printf "%3s: %4sG / %4sG\n", var, free[var], total[var]
totalfree+=free[var]
totalsize+=total[var]
}
printf " -------------\n %4sG / %4sG\n", totalfree, totalsize
}
'
这也给出了总和,并修复了系统重启后发生的变化,其中输出/dev/disk/by-uuid/
中显示带有 ... 的列表示根文件系统df
,但也作为单独的条目显示/dev/sda1
。我只对后者感兴趣。