Come elencare gli spazi dei nomi in Linux?


24

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. Processi in esecuzione nel contenitore LXC e tutti gli altri processi sull'host) e quindi scoprire i loro cgroups.


Risposte:


12

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

lsnsdal 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).

lsnselenca solo il PID più basso per ciascun processo, ma è possibile utilizzare quel PID con pgrepse si desidera elencare tutti i processi appartenenti a uno spazio dei nomi.

ad esempio se sto eseguendo 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...]

3

Dalla pagina man ip per lo spazio dei nomi di rete

ip netns - processo di gestione dello spazio dei nomi di rete Uno spazio dei nomi di rete è logicamente un'altra copia dello stack di rete, con i propri percorsi, regole del firewall e dispositivi di rete.

   By  convention  a   named   network   namespace   is   an   object   at
   /var/run/netns/NAME  that can be opened.  The file descriptor resulting
   from opening /var/run/netns/NAME refers to the specified network names-
   pace.   Holding  that  file descriptor open keeps the network namespace
   alive.  The file descriptor can be used with the setns(2)  system  call
   to change the network namespace associated with a task.

   The  convention for network namespace aware applications is to look for
   global network configuration files first in  /etc/netns/NAME/  then  in
   /etc/.    For   example,   if   you   want   a   different  version  of
   /etc/resolv.conf for a network namespace used to isolate your  vpn  you
   would name it /etc/netns/myvpn/resolv.conf.

Per gli spazi dei nomi di altri tipi, forse ci sono altri modi


1

Nsutils

Nsutils può elencare lo spazio dei nomi usato con nslist, inoltre non richiede root per vedere gli spazi dei nomi degli utenti

Spazi dei nomi di rete :

Per lo spazio dei nomi di rete creato con ip netns, possono essere elencati conip netns list


1

Spazio dei nomi-Lister:

Puoi usare listns.py

Utilizzo: ./listns.pyopython2 listns.py

Esplorare il sistema

Nell'impostazione di base / predefinita Ubuntu 12.04 e versioni successive forniscono spazi dei nomi per (Questi spazi dei nomi vengono visualizzati per ogni processo nel sistema. Se si esegue come root)

  • ipc per oggetti IPC e code di messaggi POSIX
  • mnt per mountpoint di filesystem
  • rete per astrazione di rete (VRF)
  • pid per fornire uno spazio numero ID processo separato e isolato
  • uts per isolare due identificatori di sistema - nodename e domainname - che saranno usati da uname

Il codice Python

Il codice Python di seguito elenca tutti gli spazi dei nomi non predefiniti in un sistema. Il flusso del programma è

  • Ottieni gli spazi dei nomi di riferimento dal processo init (PID = 1). Presupposto: PID = 1 è assegnato agli spazi dei nomi predefiniti supportati dal sistema
  • Scorri / var / run / netns / e aggiungi le voci all'elenco
  • Scorri / proc / su tutti i PID e cerca le voci in / proc // ns / che non sono le stesse di PID = 1 e aggiungi quindi all'elenco
  • Stampa il risultato

Esempio:

Esempio di python2 listns.pyoutput ... è possibile reindirizzarlo con l'ordinamento o modificare lo script in base alle proprie esigenze

       PID  Namespace             Thread/Command
        --  net:[4026533172]      created by ip netns add qrouter-c33ffc14-dbc2-4730-b787-4747
        --  net:[4026533112]      created by ip netns add qrouter-5a691ed3-f6d3-4346-891a-3b59
       297  mnt:[4026531856]      kdevtmpfs 
      3429  net:[4026533050]**    dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
      3429  mnt:[4026533108]      dnsmasq --no-hosts --no-resolv --strict-order --bind-interfa
      3486  net:[4026533050]**    /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil
      3486  mnt:[4026533107]      /usr/bin/python /usr/bin/neutron-ns-metadata-proxy --pid_fil

Fonte: github-mirror e articolo ; tutto il merito a Ralf Trezeciak


Se questo è il tuo copione, dovresti dichiararlo. (E nelle altre tue risposte anche lo spamming di questo script).
Muru,

ho già collegato la fonte, ora ho aggiunto il nome dello sviluppatore, ho aggiornato anche le altre 2 risposte, ho pubblicato una risposta diversa a domande diverse anche se si collega lo stesso strumento, per favore fatemi sapere se devo aggiornare qualcosa o elimina una risposta.
Intika,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.