Структура каталогов 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 находятся собранные пакеты из исходников).

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

Операционная система (далее - ОС) 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 , корень ). Все разделы жесткого диска (если их несколько) представляют собой структуру подкаталогов, "примонтированых" к определенным каталогам, схематично это можно представить следующим образом:

/- |-/etc-|-/etc/X11-|-/etc/X11/xinit.d | | |-... | |-files | |-... |-/opt |-/home <- |-/user1-|-/user1/Desktop # примонтированный раздел ext3, | | |-/user1/Documents # содержащий свое дерево каталогов | | |-... # (/home - точка монтирования) | |-/user2 | |-.... |-/usr |-/var

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

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

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

$ ls -li 193 drwxr-xr-x 1 mc-sim root 368 Mar 30 2008 bin 1 drwxr-xr-x 1 mc-sim root 0 Jan 1 1970 dev 197 lrwxrwxrwx 1 mc-sim root 7 Mar 30 2008 etc -> tmp/etc ....

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

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

  • о владельце объекта ФС
  • последнем времени доступа
  • размере объекта ФС
  • указании файл это или каталог
  • права доступа
Структура и описание каталогов Linux
. ссылка на текущий каталог. Данный элемент есть в каждом каталоге файловой структуры.
.. ссылка на родительский каталог. Данный элемент есть в каждом каталоге файловой структуры. (в корне - / данный элемент указывает на саму корневую систему)
/ корневой каталог ФС, сюда "завязаны" все остальные подкаталоги первого уровня
/bin/ Бинарные программы, основные программы для работы в системе: командные оболочки, файловые утилиты и.т.д.
/boot/ статичные файлы загрузчика (образ ядра, файлы GRUB, LILO)
|-- /grub/
|-- /lilo/ Каталог конфигурационных файлов
| config-kern_ver файл текущей конфигурации ядра
| initrd.img-kern_ver загрузочный образ инициализации initrd
| vmlinuz-kern_ver образ ядра Linux
/dev/ каталог, содержащий файлы устройств.
В Linux вообще всё рассматривается, как файл, даже различные устройства, такие как принтеры, жёсткие диски, сканеры и т.д. Для получения доступа к определённому устройству, необходимо чтобы существовал специальный файл. Аналогично устроено большинство UNIX-подобных операционных систем
|-- /pts/ фиктивная файловая система, представляющая собой файловую структуру, которая отражает псевдотерминалы пользователей вошедших в систему
| |-- 0 устройство псевдотерминала pts/0
| |-- 1 устройство псевдотерминала pts/1
| --- n устройство псевдотерминала pts/n
|-- null т.н. "черная дыра" или "урна для битов". Вся информация, отправляемая на данное устройства - пропадает/уничтожается.
--- zero "генератор нулей"
/etc/ Системные конфигурационные файлы, стартовые сценарии, конфигурационные файлы графической системы и различных приложений. Из данного каталога хотелось бы выделить следующие файлы:
|-- /default/ содержит системные Файлы конфигураций в дистрибутивах Debian (аналог /etc/sysconfig/ в RedHat)
|-- /logrotate.d/ директория конфигурационных файлов демона автоматической обработки логов;
| |-- apache
| |-- squid конфигурация логирования apache
| |-- syslog конфигурация логирования системных логов
| --- ...
|-- /pam.d/ каталог содержит файлы конфигурации PAM (указывают методы аутентификации в приложениях, использующих PAM)
|-- /ppp/ директория содержит конфигурации PPP-соединений:
| |-- options содержит общую для всех PPP-соединений конфигурацию;
| |-- options.* конфигурация конкретно взятого соединения (например модемное options.ttyS1)
| |-- ip-up скрипт выполняемый при/для соединения (демоном pppd);
| --- ip-down скрипт выполняемый при/для разъединении (демоном pppd).
|-- /rc.d/ директория системы (содержит сценарии инициализации)
| |-- /init.d/ содержит скрипты, для управления системными демонами (сервисами);
| --- /rcX.d/ директории уровней запуска X, содержат ссылки на скрипты в init.d;
|-- /samba/ содержит файлы конфигурации samba:
| |-- smb.conf главный конфигурационный файл SAMBA;
| |-- smbusers описывает соответствие SAMBA пользователей к системным пользователям;
| --- smbpasswd содержит хеши пользователей SAMBA, пароли устанавливаются утилитой smbpasswd.
|-- /ssh/ Каталог конфигурации демона sshd
| |-- ssh_config Конфигурационный файл ssh клиента
| --- sshd_config Конфигурационный файл ssh - сервера
|-- /sysconfig/ содержит системные Файлы конфигураций в дистрибутивах RedHat (аналог /etc/default/ в Debian)
| |-- keyboard описание текущей раскладки клавиатуры;
| |-- desktop установки графической среды (KDE,GNOME..);
| |-- network файл конфигурации сетевой подсистемы
| --- i18n конфигурация общесистемной локали (локаль отдельных пользователей может содержаться в {home}/i18n);
|-- /security/ содержит Файлы описывающие безопасность системы:
| |-- console.perms правила изменения прав доступа к устройствам, при аутентификации;
| |-- limits.conf конфигурация лимитов пользователей.
| --- network конфигурация сети;
|-- /skel/ шаблон директории пользователя (в момент создания пользователя содержимое директории пользователя копируется отсюда), своеобразный аналог каталога C:\Documents and settings\Default User\ в Windows.
|-- /xinetd.d/ директория содержит файлы конфигураций отдельных сервисов для суперсервера xinetd;
|-- /X11/ /fs/config содержит перечень каталогов со шрифтами для X;
| |-- XF86Config Файл конфигурации X (XFree86);
| --- xorg.conf Файл конфигурации X (XOrg);
|-- at.allow Список пользователей, разрешающий (allow) или запрещающий (deny) выполнение утилиты at
|-- at.deny
|-- cron.allow Список пользователей, разрешающий (allow) или запрещающий (deny) выполнение
|-- cron.deny
|-- anacrontab конфигурация задач выполняемых anacron;
|-- crontab конфигурация задач выполняемых cron;
|-- ethers Файл соответствия аппаратных MAC адресов сетевым IP адресам в сети, в случае несоответствия доступ для хоста будет закрыт;
|-- export конфигурация NFS-ресурсов доступных извне;
|-- filesystems список ФС, поддерживаемых ядром (отсюда берется ФС, если она не указана в /etc/fstab)
|-- fstab список ФС, монтирующихся автоматически при загрузке
|-- group база данных
|-- gshadow файл паролей групп пользователей
|-- hostname текущее имя машины;
|-- hosts перечень хостов и соответствующих им IP-адресов;
|-- host.allow список хостов которым вход разрешен;
|-- host.deny список хостов которым вход запрещен (для libc ver 5);
|-- host.conf указывает где и в каком порядке искать имена хостов (для libc ver 6);
|-- inittab ;
|-- inputrc конфигурация ресурсов ввода с клавиатуры;
|-- issue сообщение, выводимое при локальном подключении к системе
|-- issue.net сообщение, выводимое при удаленном подключении к системе
|-- ld.so.conf файл конфигурации, содержащий список каталогов, в которых , кроме указанных путей, компоновщик ищет в каталогах /lib и /usr/lib
|-- ld.so.cache кэш библиотечных файлов, для более быстрого поиска библиотек (своеобразный индекс)
|-- login.defs описывает поведение login и su;
|-- logrotate.conf конфигурация демона
|-- lilo.conf конфигурация boot-загрузчика LILO;
|-- man.conf конфигурация системы страниц помощи, команда man;
|-- motd сообщение, выводимое всем пользователям после ввода пароля и перед запуском интерпретатора, т.н. "сообщение дня"
|-- mtab Список текущих примонтированных ФС. Обычно, этот файл должен создаваться, как только монтируется новая файловая система.
|-- netgroup файл определяет сетевые группы, используемые для проверки прав доступа при выполнении удаленного входа.
|-- nologin наличие этого файла запрещает пользователям входить в систему с выдачей сообщения в файле;
|-- nsswitch.conf конфигурация последовательности поиска имен по различным источникам;
|-- passwd
|-- printcap Файл конфигурации принтеров;
|-- profile сценарий-профиль для интерпретатора BASH (выполняется после регистрации в системе и используется для всех пользователей системы);
|-- protocols файл описывает номера протоколов, названия и описания.
|-- resolv.conf конфигурация резолвера имён, содержит список DNS-серверов;
|-- rpc файл описывает службы RPC (соответствие имя сервера RPC, номер программы RPC и псевдонимы)
|-- services содержит сопоставления номеров портов/сокетов именам служб
|-- shadow
|-- sysctl.conf содержит команды для автоматической инициализации sysctl-параметров ядра;
|-- syslog.conf конфигурация демона системного логера (syslogd);
|-- sudoers указание на то какие пользователи и какие программы могут быть запущены с привилегиями root используя sudo.
--- xinetd.conf конфигурация суперсервера Internet (централизованное управление сокетами/портами);
/home/ {имя_юзера} каталог, содержащий подкаталоги пользователей (настройки интерфейса, личные файлы)
|-- .bashrc профиль конкретного пользователя для BASH (запускается при запуске bash или запуске копии bash);
|-- .cshrc профиль конкретного пользователя для TCSH;
|-- .bash_profile профиль конкретного пользователя для BASH (запускается при каждом входе в систему).
|-- .inputrc конфигурация ресурсы ввода с клавиатуры конкретного пользователя.
|-- .Xauthority файл авторизации для запуска X-приложений удаленно, файлы на удаленных машинах должны соответствовать;
|-- .xinitrc сценарий загрузки X сервера конкретного пользователя;
--- .plan
.project
.forward
данные файлы используются утилитой finger для вывода информации о пользователе
/lib/ Системные библиотеки, необходимые для программ и модули ядра. (В Windows библиотеки представляют собой dll модули)
/lost+found В lost+found скидываются файлы, на которых не было ссылок ни в одной директории, хотя их inod не были помечены как свободные.
/media/ Каталог для монтирования съемных носителей (CD, Flash)
|-- /cdrom/
/mnt/ В каталоге содержаться временные точки монтирования для устройств
/opt/ Дополнительные пакеты программ. Если программа установленная сюда больше не нужна, то достаточно удалить ее каталог без процедуры денсталляции. Сюда могут устанавливается программы не являющиеся частью дистрибутива. (например /opt/openoffice.org).
/proc/ Виртуальная ФС, хранящаяся в памяти компьютера при загруженной ОС. В данном каталоге расположены самые свежие сведения обо всех процессах, запущенных на компьютере. Содержимое каждого файла определяется в реальном времени. среди данного каталога, хотелось бы особо выделить следующие файлы и каталоги:
|-- /net/
| -- arp текущая arp-таблица
|-- /sys/kernel/
| |-- cap-bound управление дополнительными пра, как сделано в последней строке для дискеты.tr сценарий-профиль для интерпретатора BASH (выполняетсtd/tdtda name="proc"я после регистрации в системе и используется для всех пользователей системы);вами (root) (0 – root права аннулируются);
| |-- hostname текущее имя Компьютера
| |-- domainname Имя домена компьютера
| |-- osrelease версия ядра системы;
| |-- ostype тип ОС (Linux, *BSD, ...);
| --- version дата сборки ядра.
|-- cpuinfo Текущая информация о процессоре
|-- cmdline список параметров, переданных ядру при загрузке
|-- devices системные устройства
|-- dma Задействованные в данный момент DMA каналы
|-- interrupts Счетчики количества прерываний IRQ в архитектуре i386.
|-- ioports порты ввода/вывода
|-- filesystems поддерживаемые ФС
|-- loadvg информация о загруженности системы
|-- kcore содержимое физической памяти в текущий момент
|-- kmsg сообщения, выдаваемые ядром (копия syslog)
|-- mdstat отображение статистики программных RAID массивов
|-- meminfo информация о памяти
|-- modules загруженные модули ядра
|-- mounts смонтированные ФС
|-- partitions информация о разделах дисков
|-- pci Полный список всех PCI-устройств, найденных во время инициализации ядра, а также их конфигурация.
|-- swaps информация о всех своп-разделах, подключенных к системе
|-- uptime время работоспособности
|-- version версия ядра
|-- /цифровые/ каталоги, содержащие в названии наборы цифр, соответствуют GID -номеру процесса и содержат в себе информацию о работающем процессе, GIDу которого соответствует.
| |-- /fd/* содержит указатели на все, открытые процессом файлы
| |-- cmdline полную командную строку запуска процесса до тех пор, пока процесс не будет "выгружен" или не станет "зомби"
| |-- cwd символьная ссылка на текущий рабочий каталог процесса
| |-- environ содержит окружение процесса
| |-- exe содержит мягкую ссылку на бинарник процесса
| |-- limits содержит информацию о лимитах процесса (например, лимит открытых файлов, приоритет процесса и т.п.)
| |-- root мягкая ссылка на каталог пользователя root для процесса
| --- status Информация о процессе, представленная в довольно удобном для просмотра виде. Она содержит, в частности, следующие строки:
  • Имя исполняемого файла процесса в скобках;
  • Статус процесса;
  • Идентификатор процесса
  • Идентификатор родительского процесса
  • Идентификатор группы процессов процесса
  • и др.
/root/ домашний каталог пользователя root, данный каталог должен быть в корневой ФС, чтобы администратор мог войти в нее.
/sbin/ В данном каталоге содержаться основные системные бинарники, команды для системного администрирования, а также программы, выполняемые в ходе загрузки ОС. Здесь находятся элементы, запускаемые в фоновом режиме, в каком то смысле данный каталог является аналогом папки c:\Windows\system\ и c:\Windows\system32\.
--- shutdown утилита остановки системы
/srv/ данные предоставляемых сервисов от ОС
/sys/ это директория, к которой примонтирована виртуальная файловая система sysfs, которая добавляет в пространство пользователя информацию ядра Linux о присутствующих в системе устройствах и драйверах. (В версии ядра ниже 2.6 не использовалась)
|-- /block/ каталог содержит подкаталоги всех блочных устройств, присутствующих в данный момент в системе.
|-- /bus/ В этом каталоге находится список шин, определенных в ядре Linux (eisa, pci и т.д.).
--- /class/ Каталог содержит список группированных устройств по классам (printer, scsi-devices и т.д.).
/tmp/ Временные файлы. Данный каталог аналогичен c:\Windows\temp. Обычно Linux очищает этот каталог во время загрузки.
/usr/ В данном каталоге хранятся все установленные пакеты программ, документация, исходный код ядра и система X Window. Все пользователи кроме суперпользователя root имеют доступ только для чтения. Может быть смонтирована по сети и может быть общей для нескольких машин.
|-- /bin/ Директория дополнительных программ для всех учетных записей.
|-- /include/ Заголовочные файлы С++.
|-- /lib/ Системные библиотеки для программ, расположенных в каталоге/usr
| /local/ По стандарту /usr должен быть общим для нескольких компьютеров и смонтирован по сети, а /usr/local должен содержать установленные пакеты программы только на локальной машине (к примеру, /usr - бюджет семьи, а /usr/local - личный кошелек каждого). Но чаще всего директория /usr/local используется для установки программ, которые не предназначены для конкретного дистрибутива (к примеру для пакетного дистрибутива Ubuntu в /usr находятся "родные" установленные пакеты, а /usr/local находятся собранные пакеты из исходников).
| |-- /bin/
| |-- /lib/
| |-- ...
|-- /sbin/ Дополнительные системные программы.
|-- /share/ Общие данные установленных программ.
| |-- /icons/ В каталоге находятся все иконки системы.
| --- /doc/ Директория, в которой обычно находится справочная документация по установленным программам.
|-- /src/ Каталог содержит исходные коды (например, здесь располагаются исходные коды ядра).
|-- /X11R6/bin/ Х ссылка на текущий X сервер;
|-- magic.mime файлы, хранящие "магическое число". Данное число описывает тип файла для утилиты file .
--- magic
/var Здесь находятся часто меняющиеся данные (журналы операционной системы, системные log-файлы, cache-файлы и т. д.)
|-- /cache В этом месте хранятся все кэшированные данные различных программ.
|-- /lib Постоянные данные, изменяемые программами в процессе работы (например, базы данных, метаданные пакетного менеджера и др.).
| --- /rpm/ база данных пакетного менеджера RPM
|-- /lock Здесь лежат lock-файлы, указывающие на занятость некоторого ресурса.
|-- /log/ в данном каталоге лежат все лог файлы системы
| |-- wtmp (бинарный формат) содержит удачные попытки входа и выхода в систему
| |-- utmp (бинарный формат) содержит текущих вошедших пользователей в систему
| |-- lastlog (бинарный формат) содержит, когда каждый пользователь последний раз входил
| -- btmp (бинарный формат) содержит НЕ удачные попытки входа/выхода в систему
|-- /spool Задачи, ожидающие обработки (например, очереди печати, непрочитанные или не отправленные письма, задачи cron и т. д.).
--- /www В этом месте размещаются Web-страницы для сервера Apache.

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

На сегодня все. В следующей статье будет сделана шпаргалка по основным командам Linux.

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

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

К чему я веду? А к тому, что пользователь Windows, который впервые увидел Linux, конечно, сможет с ним совладать (выйти в Интернет или посмотреть видеозапись), однако, стоит только возникнуть какой-либо внештатной ситуации, и он уже не будет знать, что делать!

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

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

Убедиться в этом несложно на примере Linux Mint. Давайте откроем папку "Компьютер" на Рабочем столе и посмотрим на её содержимое:

Как видим, здесь, кроме подключённой флешки, нет ни одного привычного нам раздела жёсткого диска, кроме устройства "Файловая система". Именно здесь (а точнее, в корневом каталоге с названием "/", который иногда ошибочно называют "/root/", хотя это отдельная папка в "/") по умолчанию и хранятся все данные, включая системные и пользовательские файлы! Весьма странно и непонятно на первый взгляд. Давайте разбираться...

Дело в том, что Linux использует кардинально отличающийся от Windows подход к организации и работе с файловой системой. Если в Windows основой являются разделы жёсткого диска, на которых мы можем создавать произвольные папки с файлами, то в Линуксах всё базируется на чёткой иерархии каталогов, не зависящей от разметки винчестера и регламентированной стандартом FHS (сокр. англ. "Filesystem Hierarchy Standard" - "стандарт иерархии файловой системы").

Понятие дисков и их разделов, конечно, существует и в Linux, но здесь первичной является именно структура папок, в одну из которых (как правило, "/media/", "/dev/" или "/mnt/") и монтируются различные типы дисков. Сами же диски обычно именуются в зависимости от типа их подключения: SATA - sda (sdb и т.д. в зависимости от их количества), а IDE - hda (hdb...). Разделы же на дисках просто нумеруются (например, sda1, hdb2).

Отдельные каталоги Linux могут быть вынесены на разные разделы разных дисков и даже на удалённые сетевые хранилища. Единственное условие - все они должны быть примонтированы до загрузки системы. Обычно это делается автоматически при запуске Linux, но иногда может потребоваться произвести и ручную правку параметров.

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

Основные папки Linux

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

В принципе, знать на память назначения всех папок не обязательно, однако, такое знание приветствуется. Поэтому предлагаю в виде таблицы рассмотреть основные каталоги, их назначение и частичное сравнение по нему с компонентами Windows (описываю по наличествующей у меня Linux Mint, поэтому список папок на других системах может немного отличаться).

Каталог Назначение Аналог Windows (если есть)
/ Хранит всю структуру каталогов системы Диск C:
/bin/ Хранит бинарные исполняемые файлы системных утилит C:\Windows\System32
/boot/ Хранит ядро системы и прочие загрузочные файлы C:\Windows
/cdrom/ Хранит точки монтирования для дисководов -
/dev/ Хранит файлы подключённых устройств по типам (жёсткие диски, видеоустройства и т.п.) или псевдоустройств (например, /dev/null и /dev/zero) -
/etc/ Хранит некоторые системные файлы настроек и настройки установленных программ Частично C:\Windows\System32, частично C:\Program Files
/home/ Хранит домашние папки пользователей системы с их настройками и данными C:\Documents and Settings или C:\Users
/lib/ Хранит большинство библиотек стандартных программ и некоторых установленных Частично C:\Windows и C:\Windows\System32
/lost+found/ Хранит файлы, которые обычно в результате каких-либо сбоев остались непрописанными ни в одном из каталогов, но в то же время и не помечены для перезаписи. Пользователь обычно не имеет к ней доступа Частично C:\Recycler (Корзина)
/media/ Хранит точки монтирования для всех съёмных носителей (флешки, дисководы, съёмные жёсткие диски) -
/mnt/ Хранит временные точки монтирования устройств и их файловых систем, которые были добавлены вручную -
/opt/ Хранит дополнительные пакеты различных программ C:\Users\Admin\Application Data
/proc/ Хранит данные о запущенных процессах и работе ядра системы Частично Диспетчер задач
/root/ Хранит данные суперпользователя (root) системы Частично C:\Users\Admin
/run/ Хранит временные файлы, которые выполняются в процессе загрузки системы
/sbin/ Хранит большинство системных программ для администрирования и настройки ОС Частично C:\Windows\System32
/srv/ Хранит файлы, отвечающие за работу серверной части системы и различных протоколов передачи данных по сети (HTTP, FTP и т.п.) Частично C:\Windows\System32
/sys/ Хранит виртуальную файловую систему с данными об установленных устройствах и драйверах Частично Диспетчер устройств
/tmp/ Хранит временные файлы C:/Windows/Temp
/usr/ Хранит данные пользователей системы и файлы установленных вручную программ. Частично C:\Users\
/var/ Хранит файлы с различными изменяющимися данными, логи, кеши и пр. -

Кроме папок в самом корневом каталоге стоит также обратить внимание на некоторые вложенные директории:

Каталог Назначение Аналог Windows (если есть)
/etc/X11/ Хранит файлы настроек системы отображения окон X Window System -
/etc/samba/ Хранит файлы настроек сервера Samba, который служит для связи c сетевыми папками Windows -
/home/username/ Хранит файлы и конфигурацию учётной записи конкретного пользователя (Домашняя папка) C:\Users\Username
/usr/bin/ Хранит ряд программ, которые нужны для работы в многопользовательском режиме -
/usr/share/ Хранит общие данные установленных программ -
/usr/src/ Хранит файлы с исходными кодами ядра системы -
/var/cache/ Хранит кеши программ и скачанные из репозитория пакеты программ -
/var/games/ Хранит сохранения и достижения установленных игр -
/var/log/ Хранит логи (журналы) системы и установленных программ -
/var/mail/ Хранит настройки почтовых ящиков пользователей -
/var/run/ Хранит данные о запущенных процессах и демонах Частично Диспетчер задач
/var/tmp/ Хранит временные файлы, сохраняемые при перезагрузке системы -
/var/www/ Хранит веб-страницы, обрабатывающиеся средствами локального сервера -

Немного о файловых системах

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

В Windows мы привыкли пользоваться традиционной NTFS и не морочить себе голову (ну, ещё FAT32 на флешках или UDF на дисках). В мире же Линуксов всё гораздо более разнообразно. Здесь имеется поддержка всех ФС Windows, но рекомендуется использовать специальные системы, оптимизированные под UNIX-подобные ОС.

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

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

  1. Ext4 - журналируемая файловая система, которая является стандартной для большинства современных дистрибутивов Linux. Она хорошо защищена от проблем фрагментации и оптимизирована для работы с большими файлами. Если Вы при установке не форматировали раздел под систему вручную, то, скорее всего, у Вас стоит именно Ext4.
  2. Ext2 - нежурналируемая файловая система, которая была основной для старых дистрибутивов Linux (до 2000-х). Она имеет ряд ограничений на работу с большими файлами, однако, в то же время, является и самой быстрой ФС, поэтому её часто используют в различных сравнительных тестах как эталонную.
  3. Reiser4 - журналируемая файловая система, которую многие продвинутые пользователи рекомендуют к использованию на Linux. Её преимущество в хорошей стабильности и высокой скорости работы, которую, к тому же, можно ещё более повысить за счёт активации специального плагина для сжатия данных.
  4. btrfs (также B-tree FS) - журналируемая файловая система, разработанная известной компанией Oracle довольно недавно (в 2007 году). К её особенностям относятся хранение индекса файлов в так называемых "B-деревьях" - иерархических структурах, которые максимально оптимально используют ресурсы оперативной памяти за счёт небольшой глубины вложения данных.
  5. SWAP - особый вид нежурналируемой файловой системы, которая реализует структуру хранения данных, аналогичную ячеистой структуре оперативной памяти. За счёт этого используется для реализации файла подкачки в Linux.

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

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

Разметка диска

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

Как раз первым вариантом разметки и является вынос каталога "/home/" на отдельный раздел диска. То есть, фактически нам нужно разбить диск на три раздела:

Если Вы планируете двойную загрузку с установкой Windows, то к рассмотренным выше трём разделам на место sda1 и sda2 лучше поставить два раздела, отформатированных в NTFS: один под Диск C, а второй под Диск D, соответственно.

Более же продвинутые пользователи склонны делать более сложную схему диска с учётом разделения его на отдельные загрузочные области и области выполнения программ:

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

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

В процессе запуска с LiveCD Вам будет задан ряд вопросов по поводу вариантов загрузки. Везде оставляем всё по умолчанию, кроме экрана с выбором языка. Там нужно будет вписать номер, соответствующий русскоязычному интерфейсу (у меня это был "22"). Во всех остальных вопросах просто жмём Enter и в результате попадём на виртуальный рабочий стол ОС Debian с запущенным GParted:

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

  1. Выделяем существующий раздел, который нужно разделить, и жмём кнопку "Изменить размер или переместить", либо аналогичный пункт в контекстном меню.
  2. В открывшемся окошке при помощи полозков или окошек для ввода чисел задаём новый размер раздела и его отступ от от начала или конца диска (помним, что корень и своп лучше размещать ближе к началу).
  3. Выделяем новосозданную неразмеченную область и нажимаем кнопку "Новый" на панели инструментов или в контекстном меню.
  4. В открывшемся окошке задаём тип файловой системы, метку тома и иные параметры.
  5. Повторяем вышеописанные действия нужное количество раз, после чего применяем все изменения и дожидаемся завершения их выполнения.

Теперь осталось немного. Устанавливаем систему в корневой каталог (если она ещё не была установлена) и загружаем её. Сейчас все каталоги находятся на одном разделе и нам нужно перемонтировать их на другие, специально созданные для этого области диска. Сделать это можно почти полностью в визуальном режиме или при помощи терминала. Чтобы было понятнее рассмотрим процесс переноса на примере каталога /home/ в полувизуальном режиме.

Если Вы решили делать всё в визуальном, то откройте, например, папку /mnt/ или /media/ и в ней создайте временную папку (назовём её /newhome/) для переноса данных. Теперь всё-таки придётся запустить терминал для того чтобы примонтировать новосозданную папку к разделу, на который мы хотим перенести папку /home/. Делается это командой вида:

Естественно, что вместо "ext4" Вы будете указывать свою файловую систему, а вместо "sda5" раздел, на который будете переносить папку. Когда раздел примонтируется и папка окажется на нём, откроем её и скопируем туда всё текущее содержимое каталога /home/. По окончании копирования отмонтируем раздел от папки следующей командой:

$sudo umount /mnt/newhome

Теперь существующую папку /home/ можно либо полностью удалить (а лучше переименовать, например, в /oldhome/) и создать заново, либо просто полностью очистить. Главное, чтобы у нас появился пустой каталог /home/. Теперь примонтируем сюда наш раздел со скопированными данными:

$sudo mount /dev/sda5 /home

Если всё прошло успешно, то в каталоге /home/ появятся все файлы, которые мы скопировали. То есть, фактически перенос завершился успешно. Осталось только закрепить успех и сделать так, чтобы не пришлось каждый раз вручную монтировать наш каталог при загрузке системы. Для этого воспользуемся правкой файла fstab (сокр. от англ. "file systems table" - "таблица файловой системы"), который находится в каталоге /etc/. Откроем его любым текстовым редактором и в самом конце допишем такую строчку:

/dev/sda5 /home ext4 nodev,nosuid 0 2

Этим мы "говорим" системе буквально следующее: на разделе /dev/sda5 находится каталог /home/, отформатированный в системе ext4, в котором нельзя создавать каталог с конфигурацией устройств (/dev/), а также запрещены операции с suid и sgid битами, отключено резервное копирование и монтирование файловой системы происходит во второй проход (в первый всегда монтируется корневая система).

Перезагружаемся и радуемся:) Для истинных же гиков скажу, что все операции (кроме правки fstab) можно было проделать прямо в консоли примерно такой последовательностью команд:

$sudo mkdir /mnt/newhome

$sudo mount -t ext4 /dev/sda5 /mnt/newhome

$find . -depth -print0 | sudo cpio --null --sparse -pvd /mnt/newhome/

$sudo umount /mnt/newhome

$sudo mv /home /oldhome

$sudo mkdir /home

$sudo mount /dev/sda5 /home

sudo gedit /etc/fstab

Выводы

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

Потратив немного времени на оптимизацию структуры каталогов Вы сделаете свой Linux более надёжным в плане хранения информации и в будущем убережёте много собственных нервов и сил!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

Понимание файловой системы 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, контролировать вентиляторы и многое другое.

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

Операционная система 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 -подобных операционных систем. Во многих... одна древовидная структура каталогов, и эта структура может занимать несколько разделов. Когда файловая система монтируется...



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

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

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