Символічна посилання є невеликим файл , який містить розташування (тобто шляху і ім'я файлу) цільової файл, з прапором в записі каталогу , що вказує , що це символічне.
Коли ви відкриєте симпосилання, ОС буде слідувати розташуванню, щоб знайти цільовий файл. Якщо ціль сама по собі є символьним посиланням, вона також слідкує за своїм розташуванням (1) (2), поки розташування не вкаже на файл, який не є символьним посиланням (назвемо це FinalFile ). Потім операційна система отримує инод в FinalFile (індексний дескриптор містить метадані , як зміни часу і має також покажчик на дані файлу). Нарешті відкривається вклад FinalFile . Відтепер процес використовує цей метод для читання / запису у файл. В результаті змінюється ім'я або шлях символьного посилання, видаляється символьне посилання, змінюється шлях або ім'я FinalFile або навіть видаляється FinalFile(3) не впливає на процес; він все ще читається з тієї ж inode.
У більшості випадків операції з файловими даними на симпосиланнях впливатимуть на FinalFile (наприклад, читання та запис на симпосилання буде читатися з / записувати в FinalFile ), але є винятки: readlink()
системний виклик зчитує вміст самого посилання.
Операції з метаданими файлів (наприклад, перейменування або видалення) з іншого боку, як правило, впливатимуть на симпосилання. Але тут є і винятки: lstat()
системний виклик схожий stat()
, за винятком того, що він повертає інформацію про саме посилання, а не про FinalFile (2).
(1) Існує обмеження щодо кількості рівнів і речі стають дещо складнішими, якщо розташування в симпосилання є відносним шляхом.
(2) Прочитайте символьне посилання (7): символічна обробка посилання для отримання більш детальної інформації.man 7 symlink
(3) rm
Команда або unlink()
системний виклик фізично не видаляють файл. Він видаляє запис каталогу, який вказує на вкладення файлу. Сам файл видаляється лише в тому випадку, якщо обидва: a) більше немає записів каталогів (жорстких посилань), які посилаються на його inode, і b) жоден процес не відкриває файл.