GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come elencare gli spazi dei nomi in Linux?

Esiste un metodo in Linux per elencare tutti gli spazi dei nomi sull'host in esecuzione? Devo controllare gli spazi dei nomi per processi particolari (ad es. i processi in esecuzione nel contenitore LXC e tutti gli altri processi sull'host) e quindi scoprire i cgroup di essi.

Risposta accettata:

Le utilità per lavorare con gli spazi dei nomi sono migliorate da quando è stata posta questa domanda nel 2013.

lsns dal pacchetto util-linux puoi elencare tutti i diversi tipi di spazi dei nomi, in vari formati utili.

# 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 elenca solo il PID più basso per ogni processo, ma puoi usare quel PID con pgrep se vuoi elencare tutti i processi appartenenti a uno spazio dei nomi.

per esempio. se eseguo gitlab nella finestra mobile e voglio trovare tutti i processi in esecuzione in quello spazio dei nomi, posso:

# lsns  -t pid -o ns,pid,command  | grep gitlab
  4026532661   459 /opt/gitlab/embedded/bin/redis-server 127.0.0.1:0

e, quindi usa quel pid (459) con 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

Potrei anche usare l'id dello spazio dei nomi (4026532661) con ps , ad esempio:

ps -o pidns,pid,cmd | awk '$1==4026532661'
[...output deleted...]

Linux
  1. Demistificare gli spazi dei nomi e i contenitori in Linux

  2. Come utilizzare il comando SS di Linux

  3. Come gestire ed elencare i servizi in Linux

  4. I 7 spazi dei nomi Linux più utilizzati

  5. Come elencare tutti i pacchetti installati in Linux

Come elencare i membri di un gruppo in Linux

Come elencare gli utenti in Linux

Come elencare i dischi su Linux

Come elencare i servizi su Linux

Come elencare solo le directory in Linux

Come elencare tutti i gruppi in Linux?