Команда ln: объяснение программных и жестких ссылок в Linux
Сегодня мы собираемся узнать разницу между жесткими ссылками и мягкими ссылками в операционной системе Linux (команда ln).
Прежде чем понять, что такое жесткие ссылки и мягкие ссылки, нам нужно понять концепцию inode.
Что такое inode в файловой системе Linux
Inode — это в основном указатель на файл на жестком диске.
Если я создам файл с именем file.txt
. это имя файла предназначено для меня как Человека, чтобы понять имя файла.
Но компьютер не понимает имен, компьютер понимает числа.
Каждый раз, когда мы пытаемся получить этот файл или прочитать этот файл, он получает этот номер inode.
Таким образом, для каждого файла в нашей файловой системе существует индексный узел или индексный дескриптор, а индексный дескриптор похож на базу данных файла.
Он содержит много информации о файле, но не содержит двух важных вещей.
Inode не содержит содержимого файла и не содержит имени файла.
Inode содержит список указателей на блоки диска, принадлежащие этому файлу или каталогу. В дисковых блоках хранятся данные для индексного дескриптора.
Таким образом, вы можете представить индексный дескриптор как личный идентификатор или паспорт, но без вашего имени.
inode — это не что иное, как одна структура данных, которая будет иметь один заголовок, содержащий много такой информации, и тринадцать полей, которые будут содержать некоторые прямые одиночные в двойные косвенные и тривиальные косвенные адреса блоков.
Итак, какие поля существуют в заголовочной части индексного дескриптора. Позвольте мне обсудить это по порядку.
Обычно заголовок inode содержит следующую важную информацию, относящуюся к файлу:
- Номер inode
- Размер файла (в байтах)
- Информация о владельце
- Информация о группе владельцев
- Тип файла (файл / каталог / ссылка)
- Разрешения
- Количество ссылок
- Биты защиты
- Время создания / доступа / изменения файла
Вы можете использовать ls
команда, чтобы проверить номер inode файла или каталога.
# ls -li
total 0
52351765 -rw-r--r--. 1 root root 0 Mar 25 06:01 file5.txt
52351767 -rw-r--r--. 1 root root 0 Mar 25 06:01 file6.txt
34548616 drwxr-xr-x. 2 root root 6 Mar 25 06:00 mydata
Читайте также: Примеры команд ls в Linux
Итак, перейдем к теме.
Разница между жесткими ссылками и мягкими ссылками
Мягкие ссылки часто также называют символическими ссылками, но это нормально.
Как мягкие, так и символьные ссылки являются правильными способами ссылки на символьные или программные ссылки.
Итак, о чем мы говорим, в чем разница между жесткой ссылкой и мягкой ссылкой.
Все сводится к тому, на что они ссылаются.
Итак, жесткая ссылка — это в основном файл, который ссылается на место на жестком диске или указывает на него.
Итак, вот мое представление о жестком диске, на самом деле расположение inode на жестком диске, как на жестком диске хранятся данные.

Объяснение жесткой ссылки
Так file1.txt
здесь указывает на конкретное место на жестком диске, где хранятся данные.
Если вы создаете файл с жесткой связью, например, назовите его file2.txt
например, он указывает на одно и то же место на жестком диске.
По сути, это дает вам два отдельных файла, которые ведут себя так же, как отдельные файлы, за исключением того, что если вы отредактируете file1.txt
, file2.txt
будут автоматически отредактированы, потому что они указывают на то же место на жестком диске.
Если вы здесь измените данные, на которые они оба указывают, они оба изменятся, именно так работают жесткие ссылки.
Примечание: Жесткие ссылки не могут пересекать разные файловые системы.
Объяснение Soft Link
С другой стороны, мягкие или символические ссылки работают по-другому.
Если вы знакомы с Microsoft Windows, вы будете знать, что такое ярлык, и в основном программная ссылка аналогична ярлыку в Windows.
Теперь исходный файл file1.txt
в нашем случае делает то же самое, что указывает на место на жестком диске и там хранит свои данные.
Однако когда вы создаете символическую ссылку вместо другого файла, который указывает на то же место на жестком диске, этот файл фактически просто указывает на file1.txt
дескриптор или file1.txt
имя.
Он указывает на имя файла, а не на место на жестком диске.
Так что это значит?
Ну это значит что file2.txt
почти не занимает места, потому что все это как указатель на этот файл.
Таким образом, даже если это файл размером 5 терабайт, если вы создадите символическую ссылку, она просто будет указывать на нее и будет очень маленькой.
Однако это означает, что если вы удалите file1.txt
, file2.txt
будет совершенно бесполезным, потому что он будет указывать на то, чего не существует.
В случае жесткой ссылки, если вы удалите исходный файл, в нашем случае это file1.txt
, file2.txt
будет по-прежнему вполне жизнеспособным, потому что он указывает на место на жестком диске, где хранятся данные.
Таким образом, вы можете удалить один или другой из этих жестко связанных файлов, и данные останутся нетронутыми, и они все еще там.
Но с символической ссылкой, если вы удалите исходный файл, символическая ссылка бесполезна.
Примечание: Мягкие ссылки могут быть связаны в разных файловых системах.
Итак, давайте перейдем к командной строке и посмотрим, как это выглядит на практике, потому что это не сильно сбивает с толку, когда вы понимаете, что на самом деле происходит.
Итак, я нахожусь в своей системе Ubuntu и открыл окно терминала.
Теперь, если я напечатаю ls
вы увидите, что есть файл с именем file1.txt
.
# ls
file1.txt
Если мы скажем cat
он покажет нам содержимое этого file1.txt
и в основном это просто текстовый файл, в котором говорится, что это обычный файл.
# cat file1.txt
I love Linux.
Linux is a Open Source Operating System.
Читайте также: Примеры команд cat в Linux
Как создать жесткие ссылки в Linux
Вы должны следовать синтаксису, приведенному ниже, при создании жесткой ссылки с помощью команды ln.
ln [OPTIONS] FILE LINK
Итак, давайте начнем с создания жесткой ссылки на file1.txt
и для этого вы используете ln
команда без флагов или чего-то еще ln
.
Источник, который file1.txt
и то, что мы хотим назвать вторым жестко связанным файлом, назовем его file2.txt
.
# ln file1.txt file2.txt
Если мы введем ls -l
теперь вы увидите, что в этом каталоге есть два файла.
# ls -l
-rw-r--r--. 2 root root 55 Mar 24 08:19 file1.txt
-rw-r--r--. 2 root root 55 Mar 24 08:19 file2.txt
У нас есть исходный файл file1.txt
который 55 bytes
long у нас также есть новый файл, который ведет себя и выглядит точно так же, как file1.txt
, это называется file2.txt
и он также имеет 55 bytes
.
И как вы видите, что file2.txt
файл также имеет то же содержимое, что и file1.txt
файл.
# cat file2.txt
I love Linux.
Linux is a Open Source Operating System.
Почему у него такое же содержимое и байты, потому что он указывает на одно и то же место на жестком диске.
Теперь посмотрим, как это работает на практике.
Давай редактируем file2.txt
и добавить к нему контент. Для этого вы можете использовать любой текстовый редактор. Я бы хотел использовать nano
Текстовый редактор.
# nano file2.txt
I love Linux.
Linux is a Open Source Operating System.
Linux is OS or Kernel
Если мы отобразим содержимое нашего второго файла, т.е. file1.txt
под cat
, то, как вы можете видеть, те же данные видны нам и в этом файле.
# cat file1.txt
I love Linux.
Linux is a Open Source Operating System.
Linux is OS or Kernel
Как я уже говорил, оба файла указывают на одно и то же место на жестком диске.
Итак, как только я сохранил файл, внеся некоторые изменения, он отразился и на другом файле.
Номер inode жесткой ссылки совпадает с номером inode исходного файла.
# ls -li
2429406 -rw-r--r--. 2 root root 0 Mar 25 06:42 file1.txt
2429406 -rw-r--r--. 2 root root 0 Mar 25 06:42 file2.txt
Теперь классная новость: если мы удалим file1.txt
(наш исходный файл) мы все еще можем посмотреть содержимое file2.txt
и, конечно же, он все еще там, потому что указывает на то место на жестком диске, где хранятся данные.
# rm file1.txt
rm: remove regular file 'file1.txt'? y
# cat file2.txt
I love Linux.
Linux is a Open Source Operating System.
Linux is OS or Kernel
Как создавать мягкие ссылки в Linux
Вы должны следовать синтаксису, приведенному ниже, при создании мягкой ссылки с помощью команды ln.
ln -s [OPTIONS] FILE LINK
Теперь мягкие ссылки или символические ссылки работают по-другому. Я покажу вам, как это работает.
Итак, у нас есть file2.txt
.
# ls
file2.txt
Как создать символическую ссылку на файл в Linux?
Чтобы создать мягкую ссылку или символическую ссылку на этот файл, используйте тот же ln
команда, но теперь вы используете -s
для символического, а затем вы говорите исходный файл, который в нашем случае теперь file2.txt
а затем укажите имя мягкой ссылки, которая в нашем случае softlink.txt
# ln -s file2.txt softlink.txt
Если мы введем ls -l
чтобы увидеть, что происходит, и мы получили действительно красивый дисплей от ls
.
# ls -l
-rw-r--r--. 1 root root 77 Mar 24 23:35 file2.txt
lrwxrwxrwx. 1 root root 9 Mar 25 00:00 softlink.txt -> file2.txt
Итак, наш исходный файл file2.txt
по-прежнему указывает на жесткий диск, на котором хранятся данные на жестком диске, однако softlink.txt
не указывает на жесткий диск, а просто указывает на имя файла file2.txt
.
Теперь, если мы cat
мягкая ссылка, она покажет нам содержимое этого файла, потому что он связан с file2.txt
.
# cat softlink.txt
I love Linux.
Linux is a Open Source Operating System.
Linux is OS or Kernel
Вы должны знать еще одну вещь: номер inode мягкой ссылки отличается от номера inode исходного файла.
Вот пример.
# ls -li
52351765 -rw-r--r--. 1 root root 0 Mar 25 06:23 file2.txt
52351767 lrwxrwxrwx. 1 root root 9 Mar 25 06:24 softlink.txt -> file2.txt
Проблема возникает, если мы удалим file2.txt
# rm file2.txt
rm: remove regular file 'file2.txt'? y
Теперь, если мы введем ls -l
это дает нам красные ошибки здесь.




Это говорит хорошо softlink.txt
указывает на файл file2.txt
, но этого не существует, и теперь эта мягкая ссылка не работает.
Если мы попытаемся cat
теперь он скажет, что такого файла или каталога нет.
# cat softlink.txt
cat: softlink.txt: No such file or directory
Он говорит о том, что нет файла или каталога, на который он пытается указать. file2.txt
ушли, так что те данные, которые у нас были там.
Поскольку программная ссылка не указывает на расположение жесткого диска, она просто указывает на имя файла, мы потеряли эти данные.
Таким образом, жесткие ссылки более снисходительны при удалении файла.
Мягкие ссылки занимают меньше данных, потому что это просто указатель, однако мягкие ссылки не хранят фактические данные, они просто сохранили местоположение исходного файла, в котором он был сохранен.
Как создать символическую ссылку на каталог в Linux?
Введите следующую команду, чтобы создать символическую ссылку на каталог.
В этом примере я создаю мягкую ссылку под названием my_documents
для /root/mydata/important-documents/files
каталог.
# ln -s /root/mydata/important-documents/files my_documents
Как удалить символическую ссылку?
Удалить Symlink можно двумя способами.
Либо вы удалите символическую ссылку с помощью rm
или вы также можете использовать unlink
команда для этой задачи.
Синтаксис:
rm LINK
OR
unlink LINK
Удаление символической ссылки с помощью rm
команда.
# rm softlink.txt
rm: remove symbolic link 'softlink.txt'? y
Удаление символической ссылки с помощью unlink
команда.
# unlink softlink.txt
Как перезаписать символические ссылки
Чтобы перезаписать существующую символическую ссылку, используйте -f
вариант с помощью команды ln.
# ln -sf file2.txt softlink.txt
Вы получите эту ошибку, если попытаетесь перезаписать существующую ссылку Sym без использования -f
вариант.
# ln -s file2.txt softlink.txt
ln: failed to create symbolic link 'softlink.txt': File exists
Вы можете посетить следующие веб-сайты, чтобы получить дополнительную информацию о команде ln.
Заключение
Я надеюсь, что теперь вы хорошо понимаете, как работают Soft Link и Hard Link в Linux, и у вас есть идеи, как использовать команду ln в своем рабочем процессе.
Если у кого-то есть какие-либо вопросы о том, что мы рассмотрели в этом руководстве, не стесняйтесь спрашивать в разделе комментариев ниже, и я постараюсь ответить на них.