GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Comment répertorier les espaces de noms sous Linux ?

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...]

Linux
  1. Démystifier les espaces de noms et les conteneurs sous Linux

  2. Comment utiliser la commande Linux SS

  3. Comment gérer et répertorier les services sous Linux

  4. Les 7 espaces de noms Linux les plus utilisés

  5. Comment lister tous les packages installés sous Linux

Comment lister les membres d'un groupe sous Linux

Comment répertorier les utilisateurs sous Linux

Comment lister les disques sous Linux

Comment répertorier les services sous Linux

Comment lister uniquement les répertoires sous Linux

Comment lister tous les groupes sous Linux ?