2016-01-22 29 views
2

以下命令返回可用內存得到GB的可用內存可以有一個人提出一個命令就獲得在GB的可用內存?

回答

10

只是輕微修改自己的魔法咒語:

awk '/MemFree/ { printf "%.3f \n", $2/1024/1024 }' /proc/meminfo 

PS:尊敬的OP,如果你發現自己的grep調用AWK &在一行中你最有可能做是錯誤的;} ...與在單個文件上調用cat相同;這幾乎沒有保證。

+0

Ooops ...胖手指:) – tink

+0

這比我的回答好得多,應該是公認的解決方案。 –

+0

全部好@RanyAlbegWein =} ... – tink

4
freemem_in_gb() { 
    read -r _ freemem _ <<< "$(grep --fixed-strings 'MemFree' /proc/meminfo)" 
    bc <<< "scale=3;${freemem}/1024/1024" 
} 

請注意,scale=3可以更改爲其他值,以獲得更好的精度。 因此,例如一個可以編寫一個函數,將採取精確的說法,就像這樣:

freemem_in_gb() { 
    prec=$1; 
    read -r _ freemem _ <<< "$(grep --fixed-strings 'MemFree' /proc/meminfo)" 
    bc <<< "scale=${prec:-3};${freemem}/1024/1024" 
} 

將採取(或使用3爲默認值),並通過精確的參數bcscale選項

用例:

$ freemem_in_gb 
5.524 
$ freemem_in_gb 7 
5.5115814 

EDIT 由於對@Stephen P和@Etan Reisner留下評論並改進此答案。 代碼相應編輯。

grep的長期選項--fixed-strings故意用來代替-Ffgrep,原因是解釋性的。

+1

使用重定向和正則表達式grep相對昂貴; OPs'cat/proc/meminfo | grep MemFree'和你的''grep'MemFree'

+0

@EtanReisner我不這麼認爲。我錯誤地寫了它。感謝您對此發表評論。我會編輯答案。 –

+0

它似乎沒有傷害任何東西(它似乎工作正常,這讓我覺得有點奇怪,但*聳聳肩*)我主要想知道是否有一些我不熟悉的bc細節。 –

0

如果你有蟒蛇,你可以這樣來做:

python -c "import os;print int(round(os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES')/1024.0**3))" 

在這個例子中,我用round舍入到最接近的GB。你可以像下面這樣將它變成一個shell函數:

get_mem(){ 
    MEM=$(python -c "import os;print int(round(os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES')/1024.0**3))") 
    echo $MEM 
} 
相關問題