Директория в информатике¶
Директория — иерархическая структура в файловой системе компьютера, предназначенная для хранения и группировки файлов и поддиректорий. Термин является синонимом понятия «каталог» и широко используется в операционных системах семейств Unix (Linux, macOS), а также в Windows, где соответствующий объект в пользовательском интерфейсе обычно обозначается как «папка». Директории образуют древовидную структуру, каждая из которых может содержать файлы и вложенные директории, формируя иерархию доступа к данным.
¶История и происхождение термина
Понятие директории появилось в ранних многопользовательских и многозадачных операционных системах 1960-х годов, таких как Multics, и было развито в Unix, созданном в конце 1960-х — начале 1970-х годов в Bell Labs. В Unix директория рассматривалась как особый тип файла, содержащий список связей между именами и номерами индексных записей (inode). Именно из Unix термин «directory» перешёл в большинство современных операционных систем. В русскоязычной традиции информатики параллельно используются два перевода: «каталог» (более характерен для документации Microsoft) и «директория» (шире применяется в контексте Unix-систем и сетевых служб).
¶Устройство и структура
Директория в файловой системе хранит таблицу соответствий между человекочитаемыми именами объектов и их внутренними идентификаторами. В файловой системе ext4 (используемой по умолчанию в большинстве дистрибутивов Linux) содержимое директории представляет собой список записей формата «имя — номер inode». Каждая запись связывает имя файла или поддиректории с inode, в котором хранятся метаданные: владелец, права доступа, размер, временные метки и расположение блоков данных.
Каждая директория содержит две специальные записи:
.(точка) — ссылка на саму директорию;..(две точки) — ссылка на родительскую директорию.
Корневая директория (/) является вершиной иерархии; её запись .. ссылается на саму себя, поскольку родительского каталога у неё нет.
¶Пути доступа
Доступ к файлу в директорной структуре осуществляется по пути. Различают два основных типа путей:
- Абсолютный путь начинается с корневой директории и указывает полное расположение объекта:
/home/user/documents/report.txt. - Относительный путь задаётся относительно текущей рабочей директории:
documents/report.txt.
В Windows в качестве разделителя используется обратный слэш (\), в Unix-системах — прямой (/). Современные Windows-версии также поддерживают прямой слэш как разделитель.
¶Права доступа
В Unix-подобных системах доступ к директории регулируется стандартными механизмами прав, состоящими из трёх наборов прав (владелец, группа, остальные) по три права в каждом:
r(чтение) — возможность просматривать список содержимого;w(запись) — возможность создавать, удалять и переименовывать файлы внутри директории;x(исполнение) — возможность переходить в директорию и обращаться к объектам внутри неё.
Директория без права x недоступна для перехода, даже если разрешено чтение. Права изменяются командой chmod, а владелец и группа — командой chown и chgrp.
¶Основные директории Unix-систем
В дистрибутивах Linux используется иерархия каталогов, стандартизированная спецификацией Filesystem Hierarchy Standard (FHS). Ключевые директории:
| Директория | Назначение |
|---|---|
/ | Корень файловой системы |
/bin | Основные утилиты командной строки |
/etc | Системные и пользовательские конфигурационные файлы |
/home | Домашние директории пользователей |
/var | Изменяемые данные: логи, очереди печати, кэш |
/tmp | Временные файлы |
/usr | Программы и данные пользовательского уровня |
/dev | Файлы устройств |
/proc | Виртуальная файловая система с информацией о процессах |
¶Директории в Windows
В Windows-системах иерархия строится на основе дисков, обозначаемых буквами (C:\, D:\). Стандартные системные директории включают C:\Windows (системные файлы), C:\Program Files (установленные программы), C:\Users\<имя пользователя> (профили пользователей). Для программного доступа к файловой системе Windows предоставляет API Win32, включающий функции CreateDirectory, RemoveDirectory, FindFirstFile и другие.
¶Сетевые директории
Понятие директории распространяется и на сетевые файловые системы. Протокол SMB/CIFS позволяет совместно использовать директории между компьютерами в локальной сети, монтируя удалённые каталоги как локальные. В корпоративной среде широко применяется Active Directory — служба каталогов Microsoft, управляющая пользователями, компьютерами и политиками в домене. В Unix-системах для аналогичных целей используется LDAP.
¶Директории в программировании
Пограммный доступ к директориям осуществляется через стандартные библиотеки. В Python это модуль os и pathlib, в C — функции opendir, readdir, closedir из POSIX API. В Java — классы java.nio.file.Path и File. Большинство языков предоставляют возможность обхода дерева директорий, создания, удаления и переименования каталогов.
¶Интересные факты
- Максимальная глубина вложенности директорий ограничена в разных файловых системах по-разному: в ext4 практически отсутствует жёсткое ограничение на глубину, но некоторые утилиты (например,
find) могут упираться в пределы пути, равные 4096 символам. - Удаление непустой директории в Unix требует рекурсивного удаления (ключ
-rу командыrm), что является источником известного риска потери данных. - В файловой системе FAT32 имя директории ограничено 255 символами, а полный путь — 260 символами (ограничение MAX_PATH в Windows).
¶Источники
- Файл: системный ресурс // ГОСТ Р ИСО/МЭК 2382. Стандарты информационных технологий.
- Tanenbaum A. S., Bos H. Modern Operating Systems. — 4th ed. — Pearson, 2015.
- McKusick M. K., Neville-Neil G. V. The Design and Implementation of the FreeBSD Operating System. — 2nd ed. — Addison-Wesley, 2014.
- Filesystem Hierarchy Standard Group. Filesystem Hierarchy Standard. — Version 3.0, 2004.
- Rush K. Windows File System // Microsoft Docs.
