Для решения этой проблемы современные файловые системы устроены наподобие вложенных друг в друга папок — каталогов, или директорий (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
.