Уменя есть файл с именем/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]