如何从`df -hl`打印磁盘使用百分比

use*_*398 15 command-line ubuntu

我知道df -hl输出一个我所有分区的列表,包括它的大小、使用百分比和可用空间。

如果我想只输出大小和使用的百分比sda2sda3,例如,我怎么会知道的Linux(Ubuntu的)进行检查,总结并把它们展示给我吗?

Joh*_*n E 14

对于df以计算总计,使用--totals选项。如果您只需要某些选定驱动器的总数,请将它们指定为参数。

示例(和我电脑的输出)

这是所有本地安装的总数:

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%
Run Code Online (Sandbox Code Playgroud)

限制为几个驱动器(请注意,如果指定的路径不是确切的挂载点,则使用最近的包含挂载点[请参阅末尾的注释]):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%
Run Code Online (Sandbox Code Playgroud)

或使用dev名称:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%
Run Code Online (Sandbox Code Playgroud)

进一步定制

如果要列出除“特殊”挂载之外的所有挂载,可以使用-x选项按分区类型排除。(使用-T选项显示类型。)

就个人而言,为了交互使用,我使用以下 bash 别名(添加到~/.bash_aliases)来排除“非物理”安装。

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'
Run Code Online (Sandbox Code Playgroud)

笔记

在挂载点内指定路径有时会产生与指定挂载点的确切路径不同的结果。例如,在我的笔记本电脑上,我sshfs用来挂载我的(本地)文件服务器。

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root
Run Code Online (Sandbox Code Playgroud)

服务器根目录 ( /) 安装在~/.server-root。但是,在服务器上,磁盘安装在 上/disks/*df(在笔记本电脑上)“不知道”。

df如果给出正确的路径,显然可以列出服务器上不同挂载的磁盘使用情况。但是,它为所有路径显示了相同的“文件系统”和“已挂载”,因为(我相信)这是sshfs本地内核挂载表中唯一的挂载点(与此挂载有关)。


另一件事:与问题无关,但与问题的先前答案有关。

使用awk脚本(或类似的)将数字相加,就像之前发布的一些答案所做的那样,在使用标志时并不是一个好主意-h。这是因为需要特殊处理。您不能只对一个行和另一行size+=$2;的字段进行操作并从中获得有用的东西......418M12G

例如awk,添加500M10.2G产量

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2
Run Code Online (Sandbox Code Playgroud)

510.2什么的?

这里显然有问题。因此,作为一个要记住的提示,在对df (以及其他可以使用“人类可读”数字)的输出进行(自动)计算时。确保您使用该-h标志,并且计算脚本的输入是标准化的(例如字节、块、KB 或其他),并在最后进行“显示缩放”。在大多数脚本和编程语言中,添加以下内容并不难:

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)
Run Code Online (Sandbox Code Playgroud)

其中value以字节为单位,而threshold是一个 1000 数量级的值。此方法的结果是您可以轻松调整它以生成所需范围内的打印值(不包括前缀),并带有许多有效数字选择。与带有-h开关的标准实用程序的情况相比,格式通常是固定的。

当然,这种计算通常可以更高效和/或更优雅,但这是它所使用的特定语言的问题。坦率地说,如果它用于偶尔运行的用户脚本中以交互查看一些信息,效率并不是真正关心的问题。


pra*_*tri 5

我想你想两者的总和sizeuse%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
Run Code Online (Sandbox Code Playgroud)


jas*_*yan 4

您可以使用如下工具awk

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • /^\/dev\/sd[ab]//dev/sda是一种仅过滤以或开头的行的模式/dev/sdb
  • { sum+=$5 }为上述模式的任何匹配添加第五个字段

您可以在Awk.info wiki上找到一些有用的awk参考资料。