Почему бы не разработать с помощью softlink (symlink) и hardlink в том же & ldquo; link & rdquo ;?

https://wiki.ubuntu.com/Unity/Lenses Какие объективы для Unity доступны? http://www.omgubuntu.co.uk/2011/04/five-neat-unity-lenses-in-development/

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

1
задан 13 April 2017 в 15:24

4 ответа

Я не совсем понимаю, что вы имеете в виду. Я думаю, вы неправильно поняли, какие жесткие ссылки есть. Прежде всего, все файлы являются hardlinks. Каждый из. Файл - это просто ссылка, указывающая на индексный дескриптор. Символьная ссылка, с другой стороны, является ссылкой, указывающей на жесткую ссылку (на путь). Как можно объединить два?

Более того, функциональность очень отличается. Рассмотрим это:

$ echo "This is file" > file
$ ln -s file softlink
$ ln file hardlink
$ cat softlink 
This is file
$ cat hardlink 
This is file
$ rm file
$ echo "This is a different file" > file
$ cat softlink 
This is a different file
$ cat hardlink 
This is file

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

Кроме того, поскольку hardlinks указывают на inodes, а не на пути файловой системы, они не могут быть относительными. Очень часто полезно иметь симлинк, указывающий, например, на ../../foo. Таким образом, мы можем переместить всю структуру каталогов в другое место и переименовать все, что угодно, но ссылка не сломается. Итак, если мы перейдем к другому каталогу, softlink всегда будет указывать на foo, который находится на двух уровнях вверх. Однако жесткая ссылка просто укажет на то, какой индекс, который он был создан, чтобы указать, и перемещение каталога не повлияет на него. Иногда это то, чего мы хотим, а иногда и нет. Такая универсальность очень полезна.

8
ответ дан 23 May 2018 в 19:25
  • 1
    Спасибо за подробное объяснение. Возможно, есть некоторые случаи, когда hardlinks действительно полезны, но не произошли в моей профессиональной жизни. Что было бы более удивительным, хотя в том, что внутри файловой системы, если у вас есть ссылка на индексный дескриптор и ссылка на путь к целевому файлу, вы можете автоматически обновлять относительный путь при перемещении целевого файла, нет? Хорошо, я понимаю, что необходимо выполнить некоторую дополнительную работу из операционной системы, но она по-прежнему делает ее отличной абстракцией для конечного пользователя, которому не нужно воссоздавать символические ссылки – Georgios Pligoropoulos 28 June 2015 в 13:37
  • 2
    @GeorgePligor конечный пользователь может не так, но sysadmin, безусловно, делает. У вас есть как ссылка на индексный дескриптор, так и ссылка на путь: hardlinks и symlinks :) – terdon♦ 28 June 2015 в 13:48
  • 3
    Без hardlinks вы даже не могли бы перемещаться по вашей файловой системе ... или открывать любые файлы, если это имеет значение. – Sampo Sarrala 29 June 2015 в 02:04

Я думаю, вас смущает слово «ссылка» в «hardlink» / «softlink». Несмотря на кажущуюся симметрию имен, это совершенно разные вещи.

Soft links: Если вы исходите из какого-то фона Microsoft, возможно, было бы легче сказать, что: softlink довольно близок к тому, что является ярлыком. Это (почти) обычный файл, имеющий в нем имя пути. Единственная разница в Unix, ОС имеет некоторое волшебство для перенаправления приложений автоматически. А именно, когда файл приложения open() sa, ОС проверяет флаг режима S_IFLNK в файле - если он установлен, это означает, что он содержит только путь к другому файлу, и ОС будет прозрачно перенаправлять вызов на этот путь. Жесткие ссылки: жесткая ссылка - это просто технический термин для имени файла. Когда вы создаете жесткую ссылку, вы просто добавляете второе имя для того же файла. Весь рабочий процесс выглядит примерно так: при создании файла он автоматически получает первое имя файла. Если хотите, вы можете добавить дополнительные имена файлов. Вы действительно не можете удалять файлы в Unix. Команда rm удаляет только имя файла. Это гораздо более очевидно, когда вы знаете, что фактическая операция, которую он выполняет, называется unlink() ing. Когда файл больше не имеет имени файла, он удаляется. (*) В качестве побочного кода в каталогах всегда есть как минимум два имени файла: один в своем родителе и один сам по себе (.). Кроме того, если каталог имеет подкаталоги, он будет иметь дополнительную жесткую ссылку в каждом подкаталоге с именем ... Вы можете увидеть количество имени файла / hardlink, выполнив ls -l. Второй столбец на выходе.

(*): если какой-то процесс использует файл, удаление откладывается до тех пор, пока оно больше не будет использоваться. Тем временем у вас есть файл без имени, которое вы не видите или не получаете.

3
ответ дан 23 May 2018 в 19:25
  • 1
    @Sampo Sarrala Я немного отредактировал, это трудно объяснить без рисунка. Я имею в виду, что если каталог имеет, скажем, 5 подкаталогов, он будет содержать в общей сложности 7 имен файлов: имя, которое вы ему дали (находится в его родительском элементе), & quot ;. " (расположенный сам по себе) и 5x ".." (в каждом подкаталоге). – spectras 29 June 2015 в 02:07
  • 2
    Очень хорошее объяснение. Это небольшое изменение сделало это очень ясным. Я думаю, что вам больше не понадобятся графики :) Отличный ответ. – Sampo Sarrala 29 June 2015 в 02:11

Идея, которую вы описываете, существует уже в форме «Alias» в файловой системе Apple HFS +. Если вы создаете псевдоним для файла, вы можете использовать этот псевдоним для ссылки на файл в будущем. Псевдоним использует смесь inode-эквивалента (HFS + не имеет inodes как таковой), имя файла и ... другие материалы для повторного поиска файла, используя алгоритм, который намеренно недокументирован.

[d2 ] Прагматически - это означает, что для большинства нетехнических пользователей это работает очень хорошо, потому что изменение имени файла изменяется, и перемещения файлов, которые люди делают на практике, обрабатываются достаточно хорошо (DWIM и все такое); и недокументированный характер алгоритма разрешения означает, что Apple имеет право настраивать эвристику, если найдет что-то, что работает лучше. Это хорошая вещь, в принципе. С другой стороны, это раздражает ад из всех, кто предпочел бы, чтобы их компьютеры были детерминированными, черт возьми!

Я думаю, что это происходит под заголовком: интересный эксперимент - сильно подтолкнул - не в конечном итоге вознаграждение.

Я думаю, что в настоящее время Apple не подталкивает «псевдоним» в своей технической документации. [Трудно найти главу и стих на псевдонимах HFS + (sc, я не смог найти ни одного из 10 минут поиска, только сейчас), поэтому, если у любого детерминированного есть конкретные ссылки, чувствуйте бесплатно отредактировать этот ответ.]

2
ответ дан 23 May 2018 в 19:25
  • 1
    интересно! Спасибо, что поделился – Georgios Pligoropoulos 29 June 2015 в 11:55

Прежде чем я начал использовать Unix, я использовал AmigaOS, у которого есть ссылки, у которых есть некоторые аспекты символических ссылок и hardlinks. Я никогда не понимал, как они себя ведут.

Тогда мне пришлось использовать Unix-системы (и позже Linux). Я обнаружил, что обе символические ссылки и жесткие ссылки легко понять сами по себе. До сих пор я до сих пор не понимаю гибридную конструкцию, используемую для ссылок в AmigaOS.

Из принципа наименьшего удивления я считаю, что различие между символическими ссылками и hardlinks является очень хорошей конструкцией. Ни у кого из них нет сюрпризов.

Но две конструкции очень разные. Самый важный аспект, который у них есть, заключается в том, что оба они могут быть созданы с помощью инструмента командной строки ln.

Я не могу представить, как вы объединили бы эти два в единую концепцию, не сделав ее чрезвычайно сложной. И это было бы основным аргументом против изменения дизайна. Лучше иметь отдельные функции, каждый из которых прост для понимания, чем одна сложная функция.

Другим аргументом против изменения является то, что существует много программного обеспечения, предназначенного для работы с символическими ссылками и жесткими ссылками при их работе Теперь. Все это программное обеспечение не сможет справиться с гибридной связью.

1
ответ дан 23 May 2018 в 19:25

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

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