실시예 1

실시예 1

리눅스ps명령은 RSS와 같은 다른 메모리 사용량을 표시합니다(상주 세트 크기), 기본 크기는 kB 단위입니다. MB나 GB 단위로 표시할 수 있는 방법이 있나요 ls -s --human-readable?

답변1

psAFAIK 옵션이 포함된 순수한 명령을 통해서는 간단히 수행 할 수 없습니다 . 그러나 예를 들어 일부 텍스트 프로세서를 사용하여 awk원하는 작업을 수행하도록 할 수 있습니다.

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'

이는 에서 결과를 가져온 ps다음 첫 번째 행을 제외한 각 행에 대해 일반적으로 KB 단위인 다섯 번째 열을 대체한 다음 MB에 M 접미사를 추가합니다.

별칭으로 만들어서 저장할 수 있습니다..bashrc.myps

대부분의 사람들은 형식을 보존하는 방법이나 다른 단위와 정밀도를 사용하는 방법을 묻습니다.

column -t간단한 버전의 경우 출력 필터를 사용할 수 있습니다 .

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t

그러나 이는 마지막 열의 공백을 올바르게 인식하지 못합니다. 불행하게도 우리는 텍스트 형식을 처리하고 printf유사한 형식으로 자체 형식 문자열을 준비해야 합니다.

ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'

설명하다:

  • NR==1조건은 첫 번째 행(제목)에만 적용됩니다. COMMAND가 시작되는 위치를 결정하기 위해 원시 ps 출력을 사용합니다.
    • o=$0나중에 사용할 수 있도록 수정되지 않은 전체 줄을 저장합니다.
    • a=match($0,$11)11번째 필드의 위치를 ​​찾습니다(이는 원래 출력에서 ​​COMMAND 열의 시작이어야 함).
  • NR>1다음 행(데이터)에 대해. 다섯 번째 필드를 변경합니다.
    • $5=int(10*$5/1024)/10"M"값을 소수점 이하 한 자리의 메가바이트로 변경하고 "M" 접미사를 추가합니다.
    • printf는 모든 필드를 열과 같은 방식으로 표시합니다.
      • %-10s왼쪽 정렬된 10자 너비의 s문자열을 나타냅니다 .10-
      • %8ss8자 너비의 문자열을 나타내며 출력이 8없으므로 -필드가 오른쪽 정렬됩니다.
    • substr(o, a)o이전 조건이 평가된 위치에서 시작하여 원래 줄(따라서 이전에 저장됨)의 하위 문자열을 가져오므 a로 공백을 유지하면서 명령 출력을 표시할 수 있습니다.

답변2

나는 같은 문제에 대한 해결책을 찾기 위해 여기에 왔습니다. 놀랍게도 아직 더 나은 대답은 없습니다. 나는 이 스레드와 온라인에서 읽은 다른 페이지를 기반으로 약간 유연한 수정 사항을 만들었습니다.

내용을 더 읽기 쉽게 만들기 위해 자동 범위 기능을 만들어 및 필드에 사용 vsz했습니다 rss.

또한, 실제로 방법임의의 필드 구분 기호를 강제로 사용합니다 ps. 이것이 내가 하는 방법이다:

맨페이지 자막에 있는 필드 설명자를 사용할 AIX FORMAT DESCRIPTORS때 문서화되지 않은 것으로 보이는 트릭을 발견했습니다 ps. USER 또는 VSZ와 같은 작업을 수행하면 %각 출력 줄 앞에 문자가 포함되는 것 같습니다 . 시도하면 어떻게 될지 궁금합니다. 한 줄에 하나씩 표시합니다. 좋습니다. 공백이 없는 임의의 문자열은 어떻습니까? 예! !%U%z%%%하지만분명히 당신은가지다%%예상대로 작동하도록 만드세요 . %이해하지 못하다. 유효한 필드 설명자인지 확인하기 위해 ps뒤따르는 모든 항목을 구문 분석하려고 시도 합니다 . 따라서 문제를 피하기 위해 %문자열 끝에 보관하는 것이 가장 안전할 것입니다 .FOOBARBIGSTRINGBLABLA%%

이제 유효한 데이터의 일부가 될 가능성이 상대적으로 낮은 문자열을 생각해내면 됩니다. 특히 이를 cmd필드로 사용할 경우에는 더욱 그렇습니다. zzz:::zzz그럴 것 같지 않습니다. %%마지막에 추가 항목을 추가하여 작동하도록 합시다 . zzz:::zzz%%이는 출력에 zzz:::zzz%.

awk다중 문자 필드 구분 기호를 처리할 수 있는 출력을 처리 중이며 awk조회를 zzz:::zzz%필드 구분 기호로 지정합니다.

|head -n20마지막 단계는 |cut -c -250출력을 20줄로 제한하고 250자 이후의 각 줄을 잘라내어 터미널을 깔끔하게 유지하는 것입니다. 실용적인 스크립팅 목적으로 이를 제거할 수도 있습니다.

편집하다: 이 예제를 사용하여 모든 필드를 기준으로 정렬할 수도 있음을 지적하기 위해 변수를 추가했습니다. 필드 이름은 ps맨페이지 제목 아래에서 찾을 수 있습니다.STANDARD FORMAT SPECIFIERS

편집 2: 요청에 따라 임의의 필드 구분 기호가 작동하는 방식과 필드 구분 기호를 선택하는 이유에 대한 자세한 설명을 추가했습니다.

실시예 1

sortbyfield="rss"; fsep="-o zzz:::zzz%% -o"; ps ax o user:16 $fsep pid $fsep pcpu $fsep pmem $fsep vsz $fsep rss $fsep tty $fsep stat $fsep lstart $fsep time:16 $fsep cmd  --sort -$sortbyfield | awk 'function setprefix(num){{n_suffix=1; while(num > 1000 && n_suffix < suffixes_len) {num /= 1024; n_suffix++;}; num=int(100*num)/100suffixes[n_suffix]}; return num} BEGIN{suffixes_len=split("kB MB GB TB PB EB ZB",suffixes);FS="zzz:::zzz%";} NR>1 {$5=setprefix($5);$6=setprefix($6); }{ printf "%-16s %6s %-5s %-5s %9s %9s %-8s %-8s %-25s %-18s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11;}' |head -n20 |cut -c -250

출력: (약간 정리된 예)

USER                PID %CPU  %MEM        VSZ       RSS TT       STAT                      STARTED              TIME   CMD
gdm                1474  0.0   0.3     2.87GB  182.86MB tty1     Sl+      Sat Jun 18 01:31:44 2022          00:34:40   /usr/bin/gnome-shell
gdm                1370  0.0   0.0    171.3MB   34.31MB tty1     Sl+      Sat Jun 18 01:31:43 2022          00:01:56   /usr/libexec/Xorg vt1 -displayfd 3 -auth /run/user/42/gdm/Xauthority -background none -noreset -keeptty -verbose 3
gdm                1552  0.0   0.0   686.07MB   20.14MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:40   /usr/libexec/gsd-color
gdm                1577  0.0   0.0   870.49MB   19.53MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:01   /usr/libexec/gsd-media-keys
gdm                1538  0.0   0.0   531.81MB   18.51MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-xsettings
gdm                1541  0.0   0.0   539.53MB    18.5MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:04   /usr/libexec/gsd-power
gdm                1570  0.0   0.0    458.5MB    18.4MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-wacom
gdm                1500  0.0   0.0   386.57MB   17.94MB tty1     Sl       Sat Jun 18 01:31:45 2022          00:00:00   /usr/libexec/ibus-x11 --kill-daemon
gdm                1537  0.0   0.0   386.13MB   17.92MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-clipboard

실시예 2

약간 더 간결한 버전:

sortbyfield="rss"; fsep="-o zzz:::zzz%% -o"; ps ax o user:16 $fsep pid $fsep pcpu $fsep pmem $fsep vsz $fsep rss $fsep tty $fsep stat $fsep lstart $fsep time:16 $fsep comm  --sort -$sortbyfield | awk 'function setprefix(num){{n_suffix=1; while(num > 1000 && n_suffix < suffixes_len) {num /= 1024; n_suffix++;}; num=int(100*num)/100suffixes[n_suffix]}; return num} BEGIN{suffixes_len=split("kB MB GB TB PB EB ZB",suffixes);FS="zzz:::zzz%";} NR>1 {$5=setprefix($5);$6=setprefix($6); }{ printf "%-16s %6s %-5s %-5s %9s %9s %-8s %-8s %-25s %-18s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11;}' |head -n20 |cut -c -250

출력: (약간 정리된 예)

USER                PID %CPU  %MEM        VSZ       RSS TT       STAT                      STARTED              TIME   COMMAND
gdm                1474  0.0   0.3     2.87GB  182.86MB tty1     Sl+      Sat Jun 18 01:31:44 2022          00:34:40   gnome-shell
gdm                1370  0.0   0.0    171.3MB   34.31MB tty1     Sl+      Sat Jun 18 01:31:43 2022          00:01:56   Xorg
gdm                1552  0.0   0.0   686.07MB   20.14MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:40   gsd-color
gdm                1577  0.0   0.0   870.49MB   19.53MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:01   gsd-media-keys
gdm                1538  0.0   0.0   531.81MB   18.51MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-xsettings
gdm                1541  0.0   0.0   539.53MB    18.5MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:04   gsd-power
gdm                1570  0.0   0.0    458.5MB    18.4MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-wacom
gdm                1500  0.0   0.0   386.57MB   17.94MB tty1     Sl       Sat Jun 18 01:31:45 2022          00:00:00   ibus-x11
gdm                1537  0.0   0.0   386.13MB   17.92MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-clipboard

이것이 누군가에게 도움이 되기를 바랍니다!

관련 정보