Linuxでアクティブなネームスペース全体を見つける方法は?

Linuxでアクティブなネームスペース全体を見つける方法は?

Linuxに存在する各タイプのアクティブな名前空間の数を確認する方法はありますか?たとえば、

  • NSインストール:20
  • ネットNS:40
  • など。

答え1

次に、以下のリンクを繰り返して、/proc/*/ns各タイプのアクティブな名前空間の数を計算します。つまり1つ以上のプロセスを含む名前空間:

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適切に使用されているシステムでは非常に遅くなります。

関連情報