2010-03-14 26 views
35

¿Cómo puedo obtener la memoria física total en bytes de mi PC con Linux?¿Cómo obtener la memoria física total en Bash para asignarla a una variable?

Necesito asignarlo a una variable de script bash.

+0

Esta pregunta tiene muy poco sentido tal como está. Intente reescribirlo para ser más específico – Gabe

+0

Lo acabo de reescribir. Para mí es muy específico, tengo que obtener la memoria física total (RAM) de mi PC y asignar a una variable en mi script bash. – Neuquino

Respuesta

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

El número devuelto es en KB

+6

Parece que ha respondido a su propia pregunta. sin embargo, use un comando awk para hacer el trabajo. 'awk '/ MemTotal/{print $ 2}'/proc/meminfo' – ghostdog74

+6

Para incluir la conversión a una base diferente (por ejemplo, GB) puede usar' grep MemTotal/proc/meminfo | awk '{print $ 2}' | xargs -I {} echo "scale = 4; {}/1024^2" | bc' – turtlemonvh

8

¿Qué tal

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

no hay espacios entre el signo "=" al asignar la variable. use la sintaxis '$()' siempre que sea posible. – ghostdog74

+0

@ ghostdog74: gracias (post fijado) – kiwicptn

+0

grep _and_ awk? –

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

o el uso libre de

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

o el uso de la cáscara

#!/bin/bash 

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

Me gusta porque puedes pasar '-m',' -g', etc., a 'free' para obtenerlo en unidades diferentes :) –

+0

Muy buena respuesta resumida, gracias. Además, cambiaría la línea apropiada a 'mientras leía -r a b c' para quitar las unidades. – dess

1

Silly inline python versión, que se ve demasiado complicada, pero en realidad es útil.

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

Devuelve la memoria en GB.

+0

Creo que tiene una "r" perdida en su "re.search (r"^MemTotal ... ") ' – kd88

+0

@ kd88 Creo que está bien. Esa es solo la notación de una cadena sin formato en python. Consulte la sección de introducción de los documentos de expresiones regulares para obtener una explicación: https://docs.python.org/2/library/re.html – turtlemonvh

5

me ocurrió con éste bajo el supuesto, que la memoria física será el primer número de la salida del libre:

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

Esto le permite configurar la libertad de salida de la unidad que desea (-m, -g, ...) y es independiente del idioma del sistema (otras respuestas dependen de la cadena "Mem:" en la salida de Free, que puede cambiar en función del idioma.

Cuestiones relacionadas