*nix shellscript:获取多个操作系统上的磁盘使用情况

*nix shellscript:获取多个操作系统上的磁盘使用情况

我正在尝试获取系统中给定磁盘的使用率百分比。我必须编写的程序将是一个bashshell 脚本。该脚本必须适用于 Debian、Arch 和 Mac OS X。

我目前的方法是执行 adf和 grep 来获取使用率百分比。问题是这些系统上的输出df不同。我想if os==Arch elseif os == Debian…尽可能避免这种情况。

是否有一种解决方案可以避免区分操作系统?

每个操作系统/版本的示例输出df

苹果

Filesystem    512-blocks       Used Available Capacity   iused    ifree %iused  Mounted on
/dev/disk2     179032136  106162416  72357720    60%  13334300  9044715   72%   /

Debian

Filesystem    1K-blocks  Used     Available  %used Mounted on
/dev/hdv1       20480000 8423436  11016564   44%   /

Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/root        5160576 813420   4085012  17% /

所以 Arch 和 Debian 是差不多的。标签可能用不同的语言打印,这也可能是问题。

答案1

这应该适用于所有三个df输出:

df | awk '/\//{print $1,$(NF-1)}'

这是您发布的每个示例的输出:

/dev/disk2 72%
/dev/hdv1 44%
/dev/root 17%

解释:

awk命令查找包含的行/(因此忽略标题)并打印第一个($1)和倒数第二个($(NF-1))字段。如果您想要仅有的使用百分比,请执行以下操作:

df | awk '/\//{print $(NF-1)}'

更新:

我上面的回答将为您提供%iusedMacdf输出上的字段。如果您想要的是Capacity,请执行以下操作(再次适用于所有三个):

df | perl -ne '/\// && do {/(.+?)\s.+?(\d+%)/ && print "$1 $2\n"}'

它还打印第一个字段(非贪婪的(.+?),以 终止\s)和第一的百分比数字((\d+%),前面是非贪婪的.+?)。

答案2

一个稍微复杂但可能更通用的解决方案是

df | sed -n 's/^\([^ ]*\) .*[^0-9]\([0-9]*%\).*/\1 \2/p'

它显示行中的第一个“单词”(文件系统设备名称),然后查找数字序列,后跟一个%。具体来说,它查找最后的这样的字符串。

[哎呀:它还会显示标题的混乱子集(即第一行,带有列标题)。]


更新:

df | sed -n 's/^\([^ ]*\) .*[^0-9]\([0-9][0-9]*%\).*/\1 \2/p'

修复标题行的问题,并且

df | sed -n 's/^\([^ ]*\) [^%]*[^0-9]\([0-9][0-9]*%\).*/\1 \2/p'

捕获第一的百分比数字字段。具体来说,在 Mac 上,这将捕获Capacity列而不是%iused列。

相关内容