Исторически , первая файловая система Unix создавала две записи в каждом каталоге: .
указывая на сам каталог и ..
указывая на его родителя. Это обеспечило простой способ обхода файловой системы, как для приложений, так и для самой ОС.
Таким образом, каждый каталог имеет количество ссылок 2 + n, где n - это количество подкаталогов. Ссылки - это запись для этого каталога в его родительском элементе, собственная .
запись каталога и ..
запись в каждом подкаталоге. Например, предположим, что это содержимое поддерева, корень которого находится во /parent
всех каталогах:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
Затем dir
имеет счетчик ссылок 5: dir
запись в /parent
, .
запись в /parent/dir
и три ..
записи в каждой из /parent/dir/sub1
, /parent/dir/sub2
и /parent/dir/sub3
. Так /parent/dir/sub1
как не имеет подкаталога, его счетчик ссылок равен 2 ( sub1
запись в /parent/dir
и .
запись в /parent/dir/sub1
).
Чтобы свести к минимуму количество специальных регистров для корневого каталога, у которого нет «правильного» родителя, корневой каталог содержит ..
запись, указывающую на себя. Таким образом, он также имеет счетчик ссылок 2 плюс количество подкаталогов, где 2 /.
и /..
.
Более поздние файловые системы, как правило, отслеживали родительские каталоги в памяти и, как правило, не нужны .
и ..
существуют как реальные записи; Типичные современные Unix-системы рассматривают .
и ..
как специальные значения как часть кода файловой системы, независимого от типа файловой системы. Некоторые файловые системы по-прежнему включают .
и ..
записи, или делают вид, что на диске ничего не появляется.
Большинство файловых систем до сих пор сообщают количество ссылок на 2 + п для каталогов , независимо от того .
и ..
существуют записи, но есть исключения, например , Btrfs не делает этого.