Разыменование жестких ссылок

Просто попытка:

su -c'yum clean all'

и введите свой корень pw.

22
14.07.2012, 06:55
2 ответа

По умолчанию, если Вы говорите tar заархивировать файл с жесткими ссылками и больше чем одну такую ссылку включено среди файлов, которые будут заархивированы, она архивирует файл только однажды и записывает второе (и любые дополнительные имена) как жесткие ссылки. Это означает, что при извлечении того архива жесткие ссылки будут восстановлены.

Если Вы используете --hard-dereference опция, затем tar не сохраняет жесткие ссылки. Вместо этого это рассматривает их как независимые файлы, которые просто, оказывается, имеют то же содержание и метаданные. При извлечении архива файлы будут независимы.

Примечание: Это распознает жесткие ссылки первой проверкой числа каналов файла. Это записывает номер устройства и inode каждого файла больше чем с одной ссылкой и использование, что для обнаружения, когда тот же файл архивируется снова. (Когда Вы используете --hard-dereference, это не делает этого.)

24
27.01.2020, 19:43

Можно отличить файл с жесткой ссылкой (ссылками) на него из non-hard-linked файла с "числом каналов". Я вижу два способа получить это от командной строки:

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

Или

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

Тем одиноким '2' прежде "bediger" является число каналов. Обратите внимание, что оба имен файлов имеют то же inode число, 932815.

Я уверен, что обе из этих команд получают число каналов от st_nlink поля статистики структуры, которая заполнена a stat() системный вызов.

Почти я могу сказать, работая tar с --hard-dereference средства, что вместо того, чтобы получить единственный файл с двумя отличными именами файлов (как в примере выше), Вы получаете два файла, каждого с единственным именем файла. tar вероятно, проверяет число каналов на каждом файле, и по умолчанию при извлечении, это создает жесткую ссылку на втором имени файла, которое это имеет для трудно связанных данных файла. При вызове --hard-dereference на создании архива это, кажется, создает совершенно новый файл для второго имени файла когда вызов извлечения tar выполнения.

7
27.01.2020, 19:43
  • 1
    Теперь я понимаю, что 'переходят по жестким ссылкам', неправильно формулирует.Спасибо. Но что, если один из двух идентичных файлов не заархивирован? Число каналов вводит в заблуждение в таких случаях. –  musa 14.07.2012, 15:05
  • 2
    Теперь я понимаю, что 'переходят по жестким ссылкам', неправильно формулирует.Спасибо. Но что, если один из двух идентичных файлов не заархивирован? Число каналов вводит в заблуждение в таких случаях. –  musa 14.07.2012, 15:05
  • 3
    , Это не "два идентичных файла", это - один файл с двумя именами. Это не имеет значения, который не архивирует tar файла, поскольку они идентичны. По умолчанию tar, вероятно, просто сохраняет некоторый "указатель" от 2-го имени файла назад к первому так или иначе, точно так же, как файловая система делает. –  Bruce Ediger 14.07.2012, 15:43

Теги

Похожие вопросы