Введение
В системах Linux ссылки предоставляют мощный способ ссылаться на файлы и каталоги. Эти ссылки создают связи между именами файлов и фактическими данными, хранящимися на диске. Понимание того, как эффективно использовать ссылки, является важным навыком для пользователей Linux и системных администраторов.
В этом практическом занятии (LabEx) вы научитесь создавать и использовать два типа ссылок в Linux:
Жесткие ссылки (Hard Links): Это дополнительные записи в каталоге, которые указывают на один и тот же индексный узел (inode, данные на диске). При создании жесткой ссылки вы, по сути, даете тем же самым данным другое имя.
Символические ссылки (Symbolic Links, также называемые мягкими ссылками): Это специальные файлы, которые указывают на другие файлы по имени. В отличие от жестких ссылок, символические ссылки могут указывать на каталоги и могут охватывать разные файловые системы.
По завершении этого практического занятия вы научитесь создавать оба типа ссылок с помощью команды ln и узнаете о их практическом применении в среде Linux.
Создание рабочей директории
На этом этапе мы создадим структуру директорий и файлы, которые будем использовать для практики создания ссылок.
Сначала проверим текущую директорию, чтобы убедиться, что находимся в нужном месте. Выполните следующую команду:
pwd
В качестве результата вы должны увидеть /home/labex/project. Если вы находитесь в другой директории, перейдите в директорию проекта:
cd /home/labex/project
Теперь создадим новую директорию с именем linklab, где будем хранить наши файлы:
mkdir /home/labex/project/linklab
Перейдем в эту директорию:
cd /home/labex/project/linklab
Теперь создадим два текстовых файла, которые будем использовать для практики создания ссылок:
echo "This is the original file for our link examples." > original.txt
Проверим, что файл был создан правильно:
ls -l
Вы должны увидеть вывод, похожий на следующий:
-rw-r--r-- 1 labex labex 46 [date and time] original.txt
Также проверим содержимое файла:
cat original.txt
В терминале должны отобразиться текст, который мы ввели ранее:
This is the original file for our link examples.
Создание жестких ссылок
Жесткая ссылка (Hard link) представляет собой другое имя, которое указывает на те же самые данные на диске, что и исходный файл. И исходный файл, и жесткая ссылка имеют одинаковый номер индексного узла (inode), что означает, что они по сути являются одним и тем же файлом, но с разными именами.
Для создания жесткой ссылки мы используем команду ln. Создадим жесткую ссылку на наш файл original.txt:
ln /home/labex/project/linklab/original.txt /home/labex/project/linklab/hardlink.txt
Эта команда создает новый файл с именем hardlink.txt, который является жесткой ссылкой на original.txt. Теперь убедимся, что наша жесткая ссылка была создана правильно:
ls -li
Опция -i показывает номер индексного узла (inode) для каждого файла. Вы должны увидеть, что original.txt и hardlink.txt имеют одинаковый номер индексного узла, что означает, что они являются одним и тем же файлом.
Вывод должен выглядеть примерно так:
[inode number] -rw-r--r-- 2 labex labex 46 [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex 46 [date and time] original.txt
Обратите внимание, что число 2 после прав доступа к файлу указывает на количество жестких ссылок, которые указывают на индексный узел (inode). И original.txt, и hardlink.txt имеют счетчик ссылок, равный 2, так как теперь два файла указывают на одни и те же данные.
Докажем, что изменение одного файла влияет на другой, так как они по сути являются одним и тем же файлом:
echo "This is an added line." >> original.txt
cat hardlink.txt
В выводе должны отобразиться обе строки:
This is the original file for our link examples.
This is an added line.
Это подтверждает, что изменения в original.txt отражаются в hardlink.txt.
Аналогично, если мы изменим hardlink.txt, изменения будут отражены в original.txt:
echo "Another line added through the hard link." >> hardlink.txt
cat original.txt
Теперь в выводе должны отобразиться все три строки:
This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
Создание символических ссылок
Символические ссылки (также известные как мягкие ссылки или symlinks) отличаются от жестких ссылок. Символическая ссылка представляет собой отдельный файл, который просто указывает на другой файл по имени. Она не имеет общего индексного узла (inode) с целевым файлом.
Для создания символической ссылки мы используем команду ln с опцией -s. Создадим символическую ссылку на наш файл original.txt:
ln -s /home/labex/project/linklab/original.txt /home/labex/project/linklab/symlink.txt
Эта команда создает новый файл с именем symlink.txt, который является символической ссылкой на original.txt. Теперь убедимся, что наша символическая ссылка была создана правильно:
ls -li
Вывод должен выглядеть примерно так:
[inode number] -rw-r--r-- 2 labex labex [size] [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex [size] [date and time] original.txt
[inode number] lrwxrwxrwx 1 labex labex [size] [date and time] symlink.txt -> /home/labex/project/linklab/original.txt
Обратите внимание на букву l в начале прав доступа для symlink.txt, которая указывает, что это символическая ссылка. Также вывод показывает путь, на который указывает символическая ссылка. Вы также можете заметить, что original.txt и symlink.txt имеют разные номера индексных узлов (inode), что подтверждает, что они являются отдельными файлами.
Проверим содержимое символической ссылки:
cat symlink.txt
Вы должны увидеть то же содержимое, что и в original.txt:
This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
Добавим еще одну строку через символическую ссылку:
echo "This line was added through the symbolic link." >> symlink.txt
cat original.txt
Теперь в выводе должны быть все четыре строки:
This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.
Это подтверждает, что изменения, внесенные через символическую ссылку, влияют на целевой файл.
Теперь посмотрим, что произойдет, если мы удалим целевой файл:
mv original.txt original.txt.bak
cat symlink.txt
Вы должны увидеть сообщение об ошибке, подобное следующему:
cat: symlink.txt: No such file or directory
Это происходит потому, что символическая ссылка по-прежнему указывает на /home/labex/project/linklab/original.txt, который больше не существует. Это ключевое различие между жесткими и символическими ссылками.
Восстановим исходный файл:
mv original.txt.bak original.txt
cat symlink.txt
Символическая ссылка снова работает, так как целевой файл существует опять.
Понимание различий между жесткими и символическими ссылками
Теперь, когда мы создали и жесткие, и символические ссылки, сравним их ключевые различия:
Жесткие ссылки (Hard links):
- Имеют общий индексный узел (inode) с исходным файлом.
- Не могут ссылаться на директории.
- Не могут пересечь границы файловой системы.
- Продолжают работать, даже если исходный файл удален или перемещен.
- Изменения в содержимом отражаются во всех жестких ссылках.
Символические ссылки (Symbolic links):
- Имеют собственный индексный узел (inode), отличный от целевого файла.
- Можно ссылаться на директории.
- Можно пересечь границы файловой системы.
- Становятся недействительными, если целевой файл удален или перемещен.
- По сути являются файлами - указателями, которые содержат путь к целевому объекту.
Покажем некоторые из этих различий на примерах:
Сначала попробуем создать жесткую ссылку на директорию, что не разрешено:
mkdir testdir
ln testdir testdir_hardlink
Вы должны увидеть сообщение об ошибке, подобное следующему:
ln: testdir: hard link not allowed for directory
Теперь попробуем создать символическую ссылку на директорию, что разрешено:
ln -s testdir testdir_symlink
Проверим нашу символическую ссылку на директорию:
ls -la
В выводе вы должны увидеть testdir_symlink -> testdir, что указывает, что testdir_symlink - это символическая ссылка на testdir.
Мы можем создать файл внутри исходной директории:
echo "This is a test file in the directory." > testdir/testfile.txt
И получить доступ к нему через символическую ссылку:
cat testdir_symlink/testfile.txt
Вы должны увидеть содержимое:
This is a test file in the directory.
Это показывает, что символические ссылки могут указывать на директории и использоваться для доступа к их содержимому.
Еще одно важное различие заключается в том, что удаление исходного файла делает недействительной символическую ссылку, но не жесткую. Мы уже увидели это на примере символической ссылки. Продемонстрируем это на примере жесткой ссылки:
rm original.txt
cat hardlink.txt
Вы по-прежнему должны увидеть все четыре строки:
This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.
Жесткая ссылка продолжает работать, потому что данные все еще существуют на диске, и жесткая ссылка по-прежнему указывает на эти данные.
Однако наша символическая ссылка теперь недействительна:
ls -l symlink.txt
cat symlink.txt
Вы должны увидеть, что symlink.txt все еще существует, но указывает на файл, который больше не существует, и попытка прочитать его приводит к ошибке.
Воссоздадим исходный файл из нашей жесткой ссылки:
cp hardlink.txt original.txt
cat symlink.txt
Символическая ссылка снова работает, потому что файл, на который она указывает, существует опять.
Резюме
В этом практическом занятии вы узнали о двух типах ссылок в Linux: жестких ссылках (hard links) и символических ссылках (soft links). Вы практиковались в создании этих ссылок с использованием команды ln и изучили их ключевые различия.
Основные моменты, рассмотренные в этом практическом занятии:
Жесткие ссылки (Hard Links):
- Создаются с использованием команды
lnбез опций. - Имеют общий индексный узел (inode) с исходным файлом.
- Не могут ссылаться на директории или пересечь границы файловой системы.
- Продолжают работать, даже если исходный файл удален.
- Изменения в содержимом отражаются во всех жестких ссылках.
- Создаются с использованием команды
Символические ссылки (Symbolic Links):
- Создаются с использованием команды
ln -s. - Имеют собственный индексный узел (inode), отличный от целевого файла.
- Можно ссылаться на директории и пересечь границы файловой системы.
- Становятся недействительными, если целевой файл удален или перемещен.
- Являются файлами - указателями, которые содержат путь к целевому объекту.
- Создаются с использованием команды
Практические применения:
- Ссылки полезны для создания ярлыков к файлам и директориям.
- Их можно использовать для поддержки нескольких версий файлов.
- Системные администраторы используют ссылки для управления конфигурацией.
- Ссылки помогают в организации файлов без дублирования данных.
Понимание того, как эффективно создавать и использовать ссылки, является важным навыком для пользователей Linux. Эти инструменты позволяют эффективно управлять и организовывать файлы в файловой системе Linux.



