Как получить список все “псевдонимы” файла (включая каталога типа) эффективно?

Если я понимаю Вас правильно и если это находится на Linux, можно попытаться использовать

/proc/self/fd/0

как аргумент. Это должно быть символьной ссылкой на стандартный вход процесса. Эквивалентно, в некоторых системах, Вы могли использовать

/dev/stdin

который является часто просто символьной ссылкой на /proc/self/fd/0. У меня нет системы с системным-журналом-ng для тестирования этого на, но я думаю, что что-то как следующее должно работать:

destination knotifier { program('/path/to/executable -i /proc/self/fd/0'); };

где-i заменили бы любой переключатель командной строки исполняемые потребности если таковые имеются. Я также видел используемый/dev/fd/0, но я склонен придерживаться использования/proc непосредственно. Поскольку больше информации видит man proc.

1
03.05.2012, 14:34
1 ответ

Жесткие ссылки могут быть определены путем сравнения и inode числа и номера устройства (две различных смонтированных файловых системы могут каждый иметь файл с тем же inode числом, но у них будут различные номера устройств). Можно считать device/inode вручную с stat $file, или find может сделать это для Вас с -samefile. Можно сделать поиск жестких ссылок более эффективным путем поиска только в том же устройстве:

find $fsroot/. -mount -samefile $myfile

Гибкие ссылки более тверды, поскольку они могут быть расположены где угодно. Необходимо разыменовать их для идентификации inode/device. Можно сделать это вручную с stat -L или автоматически с find -L:

find -L / -samefile $myfile

Обратите внимание, что это также найдет жесткие ссылки. Я не думаю find имеет простой способ искать только гибкие ссылки, которые указывают на определенный inode.

Могло бы случиться так, что некоторые файловые системы могут сказать Вам эту информацию более эффективно, но я думаю в общем случае, необходимо просканировать каждый файл.

1
27.01.2020, 23:54

Теги

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