Уменя есть файл с именем/etc/passwd, и я хотел бы найти все жесткие ссылки на этот файл в каталоге. Как узнать все жесткие ссылки в каталоге /etc/passwd  и /backups/? Как найти все жесткие ссылки на данный файл с помощью командной строки Linux или Unix?

Вы можете использовать команду find в Linux, Apple MacOS, FreeBSD и в других операционных системах, чтобы найти все жесткие ссылки.

 Как найти все жесткие ссылки на данный файл

Жесткая ссылка — это не что иное, как конкретное местоположение физических данных. Вы задаете разные имена, относящиеся к одному и тому же файлу. Файл относится к inode, что и имя. Жесткие ссылки на файл foo можно создать следующим образом:

$ ln foo bar
$ ln foo dir2/foobar

В приведенном выше примере bar и foobar становятся другим именем файла foo. Синтаксис следующий, чтобы найти все жесткие ссылки для файла foo в текущем каталоге:

find/dir/to/search/-samefile/path/to/file/name
## To find out all hard links to foo, use this command:
find/-samefile foo
find/-xdev -samefile foo

Примеры

Если файл с именем /etc/passswd и вам нужно получить все жесткие ссылки, которые существуют в каталоге/backups/, запустите:

$ find/backups/ -samefile/etc/passwd

Пример результата:

/backups/hourly.0/etc/passwd
/backups/hourly.4/etc/passwd
/backups/hourly.3/etc/passwd
/backups/daily.0/etc/passwd
/backups/hourly.1/etc/passwd
/backups/hourly.2/etc/passwd

Если вы не хотите искать каталоги на других файловых системах, таких как смонтированные, попробуйте:

$ find/backups/ -xdev -samefile/etc/passwd

НАЙТИ И УДАЛИТЬ ВСЕ ЖЕСТКИЕ ССЫЛКИ НА ФАЙЛ С ИМЕНЕМ FOO в /TMP/

Введите следующую команду:

$ find /tmp/ -xdev -samefile foo -print0 | xargs -I {} -0 rm -v {}

Пример результата:

 Удалено '/tmp/dir2/foobar'
 Удалено '/tmp/foo'
 Удалено '/tmp/bar'

Справка, параметр -samefile не поддерживается командой find

Определить номер inode файла, введите:

$ ls -li fileNameHere
$ ls -li /tmp/demo.txt

Пример резульатат:

  4065089 -rw-r-r-- 3 root root 8 февраля 26 02:19/tmp/demo.txt

Первый столбец в приведенном выше примере отображает индекс inode # 4065089. Теперь альтернативный синтаксис выглядит следующим образом, чтобы найти все жесткие ссылки для файла с именем /tmp/demo.txt, используя inode # 4065089:

$ find /tmp/-inum 4065089
$ find /tmp/-xdev -inum 4065089

Пример  результата:

/tmp/demo.txt
/tmp/dir2/file2.txt
/tmp/file1.txt

Чтобы найти и удалить все жесткие ссылки на файл по номеру inode # 4065089, запустите:

$ find /tmp/-xdev -inum 4065089 | xargs rm -v
$ find /tmp/-xdev -inum 4065089 -print0 | xargs -I {} -0 rm -v {}

Вот мой пример:

поиск и удаление жестких ссылок

Круглосуточная поддержка Linux/Unix серверов, [email protected]