Команда 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
Сломанный Softlink

Это говорит хорошо 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 в своем рабочем процессе.

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *