Возьмите каталог /etc в качестве примера. В моей системе 144 ссылки. А так как каталоги не могут иметь жестких ссылок (я так понимаю), число 144 должно относиться к программным ссылкам (1 исходный + 143 программных ссылок).

$ ll -i
total 84
      2 drwxr-xr-x  20 root root  4096 Aug 18 01:21 ./
      2 drwxr-xr-x  20 root root  4096 Aug 18 01:21 ../
     12 lrwxrwxrwx   1 root root     7 Aug 18 01:19 bin -> usr/bin/
1048577 drwxr-xr-x   4 root root  4096 Sep  1 15:53 boot/
5636097 drwxr-xr-x   2 root root  4096 Aug 18 01:21 cdrom/
      2 drwxr-xr-x  23 root root  4920 Sep  3 11:20 dev/
 262145 drwxr-xr-x 144 root root 12288 Sep  3 09:34 etc/

Я пытаюсь отследить софтлинки (из любопытства и заранее изучить для любого будущего использования), но безуспешно.
Я пытался -

$ sudo find  /  -not -path "/mnt/*" -samefile /etc  
/etc
find: ‘/run/user/1000/doc’: Permission denied 
...
0
samshers 3 Сен 2020 в 10:20

1 ответ

Каталоги есть, имеют жесткие ссылки, но они не произвольны. Каждый каталог содержит жесткую ссылку на его родительский каталог ..; ваш /etc содержит 142 подкаталога. Два других — это сам /etc и /etc/..

Чтобы найти символические ссылки, вам необходимо указать find перейти по ним:

find -L / -xdev -samefile /etc

Вместо того, чтобы исключать пути, которые вас не интересуют, более эффективно перечислить все точки монтирования, которые вам интересны, и указать find не спускаться в другие файловые системы. Это позволяет избежать обработки /proc, /sys и т. д.

2
Stephen Kitt 3 Сен 2020 в 10:25
Поскольку вы уже используете поиск GNU, лучше использовать -lname для поиска «программных ссылок» на какой-либо файл или каталог, а не эту хитрую и ограничивающую хитрость -L -samefile.
 – 
user414777
3 Сен 2020 в 11:31
-lname соответствует именам ссылок точно, поэтому он пропускает все, что пропускается с использованием .. или использует ссылку, содержащую каталоги.
 – 
Stephen Kitt
3 Сен 2020 в 11:52
Действительно, но это больше похоже на фичу, чем на баг. Попытка найти неопределенное подмножество всех возможных путей, по которым вы можете получить доступ к файлу, не кажется хорошо продуманным планом действий ;-)
 – 
user414777
3 Сен 2020 в 12:04
Дело не в том, чтобы найти все возможные пути (их бесконечное множество, о чем, я думаю, вы и говорите), а в том, чтобы найти все существующие символические ссылки на данный каталог или файл, и это определенный набор , который -lname не может найти. Не могли бы вы объяснить, почему -L -samefile ограничивает?
 – 
Stephen Kitt
3 Сен 2020 в 12:08
Я не думаю, что существует бесконечное количество путей к файлу, если только не принимаются циклы символических ссылок и неограниченная длина пути, а это не так. Ваш пример может найти одну и ту же символическую ссылку несколько раз, а также найти жесткие ссылки без какого-либо очевидного способа уточнить результат. Кроме того, этот ответ был бы улучшен, если бы было упомянуто, что только в некоторых подкаталогах файловых систем увеличивается количество ссылок родительского каталога.
 – 
user414777
3 Сен 2020 в 20:52