Я хочу убедиться, что я правильно понимаю:
- Создание жесткой ссылки создает еще один dentry, который указывает на тот же inode.
- Создание символической ссылки — это создание совершенно нового файлового объекта/inode, который указывает на dentry другого inode. Файловая система обрабатывает этот файл особым образом (перенаправляя определенные операции на dentry другого inode)
решение1
Правильно для жесткой ссылки, но не для символической ссылки. Содержимое символической ссылки — это просто строка. Это позволяет символической ссылке указывать на файловую систему, которая в данный момент не смонтирована, например. Символическая ссылка — это просто текст; когда ядро обнаруживает ее, оно по сути вставляет символическую ссылку в путь, который оно искало, разбивая его на разделенные косой чертой части и выполняя поиск по ним .
и ..
по мере необходимости. Символические ссылки не дают дополнительных разрешений: обходы, вызванные элементами пути, которые исходят из символической ссылки, подчиняются тем же ограничениям разрешений, как если бы приложение указало эти элементы пути. Символическая ссылка имеет свой собственный inode (или, по крайней мере, так кажется — под капотом некоторые файловые системы не позволяют символическим ссылкам иметь несколько жестких ссылок и хранят символические ссылки непосредственно в каталоге, который их содержит, но оно все равно сообщает номер inode функции lstat
).
На системном уровне то, как обрабатываются символические ссылки, зависит от типа операции. Операции, которые действуют на записи каталога (например, переименование, удаление), обрабатывают символические ссылки как любой другой файл. Операции, которые действуют на содержимое файла (например open
, chdir
), следуют за символической ссылкой и действуют на цель (и сообщают об ошибке, если цепочка символических ссылок заканчивается неработающей ссылкой). Для операций, которые действуют на метаданные файла (например, на inode), это зависит: для некоторых операций есть пара функций (например, stat
/ lstat
), для других следует символическая ссылка (например chmod
, utimes
не имеют варианта символической ссылки в Linux).