Как найти общее количество активных пространств имен в Linux?

source_folder-— это символическая ссылка, указывающая на каталог test

Но ваш путь к каталогу в символической ссылке является относительным. Если вы используете абсолютный путь (, например./home/user/test)при копировании символической ссылки происходит нормально.

Если вы хотите скопировать все файлы из каталога, на который указывает символическая ссылка, вы можете использовать опцию -dс командой cp.

2
11.12.2019, 17:27
2 ответа

Это будет перебирать ссылки под /proc/*/nsдля подсчета количества активных пространств имен каждого типа, т. е. пространств имен, содержащих хотя бы один процесс:

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]) } }'

Он работает путем подсчета количества различных идентификаторов, сгруппированных по типу пространства имен.

Пространства имен могут поддерживаться без процессов путем связывания их монтирования в другом месте; выше это не учитывается.

4
27.01.2020, 21:51

Вы можете использовать команду 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] Если вы работаете на машине без lsns(, например. busybox ), вы можете извлечь эту информацию непосредственно из/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, чтобы также получить пространства имен для -потоков, но на любой умеренно -используемой машине это будет ужасно медленно.

3
27.01.2020, 21:51

Теги

Похожие вопросы