Как перечислить пространства имен в Linux?

  1. "Linux" является действительно просто ядром. Можно скомпилировать собственное, чтобы настроить его или использовать тот, предварительно скомпилированный распределением. Ядро выполняет компьютер и обеспечивает среду для приложений и инструментов. Таким образом, Вам нужны приложения, если Вы хотите на самом деле использовать ядро для чего-нибудь. Дистрибутивы, такие как Ubuntu и Fedora обеспечивают не только ядро, но также и приложения и инструменты. Так как Linux является реализацией UNIX, много традиционных утилит UNIX обеспечиваются.

  2. Драйверы устройств распределяются с ядром. Возможно включать модули как часть ядра или позволить им стоять как отдельные файлы. Обычно они компилируются как модули - это примерно подобно тому, как Windows DLLs работает в понятии. Таким образом, у Вас нет огромного ядра в RAM с каждым драйвером устройства встроенным, и ядро может работать во множестве сред.

  3. Ядро загружается в RAM на начальной загрузке и остается там. Приложения загружаются, когда Вы используете их и освобождаете их память, когда они завершают. Модули загружаются, когда они вставляются, который является обычно, когда аппаратные средства обнаруживаются, или некоторое средство операционной системы используется. Модули могут также быть удалены или разгружены.

25
17.12.2013, 00:25
4 ответа

Из IP страницы справочника для сетевого пространства имен

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.

Для пространств имен других типов возможно, существуют другие пути

3
27.01.2020, 19:40

Утилиты для работы с пространствами имен улучшились с тех пор, как этот вопрос был задан в 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 в докере и хочу найти все процессы, работающие в этом пространстве имен, я могу:

# 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...]
34
27.01.2020, 19:40

Пространство имен -Листер:

Вы можете использоватьlistns.py

Использование:./listns.pyилиpython2 listns.py

Исследование системы

В базовой установке/настройке по умолчанию Ubuntu 12.04 и выше предоставляют пространства имен для (Эти пространства имен отображаются для каждого процесса в системе. если вы выполняете как root)

  • ipc для объектов IPC и очередей сообщений POSIX
  • mnt для точек монтирования файловой системы
  • сеть для сетевой абстракции (VRF)
  • pid для предоставления отдельного, изолированного пространства ID процесса
  • uts изолирует два системных идентификатора — имя узла и имя домена — для использования uname

Код Python

В приведенном ниже коде Python перечислены все нестандартные пространства имен в системе. Поток программы

  • Получить эталонные пространства имен из процесса инициализации (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 -зеркало и статья; все заслуги принадлежат Ральфу Трежечаку

2
27.01.2020, 19:40

Нсутилс

Nsutils может отображать используемые пространства имен с помощью nslist, также не требуется root для просмотра пространств имен пользователей

Сетевые пространства имен:

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

.
1
27.01.2020, 19:40

Теги

Похожие вопросы