Консультация № 139333
06.06.2008, 15:59
0.00 руб.
0 2 2
Допустим я обнаружил несколько жестких ссылок на важный для меня файл
[root@iptables networking]# ls -ali ./megasecret
итого 20
144353 drwxr-xr-x 2 root root 4096 Июн 6 15:20 .
144352 drwxr-xr-x 4 root root 4096 Июн 2 03:52 ..
146908 -rw-r--r-- 2 root root 136 Июн 6 14:50 secretniy

и хочу увидеть все их одной командой.

Как просмотреть все жесткие ссылки для конкретного inode?

Обсуждение

Неизвестный
06.06.2008, 18:05
общий
это ответ
Здравствуйте, Василий Литвиненко!
По-моему, единственный способ - поиск по всему диску, т.к. inode не хранит имен файлов. Нечто вроде:
find / -inum 146908
Неизвестный
06.06.2008, 19:04
общий
это ответ
Здравствуйте, Василий Литвиненко!
Чтобы найти все жесткие ссылки на файл, не узнавая предварительно его inode, можно создать скрипт (текст в приложении), который по-умолчанию ищет по в текущей папке и всех вложенных в нее папках жесткие ссылки на файл, указанный ей первым параметром (откуда был запущен). Вторым параметром можно задать папку в которой искать жесткие ссылки, например:

ls_all_hardlinks /home/user/file

ищет файл только в текущем каталоге и всех вложенных, а

ls_all_hardlinks /home/user/file /

ищет уже по всей файловой системе (ls_all_hardlinks - гипотетическое имя скрипта). Имейте в виду, что скрипт работает с правами пользователя от имени которого запущен, а все сообщения об ошибках перенаправляются в /dev/null (то есть Вы их не увидите). Поэтому, чтобы гарантированно найти все жесткие ссылки скрипт нужно запускать от имени привелигированного пользователя.
Не забудьте создав файл с текстом скрипта установить для него атрибут запуска, например: chmod a+x file. Также для удобства можно поместить файл скрипта в папку, которая указана в Вашей переменной окружения $PATH.
Желаю удачи!

Приложение:
#!/bin/bashif [ $2 ]; then DIR=$2;else DIR=$PWD;fifind $DIR -inum $(ls -i $1 | head -n 1 | awk --field-separator=‘ ‘ ‘{print $1}‘) -print 2> /dev/null #$string -print
Форма ответа