2010-03-14 29 views
35

Làm thế nào tôi có thể nhận được tổng bộ nhớ vật lý theo byte của máy tính Linux?Làm thế nào để có được tổng bộ nhớ vật lý trong Bash để gán nó cho một biến?

Tôi cần gán nó cho biến tập lệnh bash.

+0

Câu hỏi này rất ít ý nghĩa. Xin hãy viết lại để cụ thể hơn – Gabe

+0

Tôi đã viết lại nó. Đối với tôi nó rất cụ thể, tôi phải lấy tổng bộ nhớ vật lý (RAM) của PC và gán nó vào một biến trong kịch bản bash của tôi. – Neuquino

Trả lời

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

Số trả lại là trong KB

+6

có vẻ như bạn đã trả lời câu hỏi của riêng bạn. tuy nhiên, sử dụng một lệnh awk để thực hiện công việc. 'awk '/ MemTotal/{print $ 2}'/proc/meminfo' – ghostdog74

+6

Để bao gồm chuyển đổi sang một cơ sở khác (ví dụ: GB), bạn có thể sử dụng' grep MemTotal/proc/meminfo | awk '{print $ 2}' | xargs -I {} echo "scale = 4; {}/1024^2" | bc' – turtlemonvh

8

Làm thế nào về

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

không có dấu cách giữa dấu "=" khi gán biến. sử dụng cú pháp '$()' bất cứ khi nào có thể. – ghostdog74

+0

@ ghostdog74: cảm ơn (bài đăng cố định) – kiwicptn

+0

grep _and_ awk? –

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

hoặc sử dụng miễn phí

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

hoặc sử dụng vỏ

#!/bin/bash 

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

Tôi thích cái này vì bạn có thể chuyển vào '-m',' -g', v.v., để 'tự do' để lấy nó theo các đơn vị khác nhau :) –

+0

Câu trả lời rất hay, cảm ơn bạn. Hơn nữa tôi muốn thay đổi dòng thích hợp để 'trong khi đọc-r a b c' để dải các đơn vị. – dess

1

Phiên bản python nội tuyến ngớ ngẩn, trông quá phức tạp, nhưng thực sự rất hữu ích.

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

Nó trả về bộ nhớ trong GB.

+0

Tôi nghĩ rằng bạn có một "r" đi lạc trong 're.search (r "^ MemTotal ...")' – kd88

+0

@ kd88 Tôi nghĩ là ổn. Đó chỉ là ký hiệu cho một chuỗi thô trong python. Xem phần giới thiệu của tài liệu regex để được giải thích: https://docs.python.org/2/library/re.html – turtlemonvh

5

tôi đã đưa ra một này theo những giả thuyết, rằng bộ nhớ vật lý sẽ là số đầu tiên trong đầu ra miễn phí của:

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

này cho phép bạn cấu hình miễn phí để sản xuất các đơn vị bạn muốn (-m, -g, ...) và nó độc lập với ngôn ngữ hệ thống (các câu trả lời khác phụ thuộc vào chuỗi "Mem:" trong đầu ra miễn phí, có thể thay đổi dựa trên ngôn ngữ.

Các vấn đề liên quan