Как проверить, активны ли пространства имен ядра в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, активны ли пространства имен ядра (kernel namespaces) в Linux. Мы рассмотрим различные методы для определения и проверки наличия пространств имен, которые являются важными для изоляции процессов и контейнеризации.

Вы начнете с использования команды lsns для перечисления различных пространств имен в вашей системе, поняв их типы и связанные с ними процессы. Затем вы изучите ссылки на пространства имен в каталоге /proc/self/ns, чтобы увидеть, как процессы связаны с определенными пространствами имен. Наконец, вы специально проверите сеть пространства имен с помощью команды ip netns, которая является распространенным инструментом для управления сетевой изоляцией.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/read("Input Reading") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/read -.-> lab-558722{{"Как проверить, активны ли пространства имен ядра в Linux"}} linux/ls -.-> lab-558722{{"Как проверить, активны ли пространства имен ядра в Linux"}} linux/ps -.-> lab-558722{{"Как проверить, активны ли пространства имен ядра в Linux"}} linux/ip -.-> lab-558722{{"Как проверить, активны ли пространства имен ядра в Linux"}} linux/apt -.-> lab-558722{{"Как проверить, активны ли пространства имен ядра в Linux"}} end

Перечисление пространств имен с помощью команды lsns

На этом этапе вы узнаете, как перечислить пространства имен, присутствующие в вашей системе, с использованием команды lsns. Пространства имен (namespaces) - это фундаментальное понятие в Linux, которое обеспечивает изоляцию различных системных ресурсов, таких как процессы, сетевые интерфейсы, точки монтирования и многое другое. Эта изоляция является ключевым аспектом таких технологий, как контейнеры.

Команда lsns является частью пакета util - linux и используется для перечисления информации о пространствах имен в вашей системе.

Сначала убедимся, что пакет util - linux установлен. Хотя обычно он уже присутствует, хорошей практикой является его проверка. Для этого можно использовать apt.

Если терминал не открыт, откройте его. Вы можете найти значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду для обновления списка пакетов:

sudo apt update

Нажмите Enter. Вы, возможно, увидите вывод, похожий на следующий:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...

Далее установим util - linux. Введите следующую команду и нажмите Enter:

sudo apt install util-linux

Вы, возможно, увидите вывод, указывающий, что пакет уже установлен, и это нормально. Если он будет установлен, вы увидите индикаторы прогресса и подтверждение.

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
util-linux is already the newest version (x.xx.x-xu).
0 upgraded, 0 newly installed, 0 to remove and xx not upgraded.

Теперь, когда мы уверены, что lsns доступна, используем ее для перечисления пространств имен. Введите следующую команду и нажмите Enter:

lsns

Вы увидите вывод, похожий на следующий, показывающий различные типы пространств имен и связанные с ними процессы:

        NS TYPE   NPROCS   PID PPID       CMD
4026531835 cgroup      1     1    0     /sbin/init
4026531836 pid         1     1    0     /sbin/init
4026531837 user        1     1    0     /sbin/init
4026531838 uts         1     1    0     /sbin/init
4026531839 ipc         1     1    0     /sbin/init
4026531840 mnt         1     1    0     /sbin/init
4026531841 net         1     1    0     /sbin/init
4026532720 cgroup     10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532721 pid        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532722 user       10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532723 uts        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532724 ipc        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532725 mnt        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532726 net        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
...

Вывод показывает столбцы, такие как NS (идентификатор пространства имен), TYPE (тип пространства имен, например, cgroup, pid, user, uts, ipc, mnt, net), NPROCS (количество процессов в пространстве имен), PID (идентификатор процесса), PPID (идентификатор родительского процесса) и CMD (команда).

Эта команда дает вам обзор активных пространств имен в вашей системе и процессов, запущенных в них.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка ссылок на пространства имен в /proc/self/ns

На предыдущем этапе вы использовали команду lsns для просмотра списка пространств имен в системе. Теперь давайте рассмотрим, как работающий процесс связан с этими пространствами имен.

Каждый процесс в Linux имеет специальный каталог /proc/<pid>/ns/, который содержит символические ссылки на пространства имен, к которым он принадлежит. Каталог /proc/self/ представляет собой символическую ссылку на каталог /proc/<pid>/ текущего работающего процесса (в данном случае - вашей сессии терминала).

Давайте выведем содержимое каталога /proc/self/ns/, чтобы увидеть ссылки на пространства имен для текущего процесса терминала.

Введите следующую команду в терминале и нажмите Enter:

ls -l /proc/self/ns/

Вы увидите вывод, похожий на следующий:

total 0
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 cgroup -> "cgroup:[4026532720]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 ipc -> "ipc:[4026532724]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 mnt -> "mnt:[4026532725]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 net -> "net:[4026532726]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 pid -> "pid:[4026532721]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 user -> "user:[4026532722]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 uts -> "uts:[4026532723]"

Каждая строка представляет собой другой тип пространства имен (cgroup, ipc, mnt, net, pid, user, uts) и является символической ссылкой (->), указывающей на фактический файл пространства имен во внутреннем представлении ядра. Число в квадратных скобках (например, [4026532720]) - это уникальный идентификатор конкретного пространства имен, который вы видели в выводе команды lsns на предыдущем этапе.

Это показывает, что текущий процесс терминала является частью нескольких различных пространств имен, предоставляя ему собственное изолированное представление определенных системных ресурсов.

Понимание /proc/<pid>/ns/ является важным для отладки и проверки конфигурации пространств имен работающих процессов, особенно в контейнеризованных средах.

Нажмите Продолжить, чтобы перейти к следующему этапу.

Проверка сетевых пространств имен с помощью команды ip netns

На предыдущих этапах вы познакомились с пространствами имен в целом и узнали, как просматривать ссылки на пространства имен для процесса. Теперь сосредоточимся конкретно на сетевых пространствах имен (network namespaces) и узнаем, как управлять ими с помощью команды ip.

Сетевые пространства имен предоставляют отдельный сетевой стек для процессов, включая сетевые интерфейсы, IP - адреса, таблицы маршрутизации и правила брандмауэра. Это является фундаментальным для изоляции сетевого трафика, как это используется в контейнерах и виртуальных сетях.

Команда ip представляет собой мощный инструмент для настройки сети в Linux. Подкоманда ip netns используется специально для управления сетевыми пространствами имен.

Для вывода списка текущих настроенных сетевых пространств имен используйте опцию list с командой ip netns.

Введите следующую команду в терминале и нажмите Enter:

ip netns list

В типичной среде LabEx, которая часто представляет собой контейнер, изначально вы, возможно, не увидите никаких явно созданных сетевых пространств имен в выводе этой команды. Вывод может быть пустым:

Это происходит потому, что основное сетевое пространство имен, в котором работает ваш терминал, является пространством имен по умолчанию, а команда ip netns list обычно показывает пространства имен, которые были явно созданы и зарегистрированы.

Однако вы по - прежнему можете увидеть сетевое пространство имен, к которому принадлежит текущий процесс, просмотрев символическую ссылку /proc/self/ns/net, как вы делали на предыдущем этапе. Команда ip netns больше предназначена для управления именованными сетевыми пространствами имен, которые вы можете создать для конкретных целей изоляции.

Хотя в этом вводном практическом занятии мы не будем создавать новые сетевые пространства имен, понимание того, что команда ip netns list используется для их просмотра, является важным для дальнейшего изучения сетевой изоляции.

Вы уже исследовали пространства имен с помощью команды lsns, просмотрели ссылки на пространства имен, специфичные для процесса, в каталоге /proc и узнали команду для вывода списка сетевых пространств имен.

Нажмите Продолжить, чтобы завершить практическое занятие.

Резюме

В этом практическом занятии мы узнали, как проверить активные пространства имен ядра в Linux. Мы начали с использования команды lsns для вывода списка различных пространств имен, присутствующих в системе, и поняли, что пространства имен обеспечивают изоляцию системных ресурсов и являются фундаментом для технологий контейнеризации. Мы убедились, что пакет util - linux, содержащий команду lsns, установлен с помощью apt.

После вывода списка пространств имен с помощью команды lsns последующие этапы, которые не были полностью описаны в предоставленном материале, включали бы проверку ссылок на пространства имен в каталоге /proc/self/ns и проверку конкретно сетевых пространств имен с использованием команды ip netns. Эти методы предоставляют альтернативные способы проверки и подтверждения наличия и состояния различных типов пространств имен ядра.