답변:
이 질문이 2013 년에 요청 된 이후로 네임 스페이스 작업을위한 유틸리티가 향상되었습니다.
lsns
로부터 폴더의 유틸리티 - 리눅스 패키지 다양한 유용한 형식으로, 네임 스페이스의 다양한 유형을 모두 나열 할 수 있습니다.
# lsns --help
Usage:
lsns [options] [<namespace>]
List system namespaces.
Options:
-J, --json use JSON output format
-l, --list use list format output
-n, --noheadings don't print headings
-o, --output <list> define which output columns to use
-p, --task <pid> print process namespaces
-r, --raw use the raw output format
-u, --notruncate don't truncate text in columns
-t, --type <name> namespace type (mnt, net, ipc, user, pid, uts, cgroup)
-h, --help display this help and exit
-V, --version output version information and exit
Available columns (for --output):
NS namespace identifier (inode number)
TYPE kind of namespace
PATH path to the namespace
NPROCS number of processes in the namespace
PID lowest PID in the namespace
PPID PPID of the PID
COMMAND command line of the PID
UID UID of the PID
USER username of the PID
For more details see lsns(8).
lsns
각 프로세스에서 가장 낮은 PID 만 나열하지만 pgrep
네임 스페이스에 속하는 모든 프로세스를 나열하려는 경우 해당 PID를 사용할 수 있습니다 .
예를 들어 도커에서 gitlab을 실행하고 해당 네임 스페이스에서 실행중인 모든 프로세스를 찾으려면 다음을 수행 할 수 있습니다.
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
그런 다음 해당 pid (459)를 pgrep
다음 과 함께 사용하십시오 .
# pgrep --ns 459 -a
459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
623 postgres: gitlab gitlabhq_production [local] idle
[...around 50 lines deleted...]
30172 nginx: worker process
다음과 같이 네임 스페이스 ID (4026532661)를 사용할 수도 있습니다 ps
.
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]
네트워크 네임 스페이스에 대한 IP 매뉴얼 페이지에서
ip netns-프로세스 네트워크 네임 스페이스 관리 네트워크 네임 스페이스는 논리적으로 자체 경로, 방화벽 규칙 및 네트워크 장치가있는 네트워크 스택의 다른 사본입니다.
By convention a named network namespace is an object at
/var/run/netns/NAME that can be opened. The file descriptor resulting
from opening /var/run/netns/NAME refers to the specified network names-
pace. Holding that file descriptor open keeps the network namespace
alive. The file descriptor can be used with the setns(2) system call
to change the network namespace associated with a task.
The convention for network namespace aware applications is to look for
global network configuration files first in /etc/netns/NAME/ then in
/etc/. For example, if you want a different version of
/etc/resolv.conf for a network namespace used to isolate your vpn you
would name it /etc/netns/myvpn/resolv.conf.
다른 유형의 네임 스페이스의 경우 다른 방법이있을 수 있습니다.
Nsutils 는로 사용 된 네임 스페이스를 나열 할 수 있으며 nslist
사용자 네임 스페이스를보기 위해 루트가 필요하지 않습니다.
로 작성된 네트워크 네임 스페이스의 ip netns
경우 다음과 같이 나열 될 수 있습니다.ip netns list
네임 스페이스 리스너 :
listns.py 를 사용할 수 있습니다
사용법 : ./listns.py
또는python2 listns.py
시스템 탐색
기본 / 기본 설정에서 Ubuntu 12.04 이상은 다음에 대한 네임 스페이스를 제공합니다 (이 네임 스페이스는 시스템의 모든 프로세스에 대해 표시됩니다. 루트로 실행하는 경우).
파이썬 코드
아래의 파이썬 코드는 시스템의 기본이 아닌 네임 스페이스를 모두 나열합니다. 프로그램 흐름은
예:
python2 listns.py
출력 예 ... 필요에 맞게 정렬하거나 스크립트를 편집하여 파이프 할 수 있습니다.
PID Namespace Thread/Command
-- net:[4026533172] created by ip netns add qrouter-c33ffc14-dbc2-4730-b787-4747
-- net:[4026533112] created by ip netns add qrouter-5a691ed3-f6d3-4346-891a-3b59
297 mnt:[4026531856] kdevtmpfs
3429 net:[4026533050]** dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
3429 mnt:[4026533108] dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
3486 net:[4026533050]** /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil
3486 mnt:[4026533107] /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil
출처 : github-mirror 및 article ; Ralf Trezeciak의 모든 크레딧