我正在尝试输出文件系统/example
上的可用磁盘空间量。
如果我df -k /example
运行命令,我可以获得有关可用磁盘空间(以 kb 为单位)的良好信息,但只能通过人类并实际查看它。
我需要获取这些数据并在 shell 脚本中的其他地方使用它。我最初考虑使用cut
但后来我的脚本将无法移植到其他磁盘,因为可用磁盘空间会有所不同,并且剪切不会产生准确的结果。
如何仅获得示例的可用磁盘空间(以 kb 为单位)的输出?
要获取df
的输出以 kb 显示数据,您只需要使用 -k
标志:
df -k
此外,如果您指定要df
文件系统,您将获得该特定值,而不是所有值:
df -k /example
关于您的问题正文:您想提取给定文件系统上的可用磁盘空间量。这将需要一些处理。
给定正常的df -k
输出:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
例如,您可以使用awk
或cut
(以前从管道到tr
到squeeze-repeats
(-s
))来获取Available
(第4列):
$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
与往常一样,如果要将结果存储在变量中,请使用如下所示的var=$(command)
语法:
$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
此外,从 Tim Bence 的评论中,您可以使用 --direct
来处理长文件系统名称来获取-
,这样它就不会打印破坏引擎的行:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /
你可以使用 stat(2) 命令来显示自由块,也可以找出每个块的大小,例如
stat -f --printf="%a %sn" /
将显示给定文件系统 (/) 上的可用块数 (%a),后跟块大小 (%s)。要获取以 kB 为单位的大小, 你可以使用 bc(1) 命令,如下例所示:
stat -f --printf="%a * %s / 1024n" / | bc
最后,将其放入变量中只需使用反引号替换(或 $(),如第一个答案所示):
SOMEVAR=`stat -f --printf="%a * %s / 1024n" / | bc`
仅显示感兴趣的列
df /example --total -k -h --output=source,avail
- -
- -总计 = 末尾的总计
- -k = 块大小 1K
- -h = 人类可读 -
- -output=[FIELD_LIST] 列列表,以"," 分隔
不完全标准(我已经看到 --输出至少在 Ubuntu 和 RHEL 上可用),在这种情况下,Awk 和其他只是删除列是不必要的。
这是另一种解决方案:
df --output=avail -m /example | tail -1
输出:
6415
我创建了小脚本,它将获取文件系统已用空间,并将以 GB 为单位转换总已用空间大小。
DF -Th |grep -vE "tmpfs|nfs|boot|overlay|vfat|cifs"|awk '{print $4}'|sed 's/.$//'|grep -vw "^Use"|粘贴 -s -d+|bc