使用 df 获取可用磁盘空间,以仅显示可用空间(以 KB 为单位)



我正在尝试输出文件系统/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% /

例如,您可以使用awkcut(以前从管道到trsqueeze-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

最新更新