Команде find
требуются пути для поиска.
Если мы ничего не укажем,
он использует текущий каталог (.
) в качестве начальной точки.
Точно так же, если вы передадите путь, например / tmp
,
он будет считать его своей отправной точкой.
И поэтому результаты.
Если текущий каталог:
$ find
or
$ find .
output:
./file1
./file2
./file3
Если / tmp
каталог:
$ find /tmp
output:
/tmp/file4
/tmp/file5
Если abc
каталог в текущем каталоге:
$ find abc
output:
abc/file6
abc/file7
Если в текущем каталоге несколько каталогов:
$ find fu bar
output:
fu/file10
fu/file11
bar/file8
bar/file9
Когда я работал внутри контейнера, а не снаружи, я обнаружил, что трюк с -samefile, к сожалению, не сработал. Не уверен, почему, поскольку это был тот же индексный дескриптор. В любом случае, это сработало, на всякий случай, если это кому-нибудь пригодится:
netns=mynamespace
inode=$(ls -i /var/run/netns/$netns | cut -f1 -d" ")
pids=$(find -L /proc/[1-9]*/task/*/ns/net -inum $inode | cut -f3 -d"/" | uniq)
ps -p $pids
В вопросе конкретно упоминается Ubuntu 12.04, но я заметил, что в более новых дистрибутивах, таких как 16.04, есть команда, которая делает именно это: ip netns pids
Вы можете использоватьlistns.pyс:./listns.py
или python2 listns.py
(источник:github -зеркало и статья; все кредиты принадлежат Ральфу Трежечаку)
Можно сделать следующим образом: (заменить $namespace -name):
ip netns pids $namespace-name | xargs ps -o pid,command -p
Укажите netnslist
, в котором перечислены все сетевые пространства имен и все процессы, запущенные в каждом пространстве имен.: