UNIX: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 34:
К именам каталогов (абсолютным и относительным) можно в конце добавлять слеш. Он ни на что не влияет.
 
<u>Во втором приближении</u>, каталоги содержат не сами файлы (и какталоги), а имена файлов (и какталогов) и ссылки на них. Благодаря этому один и тот же файл (но не каталог) может содержаться под разными именами в разных каталогах (или под одним и тем же именем в разных каталогах, или под разными именами - в одном и том же). Создание новой ссылки на файл (но не каталог) осуществляется командой ln, например
:'''ln kartinki/masha.jpg devushki/masha.jpg'''
Возможность существования нескольких прямых ссылок на каталог могла бы приводить к утечкам памяти на диске. На каталоги можно делать символьные ссылки (см. ниже).
 
Ссылки равноправны и (почти) не занимают места. Если на файл размером в 1 мегабайт есть 100 ссылок, используется 1 мегабайт (или чуть больше) дискового пространства. Но ссылки должны быть в пределах одной файловой системы: нельзя из каталога, принадлежащего одной файловой системе, создать ссылку на файл, принадлежащий другой ФС. Если нужно сослаться на файл другой файловой системы, можно использовать символическую ссылку, о которых см. в следующем параграфе.
Строка 41 ⟶ 42 :
Кроме того, каждый каталог содержит ссылку на себя (обозначается точкой (.)) и ссылку на тот каталог, в котором он находится (обозначается двумя точками (..))
 
Наконец, <u>совсем строго говоря</u>, каталог содержит ссылки не на файлы, а на ''индексные дескрипторы'' файлов. Индексный дескриптор, он же '''inode''' (произносится ай-нод, с ударением на о), содержит всю известную системе информацию о файлах, в частности время создания, время последнего изменения, длину, ссылку на сам файл, кто владеет этим файлом (имена пользователя и группы), права доступа (см. ниже), что это за файл (обычный файл, каталог и т.д.), а также - и это необходимо - количество ссылок на этот индексный дескриптор (если это конечно не каталог). При создании новой ссылки командой '''ln''', количество ссылок увеличивается на 1, при стирании - уменьшается на 1. Если количество ссылок становится равно 0, вызывается системный вызов unlink(), удаляющий упоминание о файле из каталога и помечающий место, занимаемое этим файлом, как свободное. После этого оно может быть использованно для хранения других файлов, однако до фактической перезаписи сохраняется [теоретическая] возможность восстановления, на практике же возможность восстановления зависит от типа используемой файловой системы.
 
Важно понимать, что ''индексный дескриптор не знает, откуда на него ссылаются''. Поэтому в UNIX, имея файл, невозможно определить, в каких ещё каталогах есть ссылки на него. (То есть можно, но лишь просмотрев все файлы ФС.)