Директории

Для решения этой проблемы современные файловые системы устроены наподобие вложенных друг в друга папок — каталогов, или директорий (folders, catalogues, directories). Можно представлять файловую систему как большую папку (корневая директория), в которой могут лежать как обычные документы (файлы), так и другие папки (поддиректории). Вложенные папки устроены подобно той самой большой (корневой) папке.

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

Наглядно представить такое дерево можно с помощью программы tree:

% tree docbook docbook ├── linux │ ├── cmdline.docbook │ ├── filesystems.docbook │ ├── linux.docbook │ └── users.docbook └── perl ├── dioph.docbook ├── factor.docbook ├── factorial-iterative.docbook ├── gcd-iterative.docbook ├── gcd.docbook ├── hello.docbook ├── life.docbook ├── monte-carlo.docbook ├── oop.docbook ├── perl-problems.docbook ├── permutations.docbook ├── preface.docbook ├── primes.docbook ├── re.docbook ├── reference-procedures.docbook ├── romannumerals.docbook ├── seq.docbook ├── sqphones.docbook ├── tetris.docbook └── wc.docbook 2 directories, 24 files

Этот пример показывает, что директория docbook, расположенная в текущей директории, содержит две поддиректории: linux и perl. Первая из них содержит файлы cmdline.docbook, filesystems.docbook, и т. д. Во второй находятся файлы dioph.docbook, factor.docbook и т. д. Пусть нас не смущает, что дерево растёт вниз.

Программа find позволяет вывести полное содержимое директории в другом формате:

% find docbook docbook docbook/perl docbook/perl/seq.docbook docbook/perl/factor.docbook docbook/perl/hello.docbook docbook/perl/sqphones.docbook docbook/perl/primes.docbook docbook/perl/preface.docbook docbook/perl/perl-problems.docbook docbook/perl/gcd-iterative.docbook docbook/perl/factorial-iterative.docbook docbook/perl/reference-procedures.docbook docbook/perl/oop.docbook docbook/perl/monte-carlo.docbook docbook/perl/life.docbook docbook/perl/re.docbook docbook/perl/romannumerals.docbook docbook/perl/wc.docbook docbook/perl/gcd.docbook docbook/perl/tetris.docbook docbook/perl/dioph.docbook docbook/perl/permutations.docbook docbook/linux docbook/linux/filesystems.docbook docbook/linux/linux.docbook docbook/linux/users.docbook docbook/linux/cmdline.docbook

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

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

При использовании директорий не требуется давать каждому файлу и директории в файловой системе уникальное имя. Достаточно, чтобы уникальными были имена файлов в пределах каждой из директорий. Например, возможно мирное сосуществование файлов /home/borodin_k/.bash_history, /home/antonov_a/.bash_history и /root/.bash_history. В этом примере все три файла называются одинаково — .bash_history. Но первые два находятся в разных поддиректориях (borodin_k и antonov_a), расположенных в директории home, а та, в свою очередь, является поддиректорией корневой директории (/). Третий файл лежит в поддиректории root корневой директории.

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

Абсолютная номенклатура не всегда бывает удобной, особенно если мы много работаем с файлами одной глубоко вложенной директории. Нам пришлось бы называть такие файлы по их длинным именам, различающимся только в их последней части (в том, что идёт после последней косой черты). Есть и другая номенклатура — относительная, где вложенные директории отсчитываются от так называемой текущей директории.

Каждая программа в каждый момент времени находится в определённой директории, который для неё в этот момент времени называется текущим. Если продолжать аналогию с деревьями, программа «сидит» на определённой ветке дерева файлов и способна «перепрыгивать» с одной ветки на другую. Так что если программа «сидит» в директории /home, то обратиться к первому из названных выше файлов она может по относительному имени borodin_k/.bash_history.

Информатика-54