Monday, October 4, 2010

hard links в unix

Используя команду ls -l, мало кто обращает внимание на вторую по счету колонку в выводе. В ней выводится количество ссылок (hard link) на файл. С обычными файлами все понятно: при создании файла на него есть ровно одна ссылка:
$ touch foo
$ ls -l
-rw-r--r-- 1 doer wheel 0 4 окт 23:02:28 2010 foo

С директориями немного интересней.

Каждая директория всегда имеет как минимум две ссылки на себя: основное имя и ссылка ., содержащаяся в самой директории:
$ mkdir foo
$ ls -l
drwxr-xr-x 2 doer wheel 512 4 окт 23:03:49 2010 foo


Кроме того, каждая директория содержит ссылку на родительский каталог - ...
А поскольку создавать жесткие ссылки на директории в Unix как правило запрещено, число ссылок на директорию косвенно указывает на число под-директорий, содержащихся в ней.