Я отслеживаю, что может быть случайной или ошибочной жесткой ссылкой на каталог, поэтому я хочу найти все жесткие ссылки на каталог, чтобы проверить их вручную. (fsck
ошибок не обнаруживает, но при случайной проверке количество ссылок оказывается неверным.)
Обычный способ проверки жестких ссылок на файл - использовать find
, либо find -inum
или find -samefile
, но ни один из них не работает для каталогов:
user$ find . -links 3 -name '.*' -ls
user$ ls bar
l1/
user$ ls -iad bar
10541088 bar/
user$ ls -iad bar/.
10541088 bar/./
user$ ls -iad bar/l1/..
10541088 bar/l1/../
user$ find . -inum 10541088 -ls
10541088 0 drwxr-xr-x 3 user admin 102 Mar 17 11:36 ./bar
user$ find . -samefile bar -ls
10541088 0 drwxr-xr-x 3 user admin 102 Mar 17 11:36 ./bar
Обратите внимание, что хотя bar
, bar/.
, и bar/l1/..
все жесткие ссылки на один и тот же индекс, find
перечисляет только один из них.
я могу использовать ls -aiR / | grep 10541088
и это, по крайней мере, найдет точечные и точечные ссылки, но я не уверен, что нет какого-либо другого скрытого файла, который будет пропущен, плюс ls
буду скрещивать устройства, чего я не хочу.
Есть ли лучший способ найти все жесткие ссылки на каталог?
Правильно иметь счет 3, когда у вас есть один подкаталог.
Если в каталоге 5 подкаталогов, у вас должно быть 7 подкаталогов.
В этом примере я предполагаю, что / usr / bin / не имеет подкаталога
Если вы считаете / usr / bin номер ссылки - 2.
ссылка 1 bin
в каталоге / usr
ссылка 2 .
в каталоге / usr / bin
Если вы считаете / usr / номер ссылки - 3.
ссылка 1 /usr
в каталоге /
ссылка 2 .
в каталоге / usr
ссылка 3 ..
в каталоге / usr / bin
Если вы считаете / var / cache / man / номер ссылки - 26.
ссылка 1 man
в каталоге / var / cache
ссылка 2 .
в каталоге / var / cache / человек
ссылка 3 ..
в каталоге / var / cache / man / cs
ссылка 4 ..
в каталоге / var / cache / человек / да
ссылка 5 ..
в каталоге / var / cache / man / es
../ ..