มีวิธีใดบ้างใน Linux ที่จะแสดงรายการเนมสเปซทั้งหมดในโฮสต์ที่ทำงานอยู่? ฉันต้องการตรวจสอบ namespaces สำหรับกระบวนการเฉพาะ (เช่นกระบวนการที่ทำงานใน LXC-container และกระบวนการอื่น ๆ ทั้งหมดบนโฮสต์) จากนั้นหากลุ่ม cg ของพวกเขา
มีวิธีใดบ้างใน Linux ที่จะแสดงรายการเนมสเปซทั้งหมดในโฮสต์ที่ทำงานอยู่? ฉันต้องการตรวจสอบ namespaces สำหรับกระบวนการเฉพาะ (เช่นกระบวนการที่ทำงานใน LXC-container และกระบวนการอื่น ๆ ทั้งหมดบนโฮสต์) จากนั้นหากลุ่ม cg ของพวกเขา
คำตอบ:
ยูทิลิตี้สำหรับการทำงานกับ namespaces ได้รับการปรับปรุงตั้งแต่คำถามนี้ถูกถามในปี 2013
lsns
จากแพ็กเกจutil-linuxสามารถแสดงรายการเนมสเปซทุกประเภทในรูปแบบที่มีประโยชน์หลากหลาย
# 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 ที่ต่ำที่สุดสำหรับแต่ละกระบวนการ - แต่คุณสามารถใช้ PID นั้นได้pgrep
หากคุณต้องการแสดงรายการกระบวนการทั้งหมดที่เป็นของเนมสเปซ
เช่นถ้าฉันใช้ gitlab ใน docker และต้องการหากระบวนการทั้งหมดที่ทำงานใน namespace นั้นฉันสามารถ:
# 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
ฉันยังสามารถใช้ namespace id (4026532661) กับps
เช่น:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]
จากหน้า man สำหรับพื้นที่ชื่อเครือข่าย
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
namespace-Lister:
คุณสามารถใช้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และบทความ ; เครดิตทั้งหมดให้กับRalf Trezeciak