我怎样才能*仅*获得 bash 磁盘上的可用字节数?

How can I *only* get the number of bytes available on a disk in bash?

df 在概述方面做得很好。但是,如果我想将 shell 脚本中的变量设置为磁盘上可用的字节数怎么办?

示例:

$ df
Filesystem            1K-blocks     Used Available Use% Mounted on
/dev/sda             1111111111  2222222  33333333  10% /
tmpfs                  44444444      555  66666666   1% /dev/shm

但我只想 return 33333333/ 上可用的字节),而不是整个 df 输出。

仅在Linux

df --output=avail

你可以用awk,

df | awk '=="/dev/sda"{print }'

你可以使用 awk

df | grep sda | awk '{print }'

便携:

df -P /dev/sda1 | awk 'NR==2 {print }'

-P 选项确保 df 将以预期的格式打印输出,特别是不会在设备名称后换行,即使它很长。将设备名称作为参数传递给 df 可以消除解析的任何危险,例如在查询 /dev/sda1 时获取 /dev/sda10 的信息。 df -P 只打印两行,header 行(您忽略)和打印所需列的数据行。

存在 df 显示包含空格的设备名称的风险,例如,如果卷按名称安装且名称包含空格,或者对于其远程安装点包含空格的 NFS 卷。在这种情况下,没有完全可移植的方法来解析 df 的输出。如果您确信 df 会显示您传递给它的确切设备名称(情况并非总是如此),您可以删除它:

df -P -- "$device" | awk -vn=${#device} 'NR==2 {[=11=] = substr([=11=], n+1); print }'

您也可以使用stat查询磁盘状态。查询挂载在 /:

的文件系统上的空闲块
stat -f -c '%f' /

要以字节而不是块为单位获取结果,您可以使用 shell 的算法:

echo $((`stat -f -c '%f*%S' /`))

您可以使用 df:

获得确切的字节数

df -B1 / Filesystem 1B-blocks Used Available Use% Mounted on /dev/mapper/cl-root 32893632512 13080072192 18119061504 42% /

与显示的答案非常相似,但如果您不知道文件系统的名称并且只是在分区上寻找可用的总数 space。

df -P --total | grep 'total' | awk '{print }'