Как найти все жесткие ссылки (hard link) в каталоге в Linux

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

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

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

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

$ ln foo bar
$ ln foo dir2/foobar

В приведенном выше примере bar и foobar являются другими именами файла foo. Lля поиска всех жестких ссылок для файла foo в текущем каталоге cинтаксис будет выглядеть следующим образом:

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/passwd  и вам нужно получить все жесткие ссылки на него, которые существуют в каталоге /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 {}

Примеры возможных выводов данных:

removed '/tmp/dir2/foobar'
removed '/tmp/foo'
removed '/tmp/bar'

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

Найдите номер файлов inode, для этого введите:

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

Примеры возможных выводов данных:

4065089 -rw-r--r-- 3 vivek vivek 8 Feb 26 02:19 /tmp/demo.txt

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

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

Примеры возможных выводов данных:

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

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

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

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

Как найти все жесткие ссылки (hard link) в каталоге в Linux
Рисунок 01: Как найти все жесткие ссылки (hard link) на заданное имя файла.

Перевод: Анна Давыдова
Источник: cyberciti.biz

Это интересно:

Оставьте комментарий