Каковы типичные виды использования жестких ссылок?

9

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

Я хотел бы знать, каковы типичные способы использования жестких ссылок в Linux. Я уже видел разные посты, описывающие разницу в том, как они работают. Я спрашиваю, в каких типичных ситуациях пользователю лучше использовать жесткие ссылки вместо символических ссылок?

Делать
источник
3
Этот вопрос был задан в Unix и Linux stackexchange: Почему существуют жесткие ссылки?
Flimm

Ответы:

9

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

Разъяснение:

На самом деле имя файла - это жесткая ссылка на файл. Таким образом, каждый файл имеет по крайней мере одну жесткую ссылку, которую мы обычно называем «именем» файла. Когда вы удаляете файл, фактически вы удаляете его жесткую ссылку (отсюда и название «удалить», т.е. rmвместо «удалить»). Когда у файла удалена последняя жесткая ссылка, система также удаляет файл.

Падди Ландау
источник
7

Жесткие ссылки позволяют ...

  • один исполняемый файл, имеющий несколько имен.

    Пример:

    ls -l /bin | grep -v ' 1 ' | sortперечислю те /binдля вас. Результат ...

    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 gunzip
    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 uncompress
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bunzip2
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzcat
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzip2
    

    Вместо 3-х файлов bunzip2 bzcat и bzip2 используют один и тот же файл, и внутри файла делается различие в том, что делать. Сохраняет код и меньше кода означает меньше возможных ошибок и более простое обслуживание.

  • один файл для доступа к нескольким путям.

    Возьмем, например, менеджер пакетов, который создает каталог / usr / share / doc / $ packagename для каждого установленного пакета, а внутри этого каталога - файл LICENSE с информацией о лицензии пакета. Многие пакеты в типичной системе Linux имеют лицензию GPL, поэтому вместо 200 копий GPL в файловой системе может быть только одна копия и 199 ссылок. ptman @ Serverfault

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

Rinzwind
источник
2
"Пример: move ( mv) - это copy ( cp) + a remove ( rm)." Это верно только тогда, когда источник и пункт назначения находятся на разных креплений. В противном случае, a mvперемещает только имя, а не файл.
Пэдди Ландау
1
Если вы хотите перейти на технический уровень: mv меняет индекс, а не имя. Но вы правы: похоже, что этот пример немного устарел, и я должен был использовать gzip в качестве примера;)
Rinzwind
3
Мы немного не по теме, но я только что проверил это. Пока файл остается в том же монтировании, mvизменяется только имя; Индод остается тем же.
Пэдди Ландау
Это на самом деле не объясняет, почему вы не можете просто использовать символические ссылки - которые вы можете сохранить для нескольких байтов дополнительных данных. Это правильно решено в этом ответе .
Кен Шарп