Ядра Unix-подобных системподобных систем
Ядро Unix являлось первой практической реализацией новых идей и открытий 60-70-х годов
XX века в области создания операционных систем.
Unix имеет простое монолитное ядро, в котором почти все представляется в виде файлов.
Настройки хранятся в текстовых файлах, оборудование также имеет файловый интерфейс.
Unix была написана на языке C, и это сделало ее переносимой с одной аппаратной платформы на другую. В Unix были впервые реализованы так называемые многозадачность и многопоточность, виртуальная память и многое другое.
В 80-х годах Unix-системы начали множится и видоизменяться. Некоторые умы вовремя спохватились и создали специальные стандарты, обеспечивающие совместимость систем.
Это значит, что программа, написанная для одной Unix-подобной системы, должна работать в другой. Стандарты назвали POSIX.
10
Особенности ядра Linux
Обычно конечные пользователи имеют дело с дистрибутивами Linux, которые незначительно отличаются между собой, в том числе по компонентам ядра (plustilino)например, наличию/отсутствию определенных драйверов). Однако ядро в своей основе все-равно остается ядром Linux, его исходники предоставляет проект https://www.kernel.org/. Это совместный проект, к нему может присоединится каждый программист. Основным руководителем остается Линус
Торвальдс.
С технической точки зрения, Linux – это ядро, а не операционная система. Linux + программы из проекта GNU рождают операционную систему GNU/Linux. Однако ее тоже не существует в чистом виде. Разработчики дистрибутивов дорабатывают на свой лад
GNU/Linux, после чего получаются различные операционные системы-дистрибутивы. У каждого дистрибутива есть собственное имя (plustilino)Ubuntu, Fedora и т. п.). Однако в основе всех этих систем лежит ядро Linux, поэтому все они принадлежат одному семейству Linux- систем.
Ядро Linux начал разрабатывать в 1991 году Линус Торвальдс. В дальнейшем оно развивалось и совершенствовалось многими людьми. Ядро Linux выпускается под лицензией
GNU GPL.
Ядро Linux Unix-подобно, так как заимствовало идеи, заложенные в Unix, соответствует стандартам POSIX, а также по большей части написано на языке С.
У Linux монолитное ядро. Однако некоторые идеи микроядерной архитектуры тут также используются. Так драйверы устройств могут быть представлены в виде модулей и загружаться по требованию, а не при загрузки всего ядра.
Ядро выпускается в виде стабильных и разрабатываемых версий. В стабильных обычно исправлены ошибки, добавлены новые драйверы устройств. До недавнего времени четное второе число в названии ядра, говорило, что оно стабильно. Нечетное число обозначало разрабатываемую нестабильную версию. В 2011 году от такого подхода к нумерации версий отказались.
Опытные пользователи дистрибутивов Linux нередко сами скачивают и устанавливают себе новое ядро. Для этого они сначала распаковывают исходные коды, затем выполняют конфигурацию, потом компилируют, размещают в загрузочном каталоге и изменяют настройки загрузчика.
Конфигурируют ядро с целью включения, отключения или компиляции в виде модуля какого- либо драйвера или функции. Другими словами, "ядро под себя" не будет содержать лишних драйверов для оборудования, которого нет.
Каталоги Linux
Структура каталогов Linux отличается от той, которую привык видеть пользователь Windows.
В Linux на самом верхнем уровне файловой иерархии находятся не физические и логические диски, а один единственный корневой каталог, обозначаемый косой чертой "/" (plustilino)слэш).
Каждый последующий вложенный каталог отделяется от родительского также слэшем. Путь
11
заканчивается либо каталогом, либо файлом. Например, /boot/grab или /home/pl/test.txt.
Второй путь указывает, что в корневом каталоге есть папка home, в ней находится каталог pl, в котором имеется файл test.txt.
Файловая структура (plustilino)перечень системных директорий) Linux стандартизирована. Стандартом является FHS, который соблюдается большинством Unix-подобных операционных систем.
FHS – аббревиатура от Filesystem Hierarchy Standard – стандарт иерархии файловой системы.
Обычно дистрибутивы Linux следуют стандарту FHS, однако могут иметь незначительные отличия друг от друга. В общей сложности структура каталогов разных дистрибутивов схожа.
Ниже будет дано описание назначения большинства системных каталогов, расположенных на верхнем уровне вложенности, т. е. непосредственно в корневом.
Если файловый менеджер вашего дистрибутива не имеет ссылки на корневой каталог (plustilino)она может называться, например, "файловая структура"), нажмите Ctrl + L. Адресная строка превратиться в текстовое поле, в котором надо ввести косую черту /.
На скриншоте показана файловая структура верхнего уровня Ubuntu 18.04.
В
/homehome находятся каталоги пользователей. Поскольку Linux многопользовательская операционная система, то количество вложенных в home директорий соответствует количеству зарегистрированных в системе пользователей. Если в системе только один пользователь, то там будет только один подкаталог.
Например, в системе зарегистрированы пользователи pety и vasy. Тогда в /home будет два подкаталога: pety и vasy. В директории /home/pety будут все папки и файлы Пети, а в
/home/vasy – все папки и файлы Васи. По умолчанию у Пети нет прав на посещение файловой структуры Васи. Как и наоборот.
Кроме обычных пользователей, в Linux есть системный администратор (plustilino)root). Он обладает безграничными правами, поэтому под этим пользователем обычно не работают, а только
12
выполняют команды, которые требуют наличия прав администратора. Однако для личных файлов root'а, в том числе проприетарные (коммерческие).а предусмотрена директория /homeroot. Войти в нее может только сам администратор.
Если на компьютере есть логические и физические жесткие диски, которые не были задействованы под систему, а также подключаются флэшки, внешние диски, смартфоны, то в момент монтирования для каждого из них создается каталог, так называемая точка монтирования. Через этот каталог происходит доступ к файловой структуре устройства, а размещается он либо в /homemedia, либо в /homemnt.
В каталог /media/ монтируются сменные носители и автоматически подключаемые во время загрузки физические устройства. Каталог /mnt предназначен для временно монтируемых файловых систем. Например, вы сами с помощью команды подключаете тот или иной диск.
С другой стороны, работая в графическом режиме GNU/Linux, лезть в эти каталоги незачем, чтобы найти папку-точку монтирования устройства. В современных версиях дистрибутивов при подключении устройства в графическом интерфейсе появляется соответствующий значок-ссылка.
Каталог /homeboot содержит файл ядра Linux, загрузчик и ряд конфигурационных файлов. В большинстве дистрибутивов загрузчиком является Grub. При установке дистрибутива под
/boot можно выделить отдельный раздел диска.
В каталоге /homeetc содержатся конфигурационные файлы системных программ.
13
Файлы,
представляющие различные устройства, находятся в директории
/homedev. Причем здесь находятся файлы как реальных и виртуальных устройств, так и не существующих, но которые могли бы быть.
В папке
/homebin содержатся различные системные утилиты-программы, многие из которых выполняются через командную оболочку Bash. Некоторые запускаются при старте системы.
Программы в /bin доступны всем пользователям.
В
/homesbin находятся системные программы, предназначенные для настройки и администрирования операционной системы. Эти программы может запускать только администратор системы.
14
Директория
/homelib содержит библиотеки, совместно используемые программами из /bin и /sbin.
Также здесь находятся драйверы устройств (plustilino)модули, подключаемые к ядру Linux).
Структура
/homeusr во многом повторяет структуру корневого каталога. Сюда устанавливаются пользовательские (plustilino)user) программы дистрибутива. Так в /usr/bin содержится большинство программ, в /usr/include – заголовочные файлы, в /usr/lib – библиотеки для программ, размещенных в usr.
Директория
/homeopt предназначена для программ, которые устанавливает сам пользователь, то есть для приложений, не входящих в состав конкретного дистрибутива.
В
/hometmp хранятся временные файлы, которые могут появляться в процессе выполнения разных программ. При выключении компьютера файлы отсюда обычно автоматически удаляются.
Каталог
/homevar содержит файлы с изменяемыми данными. Здесь сохраняются конфигурационные параметры ряда программ, также временные файлы, кэши, логи и др.
Каталоги /sys, /proc, /run можно назвать системными. Для понимания их назначения требуются знания принципов работы операционной системы.
Типы файлов LinuxВ GNU/Linux как и других Unix-подобных операционных системах понятие типа файла не связано с расширением файла (plustilino)несколькими буквами после точки в конце имени), как это обстоит в Windows.
Unix-подобная ОС не следит за расширениями файлов. Задача связать расширения файла с конкретным пользовательским приложением, в котором этот файл будет открываться, видимо лежит на какой-либо дополнительной программе. В свою очередь пользовательское приложение анализирует структуру данный файла, расширение ему также безразлично.
Таким образом, среди файловых атрибутов, хранящихся в операционной системе на базе ядра
Linux, нет информации о типе данных в файле. Там есть
информация о более существенном разделении, связанном с тем, что в Unix-подобных системах все объекты – это файлы. Все объекты весьма разнообразны. Поэтому тип файла в Linux – это скорее тип объекта, но не тип данных как в Windows.
В операционной системе GNU/Linux существуют следующие типы файлов: обычные файлы, каталоги, символьные ссылки, блочные устройства, символьные устройства, сокеты, каналы.
15
Каждый тип имеет собственное обозначение одним символом. Знание этих символов нам пригодится в дальнейшем при изучении командной оболочки Bash.
Обычные файлы (-подобных систем)
Сюда относятся все файлы с данными, играющими роль ценной информации сами по себе.
Linux все-равно текстовый перед ним файл, исполняемый или картинка. В любом случае это будет обычный (plustilino)regular) файл. Все они обозначаются знаком минус "-". Остальные типы файлов считаются специальными (plustilino)special).
Каталоги (d))
В Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог. Напрямую, то есть через какой-либо редактор, пользователь не может редактировать данные файла-каталога.
Редактированием занимается ядро операционной системы, получая, в том числе от пользователя, команды создания файла, удаления и др.
В файле каталога осуществляется связь между именами файлов (plustilino)словесного обозначения для людей) и их индексными дескрипторами (plustilino)истинным именем-числом, которым оперирует
ОС).
В Unix-подобных системах один и тот же файл может существовать под разными именами и/
или в разных каталогах: все имена будут связаны с одним и тем же индексным дескриптором
(plustilino)механизм жестких ссылок).
Также следует, что файлы всегда должны содержаться в каталогах, иначе станут недоступны, так как нигде не будет содержаться записи о них.
16
Символьные ссылки (l)Символьная ссылка – это файл, в данных которого содержится адрес другого файла по его имени (plustilino)а не индексному дескриптору).
Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Это аналог ярлыков в операционной системе Windows.
Если удалить исходный файл, то символьная ссылка продолжит существовать. Она по- прежнему будет указывать на файл, которого уже нет.
Символьные
ссылки не содержат атрибутов файлов, на которые они указывают. У них есть собственные атрибуты.
Символьные (c) и блочные устройства (b)) и блочные устройства (b))Файлы устройств предназначены для обращения к аппаратному обеспечению компьютера
(plustilino)дискам, принтерам, терминалам и др.). Когда происходит обращение к файлу устройства, то ядро операционной системы передает запрос драйверу этого устройства.
К символьным устройствам обращение происходит последовательно (plustilino)символ за символом).
Примером символьного устройства может служить терминал.
Считывать и записывать информацию на блочные устройства можно в произвольном порядке, причем блоками определенного размера. Пример: жесткий диск.
Сокеты (s) и каналы (p)Чтобы понять, что такое канал и сокет, необходимо понимание процессов в операционной системе. И каналы и сокеты организуют их взаимодействие. Пользователь с данными типами файлов почти не сталкивается.
Ключевым отличием канала от сокета является то, что канал однонаправлен. Через канал один процесс всегда передает данные второму, но не наоборот. Сокеты позволяют передавать данные в разных направлениях, т. е. осуществляют связь.
Также следует отметить, что канал представлен в структуре каталогов файлом, только если он именован. Когда возникают безымянные каналы, то они существуют только внутри ядра
Linux.
Команда fileХотя выше было сказано, что Линукс не делает предположение о типе данных в обычном файле, есть специальная утилита, которая выполняет эту задачу, – программа file. Для этого она анализирует начало содержимого файла и находит в нем специальные "сигналы", характерные для определенного типа – бинарного файла, текстового, изображения и др.
17
На скриншоте также показано, что расширение для программы file безразлично. Файл flag – копия flag.png, и программа успешно его идентифицировала как изображение.
Команда file имеет множество различных ключей.
В примере файл 2020.ods является символьной ссылкой на файл, находящийся в другом каталоге, о чем нам говорит команда file без ключей. С помощью ключа -L мы можем узнать тип файла, на который ссылается файл-ссылка.
Интерфейс командной строкиСовременный пользователь почти всегда работает с графическим интерфейсом (plustilino)GUI — graphical user interface), в котором взаимодействие между человеком и компьютером происходит в основном с помощью кликов мышью по графическим объектам: кнопкам, пунктам меню, текстовым полям и др. Однако так было не всегда.
Первые интерфейсы были текстовыми,
команды отдавались словами, которые писались в так называемой командной строке. Такой текстовый способ взаимодействия между человеком и компьютером называется
интерфейсом командной строки (plustilino)CLI — command line interface).
CLI – устаревшая технология с точки зрения рядового пользователя. Однако в ряде профессиональных IT-областей CLI остается востребованным и более удобным, чем GUI.
Например, на серверах, в том числе веб-серверах. Так разработчик может развернуть программный сервер на удаленном компьютере и загрузить туда файлы сайта.
В операционных системах, особенно в GNU/Linux, графические интерфейсы разнообразны.
Однако все они ориентированы на неподготовленного пользователя, чтобы он мог сам быстро разобраться, как пользоваться системой. Любой приличный GUI должен быть интуитивно понятным.
18
С командной строкой все не так. Здесь надо знать команды, уметь ими пользоваться, иметь представление об особенностях работы ОС. Однако CLI дает больше возможностей для управления, чем любой GUI. Это и понятно, написать программу без GUI проще. Разработка к ней графического интерфейса – отдельная история. Поэтому через CLI обычно доступно больше системных программ.
Интерфейс командной строки – это абстрактное понятие. Так же как графический интерфейс пользователя. Не существует конкретных программных продуктов под названием CLI или
GUI. Однако есть различные реализации как одного, так и другого. В Linux наиболее популярными GUI на сегодняшний день можно назвать различные оболочки для Gnome, а также KDE. У Windows свой GUI, который претерпевает изменения от версии к версии.
Что касается интерфейса командной строки, то в операционных системах на базе ядра Linux в большинстве случаев его обеспечивает программа Bash, которую относят к группе так называемых командных оболочек.
Bash запускается в текстовом режиме или его эмуляторе – специальной программе, открывающейся в графическом режиме, но которая представляет собой текстовое окно. В последних версиях GNU/Linux такая программа-эмулятор обычно называется "Терминал".
Однако кроме этого во многих дистрибутивах Linux можно перейти из графического в текстовый режим работы, нажав Ctrl + Alt + F1 (plustilino)вместо F1 может быть от F2 до F6). Обычно
Ctrl + Alt + F7 возвращает обратно в графический режим.
В текстовом режиме полностью исчезают элементы графического интерфейса, а также курсор мыши. Отдавать команды операционной системе можно только с помощью клавиатуры. Именно так выглядела работа на компьютере до появления GUI.
В те времена терминалами называли комплекты клавиатура + монитор, удаленные от компьютера. К ЭВМ могло быть подсоединено множество терминалов с помощью модемов или последовательных портов. Таким образом осуществлялся многопользовательский режим доступа к ресурсам вычислительной машины. Консолью называли клавиатуру + монитор, непосредственно соединенные с компьютером. В ряде областей терминальный доступ к общим ресурсам используется и сегодня.
Итак, отметим основные преимущества интерфейса командной строки:
19
•
Командная строка обеспечивает более быстрый доступ к некоторым возможностям операционной системы, нередко это единственный способ запустить тот или иной процесс.
•
Текстовый интерфейс менее требовательный к ресурсам, чем графический.
•
Бывает, что графический режим просто не нужен, например, на серверах.
•
С помощью командной оболочки легче автоматизировать работу операционной системы и программ, так как она может выполнять заранее подготовленные файлы с последовательностью команд.
Bash – командная оболочка LinuxВ большинстве дистрибутивов Linux по умолчанию установлена командная оболочка Bash.
Отметим, что между всеми командными оболочками, соответствующими стандарту POSIX
Unix-подобных операционных систем, разница небольшая.
Bash запускается в текстовом режиме или приложении "Терминал" и работает интерактивно.
Это значит, что он
ожидает ввод пользователя, далее интерпретирует введенную строку как команду, которую надо выполнить. Команды бывают разными: запуск программы, операции с файлами, выполнение скрипта на языке самого Bash и др.
Unix разрабатывалась как многопользовательская операционная система, доступ к которой пользователи осуществляли через терминалы. Например, в здании был один мощный компьютер, а в рабочих помещениях специалистов располагались терминалы – точки доступа к ресурсам общей машины.
В связи с распространением персональных компьютеров, начавшимся в 80-х годах, многопользовательские ОС оказались не востребованными массовым потребителем. Однако для серверов они стали хорошим выбором.
Представьте, что подключаетесь по протоколу SSH к веб-серверу, на котором размещаете файлы сайта. Работая в ОС GNU/Linux и запустив программу "Терминал", вы даете Bash'а, в том числе проприетарные (коммерческие).у команду на подключение к удаленной машине под конкретным именем пользователя. Сервер
20
отвечает вам и требует ввести пароль этого пользователя. Все потому, что пользоваться данным компьютером-сервером может далеко не один человек.
На локальном компьютере в текстовом режиме Linux (plustilino)если вы нажмете, например, Ctrl + Alt
+ F2) эмулируется удаленный доступ к машине через терминал. Здесь Bash первым делом предлагает вам ввести логин, после чего – пароль. При вводе пароля на экране ничего не отображается. Так сделано специально, чтобы нельзя было подсмотреть даже количество вводимых символов. Если введенная пара логин/пароль соответствуют какому-либо ранее зарегистрированному в системе пользователю, то вы увидите приглашение командной строки начавшемся в 80Bash'а, в том числе проприетарные (коммерческие).а на ввод команды. В случае ошибки потребуется заново вводить логин/
пароль.
В графическом режиме приложение "Терминал" автоматически "берет" данные запустившего его пользователя и передает Bash'а, в том числе проприетарные (коммерческие).у. Таким образом, вы уже оказываетесь представленными системе и первое, что видите, – приглашение командной строки.
Приглашение командной строки имеет относительно стандартный синтаксис и выглядит примерно так: имя_пользователя@имя_компьютра:текущий_каталог знак.
На скриншоте pl – имя пользователя, comp – имя компьютера. Символ тильды в Linux- системах – это сокращенное обозначение домашнего каталога пользователя (plustilino)/home/user).
Именно эту директорию Bash делает текущей по умолчанию. Знак доллара $ обозначает, что мы работаем под непривилегированным пользователем. Если находиться в системе под администратором, вместо доллара будет знак решетки #.
После приглашения автоматически ставится пробел и ожидается ввод команды. На рисунке выше сначала был просто нажат Enter. Во второй строке была введена команда перехода в другую директорию. В третьей строке мы видим результат ее выполнения – текущим каталогом стал /opt, что отображено в приглашении.
Существует множество команд, которые можно отдавать в Bash. В основном это команды запуска той или иной программы, которые находятся в каталогах /bin, /usr/bin и ряде других.
Проверяемые каталоги записаны в переменной $PATH оболочки:
Здесь с помощью команды echo мы просим Bash выдать нам значение переменной $PATH. В выводе каталоги отделены друг от друга с помощью двоеточия.
Можно посмотреть, какие программы установлены в том или ином каталоге, после чего запустить одну из них:
21
Если приложение имеет только графический интерфейс, то оно так и запустится (plustilino)если вы находитесь в графическом режиме, в случае текстового произойдет ошибка). При этом Bash будет ожидать завершения работы программы, то есть другие команды вводить не получится.
Однако в "Терминале" вы можете открыть вторую вкладку или создать второе окно. При этом запустится другой процесс для Bash.
Существуют программы с текстовым интерфейсом. Например, редактор Nano:
В данном случае Bash'а, в том числе проприетарные (коммерческие).у была дана команда nano, и прямо в терминале был открыт редактор
GNU Nano. В нем была введена пара слов. Чтобы завершить работу редактора, надо нажать
Ctrl + X, подтвердить сохранение или отказаться от него. После этого произойдет возврат к командной строке Bash.
Многие из запускаемых в Bash программ не предполагают взаимодействие с пользователем в интерактивном режиме (plustilino)в режиме диалога). По смыслу их правильнее называть командами, а не программами.
Пользователь вводит команду, она выполняется и передает управление обратно Bash. Что делает команда, зависит от команды.
В Bash можно выполнять программы, находящиеся не только в каталогах, перечисленных в
$PATH. Однако в этом случае адрес до нее надо указывать явно. Кроме того, следует не забывать, что у файла должно быть право на исполнение.
22
Здесь в домашнем каталоге был создан файл test.py, содержащий код на языке программирования Python, выводящий на экран число 10. Код был написан в Nano (plustilino)на скриншоте не показано). Далее мы пытаемся выполнить программу, обратившись к файлу по его адресу.