Gibt es in Linux eine Methode, um alle Namespaces auf dem laufenden Host aufzulisten? Ich muss Namespaces für bestimmte Prozesse überprüfen (z. B. Prozesse, die im LXC-Container und alle anderen Prozesse auf dem Host ausgeführt werden) und dann Cgroups von ihnen herausfinden.
Akzeptierte Antwort:
Die Dienstprogramme für die Arbeit mit Namespaces haben sich verbessert, seit diese Frage 2013 gestellt wurde.
lsns
aus dem Paket util-linux kann alle verschiedenen Namensraumtypen in verschiedenen nützlichen Formaten auflisten.
# 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
listet nur die niedrigste PID für jeden Prozess auf – aber Sie können diese PID mit pgrep
verwenden wenn Sie alle Prozesse auflisten möchten, die zu einem Namensraum gehören.
z.B. Wenn ich gitlab im Docker ausführe und alle Prozesse finden möchte, die in diesem Namespace laufen, kann ich:
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
und verwenden Sie dann diese PID (459) mit 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
Ich könnte auch die Namespace-ID (4026532661) mit ps
verwenden , z. B.:
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]