Leitura de memória do sistema legível por humanos da CLI?

15

No OS X, recebo uma boa leitura da memória do sistema legível por humanos da seguinte forma:

printf -v system_memory \
          "$(system_profiler SPHardwareDataType \
             | awk -F ': ' '/^ +Memory: /{print $2}')"
echo "$system_memory"

imprime o amigável:

4 GB

Embora isso no Linux esteja correto:

lshw -class memory

produz:

size: 4096MiB

Eu preciso analisá-lo dolorosamente e tentar transformá-lo em uma string tão boa quanto a acima.

Estou usando o comando errado?

Robottinosino
fonte
5
"Eu preciso analisá-lo dolorosamente" ... Aquela coisa feia para osx não é dolorosa? :-) #
Patrick Patrick
@ Patrick: Eu não gosto do OS X ao compará-lo ao Linux!
Robottinosino 29/03

Respostas:

32

Se é tudo o que você precisa, basta usar free:

$ free -h | gawk  '/Mem:/{print $2}'
7.8G

freeretorna informações de memória, o -hcomutador diz para imprimir em formato legível por humanos.

terdon
fonte
1
Eu não sabia que freetinha um -hinterruptor (bom) . Obrigado. Muito interessante como freeconsidera 4.0G(o que eu recebo) mais amigável ao ser humano do que 4 GB. "Mãe, estou com fome, gostaria de 1,0 maçã, por favor." Se este é o melhor que temos no Linux, provavelmente devo analisar o número e substituir Gpor GBmim mesmo. Muito raramente vemos HDDs, por exemplo, anunciados como "320G" em vez de "320 GB". :(
Robottinosino 29/03
5
@Robottinosino, os tamanhos dos HDDs são expressos em GB (10 ^ 9 bytes), enquanto a memória geralmente é expressa em GiB (2 ^ 30 bytes), 4.0G fornece uma idéia da precisão. Com 4GB, você não sabe se é exatamente 4GB (ou 4GiB?) Ou 4.4GB arredondado para 4 ou 3,6g arredondado para 4.
Stéphane Chazelas
@Robottinosino Se você quiser terminar o dia a um número mais legível e add GB, tentefree -h | gawk '/Mem:/{print $2}' | rev | cut -c 2- | rev | xargs printf "%.*fGB\n" 0
aalaap
3

No Linux,

read x memtotal x < /proc/meminfo

Armazenaria a quantidade total de mem $memoryem número de kiB. Essa é a quantidade de memória disponível para Linux, a mesma relatada por free.

Se você deseja a RAM instalada, pode fazer coisas como:

awk '{s+=$0};END{print s}' /sys/bus/mc*/devices/dimm*/size

Para obter o tamanho em MiBs. Ou

awk '{s+=$0};END{printf "%.2gG\n", s/1024}' /sys/bus/mc*/devices/dimm*/size

Se você deseja o tamanho em GiB.

Stéphane Chazelas
fonte
0

A maneira mais simples é usar o comando free

free -gh
vlad
fonte
Você precisa analisar isso também.
countermode