스왑 및 캐시를 포함하여 시스템에서 사용 가능한 총 메모리 양을 알려주는 한 줄을 만들고 싶습니다.
free -t
옵션이 아니기 때문에 free 열 아래의 값을 합산해야 합니다.
이 값을 얻는 방법을 잘 모르겠습니다. 을 사용하는 경우 awk
다른 줄에서 다른 숫자를 어떻게 참조합니까( 예를 들어 다른 줄의 여유 스왑 공간은 Mem
) ?$3
$4
답변1
지금 내 앞에 있는 데비안에는 다음 줄이 free -t
표시됩니다 Total:
.
total used free shared buffers cached
Mem: 8197980 2583348 5614632 0 222508 1904352
-/+ buffers/cache: 456488 7741492
Swap: 7807584 0 7807584
Total: 16005564 2550180 13455384
행만 필요한 경우 tail
및를 사용하여 awk
값을 가져올 수 있습니다.
그러나 free
이 줄이 표시되지 않으면 다음과 함께 awk를 사용할 수 있습니다 RS=""
.
free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc
열 레이아웃이 free
내 것과 다른 경우 필드 번호를 조정해야 할 수도 있습니다.
설명: 이 RS
필드는 레코드 구분 기호입니다. ""
자유 출력의 모든 라인을 연결 하여 awk
마치 한 라인에 있는 것처럼 참조할 수 있도록 하려면 이것을 설정하십시오 .
처음부터 계산하면 $1
to $6
는 열 헤더이고 $7
to는 Mem:
행 헤더이고 $8
to $10
는 해당 행의 값이므로 $10
사용 가능한 메모리 값입니다. 이는 다음 값에 대해 유사한 방식으로 수행됩니다.
total used free shared buffers cached
Mem: $8 $9 $10 $11 $12 $13
-/+ buffers/cache: $16 $17
Swap: $19 $20 $21
awk 명령은 {print $10 "+" $17 "+" $21}
기본적으로 값 +
사이에 기호를 연결한 다음 출력을 파이프하여 bc
합계를 계산합니다.
답변2
어쩌면 이게 대안이 될 수도 있겠네요free
cat /proc/meminfo | grep -e MemFree -e Buffers -e SwapFree | gawk 'BEGIN{s=0}{s+=$2}END{print s}'
답변3
free
실행 한 다음 출력을 구문 분석 할 수 있습니까 ?
free | awk '{print $4}' | tail -3 | sed '2d' |paste -sd+ | bc