/proc에서 memfree를 얻고 10진수로 변환하는 더 좋은 방법

/proc에서 memfree를 얻고 10진수로 변환하는 더 좋은 방법

저는 멋진 wm과 bashets을 사용하여 사용 가능한 메모리를 표시하는 작은 텍스트 위젯을 만들고 있습니다. 총 킬로바이트를 기가바이트(예: 1.2)로 변환하고 싶습니다. 이것이 내가 생각해낸 것입니다...

mem_Kb=$(grep -i memfree /proc/meminfo | cut -d: -f2 | tr -d [kB] | sed "s/^[ \t]*// ; s/[ \t]*$//")

mem_Gig=$(echo "scale = 1 ; $mem_Kb / 1000000" | bc )

echo mem_Gig: $mem_Gig

더 좋고 깨끗한 방법은 무엇입니까?

답변1

그냥 사용하십시오 free:

$ free -h
             total       used       free     shared    buffers     cached
Mem:          7.8G       6.8G       1.0G         0B       166M       4.2G
-/+ buffers/cache:       2.5G       5.2G
Swap:         7.8G       548K       7.8G

따라서 귀하의 경우에는 다음과 같습니다.

$ mem_Gig=`free -h | awk '$2~/buf/{print $4}'`
$ echo $mem_Gig
5.2G

에서 man free:

   -h, --human
          Show all output fields automatically scaled to
          shortest  three  digit  unit  and  display the
          units of print out.  Following units are used.

            B = bytes
            K = kilos
            M = megas
            G = gigas
            T = teras

          If unit is missing, and you have  petabyte  of
          RAM  or  swap,  the number is in terabytes and
          columns might not be aligned with header.

   --si   Use power of 1000 not 1024.

따라서 1024 대신 1000을 사용하려면 다음과 같이 하면 됩니다.

$ mem_Gig=`free -h --si | awk '$2~/buf/{print $4}'`
$ echo $mem_Gig
5.5G

관련 정보