Tw-city.info

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как устроен linux

«Linux» это не просто Linux: 8 частей программного обеспечения, из которых состоят системы Linux

Дистрибутивы Linux не являются только ядром Linux. Все они содержат другие важные программы, такие как начальный загрузчик Grub, командная оболочка Bash, утилиты командной оболочки GNU, демоны, графический сервер X.org, среда рабочего стола и многое другое.

Все эти различные программы разрабатываются разными, независимыми группами разработчиков. Они объединены при помощи дистрибутивов Linux, где они собираются одна поверх другой с тем, чтобы создать полную операционную систему «Linux». Это отличие от системы Windows, которая разработана исключительно компанией Microsoft.

Начальный загрузчик

Когда вы включаете компьютер, прошивка BIOS или UEFI вашего компьютера загружает программное обеспечение с загрузочного устройства. Первая программа, которая загружает в любой операционной системе, является начальным загрузчиком. В Linux, это, как правило, начальный загрузчик Grub.

Если у вас установлено несколько операционных систем, то Grub предлагает меню, позволяющее выбирать одну из них — например, если у вас установлен Linux в конфигурации с двойной загрузкой, вы можете, когда происходит загрузка, выбрать либо Linux или Windows.

Если у вас установлена только одна операционная система, то Grub может загрузить систему Linux практически мгновенно, но он все еще продолжает обработку. Grub обрабатывает процесс непосредственной загрузки Linux, задает параметров командной строки и для того, чтобы устранить неполадки, позволяет вам загрузить Linux другими способами. Без начального загрузчика, дистрибутив просто не будет загружаться.

Ядро Linux

Определенная часть программного обеспечения, которое загружается с помощью Grub, является ядром Linux. Это та часть системы, которая на самом деле называется «Linux». Ядро является центральной частью системы. Он управляет вашим процессором, памятью и устройствами ввода/вывода, такими как клавиатуры, мыши и дисплеи. Поскольку ядро обращается непосредственно к оборудованию, многие драйверы оборудования являются частью ядра Linux и запускаются внутри ядра.

Все другое программное обеспечение работает выше ядра. Ядро является частью программного обеспечения, которое лежит на самом нижнем уровне и взаимодействует с аппаратным обеспечением. Он представляет собой слой абстракции над оборудованием, который имеет дело со всеми аппаратными причудами, тогда как остальная часть системы может почти совсем с ними не иметь дело. В Windows используется ядро Windows NT, а в Linux используется ядро Linux.

Демоны

Демоны, по существу, являются фоновыми процессами. Они часто запускаются как часть процесса начальной загрузки, поэтому они являются тем, что загружается после ядра и прежде, чем вы видите свой графический экран входа в систему. В Windows такие процессы называются «сервисами», в то время как в UNIX-подобных системах они называются «демонами» (прим.пер.: более точно — «даемонами» от английского « daemons»).

Например, crond, который управляет выплнением запланированных задач, является демоном — буква d в конце означает «демон». syslogd является еще одним демоном, который традиционно управляет вашим системным журналом. Серверы, такие как сервер sshd, работают как демоны фонового режима. Это гарантирует, что они всегда работают и прослушивают дистанционные подключения.

Демоны, по существу, являются всего лишь фоновыми процессами, но они являются процессами системного уровня, работу которых вы вообще не замечаете.

Командная оболочка

В большинстве систем Linux по умолчанию используется командная оболочка Bash. Командная оболочка обеспечивает интерфейс командного процессора, что позволяет управлять вашим компьютером с помощью ввода команд в текстовом режиме. В командной оболочке можно также запускать скрипты командного процессора, которые представляют собой набор команд и операций, выполняемых в тем порядке, который указан в скрипте.

Даже если вы пользуетесь только графическим рабочим столом, командные оболочки работают и используются в фоновом режиме. Когда вы откройте окно терминала, вы видите приглашение к работе, выдаваемое командной оболочкой.

Утилиты командной оболочки

В командной оболочке предоставляется некоторое количество основных встроенных команд, но большинство из команд командной оболочки, которыми пользуются пользователи Linux, не встроены в командную оболочку. Например, такие важные команды, как команда cp, используемая для копирования файлов, команда ls, используемая для получения списка файлов в каталоге, и команда rm, используемая для удаления файлов, являются частью пакета базовых утилит GNU Core Utilities.

Вот почему много споров относительно того, должен ли Linux действительно назваться «Linux» или «GNU/Linux». Критики названия «Linux» правильно отмечают, что большая часть программного обеспечения идет в составе типичных систем Linux, что часто не признается. Критики названия «GNU/Linux» правильно отмечают, что в типичную систему Linux также входит другое важное программное обеспечение, которое нельзя охватить названием «GNU/Linux».

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

Графический сервер X.org

Часть Linux, представляющая собой графический рабочий стол, не является частью ядра Linux. Она реализуется с помощью пакете специального вида, известного как «Сервер X», поскольку он реализует «Оконную систему X», которая возникла много лет назад.

В настоящее время наиболее популярным сервером X или графическим сервером является сервер X.org. Когда вы видите окно графического входа или появляется рабочий стол, то это свое волшебство проявляет сервер X.org. Работа всей графической системы осуществляется под управлением сервера X.org, который взаимодействует с вашей видеокарты, монитором, мышью и другими устройствами. X.org не предоставляет полную окружение рабочего стола, это просто графическая система, поверх которой могут быть созданы окружение и инструментарий рабочего стола.

Среда рабочего стола

То, что вы действительно используете на рабочем столе Linux, представляет собой рабочую среду. Например, в состав системы Ubuntu входит среда рабочего стола Unity, в состав системы Fedora входит GNOME, в Kubuntu входит KDE, в в состав системы Mint обычно входит Cinnamon or MATE. Эти окружения рабочего стола обеспечивают все, что вы видите — фон рабочего стола, панели, заголовки и границы окон.

Они также обычно включают в себя свои собственные утилиты, которые встроены для того, чтобы окружение рабочего стола выглядело как единое целое. Например, в GNOME и Unity входит файловый менеджер Nautilus, разработанный в рамках GNOME, а KDE включает в себя файловый менеджер Dolphin, разработанный в рамках проекта KDE.

Программы рабочего стола

Не каждая программа, работающая на рабочем столе, является частью среды рабочего стола. Например, программы Firefox и Chrome работают независимо от среды рабочего стола. Они просто являются программами, которые могут нормально работать поверх любой среды рабочего стола. Либо пакет OpenOffice.org, который является еще одним набор программ, которые не привязаны к конкретной среде рабочего стола.

Вы можете запускать любую программу Linux, предназначенную для рабочего стола, в любой графической среде, но те программы, которые предназначены для определенной рабочей среды, могут выглядеть не к месту или могут мешать другим процессам. Например, если вы пытаетесь запустить файловый менеджер Nautilus, предназначенный для GNOME, в среде KDE, он будет выглядеть не к месту, потребует от установки разнообразных библиотек GNOME, и, вероятно, когда вы откроете его, будет в фоновом режиме запускать процессы рабочего стола GNOME. Но он будет работать и его можно будет использовать.

Последний шаг остается за дистрибутивами Linux. Они берут все это программное обеспечение, объединяют его так, чтобы оно хорошо работало совместно, и добавляют свои собственные необходимые утилиты. Например, для дистрибутивов создаются их собственные инсталляторы операционной системы с тем, чтобы вы действительно смоли установить Linux, а также менеджеры пакетов для установки дополнительного программного обеспечения и поддержки установленного программного обеспечения в обновленном виде.

Как устроен Линукс

Тут я давеча поставил, слегка настроил и даже успел немножечко поэксплуатировать современный дистрибутив Линукса. Остался в полном восторге. Поэтому на волне энтузязизма решил немножечко поэпистолярничать на тему свободного ПО. Из своей врождённой вредности.

В соседней теме на этом форуме, да и не только здесь, я заметил, что как только заходит разговор о никсах, тут же откуда ни возьмись набегают «знатоки» и вяло_любопытствующие, с критическими и не очень компетентными замечаниями по поводу «хужести» этой группы осей по сравнению с продукцией Майкрософта. Я оставляю за скобками свою неприязнь к W*, но ради справедливости скажу, что сравнивать их будет совершенно не правильно и не нужно. Это очень неудачная мысль — сравнивать яблоки с грибами. И положения вещей это не изменит. Виндовс еще долго будет лидировать на рынке ПО. Но к качеству Линуксов это не имеет никакого отношения.

Если у кого действительно есть желание разрешить свои сомнения, для этого нужно, как минимум, дать себе труд разобраться, что из себя представляют обе группы осей. С Виндовсом, на первый взгляд, всё просто. Существует масса бумажной и оцифрованной литературы на эту тему, которая даёт представление, что и как в нём следует делать. Но что Виндовс из себя представляет внутри, знают только его разработчики. Это закрытый продукт.

Главный упрёк в сторону Линуксов — их сложность, и как следствие сложность их освоения. Но это несправедливый упрёк, поскольку блок-схемы, по которым строятся все линуксы устроена просто, логично, понятно и похоже. А сложность сводится к необходимости читать документацию и думать своей головой, а когда её возможностей нехватает, — к умению правильно задавать вопросы на форумах. Тогда все проблемы разруливаются лёгким движением руки.

К любому делу нужен правильный подход. Танцевать надо от печки. В случае Линукса такой печкой явяется его файловая система. Беглый взгляд на неё пользователя, привыкшего к тому, что он привык видеть в Проводнике, приводит к испугу. Нет абсолютно ничего знакомого, и поэтому совершенно непонятно, что с ней делать. На самом деле разобраться в её устройстве совершенно не сложно.

Читать еще:  Основные функции операционной системы linux

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

И никаких дисков, флоппиков и тому подобных флешек. Это всё устройства, и специально для них есть файлы устройств. А для получения к ним доступа есть технология монтирования. Но об этом чуть позднее. Есть еще такие типы файлов, как символические и жёсткие ссылки, аналоги ярлыков в Виндовсе, а также сокеты и каналы, отвечающие за взаимодействие процессов. С двумя последними обычный пользователь практически никогда не сталкивается.

Поскольку в Линуксовой файловой системе (текущая версия — ext4), нет ничего, кроме файлов, она имеет единую древовидную структуру. Точка, из которой растёт дерево, называется корневым каталогом. И именуется во всех Линуксах одинково — одинарным слешем /. Содержимое корневого каталога в Линуксах разной сборки примерно одинаково, и различается только в некоторых деталях. Вот наиболее общий список каталогов:
bin — здесь находятся критичные для работы системы программы.
boot — здесь хранятся файлы, отвечающие за первоначальную загрузку, и образ ядра системы.
dev — те самые файлы устройств.
etc — если хотим чего настроить ручками, идём сюда. Все конфиги лежат здесь.
home — домашний каталог. Данные пользователей, зарегистрированных в системе лежат здесь, в каталогах с именами, под которыми они зарегистрированы.
lib — библиотеки, необходимые для функционирования установленных программ.
lost+found — что то вроде мусорника «потерянных» файлов, помеченных как несвободные, но на которые нет ссылок.
media — сюда монтируются соседние разделы диска и сьёмные носители (имеются ввиду файлы этих устройств)
mnt — архаичный аналог вышеописанного, оставляют больше для совместимости. Пригоден для временного монтирования не монтируемых по умолчанию файлов устройств или разделов.
opt — программные файлы, опциональные для системы. Всё, что здесь находится, если не нужно, можно просто удалить, без деинсталляции.
proc — отображает запущенные в данный момент процессы и их состояние. Файлы из этого каталога лучше вообще не трогать. Они хоть и доступны для записи, но бездумной их правкой можно обрушить систему. Благо, писать туда имеет право только суперпользователь.
root — домашний каталог суперпользователя, которому в системе разрешено абсолютно всё.
sbin — основные системные утилиты и программы, отвечающие за загрузку системы.
sys — сюда монтируется виртуальная файловая система sysfs, в которой ядро Линукса заносит информацию о распознанных устройствах и драйверах к ним.
tmp — временные файлы.
usr — здесь находятся все установленные пакеты и документация к ним.
var — служебные файлы с изменяемыми данными. Например — логи.
spool — данные, ожидающие обработки.

Пара обещанных слов о монтировании. Еще совсем недавно об это понятие спотыкались большинство пользователей, пытавшихся устанавливать Линукс. Программы-установщики любили озадачить вопросом о точке монтирования Виндовс. Сегодня этот шаг максимально автоматизирован. Так вот, монтирование можно представить как подключение. А точка монтирования, это своеобразная розетка, куда нужно подключить файл устройства. Такой розеткой служит пустой каталог. Когда к нему монтируют устройство, в нём отображается содержимое подключённого устройства (флоппика, флешки). Монтирование осуществляется программой mount, а размонтирование (отключение) — umount. В старые времена это приходилось делать вручную из командной строки. Сегодня, на большинстве десктопных систем, автоматизировано.

Важной особенностью файловой системы Линукс является строгое разграничение прав доступа к файлам. Со своими любой зарегистрированный в системе пользователь может делать всё, что ему заблагорассудится. Осуществлять чтение (визуально и из программы), запись. Запускать на выполнение. Для этого у файлов в заголовочной информации оговариваются права для владельца, его группы и остальных. Владелец файла эти права может вольно менять по своему усмотрению любым удобным ему способом. Хоть и в графическом режиме.

В такой же степени это относится и к каталогам.

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

Что касается Линукса, как операционной системы, то на самом деле её не существует как таковой. Есть ядро Линукс, доступное любому желающему что либо вокруг него накуролесить. Это ядро работает непосредственно с железом, внутренним и периферийным. Все драйверы, отвечающие за совместимость ядра с железом, являются его модулями. За исключением пропиетарных дров от производителей. Галиматья, которой ядро общается со своим внешним окружением, на человеческий язык не переводится. Посредником между ядром и пользователем служит командная оболочка, принимающая команды с клавиатуры или из файла(ов) на диске почти на литературном английском языке. Вывод результата работы осуществляется в зависимости от ситуации на монитор, в файл, на вход следующей программы, умеющей читать поток ввода (с клавиатуры, вывода другой программы, из файла), или прямо на внешнее устройство, например принтер. Так было еще в первобытном Юниксе, так, во многом, осталось и сейчас. Многие команды сохранились почти в неизменном виде еще с тех древних времён, поэтому внушительная часть первобытной литературы по Линуксу не утратила своей актуальности и сегодня. Линукс развивается семимильными шагами, оставаясь в своей основе практически неизменным. И это правильно. То, что было справедливо в одном месте, остаётся справедливым в аналогичном другом, модернизированном. Пользователю нет нужды переучиваться после каждого обновления.
Возможности текстового интерфейса хороши, но в наше мультимедийное время недостаточны. На этот случай существуют графические оболочки. Эти шкурки в Линуксе можно менять, как перчатки. Можно выбрать лёгкую и шуструю среду с несколько ограниченным функционалом, но вполне комфортную. Есть и полноценные аналоги рабочего стола Виндовс. Современные Гном и КДЕ последнему по удобству и функциональности ничем не уступают.

Но командная строка и рабочий стол — хоть и достаточно функциональные, но всего лишь интерфейсы. Рабочим инструментом делают их пользовательские приложения. И когда говорят о Линуксе, как об операционной системе, имеются ввиду его различные дистрибутивы, включающие в себя ядро с оболочками и набор программного обеспечения.

Вот именно наличие большого выбора доступных возможностей в комплекте поставки в сочетании Всеобщей Публичной Лицензией, по которой всё это разрабатывается выгодно отличает Линукс от других операционных систем. Конечно, есть у этой медали и обратная сторона. Поскольку в разработке Линукс-программ может принимать участие любой желающий, в любом дистрибутиве обязательно найдётся некоторое количество сырых продуктов. Это совсем не значит, что они такими останутся всегда или их нечем заменить. И софта неважного качества для Виндовс тоже хватает с избытком, но это наименьшая причина считать его хуже Линукса.

А хороший софт, изобилующий в Линкусе, стоит того, что бы на него обратить внимание. Но об этом нужен отдельный разговор.

Что такое ядро Linux

Ядро Linux содержит более 13 миллионов строк кода и является одним из самых крупных проектов с открытым исходным кодом в мире. Так что такое ядро Linux и для чего оно используется?

Что такое ядро Linux?

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

Виды и версии ядра

Что такое ядро Linux вы уже знаете, но какие вообще бывают виды ядер? Есть различные способы и архитектурные соображения при создании ядер с нуля. Большинство ядер могут быть одного из трех типов: монолитное ядро, микроядро, и гибрид. Ядро Linux представляет собой монолитное ядро, в то время как ядра Windows и OS X гибридные. Давайте сделаем обзор этих трех видов ядер.

Микроядро

Микроядра реализуют подход, в котором они управляют только тем, чем должны: процессором, памятью и IPC. Практически все остальное в компьютере рассматривается как аксессуары и обрабатывается в режиме пользователя. Микроядра имеют преимущество в переносимости, они могут использоваться на другом оборудовании, и даже другой операционной системе, до тех пор, пока ОС пытается получить доступ к аппаратному обеспечению совместимым образом.

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

Плюсы

  • Портативность
  • Небольшой размер
  • Низкое потребление памяти
  • Безопасность

Минусы

  • Аппаратные средства доступны через драйверы
  • Аппаратные средства работают медленнее потому что драйверы работают в пользовательском режиме
  • Процессы должны ждать свою очередь чтобы получить информацию
  • Процессы не могут получить доступ к другим процессам не ожидая

Монолитное ядро

Монолитные ядра противоположны микроядрам, потому что они охватывают не только процессор, память и IPC, но и включают в себя такие вещи, как драйверы устройств, управление файловой системой, систему ввода-вывода. Монолитные ядра дают лучший доступ к оборудованию и реализуют лучшую многозадачность, потому что если программе нужно получить информацию из памяти или другого процесса, ей не придется ждать в очереди. Но это и может вызвать некоторые проблемы, потому что много вещей выполняются в режиме суперпользователя. И это может принести вред системе при неправильном поведении.

Читать еще:  Операционная система linux ubuntu

Плюсы:

  • Более прямой доступ к аппаратным средствам
  • Проще обмен данными между процессами
  • Процессы реагируют быстрее

Минусы:

  • Большой размер
  • Занимает много оперативной памяти
  • Менее безопасно

Гибридное ядро

Гибридные ядра могут выбирать с чем нужно работать в пользовательском режиме, а что в пространстве ядра. Часто драйвера устройств и файловых систем находятся в пользовательском пространстве, а IPC и системные вызовы в пространстве ядра. Это решение берет все лучшее из обоих предыдущих, но требует больше работы от производителей оборудования. Поскольку вся ответственность за драйвера теперь лежит на них.

Плюсы

  • Возможность выбора того что будет работать в пространстве ядра и пользователя
  • Меньше по размеру чем монолитное ядро
  • Более гибкое

Минусы

  • Может работать медленнее
  • Драйверы устройств выпускаются производителями

Где хранятся файлы ядра?

Где находится ядро Linux? Файлы ядра Ubuntu или любого другого Linux-дистрибутива находятся в папке /boot и называются vmlinuz-версия. Название vmlinuz походит с эпохи Unix. В шестидесятых годах ядра привыкли называть просто Unix, в 90-х годах Linux ядра тоже назывались — Linux.

Когда для облегчения многозадачности была разработана виртуальная память, перед именем файла появились буквы vm, чтобы показать что ядро поддерживает эту технологию. Некоторое время ядро называлось vmlinux, но потом образ перестал помещаться в память начальной загрузки, и был сжат. После этого последняя буква x была изменена на z, чтобы показать что использовалось сжатие zlib. Не всегда используется именно это сжатие, иногда можно встретить LZMA или BZIP2, поэтому некоторые ядра называют просто zImage.

Нумерация версии состоит из трех цифр, номер версии ядра Linux, номер вашей версии и патчи или исправления.

В паке /boot можно найти не только ядро Linux, такие файлы, как initrd.img и system.map. Initrd используется в качестве небольшого виртуального диска, который извлекает и выполняет фактический файл ядра. Файл System.map используется для управления памятью, пока еще ядро не загрузилось, а конфигурационные файлы могут указывать какие модули ядра включены в образ ядра при сборке.

Архитектура ядра Linux

Так как ядро Linux имеет монолитную структуру, оно занимает больше и намного сложнее других типов ядер. Эта конструктивная особенность привлекла много споров в первые дни Linux и до сих пор несет некоторые конструктивные недостатки присущие монолитным ядрам.

Но чтобы обойти эти недостатки разработчики ядра Linux сделали одну вещь — модули ядра, которые могут быть загружены во время выполнения. Это значит что вы можете добавлять и удалять компоненты ядра на лету. Все может выйти за рамки добавления функциональных возможностей аппаратных средств, вы можете запускать процессы сервера, подключать виртуализацию, а также полностью заменить ядро без перезагрузки.

Представьте себе возможность установить пакет обновлений Windows без необходимости постоянных перезагрузок.

Модули ядра

Что, если бы Windows уже имела все нужные драйвера по умолчанию, а вы лишь могли включить те, которые вам нужны? Именно такой принцип реализуют модули ядра Linux. Модули ядра также известные как загружаемые модули (LKM), имеют важное значение для поддержки функционирования ядра со всеми аппаратными средствами, не расходуя всю оперативную память.

Модуль расширяет функциональные возможности базового ядра для устройств, файловых систем, системных вызовов. Загружаемые модули имеют расширение .ko и обычно хранятся в каталоге /lib/modules/. Благодаря модульной природе вы можете очень просто настроить ядро путем установки и загрузки модулей. Автоматическую загрузку или выгрузку модулей можно настроить в конфигурационных файлах или выгружать и загружать на лету, с помощью специальных команд.

Сторонние, проприетарные модули с закрытым исходным кодом доступны в некоторых дистрибутивах, таких как Ubuntu, но они не поставляются по умолчанию, и их нужно устанавливать вручную. Например, разработчики видеодрайвера NVIDIA не предоставляют исходный код, но вместо этого они собрали собственные модули в формате .ko. Хотя эти модули и кажутся свободными, они несвободны. Поэтому они и не включены во многие дистрибутивы по умолчанию. Разработчики считают что не нужно загрязнять ядро несвободным программным обеспечением.

Теперь вы ближе к ответу на вопрос что такое ядро Linux. Ядро не магия. Оно очень необходимо для работы любого компьютера. Ядро Linux отличается от OS X и Windows, поскольку оно включает в себя все драйверы и делает много вещей поддерживаемых из коробки. Теперь вы знаете немного больше о том, как работает ваше программное обеспечение и какие файлы для этого используются.

Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.

В сегодняшней статье своего блога k-max.name я бы хотел поделиться с общественностью описанием структуры файловой системы в ОС Linux, а так же описанием основных каталогов, их назначения и использования в операционной системе.

Введение в файловую систему

Операционная система (далее — ОС) Linux поддерживает множество файловых систем, в настоящее время наиболее широко используются: ext2, ext3,ext4, reiserfs. Так же, современные ОС Linux совместимы с файловыми системами (ФС далее), используемыми ОС Windows, такими как NTFS и FAT32, но использование данных ФС в Linux крайне не желательно по причине того, что данные ФС разрабатывались под ОС Windows и поддержка Windows-разделов ядром Linux реализована с помощью сторонних утилит/драйверов/модулей, что накладывает некоторые ограничения (например, согласно проекту Linux-NTFS на момент написания статьи на разделах с NTFS поддерживается практически только чтение (запись — лишь в существующие файлы без изменения их размера), так же ОС Linux не имеет возможности разграничивать права доступа к файлам на разделах NTFS. Данная ситуация со временем может поменяться.

Базовые понятия

Начну с общей структуры файловой системы. ФС Linux/UNIX физически представляет собой пространство раздела диска разбитое на блоки фиксированного размера, кратные размеру сектора — 1024, 2048, 4096 или 8120 байт. Размер блока указывается при создании файловой системы.

Управлением обмена данными между ядром/приложениями и собственно байтами на диске занимается 2 базовых технологии, называемые виртуальная файловая система (VFS) и драйверы файловых систем. Виртуальная файловая система — это часть ядра linux, которая является неким абстрактным слоем (интерфейсам взаимодействия, если хотите) между ядром и конкретной реализацией файловой системы (ext2, fat32. ). Данная технология позволяет ядру и приложениям взаимодействовать с файловой системой не учитывая подробностей работы конкретной файловой системы и управлять файловыми операциями с помощью типовых команд — прозрачно. Часто, VFS называют виртуальный коммутатор файловых систем. Виртуальная файловая система так же осуществляет стыковку блочных устройств с имеющимися файловыми системами.

Список поддерживаемых Вашим ядром Linux файловых систем можно увидеть в файле /proc/filesystems.

Структура каталогов и другие базовые понятия

Структуру каталогов, в общем случае можно представить в виде следующей схемы:

Данная схема отображает то, что у одного объекта файловой системы (файла) может быть несколько путей. Грубо говоря, несколько файлов в структуре каталогов Linux могут быть физически одним файлом на диске. Или же другими словами, 1 физический файл на диске может иметь несколько имен (путей). Это достигается тем, что в файловой системе каждый файл идентифицируется уникальным номером, называемым Inode (инод = Индексный дескриптор).

Отсюда можно сделать вывод, что структура файловой системы отчасти иерархична. Или лучше сказать — «перекрестно-иерархическая», потому что дерево иерархии за счет того, что один объект может иметь несколько путей, может пересекаться.

В файловой структуре Linux имеется один корневой раздел — / (он же root, корень). Все разделы жесткого диска (если их несколько) представляют собой структуру подкаталогов, «примонтированых» к определенным каталогам, схематично это можно представить следующим образом:

Операция монтирования служит для того, чтобы сделать доступной файловую систему, расположенную на каком-либо блочном устройстве. Суть операции монтирования заключается в том, что ядро ассоциирует некоторый каталог (называемый точкой монтирования) с устройством, содержащем файловую систему и драйвером файловой системы. Для этого оно передает ссылку на блочное устройство — драйверу файловой системы, и в случае, если драйвер успешно проидентифицировал эту файловую систему, ядро заносит в специальную таблицу монтирования информацию о том, что все файлы и каталоги, чей полный путь начинается с указанной точки монтирования, обслуживаются соответствующим драйвером файловой системы и расположены на указанном блочном устройстве. Посмотреть таблицу примонтированных файловых систем можно через файл /proc/mounts .

Примечание. Вообще говоря, привязываться к блочному устройству в данном случае не обязательно. Устройство, которое монтируется может быть не только блочным. Может быть, например, сетевым (если монтируется NFS или SMBCIFS).

Посмотреть сколько файл имеет ссылок и инод файла можно командой:

в приведенном примере первый столбец (значения 193,1,197) есть инод, а третий столбец (значения 1) есть количество ссылок на файл (читаем: путей файла).

Инод, как уже говорилось, уникален в пределах определенной файловой системы и содержит следующую информацию:

  • о владельце объекта ФС
  • последнем времени доступа
  • размере объекта ФС
  • указании файл это или каталог
  • права доступа

При перемещении файла утилитой mv в пределах одной файловой системы, инод файла остается неизменным (меняется только поле, описывающее имя путь файла), при перемещении файла в другую файловую систему сначала создается новый inod, а затем удаляется исходный.

Так же хочу отметить, что в линукс существует 2 вида ссылок:

  1. Жесткая ссылка (она же Хардлинк, Hard-Link) — это собственно и есть один их путей файла (который указывается в команде ls -li), хорошо представлена жесткая ссылка в википедии:
  2. Символьная (она же Симлинк от англ. Symbolic link, символическая ссылка) — это файл UNIX, содержащий в себе лишь текстовую строку — путь к оригинальному файлу, на который собственно ссылается.
Читать еще:  Как исправить ошибку видеокарты на ноутбуке

Файл в Linux существует пока на inod существует хотя бы одно указание (1 путь/имя), как только из системы удаляется последнее указание на inod, блоки, занимаемые файлом с данным inod «переходят» в свободный список (список блоков, доступных для выделения на диске). То есть блоки становятся свободным местом на диске.

В ФС UNIX есть такое понятие как суперблок. Суперблок — это своеобразный аналог FAT таблицы в ФС FAT32. Суперблок содержит в себе следующую информацию о файловой системе:

  • общее число блоков и индексных дескрипторов в файловой системе;
  • число свободных блоков и индексных дескрипторов в файловой системе;
  • размер блока файловой системы;
  • количество блоков и индексных дескрипторов в группе;
  • размер индексного дескриптора;
  • идентификатор файловой системы.

Суперблок размещается в первых 1024 байтах раздела, от его целостности зависит работоспособность ФС. ОС создает несколько копий суперблока для восстановления в случае повреждения оригинального и размещает их (копии) различных областях жесткого диска.

При загрузке, ядро ОС Linux после монтирования корневого раздела на чтение, автоматически примонтирует остальные разделы жесткого диска. Какие разделы необходимо примонтировать, ядро берет из конфигурационного файла /etc/fstab. Пример и описание файла fstab:

Более современный вариант:

Присмотревшись, можно увидеть, что в более современном варианте, устройства монтируются не по адресу устройства, а по UUID (идентификатору устройства). Это позволяет в случае смены жесткого диска, не перенастраивать fstab, а просто присвоить новому диску имеющийся UUID.

Строки, начинающиеся символом #, являются комментариями. Остальные строки содержат шесть полей. Поскольку эти поля позиционные, все они должны быть заполнены.

file system Монтируемое блочное устройство (файловая система). Точнее сказать — указание пути к блочному устройству. Для файловых систем ext2, ext3, xfs и др. поддерживающих данную возможность, можно вместо этого указывать метку тома, например: LABEL=»scsiboot» , либо идентификатор UUID блочного устройства. Это делает систему более устойчивой при установке и удалении устройств. Точка монтирования (каталог) должна существовать для корректного монтирования. mount point Это точка монтирования. Это путь, куда будет примонтирована файловая система file system. Для пространства подкачки это поле имеет значение none . type Определяет тип файловой системы. CD/DVD-диски часто имеют разные файловые системы — ISO9660 или UDF — поэтому вы можете перечислить различные возможности в виде списка, разделенного запятыми. Если вы хотите, чтобы mount автоматически определила тип, используйте auto , как сделано в последней строке для дискеты. option Определяет параметры монтирования. Опции монтирования – это специальные параметры, которые влияют на работу драйвера файловой системы, когда он работает с файловой системой на соответствующем блочном устройстве – например, с помощью опций монтирования можно управлять режимом кэширования данных, преобразованиями имен файлов и данных, включать и отключать поддержку ACL и т.д. Для монтирования со значениями по умолчанию используйте defaults . Несколько полезных опций:

  • rw и ro указывают монтирование файловой системы в режиме чтения/записи или только для чтения.
  • noauto указывает, что файловая система не должна автоматически монтироваться при загрузке или при выдаче команды mount -a . В нашем примере эта опция применена для съемных устройств.
  • owner определяет, что пользователь, не имеющий прав root, может монтировать данную файловую систему (только если он является владельцем устройства) и демонтировать может только тот, кто смонтировал. Это особенно полезно для съемных носителей. Эта опция должна быть задана в /etc/fstab, а не в команде mount .
  • user определяет, что пользователь, не имеющий прав root, может монтировать данную файловую систему и демонтировать может только тот, кто смонтировал. Это особенно полезно для съемных носителей. Эта опция должна быть задана в /etc/fstab, а не в команде mount .
  • users определяет, что любой пользователь, не имеющий прав root, может монтировать данную файловую систему и демонтировать. Это особенно полезно для съемных носителей. Эта опция должна быть задана в /etc/fstab, а не в команде mount . exec или noexec определяют, позволять ли исполнение файлов из данной файловой системы. Для файловых систем, монтируемых пользователем, по умолчанию устанавливается значение noexec , если только после поля user не указано exec .
  • noatime отключает запись атрибута времени доступа к файлу. Это может повысить производительность.
  • nosuid устанавливает запуск исполняемых suid — файлов без повышения прав.

dump Определяет, будет ли команда dump включать данную файловую систему ext2 или ext3 в резервные копии. Значение 0 означает, что dump игнорирует данную файловую систему. pass Ненулевые значения pass определяют порядок проверки файловых систем во время загрузки

В файловой системе Linux существуют следующие типы файлов:

  • обычные файлы (текстовые, картинки и т.п.)
  • каталоги (это тоже тип файла, который содержит в себе список файлов, принадлежащий «себе»)
  • блочные устройства (представляют собой «драйверы» устройств, позволяющие взаимодействовать с устройством. Блочное устройство производит чтениезапись в устройство блоками. Пример устройства: жесткие диски, дискеты и т.п.)
  • символьные устройства (представляют собой «драйверы» устройств, позволяющие взаимодействовать с устройством. Символьное устройство представляет собой любое не блочное устройство. Пример устройства: терминалы, принтеры и т.п.)
  • символические ссылки
  • PIPE (FIFO)
  • гнезда (socket)

Тип файла в каталоге можно посмотреть командой ls с параметром -l.

Далее пойдет речь о стандартных каталогах Linux и назначении данных каталогов:

Как работает Linux: от нажатия кнопки включения до рабочего стола

Содержание статьи

В целом загрузку среднестатистического дистрибутива Linux можно разделить на пять стадий:

  1. Загрузчик.
  2. Запуск и первичная инициализация ядра.
  3. Обнаружение оборудования, загрузка драйверов и подключение файловых систем.
  4. Запуск системных служб (демонов).
  5. Старт графической или консольной пользовательской сессии.

Мы пройдемся по всем стадиям и узнаем, что происходит во время загрузки типичного дистрибутива Linux, немного отклонившись в сторону BSD, macOS и Android по пути. Во многих случаях это позволит понять, почему процесс загрузки Linux именно такой, какой есть.

1. Загрузчик

Все начинается с загрузчика, которому во время старта машины BIOS передает управление. В старые времена, когда Linux был не так популярен, в качестве загрузчика использовался LILO (Linux Loader) — простой, очень примитивный и не позволяющий менять конфигурацию загрузки на лету. Фактически конфигурационный файл был вшит в сам загрузчик, и его приходилось переустанавливать после каждой смены настроек: обновил ядро, забыл переустановить, и твой ноутбук больше не грузится.

Сегодня загрузкой Linux практически в любом дистрибутиве занимается Grub, изначально разработанный для операционной системы GNU/Hard. Grub гораздо сложнее LILO и фактически сам является полноценной ОС. Он не просто читает конфиг загрузки (обычно это /boot/grub/grub.cfg ) прямо с диска, но и позволяет исправить этот конфиг на месте. Grub имеет встроенную командную строку, работает с десятком различных файловых систем и позволяет формировать сложные цепочки загрузки.

Как только пользователь выбирает нужный пункт меню (либо по истечении тайм-аута), Grub находит связанный с этим пунктом меню образ ядра Linux на диске (обычно это файл /boot/vmlinuz ), а также закрепленный за ним образ initramfs (о нем чуть позже), загружает их в память и передает управление ядру.

Чтобы увидеть меню Grub в Ubuntu, необходимо удерживать Shift

Почему vmlinuz?

Название файла с образом ядра имеет исторические корни. Изначально образ ядра классического UNIX назывался просто unix, но, когда появилась версия ядра для процессоров с защитой памяти, чтобы избежать путаницы, название сменили на vmunix. Буква z вместо x на конце, в свою очередь, означает, что образ сжат с помощью утилиты gzip (алгоритм Deflate, тот же, что в классическом ZIP).

2. Ядро и initramfs

Получив управление, ядро начинает первичную инициализацию: запускается подсистема управления памятью, настраивается обработчик прерываний, инициализируются необходимые для дальнейшей работы ядра структуры данных. Когда эта работа будет закончена, ядро распаковывает архив initramfs (обычно он имеет имя вида /boot/initramfs-linux.img и представляет собой архив cpio, сжатый с помощью gzip) в файловую систему в оперативной памяти (tmpfs), делает ее корневой файловой системой и запускает скрипт /init (в различных дистрибутивах имя может отличаться).

Initramfs включает в себя базовый набор компонентов Linux-дистрибутива: стандартные системные каталоги /bin , /lib , /etc и так далее, простейший командный интерпретатор (обычно ash), набор команд BusyBox, несколько вспомогательных библиотек и набор модулей ядра (драйверов), предназначенных для работы с различными накопителями и файловыми системами.

Содержимое initramfs

Смысл существования initramfs в том, чтобы решить проблему курицы и яйца: загрузить драйверы для подключения реальной корневой файловой системы до того, как она будет подключена. Именно это и происходит, когда система запускает скрипт /init . Он определяет установленные в систему накопители, загружает в ядро драйверы для работы с ними, а затем подключает нужный раздел нужного накопителя (о том, какой именно, ядро узнает благодаря переданному при загрузке параметру root) к корню, перекрывая таким образом содержимое initramfs. Затем скрипт запускает /sbin/init , с которого и начинается следующий шаг загрузки ОС.

Скрипт init из initramfs

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

Ссылка на основную публикацию
Adblock
detector