GNU/Linux >> Znalost Linux >  >> Linux

Linux – Jak vypsat jmenné prostory v Linuxu?

Existuje v Linuxu nějaká metoda, jak vypsat všechny jmenné prostory na běžícím hostiteli? Potřebuji zkontrolovat jmenné prostory pro konkrétní procesy (např. procesy běžící v kontejneru LXC a všechny ostatní procesy na hostiteli) a pak zjistit jejich cgroups.

Přijatá odpověď:

Od položení této otázky v roce 2013 se zlepšily nástroje pro práci s jmennými prostory.

lsns z balíčku util-linux může vypsat všechny různé typy jmenných prostorů v různých užitečných formátech.

# 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 uvádí pouze nejnižší PID pro každý proces – ale toto PID můžete použít s pgrep pokud chcete vypsat všechny procesy patřící do jmenného prostoru.

např. pokud spouštím gitlab v dockeru a chci najít všechny procesy běžící v tomto jmenném prostoru, mohu:

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

a poté použijte tento pid (459) s 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

Mohl bych také použít ID jmenného prostoru (4026532661) s ps , např.:

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

Linux
  1. Demystifikace jmenných prostorů a kontejnerů v Linuxu

  2. Jak spravovat a vypisovat služby v Linuxu

  3. 7 nejpoužívanějších jmenných prostorů Linuxu

  1. Jak používat příkaz Linux SS

  2. Jak vypsat běžící procesy v Linuxu

  3. Jak vypsat všechny nainstalované balíčky v Linuxu

  1. Jak vypsat seznam uživatelů v Linuxu

  2. Jak vypsat skupiny v Linuxu

  3. Jak vypsat Cron Jobs v Linuxu