Являются ли жесткие ссылки эквивалентными ярлыкам Windows?

50

Википедия определяет жесткую ссылку как:

  

запись в каталоге, которая связывает имя с файлом в файловой системе. (Каталог сам по себе является особым видом файла, который содержит список таких записей.) Этот термин используется в файловых системах, которые позволяют создавать несколько жестких ссылок для одного и того же файла.

Мне интересно, эквивалентна ли концепция жесткой ссылки концепции Windows ярлыка .

Если жесткие ссылки не эквивалентны ярлыкам, то какая самая близкая функция Windows для жестких ссылок?

    
задан Computernerd 10.03.2014 в 15:51
источник

5 ответов

111

Нет, жесткая ссылка совершенно другая. Мягкая ссылка ближе к ярлыку 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 , что и их цель. Другой способ сделать это - это то, что файлы all на самом деле являются жесткими ссылками, указывающими на их inodes. Создание жесткой ссылки на файл просто создает новый указатель (файл) в файловой системе, который указывает на тот же индекс. Каждый индексный дескриптор может иметь несколько файлов, указывающих на него или один или ни один.

Чтобы понять это более четко, используйте ls -i , который показывает индексный дескриптор, связанный с файлом. Давайте создадим мягкую ссылку и жесткую ссылку и посмотрим, что произойдет:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Теперь проверьте их inodes:

Как вы можете видеть выше, оба foo и HardLinkToFoo имеют один и тот же индекс (16648029), а у SoftLinkToFoo - другой (16648036).

Что произойдет, если мы переименуем foo с mv foo bar ?

Красный цвет указывает на сломанную софт-ссылку, та, чья цель больше не может быть найдена. Это связано с тем, что мягкие ссылки указывают на имя файла, а не на его inode. Обратите внимание, что, несмотря на изменение имени, inode остается тем же, что и жесткая ссылка, все равно работает.

Таким образом, жесткие ссылки на самом деле являются двумя проявлениями файла same ; они являются указателями на один и тот же раздел диска. Мягкие ссылки - это просто ярлыки. Чтобы принять реальную мировую аналогию, жесткие ссылки похожи на два разных телефонных номера для одной и той же телефонной линии, а мягкие ссылки похожи на наличие двух разных телефонных линий в одном доме.     

ответ дан terdon 10.03.2014 в 16:13
источник
18

Есть хорошее объяснение того, какие мягкие и жесткие ссылки есть, но нужно уточнить одну вещь.

Ярлыки эквивалентны или похожи на ни ссылки и жесткие ссылки . На уровне файловой системы это всего лишь файлы. Это оболочка, которая понимает их структуру и интерпретирует их как ссылки. Ярлыки Windows также могут указывать на объекты в пространствах имен оболочек, которые не связаны с файловой системой (принтеры, элементы панели управления, виртуальные папки).

Ярлыки Windows в дополнение к имени объекта файловой системы содержат следующую информацию: PIDL (непрозрачный двоичный «путь» в пространстве имен оболочки), описание, горячая клавиша, значок, рабочий каталог. Windows также добавляет идентификаторы объектов NTFS, если используется файловая система NTFS, для исправления неработающих ярлыков.

Грубым эквивалентом ярлыка Windows является файл .desktop . См. Этот вопрос в SuperUser: Есть ли эквивалент .lnk в Linux?

    
ответ дан Athari 11.03.2014 в 12:57
6

Нет. В Linux все работает по-другому.

Каждый файл представлен объектом с именем 'inode'. У каждого inode есть число (ID), связанное с ним.

Как мы знаем, люди не умеют запоминать цифры, но имена. (Так развивались телефонные книги)

Поэтому на картинке появилось имя файла, чтобы дать каждому иноду человеку доступное для чтения имя. В основном, hardlink связывает имя файла с inode. Индед может иметь несколько жестких ссылок. Если для конкретного индексного дескриптора нет жестких ссылок, дисковое пространство, используемое inode, может быть перераспределено для новых файлов. Это означает, что для каждого файла должна быть хотя бы одна жесткая ссылка. Имя файла (визуализированное как имя файла / значок, которое вы видите в файловом браузере) само по себе является жесткой ссылкой.

В Windows ярлык - это отдельный файл (* .lnk-файл). Он содержит информацию об исходном файле (понятно, путь к файлу). В восприятии Linux ярлык Windows был бы другим inode, жестко связанным с именем файла, заканчивающимся на «.lnk».

    
ответ дан Shaakunthala 10.03.2014 в 16:13
2

В Windows вы также можете создавать жесткие ссылки, если у вас есть файловая система NTFS.

fsutil hardlink create target_file source_file

Файлы должны быть на одном логическом диске.

    
ответ дан Spook 13.03.2014 в 09:44
1

Большая разница, жесткая ссылка не может быть создана для папок, но для файлов.

  

Ярлык можно создать для папок, поэтому вы не можете сказать, что они   эквивалентно.

В вашем вопросе должна быть разница между символической ссылкой или софт-ссылками и ярлыком .

в соответствии с этим:

  

Символьная ссылка - это уровень файловой системы, и все видит ее как   исходный файл. Приложение не нуждается в специальной поддержке для использования   символическая ссылка.

     

A «Ярлык» - это обычный файл, который имеет ссылку на   целевого файла или каталога.

Таким образом, когда вы нажимаете ярлык, вы меняете свой каталог на фактический файл, а софт-ссылка будет ссылаться на его местоположение, как если бы его фактический файл, для этого в Linux вы можете использовать терминал и cd для символических ссылок, в то время как вы не можете cd для ярлыков.

Ярлык Windows и Linux-пусковая установка (указывающая на какое-то место) будут идентичны.

    
ответ дан nux 10.03.2014 в 16:11