Як перелічити простори імен в Linux?


24

Чи існує якийсь метод в Linux для переліку всіх просторів імен на запущеному хості? Мені потрібно перевірити простори імен для конкретних процесів (наприклад, процеси, запущені в LXC-контейнері та всі інші процеси на хості), а потім з'ясувати їх групи.


Відповіді:


12

Утиліти для роботи з просторами імен покращилися, оскільки це питання було задано у 2013 році.

lsnsз пакету util-linux можна перераховувати всі різні типи просторів імен у різних корисних форматах.

# 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відображається лише найнижчий PID для кожного процесу, але ви можете використовувати цей PID, pgrepякщо ви хочете перерахувати всі процеси, що належать до простору імен.

Наприклад, якщо я запускаю gitlab в docker і хочу знайти всі процеси, що працюють в цьому просторі імен, я можу:

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

а потім використовуйте цей pid (459) з 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

Я також міг би використовувати ідентифікатор простору імен (4026532661) ps, наприклад:

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

3

З ip man page для простору мережевих імен

ip netns - управління мережевим простором імен, мережевий простір імен логічно є іншою копією мережевого стеку, має власні маршрути, правила брандмауера та мережеві пристрої.

   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.

Для просторів імен інших типів, можливо, є й інші способи


1

Nsutils

Nsutils може перераховувати використовуваний простір імен за допомогою nslist, він також не вимагає root, щоб бачити простори імен користувачів

Мережеві простори імен :

Для мережевого простору імен, створених за допомогою ip netns, вони можуть бути переліченіip netns list


1

Простір імен-лістер:

Ви можете використовувати listns.py

Використання: ./listns.pyабоpython2 listns.py

Вивчення системи

У налаштуваннях базового / за замовчуванням Ubuntu 12.04 і новіші надайте простори імен для (Ці простори імен відображаються для кожного процесу в системі. Якщо ви виконуєте як root)

  • ipc для об’єктів IPC та черг повідомлень POSIX
  • mnt для точок кріплення файлової системи
  • мережа для абстрагування мережі (VRF)
  • pid, щоб забезпечити відокремлений, ізольований простір номер ідентифікатора процесу
  • uts для виділення двох системних ідентифікаторів - імені вузла та доменного імені - для використання уніме

Код пітона

Нижній код python містить список усіх просторів імен, які не використовуються за замовчуванням у системі. Потік програми є

  • Отримайте простори імен посилань із процесу init (PID = 1). Припущення: PID = 1 призначається просторам імен за замовчуванням, які підтримує система
  • Проведіть цикл / var / run / netns / і додайте записи до списку
  • Проведіть цикл / proc / над усіма PID та шукайте записи в / proc // ns /, які не такі, як для PID = 1, і додайте їх до списку
  • Роздрукуйте результат

Приклад:

Приклад python2 listns.pyвиводу ... Ви можете передати його сортуванням або відредагувати сценарій відповідно до ваших потреб

       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

Джерело: дзеркало github та article ; вся заслуга Ральфу Трезек’яку


Якщо це ваш сценарій, ви повинні вказати це. (І в інших ваших відповідях спамуйте цей сценарій також).
муру

Я вже пов’язав джерело, тепер я додав ім'я розробника, я також оновив 2 інші відповіді, я опублікував різні відповіді на різні запитання, навіть якщо він посилається на той самий інструмент, будь ласка, дайте мені знати, чи потрібно мені щось оновити або видалити відповідь.
intika
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.