GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cómo enumerar los espacios de nombres en Linux?

¿Hay algún método en Linux para enumerar todos los espacios de nombres en el host en ejecución? Necesito verificar los espacios de nombres para procesos particulares (por ejemplo, procesos que se ejecutan en el contenedor LXC y todos los demás procesos en el host) y luego encontrar cgroups de ellos.

Respuesta aceptada:

Las utilidades para trabajar con espacios de nombres han mejorado desde que se hizo esta pregunta en 2013.

lsns del paquete util-linux puede enumerar todos los diferentes tipos de espacios de nombres, en varios formatos útiles.

# 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 solo enumera el PID más bajo para cada proceso, pero puede usar ese PID con pgrep si desea enumerar todos los procesos que pertenecen a un espacio de nombres.

p.ej. si estoy ejecutando gitlab en docker y quiero encontrar todos los procesos que se ejecutan en ese espacio de nombres, puedo:

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

y luego use ese 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

También podría usar la identificación del espacio de nombres (4026532661) con ps , por ejemplo:

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

Linux
  1. Desmitificando espacios de nombres y contenedores en Linux

  2. Cómo usar el comando SS de Linux

  3. Cómo administrar y enumerar servicios en Linux

  4. Los 7 espacios de nombres de Linux más utilizados

  5. Cómo enumerar todos los paquetes instalados en Linux

Cómo enumerar los miembros de un grupo en Linux

Cómo listar usuarios en Linux

Cómo enumerar discos en Linux

Cómo enumerar servicios en Linux

Cómo enumerar solo directorios en Linux

¿Cómo enumerar todos los grupos en Linux?