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


12

我知道会df -hl输出所有分区的列表,包括其大小,使用率(百分比)和可用空间。

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


1
通过更改用于将磁盘放在df命令行上的df命令,而不是解析所有磁盘,可以简化以下答案。即df -hl / dev / sda [23]
mdpc

Answers:


11

对于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%

限于少数驱动器(请注意,如果指定的路径不是确切的安装点,则使用最接近的安装点[请参见末尾的说明]):

$ 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%

或使用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%

进一步定制

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

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

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

注意

指定安装点内的路径有时会产生不同的结果,形式不同,即指定了安装点的确切路径。例如,在我的笔记本电脑上,我用于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

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

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


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

awk像以前发布的答案一样,用脚本(或类似方法)将数字相加,在使用标志时不是一个好主意-h。这是因为需要特殊处理。您不能只size+=$2;418M一行又一行的字段做事,12G并从中获取有用的信息…

对于一个示例awk,加入500M10.2G产率

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

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...)

其中value以字节为单位,threshold为1000左右的值。此方法的主要目的是可以轻松调整它以生成期望范围内的打印值(不包括前缀),并带有多个有效数字选择。与带有-h开关的标准实用程序相比,该格式通常是固定的。

当然,通常可以使此计算更高效和/或更简洁,但这是针对它所使用的特定语言的问题。坦白地说,如果在仅时后运行的用户脚本中使用它,则可以交互查看一些信息,效率并不是真正的问题。


4

我想您想要两者之sizeuse%

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

同上,与上面相同。
user32398 2013年

@ user32398:伙计们之间有差异。
pradeepchhetri

在回答这个问题的最后,我详细说明了为什么不对这个问题使用简单的awk方法(只是size+=$1)。此方法确实与的-h选项不兼容df
Johan E

2

您将使用类似awk以下的工具:

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

哪里:

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

您可以awkAwk.info Wiki上找到一些有用的参考。


我认为对%求和还不够,但是谢谢我的理解。
user32398 2013年

1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'

1
他要求size% usedavailable。不仅仅是%使用。@mdpc也有一个更好的方法来选择驱动器,但是如果您想对awk进行模式匹配,可以这样做: df -hl | awk '/sda2/{print $2,$5,$4}'
jesse_b

0

如果您需要警报,可以使用IFTTT,Telegram和WebHooks(全部免费)进行操作

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.