- Как найти все жесткие ссылки в каталоге в Linux
- Как найти все жесткие ссылки на данный файл
- Примеры
- НАЙТИ И УДАЛИТЬ ВСЕ ЖЕСТКИЕ ССЫЛКИ НА ФАЙЛ С ИМЕНЕМ FOO в /TMP/
- Справка, параметр -samefile не поддерживается командой find
- Похожие статьи:
- Как найти все жесткие ссылки (hard link) в каталоге в Linux
- Как найти все жесткие ссылки на предоставленный файл
- Примеры
- Найдите и удаляйте все жесткие ссылки на файл с именем foo в /tmp/ директории
- Справка, параметр -samefile не поддерживается моей командой find
- Оставьте ответ Отменить ответ
- Ссылки в 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 <>
Похожие статьи:
Как найти все жесткие ссылки (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 <>
Это интересно:
Оставьте ответ Отменить ответ
📅 С 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
Можно сделать жёсткую ссылку на обычный файл
-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/