![从命令行检查是否少于一定数量的可用磁盘空间](https://linux22.com/image/864181/%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%B0%91%E4%BA%8E%E4%B8%80%E5%AE%9A%E6%95%B0%E9%87%8F%E7%9A%84%E5%8F%AF%E7%94%A8%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4.png)
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 coreutils
8.21 中添加的,因此在旧版本的 Ubuntu 中不可用。
对于选择字段,awk
是一个比更好的工具cut
,您可以在选择要输出的字段后,在Jan的回答的基础上进行构建df
。
答案3
我将使用awk
仅处理第二行(这里跳过第一行)并获取您的列:
$ df /dev/mapper/sil_acababdfabcf1 | awk 'NR==2 {print $4}'
11903752