Все главы учебника
Содержание учебника
Глава 02 / Linux

Ядро, процессы, пользователи и файловая система

10 мин чтенияКонтент v0.10.0

В Ubuntu одновременно работают ваша оболочка, редактор и служебные программы. Одна программа завершилась, но компьютер продолжил работу. Другой программе отказали в чтении файла, хотя файл существует. Эти ситуации объясняются устройством системы: программа не управляет всем компьютером только потому, что запущена.

В первом уроке вы проверили выпуск Ubuntu. Теперь свяжем четыре понятия: ядро распределяет ресурсы; процессы исполняют программы; пользователь определяет полномочия; файловая система даёт имена сохраняемым объектам. Эта карта пригодится при ошибках прав, нехватке места и поиске работающего приложения.

Что делает ядро

Ядро — часть системы, которая управляет памятью, процессорами, устройствами и доступом к ним. Программа просит ядро открыть файл или создать соединение через системный вызов. Она не обязана знать, как конкретный диск записывает блоки. Ядро проверяет запрос и возвращает результат либо ошибку.

Linux в узком смысле — ядро. Ubuntu — дистрибутив: ядро вместе с инструментами, пакетами, настройками и способом обновления. Поэтому на двух Linux-системах команда установки пакета может различаться. Bash, редактор и Python не являются самим ядром. Терминал отображает ввод и вывод, а оболочка разбирает команды, которые вы набираете.

Версию ядра показывает uname -r. Она не обязана совпадать с номером Ubuntu. WSL может использовать своё ядро при том же выпуске пользовательских программ. Запишите обе версии отдельно, когда описываете проблему: «Ubuntu 24.04» не полностью определяет окружение.

Программа и её исполнение

Файл программы можно хранить на диске, не запуская его. Когда программа исполняется, у неё появляется процесс: собственное состояние, память, идентификатор и открытые ресурсы. Несколько запусков одного файла создают несколько процессов. Идентификатор процесса, PID, позволяет обращаться к конкретному исполнению.

printf 'shell PID=%s\n' "$$"
ps -p "$$" -o pid,ppid,comm
ps -p 1 -o pid,comm

Здесь $$ подставляет PID оболочки. ps показывает наблюдаемое состояние, PPID — PID родителя. Числа у вас будут другими. Процесс может завершиться между измерениями; вывод ps является снимком, а не вечным списком. PID1 обычно имеет особую роль в запуске и управлении системой. В VM это часто systemd, в WSL устройство зависит от конфигурации.

Когда запускаете команду из shell, она часто становится дочерним процессом оболочки. Команда cd устроена иначе: она меняет текущий каталог самой оболочки. Если бы отдельная программа изменила только собственный каталог и закончилась, родитель остался бы на прежнем месте. Поэтому некоторые команды встроены в shell.

Пользователь и полномочия

У процесса есть идентификатор пользователя и группы. Это технические номера, по которым ядро проверяет многие разрешения. Имена помогают человеку читать эти номера. Посмотрите:

id
whoami
ls -ld "$HOME"

id покажет UID, основную группу и дополнительные группы. Домашний каталог хранит ваши файлы и настройки. Root — привилегированный пользователь, а не синоним любого администратора за клавиатурой. sudo запускает определённую команду с дополнительными полномочиями согласно политике системы. Мы подробно разберём его позже; обычные учебные файлы не требуют root.

Отказ доступа не всегда следует исправлять повышением прав. Например, вы могли указать чужой домашний каталог или создать файл из неправильного сеанса. Сначала выясните пользователя, объект и требуемое действие. Программа, запущенная через sudo, может оставить файлы, которые обычный пользователь потом не сможет менять.

Одно дерево имён

Linux представляет файловую систему как дерево с корнем /. Домашние каталоги часто находятся в /home, конфигурация — в /etc, изменяемые служебные данные — в /var, временные файлы — в /tmp. Это ориентиры, не разрешение редактировать любой найденный файл.

Отдельный диск или раздел можно присоединить в точку этого дерева. Такой процесс называется монтированием. Поэтому путь /home/user/project может находиться на другом устройстве, чем /etc. Каталог не является отдельным диском просто из-за своего имени. В /proc Linux показывает сведения ядра и процессов через специальную файловую систему; эти файлы не нужно понимать как обычные документы на диске.

ls /
ls /proc/1
df -h "$HOME"

Последняя команда показывает файловую систему, содержащую указанный путь, и доступное место. Название устройства и размеры зависят от VM/WSL. На macOS procfs этого вида отсутствует: проверку /proc выполняйте в Ubuntu. В Linux могут быть ограничения доступа к отдельным сведениям процессов — это также нормальная вариативность.

Самостоятельная лаборатория

Нарисуйте путь запуска ps: терминал получает строку, shell запускает инструмент, процесс обращается к ядру, вывод возвращается в терминал. Добавьте пользователя процесса и текущий каталог. Затем объясните, какие из четырёх вопросов помогут при «permission denied», а какие — при «no space left».

Критерии готовности: вы различаете программу и процесс, root каталога и пользователя root, версию ядра и выпуск Ubuntu. Вы можете назвать PID своей оболочки и не считаете /proc запасной папкой для проекта. Сохраните наблюдения рядом с заметкой первого урока.

Разбор

для доступа нужны текущие полномочия и права объекта; для места — файловая система нужного пути. Перезапуск приложения создаёт новое исполнение и обычно новый PID, но не меняет автоматически сохранённые файлы. В следующем уроке мы научимся точно выбирать эти файлы с помощью путей и кавычек.

Первичные источники: Linux man-pages: intro, procfs, Ubuntu: командная строка.