Для меня adb отсутствовал независимо от всех действий.
Тогда я заметил полезную подсказку, показанную на терминале, которую я пробовал:
sudo apt-get install android-tools-adbПосле этого была установлена команда adb, и теперь я могу установить на эмулированные устройства все, что захочу.
Жесткая ссылка на каталог может ссылаться на самого родителя, который создает файловую систему петля. Например, эти команды могли бы создать цикл с обратной ссылкой 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
[ ... ]
FYI, вы можете добиться того же, что и жесткие ссылки для каталогов, используя mount:
mount -t bind /var/www /home/user/workspace/www
Это очень опасно, потому что большинство инструментов и программ не будут знать о привязке. Однажды я сделал что-то подобное в приведенном выше примере, а затем перешел к rm -rf /home/user. К счастью, в /var/www ничего не значимо.
Причина, по которой жесткие ссылки не разрешены, немного технична. По сути, они нарушают структуру файловой системы. В любом случае, вы вообще не должны использовать жесткие ссылки. Символьные ссылки допускают большинство функций, не вызывая проблем (например, ln -s target link).