Жесткая ссылка на каталог может ссылаться на самого родителя, который создает файловую систему петля. Например, эти команды могли бы создать цикл с обратной ссылкой 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
Путь, который может содержать программные ссылки и даже программно связанные циклы каталогов, часто используется для идентификации и открытия файла. Его можно использовать как обычный, линейный путь.
Но есть и другие ситуации, когда пути используются для сравнения файлов. В этом случае символические ссылки в пути могут быть разрешены первыми, превратив их в минимальное и общепринятое представление, создающее канонический путь:
Это возможно, поскольку мягкие ссылки могут быть расширены до пути без ссылки. После этого со всеми мягкими ссылками в пути оставшийся путь является частью дерева, где путь всегда однозначен.
Команда 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
[ ... ]
Некоторые батареи - в частности, некоторые китайцы - не будут заряжаться простым подключением к источнику питания. Вы должны отключить питание, вынуть батарею и снова положить ее обратно. Когда вы загрузитесь, она зарядится, но когда она сбежит, ближе к концу, вы должны сделать это снова. Я случайно обманул этот трюк; Я собирался купить новую батарею, поэтому взял старую, чтобы получить номер. Я положил его, загрузил, чтобы я мог использовать его, и он заряжался.
Новые (китайские) батареи - всего несколько долларов. Даже если ваш не мертв, это будет когда-нибудь, так что это неплохо иметь под рукой.