Я понимаю техническое различие между символическими и жесткими ссылками, это вопрос об их использовании на практике, особенно мне интересно знать, почему оба они используются в, казалось бы, похожих условиях: /bin
каталог.
Вот фрагмент его списка в моей системе:
~$ ls -lai /bin
total 10508
32770 drwxr-xr-x 2 root root 4096 Jun 14 11:47 .
2 drwxr-xr-x 28 root root 4096 Sep 6 13:15 ..
119 -rwxr-xr-x 1 root root 959120 Mar 28 22:02 bash
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bunzip2
127 -rwxr-xr-x 1 root root 1832016 Nov 16 2012 busybox
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzcat
6191 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzcmp -> bzdiff
5640 -rwxr-xr-x 1 root root 2140 Dec 15 2011 bzdiff
5872 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzegrep -> bzgrep
3520 -rwxr-xr-x 1 root root 4877 Dec 15 2011 bzexe
6184 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzfgrep -> bzgrep
5397 -rwxr-xr-x 1 root root 3642 Dec 15 2011 bzgrep
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzip2
2851 -rwxr-xr-x 1 root root 10336 Dec 15 2011 bzip2recover
6189 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzless -> bzmore
5606 -rwxr-xr-x 1 root root 1297 Dec 15 2011 bzmore
Я выделил жесткие ссылки на тот же индекс для лучшей видимости. Так символические ссылки используются в случае bzcmp
, bzegrep
, bzfgrep
, bzless
и жестких ссылок в случае bzip2
, bzcat
, bunzip2
?
Все они являются обычными файлами (не каталогами), находятся внутри одной файловой системы, являются системными утилитами и даже созданы для работы с одной и той же вещью: архивами bzip. Являются ли причины использования жестких ссылок / символических ссылок в данном конкретном случае чисто историческими или я что-то упустил?
Уточнение моего вопроса:
Я не спрашиваю о:
- Технические различия между символическими и жесткими ссылками
- Теоретические преимущества и недостатки каждого из них
Эти вопросы были рассмотрены в других темах на SO. Я пытаюсь понять, почему разные решения были приняты в конкретном случае: для группы связанных системных утилит. Технически, все они могли быть символическими ссылками или жесткими ссылками, оба варианта работали бы (и в обоих случаях программа все еще может выяснить, как она вызывается через argv[0]
). Я хочу понять намерение здесь, если таковые имеются.
Связанные с:
/bin
третьем столбцеls -lai
всегда1
используется только мягкие ссылки. Какой дистрибутив вы используете?Ответы:
Зачем использовать жесткие ссылки вместо символических ссылок
В этом сценарии есть в первую очередь 3 преимущества использования жестких ссылок над символическими ссылками.
Жесткие ссылки
Символьные ссылки
Преимущества ссылок в целом
Эти ссылки существуют, потому что многие исполняемые файлы ведут себя по-разному в зависимости от того, как они были вызваны. Например, две команды
bzless
иbzmore
фактически один исполняемый файлbzmore
. Исполняемый файл будет вести себя по-разному в зависимости от того, какие имена использовались для его вызова.Это сделано по разным причинам. Вот некоторые из наиболее очевидных:
Почему оба используются?
Выбор одного из них, в данном конкретном приложении, является спорным. Любой из них может облегчить функцию действия в качестве псевдонима, так что один исполняемый файл может быть перегружен. Это действительно ключевая особенность, которую используют разработчики различных программ здесь.
При взгляде на FHS (Стандарт Иерархии Файловой Системы) даже указывает, что это может быть и так.
выдержка
Ссылки
источник
/bin/
каталоге? Почему разработчики этих утилит не придерживаются одного типа ссылок?Похоже, вы пытаетесь из существующей практики выяснить, есть ли нетехническое правило, которое говорит вам, какую ссылку использовать. (Я говорю нетехнический, потому что вы уже знаете технические причины, чтобы использовать один над другим.)
Ответ: другого правила нет. Этот пример, который вы указали из
bzip2
пакета Ubuntu, просто показывает, что многие разработчики смешивают их, не задумываясь. Это связано с тем, что кроме технических отличий нет четкого руководства, и эти различия невелики.Лично я предпочитаю использовать символические ссылки всегда, потому что я готов заплатить за их крошечные накладные расходы в обмен на их самодокументированный характер.
Другие разработчики будут выбирать жесткие ссылки для крошечной эффективности, которую они обеспечивают.
Эта проблема во многом напоминает пробелы и табуляции или динамическую или статическую типизацию или Emacs против vi , за исключением того, что она не достаточно интересна, чтобы зажечь священную войну . Как и в более интересных битвах, есть причины выбрать любой из этих вариантов, но если у вас нет кого-то, говорящего вам, какой из них использовать, вы можете выбрать тот, который имеет больше смысла для вас.
источник