Чтение человеком системной памяти из CLI?

15

На OS X я получаю приятное для чтения человеком чтение системной памяти примерно так:

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

распечатывает дружественный:

4 GB

Хотя это в Linux правильно:

lshw -class memory

это выводит:

size: 4096MiB

Мне нужно мучительно разобрать его и попытаться превратить его в строку, такую ​​же, как приведенная выше.

Я использую неправильную команду?

Robottinosino
источник
5
"Мне нужно мучительно разобрать это" ... Эта ужасная штука для OSX не больно? :-)
Патрик
@ Патрик: мне не нравится OS X при сравнении его с Linux!
Robottinosino

Ответы:

32

Если это все, что вам нужно, просто используйте free:

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

freeвозвращает информацию о памяти, -hкоммутатор приказывает ей печатать в удобочитаемом формате.

Тердон
источник
1
Я не знал, freeбыл (хороший) -hпереключатель. Благодарю. Очень интересно , как freeДимс 4.0G(который является то , что я получаю) более человек дружелюбный , чем 4 GB. "Мама, я голоден, я хотел бы 1,0 яблоко, пожалуйста." Если это лучшее, что у нас есть в Linux, я, вероятно, должен просто разобрать номер и заменить его Gна GBсебя. Очень редко мы видим жесткие диски, например, рекламируемые как «320G», а не «320 ГБ». :(
Robottinosino
5
@Robottinosino, размеры жесткого диска выражены в ГБ (10 ^ 9 байт), в то время как память обычно выражается в ГиБ (2 ^ 30 байт), 4.0G дает представление о точности. С 4 ГБ вы не знаете, точно ли это 4 ГБ (или 4 ГБ?) Или 4,4 ГБ, округленное до 4, или 3,6 Г, округленное до 4.
Стефан Шазелас
@Robottinosino Если вы хотите округлить его до более GBfree -h | gawk '/Mem:/{print $2}' | rev | cut -c 2- | rev | xargs printf "%.*fGB\n" 0
понятного
3

В Linux

read x memtotal x < /proc/meminfo

Будет хранить общую сумму мем $memoryв количестве килобайт. Это объем памяти, доступный для Linux, такой же, как сообщал free.

Если вы хотите установить оперативную память, вы можете сделать что-то вроде:

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

Чтобы получить размер в мибах. Или

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

Если вы хотите размер в ГиБ.

Стефан Шазелас
источник
0

Самый простой способ - использовать бесплатную команду

free -gh
влад
источник
Вы должны также разобрать это.
countermode