$ pwd
/usr/you
$ mkdir recipes
$ cd recipes
$ pwd
/usr/you/recipes
$ mkdir pie cookie
$ ed pie/apple
...
$ ed
...
$
Заметьте, как легко ссылаться на вложенные каталоги. Файл
pie/apple
/usr/you/recipes/pie
recipes/apple.pie
recipes
recipes/pie/crust
ls
$ cd
$ ls
junk
recipes
$ file *
junk: ascii text
recipes: directory
$ ls recipes
cookie
pie
$ ls recipes/pie
apple
crust
$
Эту часть файловой системы можно изобразить графически:
Рис. 2.1: Часть файловой системы
С помощью команды
du
$ du
6 ./recipes/pie
4 ./recipes/cookie
11 ./recipes
13 .
$
Смысл имен файлов понятен; числа соответствуют количеству блоков на диске (обычно размер блока составляет 512 или 1024 байта) для хранения каждого файла. При использовании каталога число показывает, сколько блоков задействовано всеми файлами этого каталога, включая вложенные каталоги и сам каталог.
Команда
du
-a
du
$ du -а
2 ./recipes/pie/apple
3 ./recipes/pie/crust
6 ./recipes/pie
3 ./recipes/cookie/choc.chip
4 ./recipes/cookie
11 ./recipes
1 ./junk
13 .
$
Выходной поток команды
du -a
$ du -a | grep choc
3 ./recipes/cookie/choc.chip
$
Напомним (см. гл. 1), что имя
'.'
du
'.'
junk
./junk
Несмотря на то, что каталоги играют в системе важную роль, они представляются в файловой системе как обычные файлы. Эти каталоги можно читать, но в отличие от традиционных файлов их нельзя создавать и в них нельзя писать. Для сохранения целостности системы и файлов пользователей ядро берет на себя контроль за содержимым каталогов.
Теперь представим содержимое каталога в байтовой форме:
$ od -cb
000000 4 ; . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
064 073 056 000 000 000 000 000 000 000 000 000 000 000 000
000020 273 ( . . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
273 050 056 056 000 000 000 000 000 000 000 000 000 000 000
000040 252 ; p е ц е п т ы \0 \0 \0 \0 \0 \0
252 073 256 243 263 243 255 260 273 000 000 000 000 000 000
000060 230 = j u n k \0 \0 \0 \0 \0 \0 \0 \0 \0
230 075 152 165 156 153 000 000 000 000 000 000 000 000 000
000100 $
Видите имена файлов, "спрятанные" здесь? Формат каталога — это комбинация двоичного и текстового представлений. Каталог строится из фрагментов по 16 байт, причем последние 14 байт здесь содержат имя файла, дополненное символом NUL из ASCII (нулевой код, имеющий значение 0), а первые два байта указывают системе, где находится служебная информация, относящаяся к файлу (мы вернемся к этому вопросу позднее). Каждый каталог начинается двумя записями:
'.'
'..'
$ cd
$ cd recipes
$ pwd
/usr/you/recipes
$ cd ..; pwd
/usr/you
$ cd ..; pwd
/usr