6

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

例子:

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

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

4

7 回答 7

7

你可以使用awk,

df | awk '$1=="/dev/sda"{print $4}'
于 2015-10-21T01:46:16.607 回答
5

便携:

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

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

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

df -P -- "$device" | awk -vn=${#device} 'NR==2 {$0 = substr($0, n+1); print $3}'
于 2015-10-21T02:45:40.623 回答
4

仅在 Linux 中

df --output=avail
于 2015-10-21T01:46:11.543 回答
3

您可以使用 awk

df | grep sda | awk '{print $4}'
于 2015-10-21T01:46:50.197 回答
3

您可以使用 df 获得确切的字节数:

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

于 2019-12-23T13:11:27.730 回答
1

您也可以查询磁盘状态stat。要查询挂载在的文件系统上的空闲块/

stat -f -c '%f' /

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

echo $((`stat -f -c '%f*%S' /`))
于 2018-11-03T15:56:36.390 回答
0

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

df -P --total | grep 'total' | awk '{print $4}'
于 2020-05-25T02:38:10.657 回答