मैं कोशिश करूंगा और यह और आपके पहले के प्रश्न दोनों का उत्तर दूंगा क्योंकि वे संबंधित हैं।
नामस्थान के लिए दरवाजे में फ़ाइलें हैं /proc/*/ns/*
और /proc/*/task/*/ns/*
।
एक नेमस्पेस एक प्रक्रिया द्वारा बनाया जाता है, जो अपने नेमस्पेस को अनचाहे बनाता है। एक नाम स्थान तब तक स्थायी बनाया जा सकता है बाँध-बढ़तेns
कुछ अन्य जगह पर फ़ाइल।
ip netns
उदाहरण के लिए नेट नेमस्पेस के लिए यही है । यह अपने net
नेमस्पेस और बाइंड-माउंट्स /proc/self/ns/net
को अनशेयर करता है ।/run/netns/netns-name
/proc
रूट पिड नेमस्पेस में एक माउंटेड में, आप उन सभी नेमस्पेस को सूचीबद्ध कर सकते हैं, जिनके पास एक प्रक्रिया है:
# readlink /proc/*/task/*/ns/* | sort -u
ipc:[4026531839]
mnt:[4026531840]
mnt:[4026531856]
mnt:[4026532469]
net:[4026531956]
net:[4026532375]
pid:[4026531836]
pid:[4026532373]
uts:[4026531838]
वर्ग कोष्ठक की संख्या इनोड संख्या है।
दी गई प्रक्रिया के लिए:
# ls -Li /proc/1/ns/pid
4026531836 /proc/1/ns/pid
अब, स्थायी नाम स्थान हो सकते हैं, जिनमें कोई प्रक्रिया नहीं है। उन्हें ढूंढना काफी मुश्किल भरा AFAICT हो सकता है।
सबसे पहले, आपको यह ध्यान रखना होगा कि कई माउंट नेमस्पेस हो सकते हैं ।
# awk '$9 == "proc" {print FILENAME,$0}' /proc/*/task/*/mountinfo | sort -k2 -u
/proc/1070/task/1070/mountinfo 15 19 0:3 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
/proc/19877/task/19877/mountinfo 50 49 0:3 / /run/netns/a rw,nosuid,nodev,noexec,relatime shared:2 - proc proc rw
/proc/19877/task/19877/mountinfo 57 40 0:3 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw
/proc/1070/task/1070/mountinfo 66 39 0:3 / /run/netns/a rw,nosuid,nodev,noexec,relatime shared:2 - proc proc rw
/proc/19877/task/19877/mountinfo 68 67 0:3 / /mnt/1/a rw,nosuid,nodev,noexec,relatime unbindable - proc proc rw
वे /mnt/1/a
, /run/netns/a
नामस्थान फ़ाइलें हो सकती हैं।
हम एक इनकोड संख्या प्राप्त कर सकते हैं:
# nsenter --mount=/proc/19877/task/19877/ns/mnt -- ls -Li /mnt/1/a
4026532471 /mnt/1/a
लेकिन इससे ऊपर की गणना की गई सूची में नहीं होने के अलावा यह हमें ज्यादा कुछ नहीं बताता है।
हम कोशिश कर सकते हैं और इसे विभिन्न प्रकारों में से किसी में भी दर्ज कर सकते हैं:
# nsenter --mount=/proc/19877/task/19877/ns/mnt -- nsenter --pid=/mnt/1/a true
nsenter: reassociate to namespace 'ns/pid' failed: Invalid argument
# nsenter --mount=/proc/19877/task/19877/ns/mnt -- nsenter --mount=/mnt/1/a true
nsenter: reassociate to namespace 'ns/mnt' failed: Invalid argument
# nsenter --mount=/proc/19877/task/19877/ns/mnt -- nsenter --net=/mnt/1/a true
#
ठीक है, यह एक net
नाम स्थान फ़ाइल थी।
तो ऐसा लगता है कि हमारे पास नाम रिक्त स्थान को सूचीबद्ध करने की एक विधि है: ns
सभी कार्यों की निर्देशिकाओं को सूचीबद्ध करें , फिर सभी proc
में सभी माउंटपॉइंट ढूंढें /proc/*/task/*/mountinfo
और उन्हें दर्ज करने का प्रयास करके उनके प्रकार का पता लगाएं।