如何使用df计算总磁盘空间?如何修改df -h命令汇总结果?
关于
df命令磁盘空间计算的两个问题解答 1. 如何使用df命令计算总磁盘空间?
df本身会列出每个挂载文件系统的磁盘空间详情,要计算总磁盘空间,我们需要提取目标文件系统的总容量后求和,这里分两种常见场景:
场景1:计算所有挂载文件系统的总空间(含虚拟文件系统)
如果不需要区分物理磁盘和tmpfs这类虚拟文件系统,直接用df的数值型输出(规避单位转换麻烦)来计算:
df -k | awk 'NR>1 {sum += $2} END {print "总磁盘空间:" sum/1024/1024 " GB"}'
简单拆解下:
df -k:以KB为单位输出磁盘数据,避免人类可读格式的单位(K/M/G)转换问题awk 'NR>1 {sum += $2}':跳过第一行表头,把每行第二列(总容量,单位KB)累加END {print ...}:最后把总和转换成GB输出,更符合日常阅读习惯
场景2:仅计算物理磁盘的总空间(排除虚拟文件系统)
如果只关心实际磁盘的空间,可过滤掉tmpfs、devtmpfs这类虚拟文件系统:
df -k -x tmpfs -x devtmpfs | awk 'NR>1 {sum += $2} END {print "物理磁盘总空间:" sum/1024/1024 " GB"}'
-x tmpfs -x devtmpfs:指定排除的文件系统类型,你可以根据需求添加其他类型,比如-x squashfs
2. 如何修改df -h命令,将结果的总容量求和并返回最终结果?
df -h输出的是带K/M/G单位的人类可读格式,直接求和需要先统一单位,这里提供一个可靠的awk脚本处理:
df -h | awk ' function convert_to_gb(size) { unit = substr(size, length(size)) value = substr(size, 1, length(size)-1) if (unit == "G") return value if (unit == "M") return value/1024 if (unit == "K") return value/1024/1024 return 0 } NR>1 {sum += convert_to_gb($2)} END {printf "总容量:%.2f GB\n", sum}'
脚本逻辑说明:
- 定义
convert_to_gb函数,把带单位的容量(如20G、512M)统一转换为GB数值 - 跳过表头行,将每行第二列的总容量转换为GB后累加
- 用
printf格式化输出,保留两位小数,结果更清晰
如果要排除虚拟文件系统,给df -h加上-x参数即可,比如:
df -h -x tmpfs -x devtmpfs | awk ' function convert_to_gb(size) { unit = substr(size, length(size)) value = substr(size, 1, length(size)-1) if (unit == "G") return value if (unit == "M") return value/1024 if (unit == "K") return value/1024/1024 return 0 } NR>1 {sum += convert_to_gb($2)} END {printf "物理磁盘总容量:%.2f GB\n", sum}'
内容的提问来源于stack exchange,提问作者tester787
相关产品推荐
相关产品推荐

