Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


суббота, 13 июля 2019 г.

bash: хардлинки и файл - кто на кого указывает? files and hardlinks

Разгребал очередной завал в зимбре и выяснил, что есть там дедупликация: если сообщение приходит нескольким получателям, то вместо размножения файлов создаются хардлинки на один его экземпляр. Например, у одного из сообщений, отправленных по общему списку рассылки, было за 60 хардлинков.
Возник вопрос: а где же остальные ссылки на этот файл, если файлов с такими же именами нет? Пришлось копаться в этих ваших интернетах, и удалось накопать такой интересный материал.

Весь материал копировать не буду, ограничусь основным:

1. количество хардлинков:
ls -l имя_файла
например:
drwxr-xr-x  2 root   root     4096 апр 17 23:55  模板
цифра "2" после прав доступа показывает количество хардлинков на этот файл, точнее - на его иноду.

2. что за инода?
stat 模板
   Файл: 模板
   Размер: 4096      Блоков: 8          Блок В/В: 4096   каталог
Устройство: 819h/2073d Inode: 6004887     Ссылки: 2
Конкретно у каталога с шаблонами от WPS Office номер инода 6004887

3. на фиг оно нам надо?
Хардлинк - это одна из записей в каталоге, указывает на конкретное размещение файла в файловой системе. Место такое одно, а вот ссылок на него может быть много. На каталог без вложенных подкаталогов, как этот с китайским названием, всего две ссылки. Если в каталоге есть подкаталоги, то ссылок становится больше для обратной связи от каталогов более низкого уровня.

4. не, а всё-таки, на кой мне знать эту иноду, если мне нужно найти дубликаты?
А вот на кой:
Вариант 1:
find ~/ -inum 6004887
/home/sergei/模板
Начиная с домашней папки я поискал и нашел файл с таким номером иноды. Но почему он один? Потому что это пустой каталог, в котором есть только файлы и еще есть "псевдо-файл" с именем "." (точка), ссылающийся на самого себя. То есть, по факту ссылок две - из каталога предыдущего уровня и сам-на-себя, а файл всего один. Но если зайти внутрь:
~/模板$ ls -l
drwxr-xr-x   2 root   root    4096 апр 17 23:55  ./ 

drwxr-xr-x 144 sergei sergei 16384 июл 11 06:03  ../
то видно, например, что на домашний каталог аж 144 ссылки

5. всё равно непонятно, неужто нельзя быстрее, чем сначала узнавать иноду, а потом долго и нудно искать?
Можно! Оказывается - можно.
find ~/ -samefile 模板
/home/sergei/模板


То есть, чтобы найти все ссылки на конкретный файл, можно просто воспользоваться ключом -samefile. ЧТД.

Комментариев нет:

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

Пожалуйста, воздержитесь от грубостей и персональных нападок.
Я не против матерщины, но она должна быть уместной и использоваться для выражения эмоций, а не в качестве основного средства выражения мыслей.