Как следует из названия, я хотел бы знать разницу между жесткой ссылкой и мягкой ссылкой, созданной командой ln
. Команда man ln
предоставляет информацию, но не дает достаточного ответа на мой вопрос.
Кроме того, было бы неплохо, если бы кто-то мог предоставить параметр, где жесткая ссылка может быть предпочтительнее, чем символическая ссылка.
symbolic-link
ste_kwr
источник
источник
Ответы:
В Linux / Unix ярлыки называются ссылками
Ссылки бывают двух типов: мягкие ссылки (символические ссылки) или жесткие ссылки.
Soft Links (символические ссылки)
Вы можете создавать ссылки на файлы и каталоги, а также создавать ссылки (ярлыки) в другом разделе и с другим номером иноде, чем в оригинале.
Если реальная копия удалена, ссылка не будет работать .
Жесткие ссылки
Жесткие ссылки предназначены только для файлов; Вы не можете связать файл с другим разделом с другим номером инода.
Если реальная копия удалена, ссылка будет работать , потому что она получает доступ к базовым данным, к которым обращалась реальная копия.
Вопрос: Как сделать мягкую ссылку?
Ответ: можно сделать мягкую ссылку
ln -s
; сначала вам нужно определить источник, а затем вам нужно определить пункт назначения. (Имейте в виду, что вам нужно определить полные пути как источника, так и места назначения; в противном случае это не сработает.)Как вы можете видеть, он имеет другой индекс и может быть создан на другом разделе.
Вопрос: Как мне сделать Hard link?
Ответ: Жесткая ссылка может быть сделана с
ln
; сначала вам нужно определить источник, а затем вам нужно определить пункт назначения. (Имейте в виду, что вам нужно определить полный путь как источника, так и пункта назначения; в противном случае это не сработает.)Допустим, у меня есть скрипт в
/script
каталоге с именемfirefox
.Как видите, у него такой же индекс. Если я удалю оригинал, ссылка будет работать, и она будет действовать как оригинал.
Выше я проверяю, что ссылка работает, а затем удаляю оригинальный скрипт firefox.
Ваш вопрос: Было бы неплохо, если бы кто-то мог предоставить настройку, где жесткая ссылка может быть предпочтительнее, чем символическая ссылка.
Ответ : В зависимости от расположения разделов диска, жесткие ссылки имеют ограничение, что они должны быть на одном разделе (-1 балл) и могут ссылаться только на файлы (-1 балл) ), но +1 балл, если исходная ссылка удалена будет работать, и он действует как оригинал.
С другой стороны, мягкая ссылка может указывать на каталоги или файлы (+1 балл), и нет ограничений на разделы (+1 балл), но (-1 балл), если источник удален, ссылка не будет работать.
источник
Жесткая ссылка - это не указатель на файл, это запись в каталоге (файл), указывающая на тот же индекс. Даже если вы измените имя другого файла, жесткая ссылка все равно будет указывать на файл. Если вы замените другой файл новой версией (скопировав его), жесткая ссылка не будет указывать на новый файл. Вы можете иметь жесткие ссылки только в одной файловой системе. С жесткими ссылками у вас нет концепции исходных файлов и ссылок, все равны (воспринимайте это как ссылку на объект). Это концепция очень низкого уровня.
С другой стороны, символическая ссылка фактически указывает на другой путь (имя файла); он разрешает имя файла каждый раз, когда вы получаете к нему доступ через символическую ссылку. Если вы переместите файл, символическая ссылка не будет следовать. Если вы замените файл другим, сохранив имя, символическая ссылка укажет на новый файл. Симлинки могут охватывать файловые системы. С символическими ссылками у вас есть очень четкое различие между фактическим файлом и символической ссылкой, которая не хранит никакой информации, кроме пути о файле, на который он указывает.
источник
"Одна картинка стоит тысячи слов."
И «Пример стоит сто абзацев ...»
Создайте два файла:
Введите в них некоторые данные:
И, как и ожидалось:
Давайте создадим жесткие и мягкие ссылки:
Давайте посмотрим, что только что произошло:
Изменение имени blah1 не имеет значения:
blah1-hard указывает на inode, содержимое файла - это не изменилось.
Не удалось найти содержимое файла, поскольку мягкая ссылка указывает на измененное имя, а не на его содержимое.
Точно так же, если blah1 удален, blah1-hard по-прежнему содержит содержимое; если blah2 удален, blah2-soft - это просто ссылка на несуществующий файл.
источник: явно копирует это из StackOverflow!
источник
git
является плохой идеей , на тот случай, если кто-то (расстроенный из-за мягких ссылок) задастся вопросом ... может также обратиться к другим системам управления версиями.Оба являются указателями на файлы; Разница в виде указателя. Символическая ссылка указывает на другой файл по имени . Он имеет специальный бит режима, который идентифицирует его как символическую ссылку, а его содержимое - это имя реального файла. Поскольку оно просто содержит имя, это имя фактически не должно существовать или может существовать в другой файловой системе. Если вы замените названный файл (измените его содержимое, не затрагивая его имя), то ссылка все равно будет содержать то же имя, и теперь она указывает на новый файл. Вы можете легко определить символическую ссылку и увидеть имя файла, на который она указывает.
Жесткая ссылка указывает на файл по номеру инода. Таким образом, жесткие ссылки ничем не отличаются от имени файла. Нет «настоящего» имени против имени с жесткой ссылкой; все жесткие ссылки являются одинаково действительными именами для файла. Из-за этого файл, на который вы ссылаетесь, должен фактически существовать и находиться в той же файловой системе, где вы пытаетесь создать ссылку. Если вы удалите оригинальное имя, то жесткая ссылка все равно будет указывать на тот же файл. Поскольку все жесткие ссылки являются одинаково действительными именами для файла, вы не можете смотреть на одну и видеть другие имена для файла; чтобы найти это, вы должны посмотреть на каждый файл и сравнить их номер инода, чтобы найти другие имена, которые имеют тот же номер инода.
Вы можете сказать, сколько имен имеет файл из вывода
ls -l
. Первое число после режима файла - это количество ссылок. Файл с более чем 1 ссылкой имеет другие имена где-то, и, наоборот, файл с количеством ссылок только 1 не имеет (других) жестких ссылок.источник
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Думаю, это не очень хорошо объяснено. Вы имеете в виду, если я заменю файл, на который я получил символическую ссылку, тогда ссылки, содержащие имя, останутся нетронутыми. Но он будет указывать на замененный файл, только если его имя файла (то есть новый файл, который заменил старый) совпадает с замененным (то есть старый файл, который был заменен новым), правильно?Жесткая ссылка может работать только в одной и той же файловой системе, это просто другое имя для одного и того же inode (файлы имеют внутреннюю ссылку inode). Файл будет удален с диска только тогда, когда последняя ссылка на его inode будет удалена (вы
rm
d илиunlink
d последняя ссылка). Жесткие ссылки обычно работают только для файлов, а не для каталогов.Символьная ссылка (символическая ссылка) - это специальный файл, содержащий путь к другому файлу. Этот путь может быть абсолютным или относительным. Символьные ссылки могут работать в разных файловых системах и даже могут указывать на разные файлы, если вы, например, отключили внешний жесткий диск и заменили его другим, у которого другой файл находится по тому же пути. Символьная ссылка может указывать либо на файлы, либо на каталоги.
источник
-d, -F, --directory
выключатели. И да, я уже видел записку вln(1)
странице :)ln
нельзя использовать для создания жестких ссылок на каталоги. Существуют жесткие ссылки на каталоги, но наиболее ярким примером является.
и..
. Я не хотел включать это в свой первоначальный ответ, так как это только усложнит ситуацию.В одном из ответов из другой ветки (теперь ссылка на которую есть в верхней части вашего поста) упоминается эта страница, которая, я думаю, является довольно хорошим объяснением среднего уровня. Если вы заблудились в ascii art, вот версия tl; dr:
Ядро и файловые системы переводят все прозрачно.
Итак, основываясь на этом:
../parent.file
)Возможно, я немного запутался, но, читая разные вещи, я изо всех сил пытаюсь найти разницу между стандартным файлом и жесткой ссылкой. Как я понимаю, каждый файл состоит из жесткой ссылки (хранящей имя файла), ссылающейся на индекс, который указывает на физические данные.
Добавление жесткой ссылки просто предоставляет inode дополнительный указатель на основе файловой системы. Это правильно?
источник
Когда использовать Soft Link:
Связь между файловыми системами. Если вы хотите связать файлы между файловыми системами, вы можете использовать только символические / программные ссылки.
Ссылки на каталог: если вы хотите связать каталоги, то вы должны использовать мягкие ссылки, так как вы не можете создать жесткую ссылку на каталог.
Когда использовать Hard Link:
Место для хранения. Жесткие ссылки занимают очень незначительное пространство, так как при создании жестких ссылок новые иноды не создаются. В мягких ссылках мы создаем файл, который занимает место (обычно 4 КБ, в зависимости от файловой системы)
Производительность. Производительность будет немного выше при обращении к жесткой ссылке, поскольку вы напрямую обращаетесь к указателю диска, а не просматриваете другой файл. Перемещение местоположения файла: если вы переместите исходный файл в другое место в той же файловой системе, жесткая ссылка все равно будет работать, но мягкая ссылка не будет выполнена.
Избыточность: если вы хотите убедиться в безопасности ваших данных, вы должны использовать жесткую ссылку, как в жесткой ссылке, данные в безопасности, пока все ссылки на файлы не будут удалены, вместо того, чтобы в мягкой ссылке, вы потеряете данные, если главный экземпляр файла удален.
источник
Путаница возникает, когда вы пытаетесь найти разницу между «именем файла» и жесткой ссылкой, потому что ее нет.
Каждый созданный вами файл состоит из данных на диске и жесткой ссылки, которая представляет собой имя файла в каталоге и указатель на данные на диске. Конец истории. Когда удаляется последняя (или единственная) жесткая ссылка, ОС знает, что данные больше не нужны.
Отсюда видно, что фактические данные никогда не удаляются, а только жесткие ссылки. И когда он становится достаточно загруженным на диске, данные могут быть перезаписаны данными другого файла. До этого данные из удаленного файла могут быть восстановлены, но без жесткой ссылки их довольно сложно найти.
Symlinks, как описано выше, просто сказать вам «есть файл с именем
<targetname>
в папке с именем<targetfolder>
». Они указывают на жесткую ссылку. Они не знают, где данные. Жесткая ссылка знает это.источник
Это очень просто Файлы (и каталоги!) Хранятся по адресам на блочном устройстве (HDD или что-то еще). Обычно у вас есть одно имя, сопоставленное с адресом, и именно так вы получаете свой файл. Жесткая связь является вторым, третьим и т.д. именем отображается на тот же адрес. Символическая ссылка вместо того, относится к символу - имя - и так это второе имя отображается на первое имя. Что касается ядра, то, как только оно прочитает цель символьной ссылки, оно остановится и вернется к началу с целевым значением в качестве имени файла (более или менее), так что относительные символические ссылки возможны, но крайне бесполезны. Имя цели не используется выше уровня файловой системы, за исключением случаев, когда оно явно запрашивается в коде пользовательского пространства.
источник