1

SSH - это мягкая ссылка (символическая ссылка или символическая ссылка) на dropbear.

Я хочу знать, сколько файлов мягко связано с dropbear. Есть ли способ узнать, сколько программных ссылок указывают на определенный файл?

Было бы лучше, если бы он также отображал список программных ссылок, которые указывают на этот файл.

/usr/bin/ssh -l
lrwxrwxrwx    1 root     root           16 Apr 22  2011 /usr/bin/ssh -> ../sbin/dropbear

2 ответа2

3

Я придумал эту цепочку:

find . -type l -ls | egrep -o -- '-> .+$' | sort | uniq -c

Он перечисляет все символические ссылки, greps для того, что идет после -> , сортирует и группирует его.

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

Пример:

/home/shi/bin/list.sh -> ./show.sh
/home/shi/sbin/all.sh -> ./show.sh

show.sh могут быть разными программами - одна в bin а другая в sbin .

Другой проблемой являются обычные имена файлов с -> в них (хотя и не очень часто). Формат ls не может отличить это.

Пример:

test.sh -> all.sh -> list.sh

Файл с именем test.sh может ссылаться на all.sh -> list.sh или файл с именем test.sh -> all.sh может ссылаться на list.sh

Я надеюсь, что это поможет в вашем случае. Для идеального решения вы должны использовать скрипт (sh, PHP, Perl).

1

Если вам не нужно проверять файловые системы, вы можете использовать символические ссылки:

symlinks -rsv / | grep test_off.sh | tee >(wc -l)

Приведенное выше должно выводить список ссылок, которые указывают на файл, а также подсчитывать их количество:

absolute: /usr/bin/test_off.sh -> /usr/share/acpi_call/test_off.sh
absolute: /root/linkone -> /usr/share/acpi_call/test_off.sh
relative: /root/rellinktwo -> ../usr/share/acpi_call/test_off.sh
3

man символические ссылки для более подробной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .