Linux에서 전체 활성 네임스페이스를 찾는 방법은 무엇입니까?

Linux에서 전체 활성 네임스페이스를 찾는 방법은 무엇입니까?

Linux에 존재하는 각 유형의 활성 네임스페이스 수를 확인할 수 있는 방법이 있습니까? 예를 들어:

  • NS 설치:20
  • 순 NS: 40
  • 등.

답변1

그러면 아래 링크를 반복하여 /proc/*/ns각 유형의 활성 네임스페이스 수를 계산합니다.하나 이상의 프로세스를 포함하는 네임스페이스:

sudo find /proc/*/ns -type l -printf "%l\n" |
gawk -F'[:\\[\\]]+' '{ nss[$1][$2] = 1 } END { for (ns in nss) { print ns ": " length(nss[ns]) } }'

다양한 식별자의 수를 세고 네임스페이스 유형별로 그룹화하는 방식으로 작동합니다.

위에서는 이를 고려하지 않았지만 다른 곳에 네임스페이스를 바인딩하여 마운트하면 프로세스 없이 네임스페이스를 활성 상태로 유지할 수 있습니다.

답변2

lsns(1)util-linux 패키지 [1]의 명령을 사용하여 이 작업을 수행 할 수 있습니다 .

lsns -n | awk '{n[$2]++}END{for(k in n) print k"\t"n[k]}'
net     2
cgroup  1
...

그런데 lsns고장났어요: 스레드별 네임스페이스나 핸들을 열거나 마운트를 바인딩해야만 활성 상태로 유지되는 네임스페이스는 표시되지 않습니다. 이 모든 것을 얻으려면 lsnsx.pl내 다른 스크립트를 사용해보십시오.답변:

# perl ./lsnsx.pl | grep -v '^ '
cgroup   1
ipc      1
mnt      3
net      5
...

[1] 사용 중인 컴퓨터에 해당 컴퓨터(예: busybox)가 없는 경우 lsns다음에서 직접 이 정보를 추출할 수 있습니다 /proc/*/ns/*.

for f in /proc/[0-9]*/ns/*; do readlink "$f"; done | awk -F: '!t[$2]++{c[$1]++}END{for(k in c)print k"\t"c[k]}'

/proc/[0-9]*/ns스레드별 네임스페이스를 얻 도록 변경할 수도 있지만 /proc/[0-9]*/task/[0-9]*/ns적당히 사용되는 시스템에서는 속도가 매우 느려집니다.

관련 정보