На додаток до всіх інших відповідей хочу зазначити наступні важливі властивості:
Програмне посилання - це справжня посилання, тобто це невеликий файл, який містить ім'я шляху. Розв’язання програмного посилання відбувається прозоро до програми: якщо процес відкриває файл, скажіть, /this/path/here
що є посиланням, яке вказує на /that/other/path
то, що вся обробка відкриття /that/other/path
виконується ОС. Крім того, якщо /that/other/path
випадково відбувається саме посилання, то цим також займається ОС. Насправді ОС слідує за ланцюжком посилань, поки не знайде щось інше (наприклад, звичайний файл) або до тих пір, поки не досягне SYMLOOP_MAX
(див. sysconf(3)
) Багатьох записів, і в цьому випадку ОС (точніше: відповідно до системного виклику) повертає помилку і встановлює errno
до ELOOP
. Таким чином, циркулярна посилання на кшталт xyz -> xyz
не зупинить процес. (Для систем Linux див. path_resolution(7)
Докладні відомості.)
Зауважте, що процес може перевірити, чи ім'я контуру є символьним посиланням чи ні, використовуючи lstat(2)
та може змінювати свої атрибути файлів (зберігаються в таблиці inode) через lchown(2)
та інші (див symlink(7)
. Всю історію).
Тепер, з точки зору дозволу, ви помітите, що символьні посилання завжди мають дозволи 777 ( rwxrwxrwx
у символічному позначенні). Це пов’язано з тим, що будь-який інший дозвіл у будь-якому випадку можна обійти шляхом доступу до фактичного файлу. І навпаки, 777 для символьної посилання не робить доступним для цього символьного файлу, якщо він був недоступний в першу чергу. Наприклад, символьне посилання з дозволами 777, що вказує на файл з дозволами 640, робить файл не доступним для "інших" (для широкої громадськості). Іншими словами, файл xyz
доступний через символьне посилання, якщо і тільки якщо він є безпосередньо доступним, тобто без опосередкованості. Таким чином, дозволи на симпосилання не мають жодного ефекту захисту.
Однією з головних помітних відмінностей між жорсткими посиланнями та посиланнями (також softlink) є те, що символьні посилання працюють у файлових системах, а жорсткі посилання обмежені однією файловою системою. Тобто, файл на розділі A може бути позначений з розділу B, але він не може бути звідти жорстким посиланням. Це зрозуміло з факту, що жорстке посилання - це фактично запис у каталозі, який складається з імені файлу та номера inode, і що номери inode є унікальними лише для кожної файлової системи.
Термін жорстке посилання насправді дещо вводить в оману. Хоча джерело та місце призначення посилань чітко відрізняються (символьне посилання має власний запис у таблиці inode), це не стосується твердих посилань. Якщо ви створюєте жорстке посилання для файлу, оригінальний запис і тверда посилання не відрізняються з точки зору того, що там було спочатку. (Оскільки вони посилаються на один і той самий inode, вони діляться своїми атрибутами файлів, такими як власник, дозволи, часові позначки тощо). Це призводить до твердження, що кожен запис у каталозі насправді є жорстким посиланням, і що жорстке посилання файлу означає лише створення другого ( або третє, або четверте ...) жорстке посилання. Насправді, кожен inode зберігає лічильник для кількості жорстких посилань на цей inode.
Нарешті, зауважте, що звичайні користувачі можуть не мати жорстких посилань. Це відбувається тому, що це потрібно робити вкрай обережно: необережний користувач може вводити цикли в інакше суворо ієрархічне дерево файлів, з яким всі звичайні інструменти (як fsck
) і сама ОС не готові мати справу.