2010-03-14 9 views
35

Wie kann ich den gesamten physischen Speicher in Bytes meines Linux-PCs erhalten?Wie erhält man den gesamten physischen Speicher in Bash, um ihn einer Variablen zuzuordnen?

Ich muss es einer Bash-Skript-Variable zuweisen.

+0

Diese Frage macht sehr wenig Sinn wie sie ist. Bitte versuchen Sie es genauer zu schreiben – Gabe

+0

Ich habe es gerade neu geschrieben.Für mich ist es sehr spezifisch, ich muss den gesamten physikalischen Speicher (RAM) von meinem PC bekommen und zuweisen es zu einer Variablen in meinem Bash-Skript. – Neuquino

Antwort

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

Die zurückgegebene Zahl ist in KB

+6

Es scheint, dass Sie Ihre eigene Frage beantwortet haben. Verwenden Sie dennoch einen awk-Befehl, um die Aufgabe zu erledigen. 'awk '/ MemTotal/{print $ 2}'/proc/meminfo' – ghostdog74

+6

Um die Konvertierung in eine andere Basis (z. B. GB) einzuschließen, können Sie' grep MemTotal/proc/meminfo | verwenden awk '{print $ 2}' | xargs -I {} echo "Maßstab = 4; {}/1024^2" | bc' – turtlemonvh

8

Wie wäre es

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

keine Leerzeichen zwischen "=" bei der Variablenzuweisung. Verwenden Sie '$()' Syntax wo immer möglich. – ghostdog74

+0

@ ghostdog74: danke (postfix) – kiwicptn

+0

grep _and_ awk? –

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

oder mit dem kostenlosen

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

oder mit Hilfe von Shell

#!/bin/bash 

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

Ich mag diese, weil Sie '-m',' -g' usw. zu 'free' übergeben können, um es in verschiedenen Einheiten zu bekommen :) –

+0

Sehr gute zusammenfassende Antwort, Danke. Außerdem würde ich die entsprechende Zeile in 'while read -r a b c' ändern, um die Einheiten zu entfernen. – dess

1

Silly-Inline-Python-Version, die übermäßig kompliziert aussieht, aber tatsächlich nützlich ist.

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

Es gibt den Speicher in GB zurück.

+0

Ich denke, Sie haben ein streunendes "r" in Ihrer 're.search (r "^ MemTotal ...")' – kd88

+0

@ kd88 Ich denke, es ist in Ordnung. Das ist nur die Notation für eine rohe Zeichenfolge in Python. Eine Erläuterung finden Sie im Einleitungsteil der Regex-Dokumentation: https://docs.python.org/2/library/re.html – turtlemonvh

5

kam ich mit dieser unter der Annahme auf, dass der physische Speicher die erste Zahl in der Ausgabe des frei sein:

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

Dieses Sie das Gerät Sie (-m ausgeben möchten konfigurieren frei erlaubt, -g, ...) und es ist unabhängig von der Systemsprache (andere Antworten hängen von der "Mem:" - Zeichenfolge in der Ausgabe von free ab, die sich je nach Sprache ändern kann.

Verwandte Themen