当我输入时df -k .
,我得到以下输出
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 16512936 8650196 7023932 56% /
我所做的是尾随最后一行并提取第四个字段以获得正确的结果。
但是如果文件系统名称很长,例如/dev/niraj-asdsdsd-dsdsdsa
,则df
在新行上打印更多详细信息,并使用我的逻辑得到56%代替7023932。
所以我的问题是,如何在任何情况下确定确切的可用空间?
答案1
该stat
实用程序可方便获取文件统计信息,还可以为您提供有关文件系统的信息,只需提供选项即可-f
。
但请确保您提供的是挂载点(例如/boot
),而不是设备文件(/dev/sda1
)!因为在后一种情况下stat
将报告/dev
文件系统的统计信息,而文件系统(在 Debian 上)是虚拟文件系统,与物理磁盘无关:
$ mount | grep sda1 /dev/sda1 在 /boot 类型 ext2 上 (rw,relatime,errors=continue,user_xattr,acl) $ env stat -f /dev/sda2 文件:“/dev/sda1” ID:0 名称长度:255 类型:tmpfs 区块大小:4096 基本区块大小:4096 区块:总计:2560 空闲:2560 可用:2560 Inode:总计:497355 可用:496852 $ 环境统计 -f /启动 文件:“/boot” ID:fe082d7c0c42ea6f 名称长度:255 类型:ext2/ext3 区块大小:1024 基本区块大小:1024 区块:总计:99150 空闲:52490 可用:47370 Inode:总计:25688 空闲:25355
- 之间的区别自由的和可用的计数结果从保留块根。
- 我曾经
env
确保没有使用你的 shell 的内置 stat 命令(它可能提供也可能不提供所有使用的选项)。
因此,要回答您的问题,您可以使用自定义的(-c
)统计输出格式来获取可用空间(%a
)/
:
$ env stat -f -c %a /
1711744
%S/1024
这是以块为单位的,所以要聪明一点,让系统通过将输出导入计算器,以 KB 为单位与块大小相乘( ) bc
:
$ env stat -f -c '%a*%S/1024' / | bc
6846976
让我们检查一下df
:
$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 25066604 16939628 6846976 72% /
很好,报告的数字相同!
答案2
非常感谢,我在使用 df 时遇到了问题,因为根据系统的不同,它会得到第 3 或第 4 列,这样我就解决了!我正在开发一个 bash 脚本来检查各种系统上 /、/boot 和 /var 上的可用空间,如果少于一定数量的 MB,则发送报告。
我已将其转换为 MB,因为我发现只需添加另一个分区,它就更容易阅读
echo $(env stat -f -c '%a*%S/1024/1024' /boot | bc)MB free on /boot
答案3
Niraj - 您看过 di 实用程序吗?这可能至少提供了一种更简单的方法来提取您需要的数据,它提供了驱动器空间的 CSV 格式输出。
di -c
答案4
要以 Kb 或 Mb 为单位显示可用磁盘空间,可以使用以下命令:
export LC_NUMERIC="en_ZA.utf8" && free_disk_space_before=$(env stat -f -c '%a*%S/1024' / | bc) && echo "Free Disk Space:" $(/usr/bin/printf "%'3.3f" ${free_disk_space_before}) "Kb"
export LC_NUMERIC="en_ZA.utf8" && free_disk_space_before=$(env stat -f -c '%a*%S/1024/1024' / | bc) && echo "Free Disk Space:" $(/usr/bin/printf "%'d" ${free_disk_space_before}) "Mb"
结果如下:
Free Disk Space: 874,064 Kb
Free Disk Space: 874 Mb
转换为 en_ZA.utf8 只是获取千位之间的逗号的一种方法。