Действительно ли жесткие ссылки эквивалентны ярлыкам Windows?

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

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

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

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

52
задан 11 March 2014 в 20:05

5 ответов

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

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

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

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

enter image description here

Поскольку Вы видите выше, оба foo и HardLinkToFoo имейте тот же inode (16648029), в то время как SoftLinkToFoo имеет другой (16648036).

Что происходит, если мы переименовываем foo с mv foo bar?

enter image description here

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

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

113
ответ дан 16 November 2019 в 10:22

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

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

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

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

18
ответ дан 16 November 2019 в 10:22

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

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

, Как мы знаем, люди не хороши в запоминании чисел, но имен. (Это - то, как телефонные книги развились)

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

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

6
ответ дан 16 November 2019 в 10:22

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

fsutil hardlink create target_file source_file

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

2
ответ дан 16 November 2019 в 10:22

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

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

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

как согласно этому:

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

"Ярлык" является просто регулярным файлом, который имеет ссылку на целевой файл или каталог.

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

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

1
ответ дан 16 November 2019 в 10:22

Другие вопросы по тегам:

Похожие вопросы: