몇 초마다 free 명령을 통해서만 사용된 메모리를 가져옵니다.

몇 초마다 free 명령을 통해서만 사용된 메모리를 가져옵니다.

예를 들어 여기에 설명되어 있습니다.

free -m 명령에서 사용된 개별 메모리 정보를 가져옵니다.

free명령의 출력을 자르는 방법 . 하지만 몇 초마다 실행하여 파일에 기록하고 싶습니다. 그래서 나는 다음을 시도한다:

free -g -s2 | sed -n 's/^Mem:\s\+[0-9]\+\s\+\([0-9]\+\)\s.\+/\1/p' >> memory2.log

하지만 파일은 여전히 ​​비어 있습니다. 왜 이런 일이 발생하며 어떻게 해결합니까?

답변1

이는 제가 아는 한 sed입력이 먼저 버퍼링되어 명령이 끝나지 않아 추가된 부분( >>)에 도달하지 못하기 때문에 발생합니다. 이 문제를 해결하려면 -u/ --unbuffered플래그 를 사용하세요 sed.

free -g -s2 | sed -u -n 's/^Mem:\s\+[0-9]\+\s\+\([0-9]\+\)\s.\+/\1/p' >> memory2.log

다른 해결책은 while루프를 사용하는 것입니다.

while true; do free -g | sed -n 's/^Mem:\s\+[0-9]\+\s\+\([0-9]\+\)\s.\+/\1/p'; sleep 1; done >> memory2.log

도움이 되었기를 바랍니다 :)

답변2

더 간단한 명령을 작성하려면 awk를 사용하겠습니다. Awk도 출력 버퍼링을 사용하지만 mawk내 Ubuntu 데스크탑은 라인 버퍼링을 사용하는 옵션을 지원합니다.

free -g -s2 | awk -W interactive '/^Mem:/ {print $2}'

(참고: 내 컴퓨터에서는 awkDebian 대체 하위 시스템을 통해 연결됨)mawk

쉘 루프 호출을 실행하면 free | awk다음과 같습니다 .매우간단한 명령:

while true; do
  free -g | awk '/^Mem:/ {print $2}' >> /path/to/memory2.log
  sleep 2
done

관련 정보