Яка різниця між жорсткими посиланнями та скопійованими файлами?


22

Я розумію, що жорсткі посилання включають в себе копію оригінального файлу і що я можу видалити жорстко пов'язаний файл в одному каталозі, а він ще буде існувати в іншому каталозі.

Якщо це так, то чому я б взагалі хотів використовувати жорсткі посилання? Чому б просто не мати двох окремих файлів?

Відповіді:


29

Якщо ви скопіюєте файл, він буде дублювати вміст. Тож якщо ви зміните вміст одного файлу, це не вплине на інший.

Якщо ви зробите жорстке посилання, це створить файл, що вказує на той самий вміст. Тож якщо ви зміните вміст будь-якого з файлів, зміна буде помічена на обох.


3
Чи створюється жорстке посилання завжди швидше, ніж копіювати оригінальний файл?
Хорхе Букаран

14

Жорстке посилання - це головне друге ім'я файлу для того ж файлу. Тож якщо ви твердо посилаєте файл, він буде лише один раз у файловій системі, а тому займе місце лише один раз. Отже, ви хочете використовувати це, якщо ви хочете зберегти диск


4
Дякуємо за швидку відповідь. Тоді чому я хотів би використовувати жорстке посилання замість м'якого посилання?
Майк Б

5
Програмне посилання - це в основному вказівник на інший файл. Отже, якщо ви видалите початковий файл, програмне посилання все одно буде існувати, але буде порушено. Жорстке посилання - це 2 імені для одного файлу, тому їх можна окремо видалити.
Пітер

19
Пояснення Петра хороше, але він залишився поза "числом посилань". У inode файлу (на метаданих диска) є кількість посилань. Напружене посилання збільшує кількість посилань, м'яке - не. Ядро дозволяється видаляти вміст файлу, якщо кількість посилань падає до нуля.
Брюс Едігер

4
Я думаю, що відповідь Алана на це має важливий момент: зміна файлу змінює всі тверді посилання, при тому, що копія мала б різний вміст.
доношено успішно

6

У файлових системах unix кожне ім'я файлу насправді є міцним посиланням на розташування даних на диску, що називається inode. Якщо ви створите нове жорстке посилання на існуючий файл, це не займе місця на диску, оскільки це лише інший покажчик на ті самі дані. Якщо ви редагуєте дані за одним чи іншим посиланням (або редагуєте вклад безпосередньо), обидва файли будуть змінені.

Система зберігає підрахунок, скільки жорстких посилань має кожен inode. Коли кількість посилань дорівнює 0, файл більше не може бути досягнутий, і дані позначаються як безпечні для запису. Таким чином, надаючи файл із двома жорсткими посиланнями, якщо ви видалите будь-яке посилання, дані не будуть видалені. Тільки якщо ви видалите обидва, дані не зникнуть.

Ви можете бачити номери даних у файлах за допомогою -iперемикача на lsкоманду.

З іншого боку, м'яке посилання вказує на інший файл за його назвою. Якщо ви перемістите або видалите початковий файл, посилання буде розірвано.


0

З посиланням на частину запитання, "яке я хотів би використовувати жорсткі посилання взагалі?":

Файли з жорстким зв’язком (або, з цього приводу, м'які (символічні) зв'язані файли, пропонують корисний спосіб мати єдиний виконуваний файл, який можна зробити маскарадом для різних цілей.

Тобто ім'я, за допомогою якого викликається код, можна вивчити, щоб визначити, які варіанти доступні для виконання. Це дозволяє розробляти та упаковувати один великий фрагмент коду з усіма спільними функціональними можливостями, необхідними для трохи інших цілей. З точки зору користувача, специфікація "що" для запуску (за назвою) обмежує вибір та презентацію більш керованою підмножиною параметрів.

Класичний приклад - LVM. Свого часу HP-UX використовуються файли жорстко пов'язані для різних виконуваних файлів (наприклад vgdisplay, vgcreate, vgextendі т.д. У даний час , як Linux, ці команди на самому ділі символічні (м'які) посилання до lvmвиконуваним.


Це не має нічого спільного з питанням.
rjmunro

1
@rjmunro Я прошу відрізнятися. ОП запитала: "чому я взагалі хочу використовувати жорсткі посилання?"
JRFerguson

Я не розумію останнього прикладу. Колись були жорсткі посилання на безліч виконуваних файлів, тепер є м'які посилання на один виконуваний файл. Як розрізнити ці м'які зв’язки?
Емануель Берг

@EmanuelBerg Моя думка полягала в тому, що незалежно від того, використовуються жорсткі або м'які посилання, саме ім'я, за допомогою якого викликається виконуваний файл, визначає параметри та аргументи, які є дійсними для виконання.
JRFerguson

1
@EmanuelBerg TMTOWTDI
JRFerguson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.