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