Символические и жесткие ссылки Linux
Символические и жесткие ссылки — это особенность файловой системы Linux, которая позволяет размещать один и тот же файл в нескольких директориях. Это очень похоже на ярлыки в Windows, так как файл на самом деле остается там же где и был, но вы можете на него сослаться из любого другого места.
В Linux существует два типа ссылок на файлы. Это символические и жесткие ссылки Linux. Они очень сильно отличаются и каждый тип имеет очень важное значение. В этой небольшой статье мы рассмотрим чем же отличаются эти ссылки, зачем они нужны, а также как создавать ссылки на файлы в Linux.
Символические ссылки
Символические ссылки более всего похожи на обычные ярлыки. Они содержат адрес нужного файла в вашей файловой системе. Когда вы пытаетесь открыть такую ссылку, то открывается целевой файл или папка. Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет.
Вот основные особенности символических ссылок:
- Могут ссылаться на файлы и каталоги;
- После удаления, перемещения или переименования файла становятся недействительными;
- Права доступа и номер inode отличаются от исходного файла;
- При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
- Можно ссылаться на другие разделы диска;
- Содержат только имя файла, а не его содержимое.
Теперь давайте рассмотрим жесткие ссылки.
Жесткие ссылки
Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменяться при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
Использование ссылок в Linux
Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:
$ ln опции файл_источник файл_ссылки
Рассмотрим опции утилиты:
- -d — разрешить создавать жесткие ссылки для директорий суперпользователю;
- -f — удалять существующие ссылки;
- -i — спрашивать нужно ли удалять существующие ссылки;
- -P — создать жесткую ссылку;
- -r — создать символическую ссылку с относительным путем к файлу;
- -s — создать символическую ссылку.
Создание символических ссылок
Сначала создайте папку test и перейдите в нее:
mkdir test && cd test

Затем создайте файл с именем source с каким-либо текстом:
echo «текст текст текст текст» > source $ cat source

Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:
ln -s source softlink

Попробуем посмотреть содержимое файла по ссылке:

Как видите, нет никакой разницы между ней и исходным файлом. Но утилита ls покажет что это действительно ссылка:

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

Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.
Создание жестких ссылок
Снова создайте файл source с произвольным текстом:
echo «текст текст текст текст» > source $ cat source

Теперь создадим жесткую ссылку Linux. Для этого достаточно вызвать утилиту без параметров:
ln source hardlink

Посмотрите содержимое файла:

Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:

Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:
Затем посмотрите содержимое:

Как видите, ничего не произошло и ссылка по-прежнему указывает на нужный участок диска, это главное отличие жесткой ссылки от символической. Мы можем сделать вывод, что жесткая ссылка linux это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.
Выводы
Это все, что вам было необходимо знать про символические и жесткие ссылки linux. Надеюсь, вы получили общее представление об этих возможностях файловой системы и сможете использовать их для решения своих задач.
Символьные ссылки и команда ln
Никак не могу врубиться в понятие символьной ссылки. Ну вот, допустим, я создаю файлы file1.txt с содержанием This is the first file и файл file2.txt с содержанием this is the second file .
Далее ввожу команду ln file1.txt file2.txt и на меня ругается Linux, говорит, что не получилось создать жесткую ссылку. Что мне надо добавить в первый файл, чтобы он ссылался на второй ? В интернете почти все примеры с ln -s . Зачем нужен аргумент -s ?
Был бы очень благодерн, если кто-нибудь объяснил бы на примере.
Пожалуй внесу и свою лепту, так как буквально позавчера разбирался что к чему крепится и конспектировал всё .
Простой исчерпывающий пример — лучшее объяснение: как говорится, лучше один раз пощупать, чем сто раз посмотреть.
Для начала создадим где-нибудь какую-нибудь папку для экспериментов (у меня, например, такая есть всегда — Tests , в домашнем каталоге):
Теперь создадим в ней файл source.txt с текстом 1 :
По умолчанию (при вызове без параметров) команда ln создаёт «жёсткую ссылку» («hard link»):
Жёсткая ссылка — хм . что за фигня.
A hard link is a link file created with the Linux or Unix ln command that points to a file’s inode.
Источник: computerhope.com.
Жёсткая ссылка — это файл, созданный с помощью команды Linux (или Unix) ln , который указывает на «inode» исходного файла.
OK. что такое «inode» файла.
Short for index node, an inode is information contained within a Unix system that contains details about each file, such as the node, owner, file, location of file, etc.
Источник: computerhope.com.
Сокращение от «index node»; inode — это информация внутри Unix-систем (внутри операционной системы), которая содержит детальное описание каждого файла; это описание включает в себя информацию о «node» файла, информацию о владельце файла, некоторую информацию о самом файле, информацию о месте расположения файла, и прочее.
OK. что такое «node» файла.
A node or node address is a name or number that identifies a specific computer or terminal in a group of interconnected computers on a network.
Источник: computerhope.com.
Node или node address — это имя или номер, который идентифицирует конкретный компьютер или терминал в группе взаимосвязанных по сети компьютеров.
То есть это некий идентификатор файла в системе .
Фу-у-у, вроде с теорией более-менее разобрались .
Итак, у нас на данный момент в папке Tests имеется файл source.txt с текстом 1 и жёсткая ссылка на него hard-link.txt .
Изменения как в source.txt , так и в hard-link.txt синхронизируются — ничего удивительного.
Если мы перенесём (удалим из текущей директории) любой из файлов в рамках нашей точки монтирования, то на втором файле это никак не скажется и синхронизация будет работать (имеется в виду если мы переносили файл конечно). Опять же — ничего удивительного: файл продолжает существовать пока на него указывает хоть одна ссылка (жёсткая).
Так в чём собственно прикол? Прикол в том, что как уже упоминалось выше, жёсткая ссылка ссылается на индекс файла (inode). Поэтому, например, если мы удалим любой из файлов, а затем создадим файл в этом же месте файл с таким же именем (и расширением), то кажется, что он должен быть синхронизирован с другим файлом, но не тут то было — связь потеряна: так как новый файл — новый индекс (то же самое и при копировании файла — создаётся новый файл с новым индексом и связь теряется).
Перейдём к символическим ссылкам .
При вызове ln с параметром -s или —symbolic будет создана символическая ссылка:
Alternatively referred to as a soft link or symlink, a symbolic link is a file that links to another file or directory using its path. Unlike a hard link, a symbolic link can link to any file or directory on any computer. If you are more familiar with Microsoft Windows you can think of a symbolic link as a shortcut in Linux. In Linux and Unix symbolic links are created with the ln command. In the Windows command line you can use the mklink command to create symbolic link from the command line.
Источник: computerhope.com.
Альтернативное название soft link (мягкая/гибкая ссылка) или symlink (симлинк); символическая ссылка — это файл, который связывается с другим файлом или директорией используя путь (адрес места расположения) последнего. В отличие от жёсткой ссылки, символическая ссылка может ссылаться на любой файл или директорию, находящуюся на любом компьютере. Если вы хорошо знакомы с Microsoft Windows, то вы можете думать о символических ссылках как о ярлыках в Linux. В Linux и Unix символические ссылки создаются с помощью команды ln . В командной строке Windows вы можете использовать команду mklink для создания символической ссылки через командную строку.
Иными словами символическая ссылка ссылается на адрес файла, а не индекс файла.
How to Create Linux Symlinks (Symbolic Links) for Files and Directories

Knowing how to create a symbolic link using Linux commands is a great way of increasing your knowledge in the Linux terminal. In this tutorial, we’ll cover a few commands to learn symbolic links in a quick and easy way. Before we begin, let’s overview what are symbolic links.

What are Linux Symbolic Links
Symbolic Links are not only helpful in creating shortcuts and file management in operating systems like Linux. They also serve as a way to create various locations for primary user folders, for instance, Documents, Pictures, Downloads, and much more!
Symbolic Links act like a string creating pathways for different files, folders, and directories in the computer system. They are capable of creating and storing multiple files in different places refer to one single file. Thus, increasing efficiency by locating all the specific documents in one command.
Due to the user-friendly features in Linux, even Microsoft is following it to create Symbolic Links. Symbolic links, also known as Soft links or Symlinks, are not unique to Linux but they are just like a Search option in Windows where one can search a specific file or directory in a disk by executing various commands.
How to Create Symbolic Links in Linux?
Let’s look at how you can create file and folder links in Linux:
Create Symbolic Link in Linux for Files
Generally, to create links use we use the ln command and the -s option to specify Symbolic links. This is the easiest way to ensure a flexible approach that allows experimenting with the language as much as possible. There is nothing hard in creating Symbolic links in Linux – you just need to follow one simple step.
The ln command in Linux creates links between source files and directories.
- -s – the command for Symbolic Links.
- [target file] – name of the existing file for which you are creating the link
- [Symbolic filename] – name of the symbolic link.
Created links can be verified by directory listing using detailed list command:
However, if you do not specify the [Symbolic filename], the command will automatically create a new link in the existing directory.
Create Symbolic Link in Linux for Folders
Creating symbolic links for folders is not difficult either. The command used to create the folder symbolic link is:
For example, to link the /user/local/downloads/logo directory to /devisers folder, use the following command:
Once a Symbolic link is created and attached to the folder /devisers, it will lead to /user/local/downloads/logo. When the user changes directory – cd – to /devisers, the system will automatically change to the specific file and write it in the command directory.
Symbolic link options are called command line switches. Here are the most common ones and their descriptions:
| Command Switch | Description |
| –backup[=CONTROL] | backup each existing destination file |
| -d, -F, –directory | superuser is allowed to attempt hard link |
| -f, –force | existing destination file is removed |
| -I, –interactive | prompt before removing destination files |
| -L, –logical | deference targets that are symbolic links |
| -n, –non-dereference | symbolic links to directory are treated as files |
| -P, –physical | make hard links directly to symbolic links |
| -r, –relative | create symbolic links relative to link location |
| -s, –symbol | make symbolic links instead of hard links |
| -S, –suffix=SUFFIX | override usual backup suffix |
| -v, –verbose | print name of each linked file |
How to Change or Remove Symbolic Link in Linux?
You can remove existing links attached to files or directories by the unlink or rm command. This is how you can do it with the unlink command:
Removing symbolic link using the rm command is similar to the unlink command which is as under:
Conclusion
Remember, if the source is no longer in the current location, then you should delete the symbolic files to avoid creating duplicates, which might slow down your work.
Linux is a wonderful platform for creating an interactive and dynamic application, where you can experiment and innovate. A strong foundation is critical. Learn the basic of the language thoroughly to use it to its full potential. We hope this tutorial helped you improve your skills with another useful tool!
Learn More Linux Commands for File Management
Edward is a content editor with years of experience in IT writing, marketing, and Linux system administration. His goal is to encourage readers to establish an impactful online presence. He also really loves dogs, guitars, and everything related to space.
Команда Ln в Linux (создание символических ссылок)
Символическая ссылка, также известная как символическая ссылка или программная ссылка, представляет собой файл особого типа, который указывает на другой файл или каталог.
В этом руководстве мы расскажем, как использовать команду ln для создания символических ссылок.
Типы ссылок
В системах Linux / UNIX есть два типа ссылок:
- Жесткие ссылки . Вы можете рассматривать жесткую ссылку как дополнительное имя для существующего файла. Жесткие ссылки связывают два или более имен файлов с одним и тем же индексом . Вы можете создать одну или несколько жестких ссылок для одного файла. Невозможно создать жесткие ссылки для каталогов и файлов в другой файловой системе или разделе.
- Мягкие ссылки . Программная ссылка — это что-то вроде ярлыка в Windows. Это косвенный указатель на файл или каталог. В отличие от жесткой ссылки, символическая ссылка может указывать на файл или каталог в другой файловой системе или разделе.
Как использовать команду ln
ln — это утилита командной строки для создания ссылок между файлами. По умолчанию команда ln создает жесткие ссылки. Чтобы создать символическую ссылку, используйте параметр -s ( —symbolic ).
Синтаксис команды ln для создания символических ссылок следующий:
- Если заданы и FILE и LINK , ln создаст ссылку из файла, указанного в качестве первого аргумента ( FILE ), на файл, указанный в качестве второго аргумента ( LINK ).
- Если в качестве аргумента указан только один файл или вторым аргументом является точка ( . ), ln создаст ссылку на этот файл в текущем рабочем каталоге . Имя символической ссылки будет таким же, как имя файла, на который она указывает.
По умолчанию в случае успеха ln не производит никакого вывода и возвращает ноль.
Создание символической ссылки к файлу
Чтобы создать символическую ссылку на данный файл, откройте терминал и введите:
Замените source_file именем существующего файла, для которого вы хотите создать символическую ссылку, а symbolic_link — именем символической ссылки.
Параметр symbolic_link необязательный. Если вы не укажете символическую ссылку, команда ln создаст новую ссылку в вашем текущем каталоге:
В следующем примере мы создаем символическую ссылку my_link.txt на файл my_file.txt :
Чтобы убедиться, что символическая ссылка была успешно создана, используйте команду ls :
Результат будет выглядеть примерно так:
Символ l — это флаг типа файла, представляющий символическую ссылку. Символ -> показывает файл, на который указывает символическая ссылка.
Создание символических ссылок на каталог
Команда для создания символической ссылки на каталог такая же, как и при создании символической ссылки на файл. Укажите имя каталога в качестве первого параметра и символическую ссылку в качестве второго параметра.
Например, если вы хотите создать символическую ссылку из /mnt/my_drive/movies каталог
/my_movies вы должны запустить:
Замена символических ссылок
Если вы попытаетесь создать уже существующую символическую ссылку , команда ln выведет сообщение об ошибке.
Чтобы перезаписать путь назначения символической ссылки, используйте параметр -f ( —force ).
Удаление символических ссылок
Чтобы удалить / удалить символические ссылки, используйте команду unlink или rm .
Синтаксис unlink очень прост:
Удаление символической ссылки с помощью команды rm такое же, как и при удалении файла:
Независимо от того , какой команды вы используете, при удалении символической ссылки не добавляет / слэша в конце его названия.
Если вы удалите или переместите исходный файл в другое место, символический файл останется висящим (сломанным), и его следует удалить.
Выводы
Чтобы создать символическую ссылку в Linux, используйте команду ln с параметром -s .
Для получения дополнительной информации о команде ln посетите страницу руководства ln или введите man ln в терминале.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.