Количество жестких ссылок linux

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

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

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

Похожие статьи:

Источник

Читайте также:  Monect pc remote 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

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

Читайте также:  Linux 64 bit ram

Оставьте ответ Отменить ответ

📅 С 20 по 22 апреля пройдут незабываемые битвы среди кибер-гладиаторов в мире информационной безопасности!

Открыта регистрация команд по ссылке .

Источник

Ссылки в Linux

Изображение баннера

В Linux всё является файлами и ссылки не исключение.

Жёсткие ссылки

drwxr-xr-x. 85 root root 8192 Jul 14 10:20 /etc

85 в данном примере это значение hard link count — числа жёстких ссылок с таким же значеним метаданных.

-d значит показать сами директории а не их содержимое.

-l значит показывать в режиме long listing

Если добавить флаг -i (—inode), который показывает номер каждого файла — результат будет примерно следующим.

16777281 drwxr-xr-x. 85 root root 8192 Jul 14 10:203 /etc

К аналогичному результату приведёт команда

16777281 drwxr-xr-x. 85 root root 8192 Jul 14 10:20 /etc/.

ls -ldi /etc/. и ls -ldi /etc прилинкованы к одним и тем же метаданным

Таким образом минимальное число жёстких ссылок на диреторию равно двум.

По номеру inode можно найти путь до директории

Если создать пустую директорию и изучить ссылки

drwxr-xr-x 2 andrei users 4096 Jul 14 10:20 d1

total 8 drwxr-xr-x 2 andrei users 4096 Jul 14 10:20 . drwx—— 60 andrei users 4096 Jul 14 10:20 ..

582294 drwxr-xr-x 2 andrei users 4096 Jul 14 10:20 d1 582294 drwxr-xr-x 2 andrei users 4096 Jul 14 10:20 d1/.

Если создать в d1 поддиректорию — количество жёстких ссылок на d1 увеличится с 2 до 3 так как добавится ссылка из поддиректории.

total 12 drwxr-xr-x 3 andrei users 4096 Jul 14 10:20 . drwx—— 60 andrei users 4096 Jul 14 10:20 .. drwxr-xr-x 2 andrei users 4096 Jul 14 10:20 subd1

Читайте также:  Check if file exists linux bash

Можно сделать жёсткую ссылку на обычный файл

-rw-rw-r—. 1 andrei andrei 3 Jul 14 10:20 file1

ln file1 file2
ls -l file1

-rw-rw-r—. 2 andrei andrei 3 Jul 14 10:20 file1

51314587 -rw-rw-r—. 2 andrei andrei 3 Jul 14 10:20 file1 51314587 -rw-rw-r—. 2 andrei andrei 3 Jul 14 10:20 file2

Как мы уже убедились file1 и file2 это один и тот же файл.

Жёсткие ссылки могут указывать на файлы только внутри своей файловой системы

ln /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64 ./link1

ln: failed to create hard link ‘./link1’ => ‘/boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64’: Invalid cross-device link

Символические ссылки

Помимо жёстких ссылок можно создавать символические ссылки (symbolic links)

ln -s file1 file3
ls -li file1 file2 file3

51314587 -rw-rw-r—. 2 andrei andrei 3 Jul 14 10:20 file1 51314587 -rw-rw-r—. 2 andrei andrei 3 Jul 14 10:20 file2 5131458 8 lrwxrwxrwx. 1 andrei andrei 5 Jul 14 10:20 file3 -> file1

Если удалить файл file1 то ваш терминал должен начать сигнализировать о том, что символическая ссылка ведёт вникуда. Она может окрасится в красный, а несуществующий файл назначения будет мигать.

Жёсткая ссылка при удалении цели потеряет 1 в графе ссылки.

-rw-rw-r—. 1 andrei andrei 0 Jul 14 10:20 file2
lrwxrwxrwx. 1 andrei andrei 5 Jul 14 10:20 file3 -> file1

Обратите внимание на то, что у символической ссылки перед правами доступа стоит l

Символические ссылки могут указывать на файлы другой файловой системы

ln -s /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64 ./link1
ls -l

… lrwxrwxrwx. 1 andrei andrei 41 Jul 14 10:20 link1 -> /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64

Практические примеры

Если система установлена на диск небольшого размера, например SSD диск, для хранения мультимедиа имеет смысл подключить более дешёвый HDD диск.

Допустим, сперва вы пользовались директорией /uploads на SSD чтобы не менять код в проекте, можно перекинуть содержимое старой /uploads на новый HDD и сделать символическую ссылку вида

В конфигурации Nginx есть такие директории как sites-available и sites-enabled чтобы «включить» сайт нужно добавить в sites-enabled ссылку на сайт из sites-available

drwxr-xr-x 2 root root 4096 tammi 20 18:12 sites-available/ drwxr-xr-x 2 root root 4096 tammi 20 18:12 sites-enabled/

Источник

Оцените статью
Adblock
detector