Bash: 명령줄 프로그램에서 데이터 추출

Bash: 명령줄 프로그램에서 데이터 추출

나는 시스템의 총 메모리를 얻는 방법을 알고 있습니다.

$ free -lm
             total       used       free     shared    
Mem:          3008       2495        513         57

Nginx에서 작업자 프로세스의 기본 메모리 소비(RSS)를 얻는 방법을 알고 있습니다.

$ ps -C nginx -O rss
  PID   RSS S TTY          TIME COMMAND
 1564  1336 S ?        00:00:00 nginx: master process /usr/sbin/nginx
 1565  1756 S ?        00:00:00 nginx: worker process
 1566  1756 S ?        00:00:00 nginx: worker process
 1567  1756 S ?        00:00:00 nginx: worker process
 1568  1756 S ?        00:00:00 nginx: worker process

이제 교체에 의지하지 않고 시스템에서 사용할 수 있는 작업자 프로세스 수를 확인하려면 다음을 수행하십시오.

echo $((3008 * 1024))
3080192
$ echo $((3080192 / 1756))
1754

내 서버는 스왑을 사용하지 않고도 1754개의 nginx 작업자 스레드를 처리할 수 있습니다. 그러나 위의 다단계 프로세스를 명령줄에서 실행할 수 있는 단일 줄로 바꿀 수 있다면 좋을 것입니다.

내 문제는 명령줄의 free 명령에서 "3008"을 추출하는 방법을 모른다는 것입니다. 이 문제를 어떻게 해결할 수 있나요?

답변1

내 문제는 명령줄의 free 명령에서 "3008"을 추출하는 방법을 모른다는 것입니다.

다음 출력이 주어지면:

free -lm
             total       used       free     shared    buffers     cached
Mem:          3757       1765       1991        138        122        766
Low:          3757       1765       1991
High:            0          0          0
-/+ buffers/cache:        876       2880
Swap:         7772          0       7772


이 시도:

free -lm | grep '^Mem' | awk '{ print $2 }'
3757

total그러면 행 의 열이 반환됩니다 Mem:. 나는 3757.

답변2

awk에 대한 무료 파이핑은 필요한 값을 추출합니다.

free -l | awk '/^Mem/{print $2}'

답변3

그것은 다음과 같습니다:

echo $(($(($(free -lm | grep Mem | awk '{print $2}') * 1024)) / $(ps -C nginx -O rss |grep 'nginx: 작업자 프로세스$' | awk ' {인쇄 $2}' |

답변4

머리, 꼬리, 컷을 사용하여 이 작업을 수행할 수 있어야 합니다.

free -lm | head -2 | tail -1 | tr -s ' ' | cut -f2 -d' '

head -2상위 2개 라인이기 때문입니다.

             total       used       free     shared    buffers     cached
Mem:          3757       1765       1991        138        122        766

tail -1왜냐면 이게 마지막 줄이거든요.

Mem:          3757       1765       1991        138        122        766

tr -s ' '- 공백 체인을 단일 공백으로 변환합니다.

Mem: 3757 1765 1991 138 122 766

마지막으로 - cut -f2 -d' '- 공백으로 구분된 두 번째 필드를 가져옵니다.

3757

관련 정보