Как я могу удалить hardlink к каталогу?

Попробуйте это

compgen -A function -abck | awk 'length($0) == 3'

(редактирование: это - встроенный удар, таким образом, необходимо выполнить его в ударе, и это сразу даст Вам список 3 символьных команд),

3
14.05.2013, 09:39
1 ответ

Каталоги в ext4 файловых системах обычно имеют по крайней мере 2 ссылки. Запись в их родительском каталоге и . запись в себе. Посмотрите там для получения дополнительной информации.

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

Например, с debugfs -w (на размонтированной фс), можно сделать link a/b c/d вызвать создание ссылки на каталог. Вы заметите, что число каналов не обновляется (Вам было бы нужно sif a/b links_count 3 обновить его):

$ ls -lid a/b c/d a/b/. c/d/.
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 a/b/
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 a/b/./
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 c/d/
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 c/d/./

Число каналов 2 выше, даже при том, что существует 3 ссылки (к a к c, и "." к себе).

Отметьте это fsck сообщил бы о проблеме с этим:

Pass 2: Checking directory structure
Entry 'd' in /c (1282) is a link to directory /a/b (12).
Clear<y>?

Таким образом, это вряд ли будет Ваш случай здесь, если фс только что прошла fsck.

Для удаления одной из тех ссылок можно использовать debugfs -w снова (после того, как размонтировал файловую систему) и делают unlink c/d в нем, или использование fsck. Если a directory имеет больше чем одну ссылку, можно проверить .. запись в нем (с debugfs ls) проверять, который является корректным (.. будет иметь то же inode число как его корректный родитель).

3
27.01.2020, 21:24

Теги

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