在busybox bin.sh中获取ramtotal的更好方法



那么,这么简单的事情,当前机器中安装了多少ram?我运行buildroot中构建的pxe映像,以便在网络引导时从系统中获取系统规范。但是,有一件事似乎让我印象深刻。你如何在每个可能的系统中有效可靠地计算公羊。

我给你的是有史以来最糟糕的代码,它已经有6年的历史了,我对此感到非常尴尬。

ramtotal=0
ramsize=1
while test $ramsize -le 10000; do
ramcount=`dmidecode --type memory | grep -v Enabled | grep -v Installed | grep -v Maximum | grep "Size:" | grep "MB" | grep -c " $ramsize "`
ramup=$(( ramsize * ramcount ))
ramtotal=$(( ramtotal + ramup ))
ramsize=$(( ramsize * 2 ))
done

好吧,希望我的代码能活得足够长,能够计数2^10000大小的ram芯片。经得起未来考验的ftw。这就是问题所在,代码确实起了作用,所以从来没有任何理由让它消失。

今天,我正在尝试一个新的代码,它在我的Ubuntu服务器上运行良好,但在busybox上不起作用。

ramtotal=`dmidecode --type memory | grep -v Enabled | grep -v Installed | grep -v Maximum | grep "Size:" | grep "MB" | grep -o -P '(?<=: ).*(?= MB)' | awk '{s+=$1} END {print s}'`
ramtotal=`dmidecode -t memory | grep "Size:" | awk '/Size: ([0-9]+) bytes|([kKMGTPEZ]B)/ {if($3 ~ /GB/) { size+=$2*1024 } else if($3 ~ /MB/) { size+=$2 } } END { print size }'`

所以,我已经很久没有发布了。我想只是为了保持一致,我想回来更新一下,因为dmidecode源代码的更改基本上打破了我之前添加的内容。基本上由于某种原因,dmidecode决定此字段可以是MB或GB。(也许还有更大的东西,尽管我没有费心研究他们的前瞻性(。

最新更新