Содержит ли мягкая привязка к каталогу жесткие ссылки на его подфайлы?

Предположим, что у меня есть следующая конфигурация:

  • Папка A
    • file1
    • file2

Затем я создаю мягкую ссылку из папки «А» следующим образом: ln -s AB чтобы мы теперь имели:

  • Папка A
    • file1
    • file2
  • Папка B (символическая ссылка для папки A (программная ссылка))
    • file1
    • file2

Теперь, когда я изменяю B/file1 , это изменение распространяется на A/file1 . Однако, похоже, что при использовании ls -l в BB/file1 и B/file2 не являются мягкими, связанными с A/file1 и A/file2 ! Что происходит?

Вопрос: Правда ли, что B/file1 жестко связан с A/file1 ? Другой способ расспросить об этом: верно ли, что когда вы софт-ссылку на каталог, что ее подфайлы становятся жесткими ссылками на подфайлы исходного каталога? Есть ли способ сделать все возможное?

Они не являются жесткими ссылками по двум причинам:

  1. Количество жестких ссылок для файлов в каталогах с программными ссылками, представленное через ls, равно 1. Если файлы были жестко связаны, счетчик будет равен 2 или более.
  2. Жесткие ссылки не могут охватывать файловые системы, в то время как софт-ссылки могут. Если бы были созданы жесткие ссылки, вы не смогли бы софт-каталогов ссылок в файловых системах.

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

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

Кажется, вы путаете вещи.

Символическая ссылка : символическая ссылка только указатель на другой путь в системе. Этот путь может существовать или нет, это не имеет значения, оно также может быть абсолютным или относительным. Символическая ссылка не имеет ничего общего с целевым файлом, она просто указывает. Это может быть даже на другом физическом диске. Его можно сравнить с гиперссылкой на веб-сайте.

Hardlink : жесткая ссылка – это присвоение имени файлу (именно номер inode файла). Это отношение называется сюръективным . Каждый файл имеет по крайней мере один hardlink, ссылающийся на его номер inode. Номер inode является ссылкой на файл. Таким образом, современные файловые системы не имеют назначения исправлений имени файла и фактического файла.

Если файл имеет 2 жестких ссылки, ссылающихся на его индексный дескриптор, и один из них удаляется (по системному вызову unlink() ), только эта жесткая ссылка удаляется, файл и индекс остаются нетронутыми (поэтому системный вызов называется unlink() не delete() ). Как только количество жестких ссылок уменьшается до нуля, inode, наконец, удаляется и, следовательно, файл.


Так это была теория.

Когда вы меняете B/file1 тогда также изменяется A/file1 , потому что это та же самая жесткая ссылка, ссылающаяся на тот же номер inode, который ссылается на тот же файл. Вы просто перешли через символическую ссылку A указывающую на каталог B , а не на реальный каталог B