Файловые структуры unix и linux. Описание структуры каталогов системы Linux. Иерархия файловой системы

Понимание файловой системы Linux, структуры каталогов, размещения конфигурационных, исполняемых и временных файлов поможет вам лучше разбираться в своей системе и стать успешным системным администратором. Файловая система Linux будет непривычна именно для новичка, только что перешедшего с Windows, ведь здесь все совсем по-другому. В отличие от Windows, программа не находится в одной папке, а, как правило, распределена по корневой файловой системе. Это распределение поддается определенным правилам. Вы когда-нибудь задавались вопросом, почему некоторые программы находятся в папке /bin, или /sbin, /usr/sbin, /usr/local/bin, в чем разница между этими каталогами?

Например, программа less, находится в каталоге /usr/bin, но почему не в /sbin или /usr/sbin. А такие программы, как ifconfig или fdisk находятся в каталоге /sbin и нигде иначе.

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

/ - корень

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

Обратите внимание, что у пользователя root домашний каталог /root, но не сам /.

/bin - (binaries) бинарные файлы пользователя

Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления. Одним словом, те утилиты, которые могут использоваться пока еще не подключен каталог /usr/. Это такие общие команды, как cat, ls, tail, ps и т д.

/sbin - (system binaries) системные исполняемые файлы

Так же как и /bin, содержит двоичные исполняемые файлы, которые доступны на ранних этапах загрузки, когда не примонтирован каталог /usr. Но здесь находятся программы, которые можно выполнять только с правами суперпользователя. Это разные утилиты для обслуживания системы. Например, iptables, reboot, fdisk, ifconfig,swapon и т д.

/etc - (etcetera) конфигурационные файлы

В этой папке содержатся конфигурационные файлы всех программ, установленных в системе.

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

/dev - (devices) файлы устройств

В Linux все, в том числе внешние устройства являются файлами. Таким образом, все подключенные флешки, клавиатуры, микрофоны, камеры - это просто файлы в каталоге /dev/. Этот каталог содержит не совсем обычную файловую систему. Структура файловой системы Linux и содержащиеся в папке /dev файлы инициализируются при загрузке системы, сервисом udev. Выполняется сканирование всех подключенных устройств и создание для них специальных файлов. Это такие устройства, как: /dev/sda, /dev/sr0, /dev/tty1, /dev/usbmon0 и т д.

/proc - (proccess) информация о процессах

Это тоже необычная файловая система, а подсистема, динамически создаваемая ядром. Здесь содержится вся информация о запущенных процессах в реальном времени. По сути, это псевдофайловая система, содержащая подробную информацию о каждом процессе, его Pid, имя исполняемого файла, параметры запуска, доступ к оперативной памяти и так далее. Также здесь можно найти информацию об использовании системных ресурсов, например, /proc/cpuinfo, /proc/meminfo или /proc/uptime. Кроме файлов в этом каталоге есть большая структура папок linux, из которых можно узнать достаточно много информации о системе.

/var (variable) - Переменные файлы

Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются. Размер этих файлов постоянно увеличивается. Здесь содержатся файлы системных журналов, различные кеши, базы данных и так далее. Дальше рассмотрим назначение каталогов Linux в папке /var/.

/var/log - Файлы логов

/var/lib - базы данных

Еще один тип изменяемых файлов - это файлы баз данных, пакеты, сохраненные пакетным менеджером и т д.

/var/mail - почта

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

/var/spool - принтер

Изначально, эта папка отвечала за очереди печати на принтере и работу набора программ cpus.

/var/lock - файлы блокировок

Здесь находятся файлы блокировок. Эти файлы означают, что определенный ресурс, файл или устройство занят и не может быть использован другим процессом. Apt-get, например, блокирует свою базу данных, чтобы другие программы не могли ее использовать, пока программа с ней работает.

/var/run - PID процессов

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

/tmp (temp) - Временные файлы

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

Файлы удаляются при каждой перезагрузке. Аналогом Windows является папка Windows\Temp, здесь тоже хранятся все временные файлы.

/usr - (user applications) Программы пользователя

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

/usr/bin/ - Исполняемые файлы

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

/usr/sbin/

Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.

/usr/lib/ - Библиотеки

Содержит библиотеки для программ из /usr/bin или /usr/sbin.

/usr/local - Файлы пользователя

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

/home - Домашняя папка

В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои личные файлы, настройки программ и т д. Например, /home/sergiy и т д. Если сравнивать с Windows, то это ваша папка пользователя на диске C, но в отличии от WIndows, home как правило размещается на отдельном разделе, поэтому при переустановке системы все ваши данные и настройки программ сохранятся.

/boot - Файлы загрузчика

Содержит все файлы, связанные с загрузчиком системы. Это ядро vmlinuz, образ initrd, а также файлы загрузчика, находящие в каталоге /boot/grub.

/lib (library) - Системные библиотеки

Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.

Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib. Эту папку можно сравнить с WIndows\system32, там тоже сгружены все библиотеки системы, только там они лежат смешанные с исполняемыми файлами, а здесь все отдельно.

/opt (Optional applications) - Дополнительные программы

В эту папку устанавливаются проприетарные программы, игры или драйвера. Это программы созданные в виде отдельных исполняемых файлов самими производителями. Такие программы устанавливаются в под-каталоги /opt/, они очень похожи на программы Windows, все исполняемые файлы, библиотеки и файлы конфигурации находятся в одной папке.

/mnt (mount) - Монтирование

В этот каталог системные администраторы могут монтировать внешние или дополнительные файловые системы.

/media - Съемные носители

В этот каталог система монтирует все подключаемые внешние накопители - USB флешки, оптические диски и другие носители информации.

/srv (server) - Сервер

В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.

/run - процессы

Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.

/sys (system) - Информация о системе

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

Оригинал: "The Linux Directory Structure Explained"
Автор: Chris Hoffman
Дата публикации: June 6th, 2012
Перевод: Н.Ромоданов
Дата перевода: июдь 2012 г.

Если вы перешли с системы Windows, то структура файловой системы Linux может показаться особенно странной. Исчезло устройство C:\ и буквы остальных устройств, уступив место каталогу / и другим каталогам с загадочными названиями, большинство из которых трехбуквенные

Структура файловой системы в Linux и в других UNIX-подобных операционных системах определяется стандартом Filesystem Hierarchy Standard (FHS). Однако в файловых системах Linux также есть некоторые каталоги, которые еще не определены в этом стандарте.

Корневой каталог - /

Все на вашей системе Linux находится в каталоге /, известном как корневой каталог. Вы можете рассматривать каталог / как аналог устройства C:\ в системе Windows - но это не совсем верно, поскольку в Linux для устройств не используются буквы. Если в Windows другой раздел диска может находиться в D:\, такой другой раздел в Linux появится в виде другого подкаталога в каталоге /.


/bin – основные двоичные пользовательские модули

В каталоге /bin находятся основные двоичные пользовательские модули (программы), которые должны присутствовать, если система монтируется в однопользовательском режиме. Приложения, например, Firefox, хранятся в /usr/bin, в то время как важные системные программы и утилиты, такие как командная оболочка bash, расположены в каталоге /bin. Каталог /usr может храниться в другом разделе - размещение этих файлов в каталоге /bin гарантирует, что в системе эти важные утилиты будут даже в случае, если другие файловые системы не смонтированы. Каталог /sbin аналогичен — в нем находятся основные двоичные модули, используемые для системного администрирования.


/boot – файлы статической загрузки

В каталоге /boot находятся файлы, необходимые для загрузки системы — например, здесь хранятся файлы загрузчика GRUB и ваши ядра Linux. Здесь нет конфигурационных файлов, используемых загрузчиком - они находятся в каталоге /etc вместе с другими конфигурационными файлами.

/cdrom – исторически выбранная точка монтирования для CD-дисков

Каталог /cdrom не является частью стандарта FHS, но вы по-прежнему можете найти его в Ubuntu и в других операционных системах. Это временное место, где монтируются диски CD-ROM, когда они вставляются в компьютер. Однако, стандартное место для подключаемого носителя находится внутри каталога /media.

/dev – файлы устройств

В Linux устройства предоставлены в виде файлов и в каталоге /dev находится ряд специальных файлов, с помощью которых представлены устройства. Это не те файлы, которые мы знаем, но здесь они выглядят в виде файлов - например, с помощью /dev/sda представлен первый диск SATA, имеющийся в системе. Если вам на нем нужен раздел, вам нужно запустить редактор разделов и сообщить ему, что нужно отредактировать /dev/sda.

В этом каталоге также находятся псевдо-устройства, которые являются виртуальными устройствами и для которых, на самом деле, нет соответствующего реального устройства. Например, файл /dev/random генерирует случайные числа. Файл /dev/null является специальным устройством, которое не выдает никаких выходных данных и автоматически удаляет все входные данные - когда вы перенаправляете выходные данные команды на /dev/null, то вы их удаляете.


/etc – конфигурационные файлы

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

/home – домашние каталоги

В каталоге /home находятся домашние каталоги каждого пользователя. Например, если ваше имя как пользователя bob, то у вас есть домашний каталог, который находится в /home/bob. В этом каталоге находятся файлы с пользовательскими данными и конфигурационные файлы конкретного пользователя. Каждый пользователь имеет доступ на запись только в своем домашнем каталоге и для того, чтобы он мог изменять другие файлы в системе, он должен получить более высокие права доступа (стать пользователем root).


/lib – основные разделяемые библиотеки

В каталоге /lib находятся библиотеки, необходимые для основных двоичных файлов, находящихся в каталогах /bin и /sbin. Библиотеки, необходимые двоичным файлам, находящимся в каталоге /usr/bin, находятся в каталоге /usr/lib.

/lost+found – восстановленные файлы

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

/media – подключаемые носители

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

/mnt – точки временного монтирования

Исторически сложилось, что каталог /mnt является тем местом, где системные администраторы монтируют временные файловые системы, когда они их используют. Например, если вы монтируете раздел Windows для того, чтобы выполнить некоторые операции восстановления файлов, вы можете смонтировать его в /mnt/windows. Но другие файловые системы вы можете монтировать в любом другом месте.

/opt – вспомогательные пакеты

В каталоге /opt находятся подкаталоги для дополнительных пакетов программного обеспечения. Этот каталог широко используется проприетарным программным обеспечением, которое не подчиняется стандартной иерархии файловых систем - например, проприетарная программа может при установке записывать дампы своих файлов в /opt/application.

/proc – файлы ядра и процессов

Каталог /proc похож на каталог /dev, поскольку он не содержит стандартных файлов. В нем находятся специальные файлы, в которых представлена информация о системе и о процессах.


/root – домашний каталог пользователя root

Каталог /root является домашним каталогом пользователя root. Вместо того, чтобы находиться в /home/root, он помещается в /root. Этот каталог отличается от каталога /, который является корневым каталогом системы.

/run – файлы состояния приложений

Каталог /run является достаточно новым каталогом, в котором приложениям предоставляется возможность стандартным образом хранить вспомогательные файлы, которые им требуются, например, сокеты и идентификаторы процессов. Эти файлы нельзя хранить в каталоге /tmp поскольку файлы в каталоге /tmp могут быть удалены.

/sbin –двоичные файлы администрирования системы

Каталог /sbin похож на каталог /bin. В нем находятся важные двоичные файлы, которые, как правило, предназначены для их запуска пользователем при администрировании системы.


/selinux – виртуальная файловая система SELinux

Если в вашем дистрибутиве для обеспечения безопасности используется пакет SELinux (например, в Fedora и Red Hat), то в каталоге /selinux будут находиться специальные файлы, используемые SELinux. Этот каталог похож на каталог /proc. В Ubuntu SELinux не используется, поэтому наличие этой папки в Ubuntu, возможно, является ошибочным.

/srv – данные сервисных служб

В каталоге /srv находятся "данные для сервисов, предоставляемых системой". Если вы пользуетесь сервером Apache HTTP для обслуживания веб-сайта, то, скорее всего, вы будете хранить файлы вашего сайта в каталоге, расположенном внутри каталога /srv.

/tmp – временные файлы

Приложения хранят временные файлы в каталоге /tmp. Такие файлы обычно удаляются всякий раз, когда ваша система перезагружается, и их можно удалить в любой момент с помощью утилит, например, с помощью утилиты tmpwatch.

/usr – пользовательские двоичные файлы и данные, используемые только для чтения

В каталоге /usr находятся приложения и файлы, используемые пользователями, в отличие от приложений и файлов, используемых системой. Например, не очень важные приложения находятся в каталоге /usr/bin, а не в каталоге /bin, а не очень важные двоичные файлы, предназначенные для системного администрирования, находятся в каталоге /usr/sbin, а не в каталоге /sbin. Библиотеки для них находятся внутри каталога /usr/lib. В каталоге также есть другие подкаталоги - например, в каталоге /usr/share расположены файлы, независимые от архитектуры системы, например, используемые для работы с графикой.

Каталог /usr/local является местом, где по умолчанию устанавливаются приложения, откомпилированные локально - это позволит им не смешиваться с остальной частью системы.


/var – файлы для хранения изменяющихся данных

Каталог /var является аналогом каталога /usr, но в каталог /var можно делать запись, а каталог /usr в обычном режиме предназначен только для чтения. Журнальные файлы и все остальное, что должно было бы записываться в обычном режиме в каталог /usr, записывается в каталог /var. Например, журнальные файлы вы сможете найти в каталоге /var/log.

Для получения более подробной технической информации о иерархии файловой системы в Linux обратитесь к документации стандарта иерархии файловых систем Filesystem Hierarchy Standard, ver.2.3 .

Примечание: На нашем сайте имеется перевод FHS версии 2.2 , а также перевод статьи , в которой делается попытка объяснить причины, почему появился именно такой вариант структуры каталогов UNIX.

Основные понятия

Операционная система Linux разработана в соответствии с требованиями международного стандарта на UNIX-совместимые системы IEEE POSIX, поэтому логично будет кратко рассмотреть сначала структуру файловой системы ОС UNIX.

Одним из достоинств ОС UNIX является то, что система базируется на небольшом числе интуитивно ясных понятий. Однако, несмотря на простоту этих понятий, к ним нужно привыкнуть. Без этого невозможно понять существо ОС UNIX.

Пользователь

С самого начала ОС UNIX замышлялась как интерактивная система. Другими словами, UNIX предназначен для терминальной работы. Чтобы начать работать, человек должен "войти" в систему, введя со свободного терминала свое учетное имя (account name) и, возможно, пароль (password). Человек, зарегистрированный в учетных файлах системы, и, следовательно, имеющий учетное имя, называется зарегистрированным пользователем системы. Регистрацию новых пользователей обычно выполняет администратор системы. Пользователь не может изменить свое учетное имя, но может установить и/или изменить свой пароль. Пароли хранятся в отдельном файле в закодированном виде. Не стоит забывать свой пароль, снова узнать его не поможет даже администратор!

Все пользователи ОС UNIX явно или неявно работают с файлами. Файловая система ОС UNIX имеет древовидную структуру. Промежуточными узлами дерева являются каталоги со ссылками на другие каталоги или файлы, а листья дерева соответствуют файлам или пустым каталогам. Каждому зарегистрированному пользователю соответствует некоторый каталог файловой системы, который называется "домашним" (home) каталогом пользователя. При входе в систему пользователь получает неограниченный доступ к своему домашнему каталогу и всем каталогам и файлам, содержащимся в нем. Пользователь может создавать, удалять и модифицировать каталоги и файлы, содержащиеся в домашнем каталоге. Потенциально возможен доступ и ко всем другим файлам, однако он может быть ограничен, если пользователь не имеет достаточных привилегий.

Файловая система

Понятие файла является одним из наиболее важных для ОС UNIX. Все файлы, с которыми могут манипулировать пользователи, располагаются в файловой системе, представляющей собой дерево, промежуточные вершины которого соответствуют каталогам, и листья - файлам и пустым каталогам. Примерная структура файловой системы ОС UNIX показана на рисунке 2.1. Реально на каждом логическом диске (разделе физического дискового пакета) располагается отдельная иерархия каталогов и файлов. Для получения общего дерева в динамике используется "монтирование" отдельных иерархий к фиксированной корневой файловой системе.

Замечание: В мире ОС UNIX по историческим причинам термин "файловая система" является перегруженным, обозначая одновременно иерархию каталогов и файлов и часть ядра, которая управляет каталогами и файлами. Видимо, было бы правильнее называть иерархию каталогов и файлов архивом файлов, а термин "файловая система" использовать только во втором смысле. Однако, следуя традиции ОС UNIX, мы будем использовать этот термин в двух смыслах, различая значения по контексту.

Каждый каталог и файл файловой системы имеет уникальное полное имя (в ОС UNIX это имя принято называть full pathname - имя, задающее полный путь, поскольку оно действительно задает полный путь от корня файловой системы через цепочку каталогов к соответствующему каталогу или файлу; я буду использовать термин "полное имя", поскольку для pathname отсутствует благозвучный русский аналог). Каталог, являющийся корнем файловой системы (корневой каталог), в любой файловой системе имеет предопределенное имя "/" (слэш). Полное имя файла, например, /bin/sh означает, что в корневом каталоге должно содержаться имя каталога bin, а в каталоге bin должно содержаться имя файла sh. Коротким или относительным именем файла (relative pathname) называется имя (возможно, составное), задающее путь к файлу от текущего рабочего каталога (существует команда и соответствующий системный вызов, позволяющие установить текущий рабочий каталог).

В каждом каталоге содержатся два специальных имени, имя ".", именующее сам этот каталог, и имя "..", именующее "родительский" каталог данного каталога, т.е. каталог, непосредственно предшествующий данному в иерархии каталогов.

Рис. 2.1. Структура каталогов файловой системы

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

Структура файловой системы

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

В мире UNIX существует несколько разных видов файловых систем со своей структурой внешней памяти. Наиболее известны традиционная файловая система UNIX System V (s5) и файловая система семейства UNIX BSD (ufs). Файловая система s5 состоит из четырех секций (рисунок 2.2,a). В файловой системе ufs на логическом диске (разделе реального диска) находится последовательность секций файловой системы (рисунок 2.2,b).

Рис. 2.2. Структура внешней памяти файловых систем s5 и ufs

Кратко опишем суть и назначение каждой области диска.

    Boot-блок содержит программу раскрутки, которая служит для первоначального запуска ОС UNIX. В файловых системах s5 реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.

    Суперблок - это наиболее ответственная область файловой системы, содержащая информацию, которая необходима для работы с файловой системой в целом. Суперблок содержит список свободных блоков и свободные i-узлы (information nodes - информационные узлы). В файловых системах ufs для повышения устойчивости поддерживается несколько копий суперблока (как видно из рисунка 2.2,b, по одной копии на группу цилиндров). Каждая копия суперблока имеет размер 8196 байт, и только одна копия суперблока используется при монтировании файловой системы (см. ниже). Однако, если при монтировании устанавливается, что первичная копия суперблока повреждена или не удовлетворяет критериям целостности информации, используется резервная копия.

    Блок группы цилиндров содержит число i-узлов, специфицированных в списке i-узлов для данной группы цилиндров, и число блоков данных, которые связаны с этими i-узлами. Размер блока группы цилиндров зависит от размера файловой системы. Для повышения эффективности файловая система ufs старается размещать i-узлы и блоки данных в одной и той же группе цилиндров.

    Список i-узлов (ilist) содержит список i-узлов, соответствующих файлам данной файловой системы. Максимальное число файлов, которые могут быть созданы в файловой системе, определяется числом доступных i-узлов. В i-узле хранится информация, описывающая файл: режимы доступа к файлу, время создания и последней модификации, идентификатор пользователя и идентификатор группы создателя файла, описание блочной структуры файла и т.д.

    Блоки данных - в этой части файловой системы хранятся реальные данные файлов. В случае файловой системы ufs все блоки данных одного файла пытаются разместить в одной группе цилиндров. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен в 512, 1024, 2048, 4096 или 8192 байтов.

Монтируемые файловые системы

Файлы любой файловой системы становятся доступными только после "монтирования" этой файловой системы. Файлы "не смонтированной" файловой системы не являются видимыми операционной системой.

Для монтирования файловой системы используется системный вызов mount. Монтирование файловой системы означает следующее. В имеющемся к моменту монтирования дереве каталогов и файлов должен иметься листовой узел - пустой каталог (в терминологии UNIX такой каталог, используемый для монтирования файловой системы, называется directory mount point - точка монтирования). В любой файловой системе имеется корневой каталог. Во время выполнения системного вызова mount корневой каталог монтируемой файловой системы совмещается с каталогом - точкой монтирования, в результате чего образуется новая иерархия с полными именами каталогов и файлов.

Смонтированная файловая система впоследствии может быть отсоединена от общей иерархии с использованием системного вызова umount. Для успешного выполнения этого системного вызова требуется, чтобы отсоединяемая файловая система к этому моменту не находилась в использовании (т.е. ни один файл из этой файловой системы не был открыт). Корневая файловая система всегда является смонтированной, и к ней не применим системный вызов umount.

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

Интерфейс с файловой системой

Ядро ОС UNIX поддерживает для работы с файлами несколько системных вызовов. Среди них наиболее важными являются open, creat, read, write, lseek и close.

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

Файл в системных вызовах, обеспечивающих реальный доступ к данным, идентифицируется своим дескриптором (целым значением). Дескриптор файла выдается системными вызовами open (открыть файл) и creat (создать файл). Основным параметром операций открытия и создания файла является полное или относительное имя файла. Кроме того, при открытии файла указывается также режим открытия (только чтение, только запись, запись и чтение и т.д.) и характеристика, определяющая возможности доступа к файлу:

open(pathname, oflag [,mode])

Одним из признаков, которые могут участвовать в параметре oflag, является признак O_CREAT, наличие которого указывает на необходимость создания файла, если при выполнении системного вызова open файл с указанным именем не существует (параметр mode имеет смысл только при наличии этого признака). Тем не менее по историческим причинам и для обеспечения совместимости с предыдущими версиями ОС UNIX отдельно поддерживается системный вызов creat, выполняющий практически те же функции.

Открытый файл может использоваться для чтения и записи последовательностей байтов. Для этого поддерживаются два системных вызова:

read(fd, buffer, count) и write(fd, buffer, count)

Здесь fd - дескриптор файла (полученный при ранее выполненном системном вызове open или creat), buffer - указатель символьного массива и count - число байтов, которые должны быть прочитаны из файла или в него записаны. Значение функции read или write - целое число, которое совпадает со значением count, если операция заканчивается успешно, равно нулю при достижении конца файла и отрицательно при возникновении ошибок.

В каждом открытом файле существует текущая позиция. Сразу после открытия файл позиционируется на первый байт. Другими словами, если сразу после открытия файла выполняется системный вызов read (или write), то будут прочитаны (или записаны) первые count байтов содержимого файла (конечно, они будут успешно прочитаны только в том случае, если файл реально содержит по крайней мере count байтов). После выполнения системного вызова read (или write) указатель чтения/записи файла будет установлен в позицию count+1 и т.д.

Такой, чисто последовательный стиль работы, оказывается во многих случаях достаточным, но часто бывает необходимо читать или изменять файл с произвольной позиции (например, как без такой возможности хранить в файле прямо индексируемые массивы данных?). Для явного позиционирования файла служит системный вызов

lseek(fd, offset, origin)

Как и раньше, здесь fd - дескриптор ранее открытого файла. Параметр offset задает значение относительного смещения указателя чтения/записи, а параметр origin указывает, относительно какой позиции должно применяться смещение. Возможны три значения параметра origin. Значение 0 указывает, что значение offset должно рассматриваться как смещение относительно начала файла. Значение 1 означает, что значение offset является смещением относительно текущей позиции файла. Наконец, значение 2 говорит о том, что задается смещение относительно конца файла. Заметим, что типом данных параметра offset является long int. Это значит, что, во-первых, могут задаваться достаточно длинные смещения и, во-вторых, смещения могут быть положительными и отрицательными.

Например, после выполнения системного вызова

указатель чтения/записи соответствующего файла будет установлен на начало (на первый байт) файла. Системный вызов

UNIX стандарту Filesystem ... команды. Рисунок 1.2.Структура каталогов ОС Linux Основным каталогом файловой системы ОС Linux является корневой каталог...

  • Установка операционной системы Linux

    Реферат >> Информатика

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

  • /root

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

    /sbin

    Основные системные программы для администрирования и настройки системы (iptables, ifconfig и т.д.).

    /srv

    Параметры, которые специфичные для окружения системы. Чаще всего данная директория пуста.

    /sys

    /sys - это директория, к которой примонтирована виртуальная файловая система sysfs, которая добавляет в пространство пользователя информацию ядра Linux о присутствующих в системе устройствах и драйверах. В версии ядра ниже 2.6 не использовалась.

    /sys/block

    /sys/block содержит директории всех блочных устройств, присутствующих в данный момент в системе.

    /sys/bus

    В этой директории находится список шин, определенных в ядре Linux (eisa, pci и т.д.).

    /sys/class

    Каталог содержит список группированных устройств по классам (printer, scsi-devices и т.д.).

    /tmp

    Временное хранилище данных. Аналог папки в ОС Windows - C:/Windows/Temp. Все пользователи имеют права чтения и записи в этом каталоге.

    /usr

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

    /usr/bin

    Директория дополнительных программ для всех учетных записей.

    /usr/games

    Каталог для размещения доступных компьютерных игр в системе.

    /usr/include

    Заголовочные файлы С++.

    /usr/lib

    Системные библиотеки для программ, расположенных в директории /usr.

    /usr/local

    По стандарту /usr должен быть общим для нескольких компьютеров и смонтирован по сети, а /usr/local должен содержать установленные пакеты программы только на локальной машине (к примеру, /usr - бюджет семьи, а /usr/local - личный кошелек каждого). Но чаще всего директория /usr/local используется для установки программ, которые не предназначены для конкретного дистрибутива (к примеру для пакетного дистрибутива Ubuntu в /usr находятся "родные" установленные пакеты, а /usr/local находятся собранные пакеты из исходников).

    Любая UNIX-подобная операционная система состоит из ядра, некоторых системных и прикладных программ. Системные программы используют средства, предоставляемые ядром для обеспечения выполнения различных функций операционной системы. Системные и все остальные программы выполняются «на поверхности ядра» - в пользовательском режиме. Довольно часто операционная система содержит компиляторы и соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя не обязательно все языки программирования должны быть частью операционной системы. Документация, а иногда даже игры, могут являться ее частью. Обычно состав операционной системы определяется содержимым установочного диска.

    Операционную систему Linux можно рассматривать в виде Unix-пирамиды, изображенной на рисунке.

    Рисунок Уровни операционной системы Unix

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

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

    Все программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе Unix. За работу команд эмулированного прерывания отвечают библиотечные функции, по одной на системный вызов. Таким образом, чтобы обратиться к системному вызову READ, программа на С должна вызвать библиотечную процедуру READ.

    Помимо операционной системы и библиотеки системных вызовов все версии Unix содержать большое количество стандартных программ. К этим программам относятся: командный процессор (оболочка), компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами.

    Многие утилиты можно отнести к одной из трех категорий:

    1 Редакторы;

    Фильтры – считывают входную информацию, поступившую либо от пользователя, либо из файла или другого источника, изучают и обрабатывают ее, а затем выдают результат. Для написания скрипта-фильтра используется специальный язык AWK. К фильтрам относятся – grep, sort, wc, pr, cmp, comm., cpio, fmt, fgrep, srd;

    Коммуникационные программы – используются для связи с другими пользователями Вашей системы и других систем.

    Таким образом, мы можем говорить о трех интерфейсах в операционной системе Unix: интерфейс системных вызовов, интерфейс библиотечных функций и интерфейс, образованный набором стандартных обслуживающих программ.

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

    Дистрибутивы Linux

    Дистрибутив Linux – это набор пакетов программного обеспечения, включающий базовые компоненты операционной систем (в том числе, ядро Linux), некоторую совокупность программных приложений и программу инсталляции, которая позволяет установить на компьютер пользователя операционную систему GNU/Linux без привлечения высококвалифицированного эксперта, и набор прикладных программ, необходимых для конкретного применения системы.

    Признаков, по которым различаются отдельные дистрибутивы существует очень много. Вот только некоторые из них:

    ­ ориентация (или назначение) дистрибутива на конкретную область применений;

    ­ требования к аппаратному обеспечению;

    ­ используемая графическая оболочка (например, KDE, GNOME или XFce);

    ­ наличие средств локализации, обеспечивающих поддержку необходимых вам;

    ­ носитель, с которого может запускаться система;

    ­ организация процедуры начальной загрузки системы (System V или BSD);

    ­ используемая система управления пакетами (например, dpkg в Debian, RPM в Fedora Core). Программное обеспечение, содержащееся в пакете, поставляется в одном из двух основных видов: в виде бинарных файлов , которые предназначены для непосредственной установки в вашу систему, без какой-либо дополнительной обработки (например, компиляции) и в виде исходных текстов , которые обычно содержат текст на каком-то языке программирования, заархивированный в формате tar и упакованный программой gzip, а также вспомогательные файлы, необходимые для компиляции приложения из файлов пакета;

    ­ структура каталогов файловой системы (хотя все файловые системы должны по возможности соответствовать стандарту на структуру каталогов файловой системы FHS - Filesystem Hierarchy Standard);

    ­ родословная или история происхождения дистрибутива (большая часть современных дистрибутивов ведет свою родословную либо от Red Hat, либо от Debian);

    ­ состав базового устанавливаемого программного обеспечения;

    ­ доступность дополнительных пакетов;

    ­ наличие и состав коммерческих программ, включенных в дистрибутив;

    ­ предоставляемые инструменты управления системой и так далее...

    Рассмотрев более подробно все аспекты, по которым различаются дистрибутивы, можно констатировать, что существует три существенных критерия классификации дистрибутивов Linux:

    ­ стиль загрузки;

    ­ система управления пакетами;

    ­ назначение дистрибутива.

    5. Файловая система - это часть операционной системы, работающая

    файлами, и предоставляющая способы хранения данных и организации доступа к ним, на информационном носителе или его разделе. В Unix-системах файловая система представляет собой некоторое устройство (жесткий диск или компакт-диск) или раздел диска, используемые для хранения файлов.

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

    Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.

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

    6. Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.

    Рисунок – Размещение файловой системы Ext2 на диске

    Вместо групп цилиндров Ext2 делит диск на группы блоков. Описатель группы содержит информацию о расположении битовых массивов, количестве свободных блоков и i-узлов в группе, а также количество каталогов в группе. В двух битовых массивах (блоковый битовый массив и битовый массив i-узлов) ведется учет свободных блоков и свободных i-узлов. Размер каждого битового массива равен одному блоку.



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: