Які типові види жорстких посилань?


9

Усі, хто звик до Windows, можуть собі уявити, що таке посилання та як вони використовуються. З іншого боку, концепція жорсткого посилання є чужою для Windows (я прав?).

Мені хотілося б знати, які типові види жорстких посилань в Linux. Я вже бачив різні пости, що описують різницю в тому, як вони працюють. Що я запитую - це які типові ситуації, коли користувачеві краще використовувати жорсткі посилання замість символьних посилань?


3
Це питання було задано на Unix & Linux stackexchange: Чому існують жорсткі посилання?
Flimm

Відповіді:


9

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

Пояснення:

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


7

Постійні посилання дозволяють ...

  • один виконуваний файл має більше одного імені.

    Приклад:

    ls -l /bin | grep -v ' 1 ' | sortперелічить ті, які є /binдля вас. Результат ...

    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 gunzip
    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 uncompress
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bunzip2
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzcat
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzip2
    

    Замість 3-х файлів bunzip2 bzcat і bzip2 використовують один і той же файл, а всередині файлу робиться відмінність того, що робити. Збереження коду та менший код означає менше можливих помилок та легше обслуговування.

  • один файл, до якого можна отримати доступ кількома шляхами.

    Візьмемо для прикладу менеджер пакунків, який створює каталог / usr / share / doc / $ пакета для кожного встановленого пакету, а всередині цього каталогу - файл LICENSE з інформацією про ліцензію пакета. Багато пакунків у типовій системі Linux мають ліцензію GPL, тому замість того, щоб у файловій системі було 200 копій GPL, може бути лише одна копія та 199 посилань. ptman @ Serverfault

Причина жорстких посилань тут працює (а м'яких немає): видалення лише 1 жорстких посилань не видаляє сам файл.


2
"Приклад: a move ( mv) - це копія ( cp) + a remove ( rm)." Це справедливо лише тоді, коли джерело та місце призначення знаходяться на різних кріпленнях. В іншому випадку mvрухається лише ім'я, а не файл.
Падді Ландау

1
Якщо ви хочете перейти до технічної: mv змінює inode, а не ім'я. Але ви маєте рацію: схоже, що цей приклад сьогодні досить старий, і я мав би використати gzip як приклад;)
Rinzwind

3
Ми трохи поза темою, але я це лише перевірив. Поки файл залишається на тому ж монтажі, mvзмінюється лише ім'я; inode залишається колишнім.
Падді Ландау

Це насправді не пояснює, чому ви не можете просто використовувати символьні посилання - що дозволяє заощадити за кілька байтів додаткових даних. Це правильно вирішено у цій відповіді .
Кен Шарп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.