Чи жорсткі посилання еквівалентні ярликам Windows?


52

Вікіпедія визначає жорстке посилання як:

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

Мені цікаво, чи концепція жорсткого посилання еквівалентна концепції Windows ярлика .

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


1
Насправді є кілька чудових посилань із тієї сторінки вікі, якою ви поділилися.
ексцентричнийСам

8
Microsoft NTFS підтримує жорстке посилання, і вони дуже схожі на жорсткі посилання Unix. Я думаю, що ярлики є спеціальним об'єктом в середовищі Windows, але вони не пов'язані з організацією файлових файлів всупереч реальним жорстким посиланням
Kiwy

Наступне посилання дає хороші пояснення: comptb.cects.com/…

3
Я думаю, що паралель вводить в оману, ярлик - це "інтерфейсні" посилання лише на файли з текстовою інформацією про ціль, які інтерпретуються інтерфейсом, а не файловою системою. З командного рядка вони насправді не вказують на щось у сенсі файлової системи. У Windows (або, краще сказати, NTFS) є належні посилання en.wikipedia.org/wiki/NTFS_symbolic_link , які не є ярликами чи жорсткими посиланнями. Я фактично використовую їх у Windows, щоб мати папки Dropbox де завгодно, це не можна зробити за допомогою ярликів.
alfC

5
Файли ярликів Windows дуже схожі на файли .desktop Linux. Символьні посилання та жорсткі посилання на Linux - це зовсім інша річ, яка іноді служить одній цілі.
mikebabcock

Відповіді:


113

Ні, жорстке посилання зовсім інше. М'яке посилання ближче до ярлика Windows (хоча є важливі відмінності, символічні посилання більше схожі на ярлики Windows, ніж жорсткі). Жорстке посилання - це різна річ, і вона вам майже ніколи не знадобиться.

Коротко, з цією командою створюється м'яке посилання:

ln -s foo bar

Якщо ви запустите ls -l, ви побачите:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

В ->означає , що barє посиланням foo. Отже, відкрившись, наприклад bar, із текстовим редактором, фактично відкриється окремий файл foo. Однак видалення barпросто видалить ярлик, це не вплине на файл foo.

З іншого боку, жорсткі посилання створюються за допомогою цієї команди:

ln foo bar

Якщо ви зараз запустите ls -l, то жодних ознак між файлами немає:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Але - і це дуже важливо - це насправді той самий файл . Файли у файлових системах Unix зберігаються за допомогою inodes ; inode - це, по суті, те, як файлова система відображає ім'я файлу до певного місця на фізичному жорсткому диску. Отже, жорсткі посилання - це файли, які вказують на той самий inode, що і їх ціль. Іншим способом цього є те, що всі файли є фактично жорсткими посиланнями, що вказують на їхні вставки. Здійснення жорсткого посилання на файл просто створює новий покажчик (файл) у файловій системі, який вказує на той самий inode. Кожен inode може мати декілька файлів, що вказують на нього, або один, або жоден.

Щоб зрозуміти це більш чітко, використовуйте, ls -iщо показує, в якій точці пов'язаний файл. Створимо м'яке та жорстке посилання та подивимося, що станеться:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Тепер перевірте їхні вузли:

введіть тут опис зображення

Як ви бачите вище, обидва fooі HardLinkToFooмають однаковий inode (16648029), тоді як SoftLinkToFoo має інший (16648036).

Що станеться , якщо ми перейменуємо fooз mv foo bar?

введіть тут опис зображення

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

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


6
@Kiwy Це навпаки: абсолютні символьні посилання виходять з ладу різними способами (як тільки ви переміщуєте дані, монтуйте їх в інше місце, створюйте резервні копії,…) і найкраще їх уникати.
Жил 'ТАК - перестань бути злим'

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

7
Зауважте, що ярлик Windows - це файл, використовуваний оболонкою, і, таким чином, він може робити речі, про які знає оболонка, але не файлова система. Наприклад, ви можете зробити ярлики в просторі імен оболонок (наприклад, Панель управління, Комп'ютер тощо), або ви можете зробити ярлики до програм, які ще мають бути встановлені (які будуть встановлені при першому використанні). Ці речі не мають прямого еквівалента у світі файлової системи.
Джої

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

18

Існує хороше пояснення того, що таке м'які та жорсткі зв’язки, але одне потрібно з’ясувати.

Клавіші швидкого доступу до Windows еквівалентні або схожі ні на м'які, ні на жорсткі . На рівні файлової системи це лише файли. Це оболонка, яка розуміє їх структуру та інтерпретує їх як посилання. Ярлики Windows також можуть вказувати на об'єкти в просторах імен оболонок, які не пов'язані з файловою системою (принтери, елементи панелі управління, віртуальні папки).

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

Приблизний еквівалент ярлика Windows - це файл .desktop . Дивіться це питання на SuperUser: Чи є еквівалент .lnk в Linux?


6

Ні. У Linux все працює інакше.

Кожен файл представлений об'єктом під назвою 'inode'. Кожен inode має з ним номер (ID).

Як ми знаємо, люди не добре запам'ятовують цифри, але імена. (Ось як розвивалися телефонні книги)

Тому ім'я файлу з'явилося на зображенні, щоб надати кожному вкладу зрозуміле для людини ім'я. В основному, жорстке посилання прив'язує ім'я файлу до inode. Інод може мати декілька жорстких посилань. Якщо для конкретного inode немає жорстких посилань, дисковий простір, який використовується inode, може бути перерозподілений для нових файлів. Це означає, що для кожного файлу має бути принаймні одна тверда посилання. Ім'я файлу (візуалізується як ім’я / піктограма файлу, яке ви бачите у браузері файлів) є самим твердим посиланням.

У Windows ярлик - це окремий файл (* .lnk файл). Він містить інформацію про вихідний файл (зрозуміло, шлях до файлу). У сприйнятті Linux, ярлик Windows був би ще одним входом, жорстким посиланням на ім'я файлу, що закінчується на '.lnk'.


3
NTFS насправді працює дуже подібним чином. Файл - це запис у MFT, а записи каталогів просто відображають імена файлів у ідентифікатори файлів. Він підтримує жорсткі посилання, а з 2008/7 / Vista (?) Навіть посилання. На даний момент найбільша різниця - це культурна.
cHao

2

У Windows ви також можете створювати жорсткі посилання, якщо у вас є файлова система NTFS.

fsutil hardlink create target_file source_file

Файли мають бути на одному логічному диску.


Це правильно - NTFS також підтримує жорсткі посилання. Часто інструменти вимагають, щоб у вас були права адміністратора для їх створення. Про "той же логічний привід" - точніше було б сказати, вони повинні бути в одній файловій системі. Логічний диск може бути що завгодно, в тому числі букви диска , створеної substкомандою. Інструмент може не знати / піклуватися про це і, отже, відмовитись у створенні жорсткого посилання. Дуже корисною справою є розширення оболонки посилання, яке дозволяє досліднику створювати їх.
Тобіас

1

Велика різниця, жорстке посилання створюється не для папок, а для файлів.

Ярлик можна створити для папок, тому не можна сказати, що вони еквівалентні.

Ваше питання має полягати в різниці між символічним посиланням або м'яким посиланням та ярликом .

відповідно до цього:

Символічне посилання - це рівень файлової системи, і все розглядає його як вихідний файл. Програмі не потрібна спеціальна підтримка для використання символічного посилання.

"Ярлик" - це лише звичайний файл, який має посилання на файл призначення або каталог.

Отже, коли ви натискаєте ярлик, ви зміните ваш каталог на фактичний файл, тоді як soft-link буде посилатися на його розташування, як ніби це фактичний файл, для цього в Linux ви можете використовувати термінал і cd для символічних посилань, поки ви не можете cd до ярликів .

Ярлик Windows та запуск Linux (вказує на деяке місце) були б ідентичними.


2
Що? Софтпосилання - це лише файли, хоч і дивні, наприклад, вони також займають вставки. Вони НЕ трактуються як оригінал (це тверді посилання). Хоча це правда, що жорсткі посилання заборонені для каталогів у більшості ОС, це лише функція безпеки, і з цього є виключення (наприклад, машина часу OSX). І звичайно, ви можете створити CD на ярлики (я припускаю, що ви маєте на увазі ярлики для Windows, оскільки, як ви кажете, ви можете CD на софтлінки).
тердон

1
Ви впевнені, що можете використовувати cmd для CD до ярлика.
nux

1
Я щойно запустив свій Windows VM і створив ярлик до папки на своєму робочому столі, ярлики Windows дуже схожі (якщо не ідентичні) на символьні посилання. Хоча ви не можете з яких-небудь причин використовувати CDd.exe за допомогою cmd.exe, ви можете створити .lnk до каталогу та використовувати його через Explorer.
тердон

1
виборці повинні подати привід для відмови
nux

5
Вибачте, все ще не правильно. Симпосилання - це файли, що містять цільовий текст у вигляді простого тексту (див. Тут ), символьні посилання не трактуються як оригінал, у цьому вся різниця між символьними та твердими посиланнями. Linux-пускові установки (я вважаю, ви маєте на увазі .desktop файли) взагалі нічого спільного з цим не мають, вони зовсім інші. Як ви самі кажете, ярлики Windows можуть вказувати на файли (включаючи програми) та папки (у Mac і Windows є папки, у Linux є каталоги). Файли desktop просто дозволяють запустити програму. Вони нікуди не зв’язуються.
тердон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.