"Linux" является действительно просто ядром. Можно скомпилировать собственное, чтобы настроить его или использовать тот, предварительно скомпилированный распределением. Ядро выполняет компьютер и обеспечивает среду для приложений и инструментов. Таким образом, Вам нужны приложения, если Вы хотите на самом деле использовать ядро для чего-нибудь. Дистрибутивы, такие как Ubuntu и Fedora обеспечивают не только ядро, но также и приложения и инструменты. Так как Linux является реализацией UNIX, много традиционных утилит UNIX обеспечиваются.
Драйверы устройств распределяются с ядром. Возможно включать модули как часть ядра или позволить им стоять как отдельные файлы. Обычно они компилируются как модули - это примерно подобно тому, как Windows DLLs работает в понятии. Таким образом, у Вас нет огромного ядра в RAM с каждым драйвером устройства встроенным, и ядро может работать во множестве сред.
Ядро загружается в RAM на начальной загрузке и остается там. Приложения загружаются, когда Вы используете их и освобождаете их память, когда они завершают. Модули загружаются, когда они вставляются, который является обычно, когда аппаратные средства обнаруживаются, или некоторое средство операционной системы используется. Модули могут также быть удалены или разгружены.
Из 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.
Для пространств имен других типов возможно, существуют другие пути
Утилиты для работы с пространствами имен улучшились с тех пор, как этот вопрос был задан в 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...]
Пространство имен -Листер:
Вы можете использоватьlistns.py
Использование:./listns.py
илиpython2 listns.py
Исследование системы
В базовой установке/настройке по умолчанию Ubuntu 12.04 и выше предоставляют пространства имен для (Эти пространства имен отображаются для каждого процесса в системе. если вы выполняете как root)
Код Python
В приведенном ниже коде Python перечислены все нестандартные пространства имен в системе. Поток программы
Пример:
Пример вывода 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 -зеркало и статья; все заслуги принадлежат Ральфу Трежечаку