Existe-t-il une méthode sous Linux pour répertorier tous les espaces de noms sur l'hôte en cours d'exécution ? Je dois vérifier les espaces de noms pour des processus particuliers (par exemple, les processus s'exécutant dans le conteneur LXC et tous les autres processus sur l'hôte), puis en découvrir les groupes de contrôle.
Réponse acceptée :
Les utilitaires pour travailler avec les espaces de noms se sont améliorés depuis que cette question a été posée en 2013.
lsns
du package util-linux peut répertorier tous les différents types d'espaces de noms, dans divers formats utiles.
# 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
répertorie uniquement le PID le plus bas pour chaque processus - mais vous pouvez utiliser ce PID avec pgrep
si vous souhaitez lister tous les processus appartenant à un espace de noms.
par exemple. si j'exécute gitlab dans docker et que je souhaite trouver tous les processus en cours d'exécution dans cet espace de noms, je peux :
# lsns -t pid -o ns,pid,command | grep gitlab
4026532661 459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0
puis utilisez ce pid (459) avec 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
Je pourrais également utiliser l'identifiant de l'espace de noms (4026532661) avec ps
, par exemple :
ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]