使用df获取可用磁盘空间,只显示kb中的可用空间?

Who*_*ppa 27 unix linux bash cut linux-disk-free

我正在尝试输出文件系统上的可用磁盘空间量/example.

如果我运行命令,df -k /example我可以获得有关kb中可用磁盘空间的良好信息,但只能通过人工并实际查看它.

我需要获取此数据并在我的shell脚本中的其他位置使用它.我最初想过使用cut但是我的脚本不能移植到其他磁盘,因为可用磁盘空间会有所不同,切割也不会产生准确的结果.

如何在kb中获得示例的可用磁盘空间的输出?

fed*_*qui 49

要获得df以kb显示数据的输出,您只需使用-k标志:

df -k
Run Code Online (Sandbox Code Playgroud)

此外,如果您指定了一个文件系统df,您将获得该特定的值,而不是所有这些值:

df -k /example
Run Code Online (Sandbox Code Playgroud)

关于问题的主体:您想要提取给定文件系统上的可用磁盘空间量.这将需要一些处理.

给定正常df -k输出:

$ df -k /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        7223800 4270396   2586456  63% /
Run Code Online (Sandbox Code Playgroud)

你可以得到Available(第4列)例如awkcut(先前管道trsqueeze-repeats(-s为空格)):

$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
Run Code Online (Sandbox Code Playgroud)

与往常一样,如果要将结果存储在变量中,请使用如下var=$(command)语法:

$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
Run Code Online (Sandbox Code Playgroud)

此外,根据Tim Bunce评论,您可以使用--direct来获取长文件系统名称-,以便它不会打印一个破坏引擎的行:

$ df -k --direct /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
-                7223800 4270396   2586456  63% /
Run Code Online (Sandbox Code Playgroud)

  • 然后`tail -1`然后计数字段是不安全的,因为`df`可能会在文件系统名称之后换行换行符(如果它很长(例如,对于我`/ dev/mapper/vg_1-lv_root`).解决方法是使用`--direct`选项将filestem报告为`-`. (4认同)

小智 12

您可以使用stat(2)命令显示空闲块,也可以查看每个块的大小,例如

stat -f --printf="%a %s\n" /
Run Code Online (Sandbox Code Playgroud)

将显示给定文件系统上的空闲块数(%a)(/),后跟块大小(%s).要获得以kB为单位的大小,可以使用bc(1)命令,如以下示例所示:

stat -f --printf="%a * %s / 1024\n" / | bc
Run Code Online (Sandbox Code Playgroud)

最后,将它放入变量只是使用反引号替换(或第一个答案中的$()):

SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
Run Code Online (Sandbox Code Playgroud)


Die*_*oza 8

仅显示有趣的列

 df /example --total -k -h  --output=source,avail
Run Code Online (Sandbox Code Playgroud)
  • --total =最后的总计
  • -k =块大小1K
  • -h =人类可读
  • --output = [FIELD_LIST]列列表以","分隔

不完全标准(我在Ubuntu手册页中看到--output),在这种情况下,Awk和其他只是删除列是没有必要的.


小智 8

这是另一种解决方案:

df --output=avail -m /example | tail -1
Run Code Online (Sandbox Code Playgroud)

输出:

6415

  • 您的解决方案可以进一步修改为`df --output=avail -m /example | 尾部-1 | tr -d ' '` 删除输出前面的空格。 (2认同)