如何获得Bash中的总物理内存将其分配给变量?

问题描述:

如何获得我的Linux PC的总字节数?如何获得Bash中的总物理内存将其分配给变量?

我需要将它分配给一个bash脚本变量。

+0

这个问题的意义很小。 – Gabe 2010-03-14 03:11:54

+0

我刚刚重写了它,对我来说这是非常具体的,我必须得到我的电脑的总物理内存(RAM)并分配它在我的bash脚本中是一个变量。 – Neuquino 2010-03-14 04:48:34

grep MemTotal /proc/meminfo | awk '{print $2}' 

返回的数字是KB

+6

看来你已经回答了你自己的问题。不过,使用一个awk命令来完成这项工作。 'awk'/ MemTotal/{print $ 2}'/ proc/meminfo' – ghostdog74 2010-03-14 04:53:10

+6

要包含转换到不同的基础(例如GB),您可以使用'grep MemTotal/proc/meminfo | awk'{print $ 2}'| xargs -I {} echo“scale = 4; {}/1024^2”| bc' – turtlemonvh 2015-05-13 14:12:59

如何

var=$(free | awk '/^Mem:/{print $2}') 
+1

分配变量时,在“=”符号之间不能有空格。尽可能使用'$()'语法。 – ghostdog74 2010-03-14 04:52:15

+0

@ ghostdog74:谢谢(后固定) – kiwicptn 2010-03-14 05:01:08

+0

grep _and_ awk? – 2010-03-16 09:57:29

phymem=$(awk -F":" '$1~/MemTotal/{print $2}' /proc/meminfo) 

,或者使用免费

phymem=$(free|awk '/^Mem:/{print $2}') 

或使用shell

#!/bin/bash 

while IFS=":" read -r a b 
do 
    case "$a" in 
    MemTotal*) phymem="$b" 
    esac 
done <"/proc/meminfo" 
echo $phymem 
+4

我喜欢这一个,因为你可以传递'-m','-g'等,以'free'来获得它在不同的单位:) – 2012-09-02 20:21:10

+0

非常好的总结答案,谢谢。更进一步,我会改变适当的行到'而读-r a b c'来剥离单位。 – dess 2016-03-03 10:57:17

傻傻的内联python版本,看起来过于复杂,但实际上是有用的。

freemem=$(echo -e 'import re\nmatched=re.search(r"^MemTotal:\s+(\d+)",open("/proc/meminfo").read())\nprint(int(matched.groups()[0])/(1024.**2))' | python) 

它以GB返回内存。

+0

我认为你的're.search(r“^ MemTotal ...”)有''r'' – kd88 2015-10-12 14:05:19

+0

@ kd88我认为没关系。这只是python中的一个原始字符串的符号。请参阅正则表达式文档的介绍部分以获得解释:https://docs.python.org/2/library/re.html – turtlemonvh 2015-10-13 14:47:08

我想出了这样一个假设下,即物理内存将是免费的输出的第一个数字:

free -m | grep -oP '\d+' | head -n 1 

这允许您配置*输出你想要的单元(-m, -g,...),它与系统语言无关(其他答案取决于免费的输出中的“Mem:”字符串,它可能会根据语言而改变)