Answers:
对于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
,加入500M
到 10.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
开关的标准实用程序相比,该格式通常是固定的。
当然,通常可以使此计算更高效和/或更简洁,但这是针对它所使用的特定语言的问题。坦白地说,如果在仅时后运行的用户脚本中使用它,则可以交互查看一些信息,效率并不是真正的问题。
我想您想要两者之size
和use%
df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
size+=$1
)。此方法确实与的-h
选项不兼容df
。
您将使用类似awk
以下的工具:
df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'
哪里:
/^\/dev\/sd[ab]/
是仅过滤以/dev/sda
或开头的行的模式/dev/sdb
{ sum+=$5 }
为上述模式的任何匹配项添加第五个字段您可以awk
在Awk.info Wiki上找到一些有用的参考。
如果您需要警报,可以使用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