从命令行检查是否少于一定数量的可用磁盘空间

从命令行检查是否少于一定数量的可用磁盘空间

askubuntu 上有几个关于从命令行查看磁盘空间的问题和答案。

自然,df这是实现这一目标的首选工具。

但是,如果可用磁盘空间低于某个阈值,我希望登录时的脚本能够发出警报。

不幸的是df似乎使用任意大小的列,而且我不确定如何从我感兴趣的列中提取值。

例如:

$ df /dev/mapper/root
Filesystem       1K-blocks    Used Available Use% Mounted on
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1 | cut -d ' ' -f 9
763212

我实际上想要的是第四列,但我必须要求第九列。

有没有更简单的方法可以从df输出中提取列的值,或者完全用另一种方法来访问这个值。

答案1

刚刚意识到这不是所要求的,如果使用的空间大于预定义的阈值,则会显示警报。不过我会将其留作进一步参考。

你可以使用类似下面的脚本

#!/bin/bash
X=
X=$(du -sc | awk 'NR < 2' | awk '{ print $1 }')
if [ $X -gt 999000 ]; then
  message="Already using `du -sch | awk 'NR <2' |awk '{ print $1 }'` KB"
echo $message | mail -s "File System Full Warning" [email protected]
fi

X 保存已使用的 KB 数,如果大于 999000,则会通过电子邮件发送警告消息。

答案2

如果您使用的是 Ubuntu 14.04 或更高版本,df则可以仅输出您想要的值:

$ df --output=avail /
   Avail
15127808

man df

--output[=FIELD_LIST]
      use the output format defined by FIELD_LIST, or print all fields
      if FIELD_LIST is omitted.
...
FIELD_LIST  is a comma-separated list of columns to be included.  Valid
field names  are:  'source',  'fstype',  'itotal',  'iused',  'iavail',
'ipcent',  'size',  'used',  'avail',  'pcent'  and  'target' (see info
page).

正如所指出的德鲁·诺克斯,此功能是在 GNU coreutils8.21 中添加的,因此在旧版本的 Ubuntu 中不可用。

对于选择字段,awk是一个比更好的工具cut,您可以在选择要输出的字段后,在Jan的回答的基础上进行构建df

答案3

我将使用awk仅处理第二行(这里跳过第一行)并获取您的列:

$ df /dev/mapper/sil_acababdfabcf1 | awk 'NR==2 {print $4}'
11903752

相关内容