Hem bunu hem de daha önceki sorunuzla ilgili olduklarını cevaplamaya çalışacağım .
Ad alanlarına kapılar dosyalardır /proc/*/ns/*
ve /proc/*/task/*/ns/*
.
Bir ad alanı, ad alanını paylaşmayan bir işlem tarafından oluşturulur . Bir ad o zamana kadar kalıcı hale getirilebilir bağlama montajns
başka yere dosyayı.
Bu ne ip netns
için örneğin yapar net ad. Onun unshares net
ad ve bağlama-bağlar /proc/self/ns/net
için ./run/netns/netns-name
Bir de /proc
kök pid ad monte, aşağıdakileri yaparak onları bir süreç var tüm ad alanlarını listeleyebilirsiniz:
# readlink /proc/*/task/*/ns/* | sort -u
ipc:[4026531839]
mnt:[4026531840]
mnt:[4026531856]
mnt:[4026532469]
net:[4026531956]
net:[4026532375]
pid:[4026531836]
pid:[4026532373]
uts:[4026531838]
Köşeli parantez içindeki sayı inode numarasıdır.
Bunu belirli bir işlem için elde etmek için:
# ls -Li /proc/1/ns/pid
4026531836 /proc/1/ns/pid
Şimdi, içinde herhangi bir işlem bulunmayan kalıcı ad alanları olabilir . Onları bulmak çok daha zor AFAICT olabilir.
İlk önce, birkaç mount ad alanı olabileceğini aklınızda bulundurmanız gerekir .
# 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
Bunlar /mnt/1/a
, /run/netns/a
isim alanı dosyaları olabilir.
Bir inode numarası alabiliriz:
# nsenter --mount=/proc/19877/task/19877/ns/mnt -- ls -Li /mnt/1/a
4026532471 /mnt/1/a
Ancak bu bize yukarıda hesaplanan listede bulunmadığından başka bir şey söylemez.
Farklı türlerden herhangi biri olarak girmeyi deneyebiliriz:
# 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
#
Tamam, o bir net
ad alanı dosyasıydı.
Bu nedenle, boşluk adlarını listelemek için bir yöntemimiz var gibi görünüyor: ns
tüm görevlerin dizinlerini listeledikten sonra tüm proc
montaj noktalarını bulun /proc/*/task/*/mountinfo
ve girmeye çalışarak türlerini belirleyin.