Почему жесткие ссылки, кажется, занимают то же место как оригиналы?

Вы не можете отредактировать файл на смонтированном ISO-образе. Но можно создать новый со всеми необходимыми файлами. Использование сценария/usr/src/tools/tools/cd2dvd/cd2dvd.sh mkisofs от sysutils/cdrtools (это вызывается в конце сценария). Как Вы видите, это использует /boot/cdboot как загрузочный образ.

14
30.08.2017, 19:25
2 ответа

Файл является inode с метаданными, среди которых список, указателей туда, где можно найти данные.

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

Все те ссылки, те имена файлов указывают на тот же файл. Нет того, который является оригиналом и другими, которые являются ссылками. Они - все точки доступа в тот же файл (тот же inode) в дереве каталогов. Когда Вы получаете размер файла (lstat системный вызов), Вы получаете информацию (что метаданные упомянули выше), сохраненный в inode, это не имеет значения, какое имя файла, которые связываются, Вы используете для обращения к тому файлу.

В отличие от этого, символьные ссылки являются другим файлом (другой inode), чье содержание является путем к конечному файлу. Как любой другой файл, те символьные ссылки должны быть связаны с каталогом (должен иметь имя), таким образом, можно получить доступ к ним. У Вас может также быть несколько ссылок на символьные ссылки, или другими словами, символьным ссылкам можно дать несколько имен (в одном или нескольких каталогах).

$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a

Выше номера документа 10486707 регулярный файл. Две записи в текущем каталоге (один с именем a, один с именем b) свяжитесь с ним. Поскольку число каналов равняется 2, мы знаем, что нет никакого другого названия того файла в текущем каталоге или любом другом каталоге. Номер документа 10502404 является другим файлом, на этот раз символьной ссылки типа, связанной дважды с текущим каталогом. Его содержание (цель) является относительным путем "a".

Обратите внимание, что, если бы 10502404 был связан с другим каталогом, чем текущий, он обычно указывал бы на другой файл в зависимости от того, как к нему получили доступ.

$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a

2:
total 92
10608674 drwxr-xr-x   2 stephane stephane  4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r--   1 stephane stephane     4 Aug 27 17:24 a
10539259 lrwxrwxrwx   2 stephane stephane     1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar

Файлы не имеют никаких имен, связанных с ними кроме в каталогах, которые связывают их. Место, занятое их именами, является записями в тех каталогах, оно составляется в размере файла / использование диска каталогов.

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

16
27.01.2020, 19:51
  • 1
    Ahh... Теперь я вижу. Таким образом, файл, названный "привет" и его точная копия, названная "ajhĝjdmjefsjmksgskgjkmŝŭna", берет точно тот же ammout пространства; потому что их имена не значат это lstat системный вызов, который получает их размер. –  JMCF125 27.08.2013, 19:11
  • 2
    @JMCF125, да, размер, взятый их именами, является записью в соответствующих каталогах, это считается в размере файла каталогов. –  Stéphane Chazelas 27.08.2013, 19:13
  • 3
    Спасибо. Можно ли включать это в ответ? Ожидайте, я разъясню свой вопрос сначала. –  JMCF125 27.08.2013, 19:15

Жесткая ссылка является, по существу, исходным файлом. Так, размер, который Вы видите, сообщил, размер файла, связываемого с. Это - гибкие ссылки, которые только занимают место их имен (своего рода).

Что касается файловой системы, жесткая ссылка и оригинал является тем же самым, они указывают на тот же inode, таким образом, о том же размере сообщают.

4
27.01.2020, 19:51
  • 1
    Но имя жесткой ссылки должно занять место, корректное? –  JMCF125 27.08.2013, 19:02
  • 2
    См. ответ @stephan ниже, он объясняет это лучше. –  terdon♦ 27.08.2013, 19:04
  • 3
    @JMCF125 Да, но то пространство в каталоге. При создании достаточного количества файлов Вы заметите, что размеры каталога увеличиваются. Размер файла не включает свои метаданные, такие как его имя. –  Gilles 'SO- stop being evil' 28.08.2013, 02:00
  • 4
    @Gilles, спасибо, но @Stephane уже обновили его ответ с той информацией. Кроме того, теперь я думаю о нем лучше, название / должен быть сохранен сам по себе, как будто Вы делаете cd .. в / Вы остаетесь дома /. –  JMCF125 28.08.2013, 16:04

Теги

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