BASH:检查系统上安装的内存量作为完整性检查

ljw*_*ker 11 linux memory bash

作为bash安装脚本的一部分,我希望脚本能够进行完整性检查,确保目标计算机至少安装了一定量的内存.请注意,我并不特别担心当前使用或分配或可用的内存量 - 就我的目的而言,系统中存在超过XXX GB的内存就足够了.我目前的计划(有效,但似乎可能是kludge-y?)是按照以下方式做的事情:

MEM=`free -m  | grep Mem | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

然后在$ MEM变量的bash脚本中进行大于/小于比较.正如我所说,这有效......但是如果有更优雅的方式来做其他人会建议的话,那只是好奇......

pax*_*blo 17

实际上,这不是 kludgy,它是在UNIX领域做事的历史悠久的方式,使用管道中的简单工具来构建更复杂的东西.

需要注意的是,如果输出格式free -m都没有改变.您可能不会认为这种情况会经常发生,但是,作为使用各种命令行工具的输出来处理性能监视应用程序的人,它的发生频率超出您的想象.

如果你想减少一个管道,你可以直接/proc/meminfo去获得你想要的东西:

$ cat /proc/meminfo
MemTotal:        8291816 kB
MemFree:         3136804 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:        8291816 kB
LowFree:         3136804 kB
SwapTotal:       1310720 kB
SwapFree:        1077244 kB
Run Code Online (Sandbox Code Playgroud)

所以,如果你对总内存感兴趣,你可以使用:

$ totalk=$(awk '/^MemTotal:/{print $2}' /proc/meminfo) ; echo $totalk
8291816
Run Code Online (Sandbox Code Playgroud)

但是,当然,同样的警告适用于"文件"的格式,因为它可能在将来发生变化.

想想看,你也可以简化你所拥有的东西,因为grep管道中不需要单独的:

$ totalm=$(free -m | awk '/^Mem:/{print $2}') ; echo $totalm
8097
Run Code Online (Sandbox Code Playgroud)