Existuje v Linuxu nějaká metoda, jak vypsat všechny jmenné prostory na běžícím hostiteli? Potřebuji zkontrolovat jmenné prostory pro konkrétní procesy (např. procesy běžící v kontejneru LXC a všechny ostatní procesy na hostiteli) a pak zjistit jejich cgroups.
Přijatá odpověď:
Od položení této otázky v roce 2013 se zlepšily nástroje pro práci s jmennými prostory.
lsns
z balíčku util-linux může vypsat všechny různé typy jmenných prostorů v různých užitečných formátech.
# 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
uvádí pouze nejnižší PID pro každý proces – ale toto PID můžete použít s pgrep
pokud chcete vypsat všechny procesy patřící do jmenného prostoru.
např. pokud spouštím gitlab v dockeru a chci najít všechny procesy běžící v tomto jmenném prostoru, mohu:
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
a poté použijte tento pid (459) s 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
Mohl bych také použít ID jmenného prostoru (4026532661) s ps
, např.:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]