Почему жесткие ссылки не разрешены для каталогов?

Для меня adb отсутствовал независимо от всех действий.

Тогда я заметил полезную подсказку, показанную на терминале, которую я пробовал:

sudo apt-get install android-tools-adb

После этого была установлена ​​команда adb, и теперь я могу установить на эмулированные устройства все, что захочу.

1
задан 22 April 2018 в 00:03

3 ответа

Перекрестные ссылки каталогов разбивают файловую систему несколькими способами

Они позволяют создавать циклы

Жесткая ссылка на каталог может ссылаться на самого родителя, который создает файловую систему петля. Например, эти команды могли бы создать цикл с обратной ссылкой l:

mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l

Файловая система с контуром каталогов имеет бесконечную глубину:

cd /tmp/a/b/l/b/l/b/l/b/l/b

Любой без предиката -maxdepth будет работать в бесконечном цикле. Это означает, что вы больше не сможете использовать find, что является важной командой, в последовательном порядке. Аналогично для не менее важной команды locate.

Дерево по определению не имеет циклов, поэтому файловая система больше не является деревом.

Они нарушают однозначность родительского каталоги

В цикле файловой системы существует несколько родительских каталогов:

cd /tmp/a/b
cd /tmp/a/b/l/b

В первом случае /tmp/a является родительским каталогом /tmp/a/b. Во втором случае /tmp/a/b/l является родительским каталогом /tmp/a/b/l/b, который совпадает с /tmp/a/b. Таким образом, у него есть два родительских каталога.

Они размножают файлы

После определения символических ссылок файлы идентифицируются по путям. Итак,

/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt

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

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

Ваш пример

$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar

Как могут софт ссылки на каталоги [? d17]

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

Но есть и другие ситуации, когда пути используются для сравнения файлов. В этом случае символические ссылки в пути могут быть разрешены первыми, превратив их в минимальное и общепринятое представление, создающее канонический путь:

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

Команда readlink может разрешить путь к каноническому пути:

$ readlink -f /some/symlinked/path

Софт-ссылки отличаются от того, что использует файловая система

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

Из man readlink: [!d28 ]

 NAME
        readlink - print resolved symbolic links or canonical
        file names

 SYNOPSIS
        readlink [OPTION]... FILE...

 DESCRIPTION
        Print value of a symbolic link or canonical file name

        -f, --canonicalize
               canonicalize by  following  every  symlink  in
               every component of the given name recursively;
               all but the last component must exist
        [  ...  ]
110
ответ дан 25 May 2018 в 04:49
  • 1
    +1 Лучший ответ ИМО. Принятый ответ говорит о преимуществах / недостатках символических ссылок и жестких ссылок, но на самом деле не отвечает на исходный вопрос. Я был удивлен, что никто не упомянул об обоснованности того факта, что вы не можете создавать жесткие ссылки на каталоги, пока я, наконец, не приду на этот пост;) – Malte Skoruppa 17 September 2014 в 16:21
  • 2
    Почему не может софт-ссылку сделать все это? – Tanay 26 May 2015 в 08:57
  • 3
    @Tanay Правильно, это может помочь расширению сравнить его с аналогичными случаями с мягкими ссылками. Я попробую. – Volker Siegel 26 May 2015 в 20:23
  • 4
    Точно как это относится только к каталогам? Как я понимаю, эти проблемы также являются проблемой для файлов с жесткой привязкой. Более того, я вижу жесткую привязку как простой способ изменить разрешение данного каталога, чтобы разрешить другим внутри, не допуская их в родительской цепочке. Звуки очень полезны, если у вас нет возможности добавлять / изменять группы ... – inetknght 19 April 2017 в 02:02

FYI, вы можете добиться того же, что и жесткие ссылки для каталогов, используя mount:

mount -t bind /var/www /home/user/workspace/www

Это очень опасно, потому что большинство инструментов и программ не будут знать о привязке. Однажды я сделал что-то подобное в приведенном выше примере, а затем перешел к rm -rf /home/user. К счастью, в /var/www ничего не значимо.

35
ответ дан 25 May 2018 в 04:49

Причина, по которой жесткие ссылки не разрешены, немного технична. По сути, они нарушают структуру файловой системы. В любом случае, вы вообще не должны использовать жесткие ссылки. Символьные ссылки допускают большинство функций, не вызывая проблем (например, ln -s target link).

17
ответ дан 25 May 2018 в 04:49
  • 1
    Жесткие ссылки имеют хорошие варианты использования. Говорить, что вы, как правило, не используете их, слишком широк. – Sander Steffann 28 November 2013 в 14:34
  • 2
    +2 для предоставления ссылки, которая фактически отвечает на вопрос OP (и мой), -1 для того, чтобы исправить мнение («В любом случае, вы вообще не должны использовать жесткие ссылки» - если бы у него были ссылки для его поддержки, было бы хорошо). Это было хорошо, потому что я не могу дать +2 в любом случае. ; D – msb 14 January 2014 в 07:34
  • 3
    ссылка " они разрушают структуру файловой системы " не работает. – Charlie Parker 15 June 2014 в 09:01
  • 4
    Попытайтесь суммировать содержимое ссылки в ответе и сохраните ссылку в качестве ссылки. Благодарю за это. – Oxwivi 17 September 2014 в 16:32
  • 5
    хорошо сделанный @CharlieParker; лучший непредвиденный (?) иронический комментарий всех времен :) – Eliran Malka 12 December 2017 в 18:45

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

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