Что такое символьная ссылка в linux
Перейти к содержимому

Что такое символьная ссылка в linux

  • автор:

Создание ссылок в Linux

В командной оболочке Linux, чтобы создать еще одну жесткую ссылку на файл, то есть еще одно имя, используется команда ln (от «link» – ссылка, связывать). Первым аргументом указывается существующее имя файла, вторым – имя новой ссылки. Адреса обоих аргументов могут быть как относительными, так и абсолютными.

Создание жесткой ссылки

В примере для файла butt2.png , который находится в каталоге image , создаются две дополнительные жесткие ссылки. Одна – в текущем каталоге ( ./ ), другая – в папке Загрузки . В первом случае файл не переименовывается, т. к. это не обязательно, ведь полные имена файлов различны. Однако можно и переименовать, как это происходит во втором случае.

С помощью команды ls -l можно убедиться, что на файл указывают три жесткие ссылки.

Просмотр информации о ссылках

Мы можем посмотреть информацию о каждом имени и убедиться, что это один и тот же файл, так как все данные совпадают.

Три ссылки указывают на один и тот же дескриптор

Символьные ссылки создаются с помощью той же команды ln , однако используется ключ -s (от «symbolic»). В качестве первого аргумента пишется абсолютный адрес файла или каталога, на который делается ссылка, в качестве второго – абсолютный или относительный адрес создаваемой мягкой ссылки.

Создание символьной ссылки: ln -s

Здесь на рабочем столе создаются две символьные ссылки: на каталог image и на файл 2018.ods . Имя ссылки можно оставить таким же как у объекта, если ссылка создается в другом каталоге. Команда ls -l среди прочего отображает адрес, на который указывает символьная ссылка. Если бы мы при создании мягкой ссылки использовали относительные адреса источников, то они так бы и хранились, и файлы-ссылки были бы нерабочими.

Практическая работа

Создайте текстовый файл с помощью перенаправления вывода команды cal . Создайте на этот файл дополнительную жесткую ссылку. Внесите изменения в файл, обратившись к нему по второму имени. Изменения можно внести, дописав ( >> ) в файл дату с помощью перенаправления вывода команды date . Посмотрите содержимое файла, воспользовавшись первым именем файла. Тем самым вы убедитесь, что имеете дело с одним и тем же файлом, доступным под разными именами.

Создайте символьную ссылку на каталог. Посмотрите в графической оболочке, как дистрибутив Linux по особому обозначает такой объект (обычно у иконки появляется маленькая черная стрелка).

Курс с ответами к заданиям и дополнительными уроками в PDF

X Скрыть Наверх

Введение в Linux и Bash. Курс

Жесткие и символьные ссылки

Для пользователя файл – это область данных на диске, к которой он обращается через имя файла. Однако в операционных системах на базе ядра Linux вся информация о файле привязана не к его имени, а так называемому числовому индексному дескриптору. У каждого файла есть свой уникальный индексный дескриптор, к которому привязаны сведения об этом файле: в каких блоках диска хранится его содержимое, размер, время создания, модификации и др.

Индексные дескрипторы файлов хранятся в специальной таблице. Каждый логический и физический диск имеет собственную таблицу дескрипторов.

Именно номер индекса является истинным именем файла в системе. Мы можем его увидеть с помощью ключа -i команды ls .

Как увидеть индексный дескриптор с помощью команды ls

Жесткие ссылки

Поскольку индексные дескрипторы представляют собой номера, а файлов в операционной системе очень много, то искать файл по его индексу было бы неудобно: человеку работать с осмысленными словами куда проще, чем с длинными числами. Поэтому любому файлу в системе обычно дается осмысленное словесное имя, которое не содержит информации о файле, а лишь указывает, то есть ссылается, на его дескриптор.

Имя файла, ссылающееся на его индексный дескриптор, называется жесткой ссылкой. Механизм жестких ссылок – это основной способ обращения к файлам в Unix-подобных операционных системах.

Поскольку файл в операционной системе однозначно определяет только номер его дескриптора, а имя файла является лишь указателем-ссылкой на него, то очевидно таких ссылок можно создать множество. Все они будут указывать на один объект. Результатом этого является то, что у файла в Linux может быть несколько имен.

Для образного сравнения, представим придорожные указатели на определенную бензоколонку: их много, они находятся в разных местах трассы, но указывают на одну и туже точку местности.

Почему бывает недостаточно одного имени файла? Все дело в удобстве доступа из разных мест файловой структуры, а также в предоставлении доступа. Так одно имя файла может быть в одном каталоге, второе – в другом.

Следствием механизма жестких ссылок Linux является то, что удаление жесткой ссылки на файл не приводит к удалению самого файла из системы при наличии у этого файла других жестких ссылок (имен файла). И это понятно, так как все жесткие ссылки равны между собой, независимо от времени создания, местонахождения в структуре каталогов.

Файл будет доступен системе, пока будет существовать хотя бы одна жесткая ссылка на него. В случае удаления всех ссылок, файл удалится из системы, так как станет просто недоступен.

Символьные, или мягкие, ссылки

Несмотря на возможности, которые предоставляют жесткие ссылки, у них есть ограничения:

  • их можно создавать только на файлы, но не на каталоги;
  • жесткую ссылку нельзя создать на файл, находящийся на другом диске.

Последнее означает, что нельзя создать жесткую ссылку на файл находящийся, например, на съемном носителе или другом разделе жесткого диска. Это связано с тем, что каждый носитель имеет собственную таблицу дескрипторов.

Поэтому в операционных системах GNU/Linux поддерживается также механизм мягких ссылок. Часто их называют символьными ссылками. Они представляют собой файлы, указывающие не на индексные дескрипторы, а на имена файлов, то есть на жесткие ссылки. Мягкая ссылка в Linux аналог ярлыка в Windows.

Поскольку жесткая ссылка указывает непосредственно на индексный дескриптор, а мягкая – только на жесткую ссылку, то если удалить все жесткие ссылки файла, то символьная ссылка работать не будет. Она станет «битой».

На рисунке изображена связь между символьными ссылками и именами файла, а также между именами и индексным дескриптором. Верхний квадрат соответствует индексному дескриптору файла, квадраты со скругленными углами – именам файла, а круги – символьным ссылкам. Индексный дескриптор файла всегда один, а имен может быть множество. Также может существовать неограниченное количество символьных ссылок на каждое имя файла.

При удалении жесткой ссылки, на имя которой ссылалась символьная, последняя не наследует связь с дескриптором и утрачивает свою работоспособность. Если в данном примере удалить жесткую ссылку с именем logotip , то файлы pic1 и tux станут бесполезны, так как открыть файл 555795 с их помощью уже будет нельзя.

Жесткая ссылка – не копия!

Может показаться, что копирование файлов и создание жестких ссылок почти одно и то же, так как в итоге получаются вроде бы два файла. Однако это абсолютно разные операции, приводящие к разным результатам.

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

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

В случае мягких ссылок, хоть и создается новый файл (с собственным индексным дескриптором), он не содержит данных файла-оригинала, а лишь содержит запись адреса другого файла. Символьная ссылка – особый тип файла Linux.

При выполнении команды ls с ключом -l во втором столбце выводится количество жестких ссылок на файловый объект. Обычно по-умолчанию на каждый файл существует одна жесткая ссылка. Подумайте, что может означать количество жестких ссылок для каталогов?

Количество жестких ссылок на каталоги

Курс с ответами к заданиям и дополнительными уроками в PDF

X Скрыть Наверх

Введение в Linux и Bash. Курс

Символические ссылки в Linux

В операционной системе Linux есть такой замечательный и широко используемый инструмент, как символические ссылки. Поговорим, как их создавать в XFCE (Thunar), KDE (Dolphin), через терминал.

Что такое символическая ссылка (или симлинк)?

Допустим, у вас есть директории («папки»):
/home/user/Dir1
/home/user/Dir2

Но вы хотите, чтобы папка /home/user/Dir2 открывалась по адресу /home/user/Dir1/Dir2, но при этом продолжала работать по своему основному адресу /home/user/Dir2. Таким образом, файл с адресом /home/user/Dir2/file.txt будет доступен и по нему, и по адресу /home/user/Dir1/Dir2/file.txt ! аналогично для остальных вложенных файлов и директорий.

На практике это может пригодиться много где. Допустим, клиенты Яндекс.Диска, Облака Mail.Ru, Baidu Pan (bypy) умеют выполнять синхронизацию с учетом символических ссылок. Например, Яндекс.Диск настроен на синхронизацию папки ~/Yandex.Disk (~ — это Домашняя папка) с непосредственно Яндекс.Диском. Но вы хотите, чтобы «облачное» хранилище синхронизировало («всасывало») в себя директорию, которая находится абсолютно в другом месте, чем та, которую оно синхронизирует по умолчанию. Достаточно создать внутри директории, которую синхронизирует ваше «облако» символическую ссылку на директорию, которую нужно «всосать». Например,

ln -s "~/Yandex.Disk/Думалогия" "/media/oblako/ГОТОВОЕ/Думалогия"

то есть создать символическую ссылку «Думалогия» внутри «Домашняя папка/Yandex.Disk». Тогда по адресу ~/Yandex.Disk/Думалогия будет доступно содержимое папки /media/oblako/ГОТОВОЕ/Думалогия. Таким образом, Яндекс.Диск (или другое облачное хранилище, умеющее работать с симлинками, «всосет» в себя содержимое папки /media/oblako/ГОТОВОЕ/Думалогия.

Создание символических ссылок в графическом интерфейсе файлового менеджера Thunar в среде рабочего стола XFCE

Снимок экрана 2016-05-22 12-01-06.png

1. Открыть файловый менеджер, дойти до папки, на которую будем создавать символическую ссылку.
2. Выделить директорию (папку) или файл, на которую будем создавать симлинк.
3. В меню «Правка» выбрать «Создать ссылку».
4. Создастся объект «ссылка на…», который будет в списке файлов и директорий.
Можно переименовать. 5. Вырезаем его: нажимаем на него правой мышью и выбираем «Вырезать» или нажимаем Ctrl+X.
6. Вставляем в нужное место.
7. Открываем его в месте, куда мы его вставили, и наблюдаем за адресной строкой файлового менеджера. Проверяем, что все работает. как и написано выше.

Создание символических ссылок в графическом интерфейсе файлового менеджера Dolphin в среде рабочего стола KDE

Снимок экрана 2016-05-22 12-10-15.png

1. Открыть файловый менеджер.
2. Открыть папку, в которой будем создавать символическую ссылку на другую папку.
3. Правой кнопкой мыши нажимаем в свободное место, выбираем «Создать» ——> «Символическая ссылка». В открывшемся окошке указываем или выбираем с помощью кнопки открытия файлового диалога адрес, на который будем ссылаться.
4. Проверяем работоспособность.

Создание символической ссылки через терминал

ln -s "путь1" "путь2"

путь1 — что ссылаем, путь2 — куда ссылаем.
Если в графическом файловом менеджере скопировать файл или директорию. то при вставке в текстовое поле вставится полный путь внутри вашей файловой системы к скопированному объекту.

То есть открываете блокнот (текстовый редактор любой), вставляете туда скопированные пути в эту команду, которую заранее копируете и вставляете, затем получившуюся команду копируете в терминал.
Михаил Н. (обсуждение) 13:17, 22 мая 2016 (MSK)

Символические и жесткие ссылки в Linux. Команда ln

Символические и жесткие ссылки в Linux. Команда ln

Что такое символические и жесткие ссылки в Linux. Чем они отличаются. Как создавать ссылки. Использование команды ln.

Оглавление

  • Что такое ссылка на файл в Linux
    • Что такое символические ссылки
    • Что такое жесткие ссылки
    • Отличия символических ссылок от жестких

    Что такое ссылка на файл в Linux

    Ссылка на файл в Linux — это указатель на файл. Если проводить аналогию с Windows, то ссылки чем-то похожи на ярлыки. То есть вы создаете ссылку, которая указывает на какой-либо файл или директорию, и можете разместить эту ссылку в другом каталоге. Обращаясь к такой ссылке, вы будете обращаться к настоящему файлу или каталогу.

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

    Что такое символические ссылки

    Символическая ссылка (symbolic link) — это специальный файл, который является ссылкой на другой файл или каталог (их еще называют целевым файлом, целевым каталогом).

    Символические ссылки также называют символьными, мягкими ссылками (soft links) или сим-ссылками (sym-link).

    Важно понимать, что символическая ссылка не содержит в себе внутри копии самого файла, на которую она указывает. Она является всего лишь указателем на файл. Не смотря на это, символическая ссылка обладает собственными правами доступа, так как сама является небольшим файлом, который содержит путь до целевого файла.

    Возвращаясь к аналогии с ярлыками в Windows, символические ссылки это своего рода ярлыки на файлы. Можно создавать несколько символических ссылок на один файл и эти ссылки могут иметь разные имена.

    Связь между символической ссылкой и файлом, на который она указывает, является «мягкой». Если удалить символическую ссылку, то файл, на который она указывает, не удаляется.

    Если удалить файл, на который указывает ссылка, то сама ссылка не обновляется и остается на диске. При этом она указывает на уже несуществующий файл. Аналогично, если переименовать или переместить целевой файл, то ссылка не обновляется автоматически.

    При создании символических ссылок можно указывать относительный путь до целевого файла. В таком случае ссылка считает, что относительный путь указан относительно каталога, в котором создана сама ссылка (но не относительно каталога, из которого она была создана).

    Символическая ссылка в Linux

    Схематично отношение между файлом, символической ссылкой и данными, которые хранятся в файле, можно показать следующим образом:

    Что такое жесткие ссылки

    Жесткая ссылка (hard link) является своего рода синонимом для существующего файла. Когда вы создаете жесткую ссылку, создается дополнительный указатель на существующий файл, но не копия файла.

    Жесткие ссылки выглядят в файловой структуре как еще один файл. Если вы создаете жесткую ссылку в том же каталоге, где находится целевой файл, то они должны иметь разные имена. Жесткая ссылка на файл должна находится в той же файловой системе, где и другие жесткие ссылки на этот файл.

    В Linux каждый файл имеет уникальный идентификатор — индексный дескриптор (inode). Это число, которое однозначно идентифицирует файл в файловой системе. Жесткая ссылка и файл, для которой она создавалась имеют одинаковые inode. Поэтому жесткая ссылка имеет те же права доступа, владельца и время последней модификации, что и целевой файл. Различаются только имена файлов. Фактически жесткая ссылка это еще одно имя для файла.

    Жесткие ссылки нельзя создавать для директорий.

    Жесткая ссылка не может указывать на несуществующий файл.

    Жесткие ссылки появились раньше, чем символические, но сейчас уже устаревают. В повседневной работе жесткие ссылки используются редко.

    Жесткая ссылка в Linux

    Схематично отношение между исходным файлом, жесткой ссылкой и данными можно показать следующей схемой:

    Отличия символических ссылок от жестких

    Кратко подведем итог, написанного выше.

    Символическая ссылка:

    • Указывает на целевой файл или каталог. Фактически является небольшим файлом, содержащим путь до целевого файла.
    • Не содержит внутри себя содержимого самого файла. Содержит путь к целевому файлу.
    • Имеет собственные права доступа, которые не распространяются на целевой файл.
    • Удаление / переименование / перемещение целевого файла не обновляет автоматически ссылку. Ссылка начинает указывать на несуществующий файл, становится неработающей.
    • Изменение прав доступа у целевого файла не обновляет права доступа у ссылки.
    • Может быть создана для директории.
    • Ссылка и целевой файл имеют разные файловые индексы (inode) в файловой системе.
    • Может указывать на несуществующий файл.
    • Символическая ссылка может использовать относительный путь до целевого файла.

    Жесткая ссылка:

    • Является своего рода еще одним именем на файл.
    • Не может указывать на директорию.
    • Нельзя создавать жесткие ссылки между файлами разных файловых систем.
    • Не может указывать на несуществующий файл.
    • Жесткая ссылка и файл, для которого она создавалась, имеют одинаковые индексы (inode) в файловой системе.

    Как создавать ссылки в Linux. Команда ln

    Для создания ссылок в Linux используется команда ln (от слова link).

    Синтаксис команды ln :

    ln опции целевой_файл имя_ссылки

    Обычно используется только одна опция -s . Полный список опций можно получить, выполнив команду man ln.

    Создание символических ссылок

    Чтобы создать символическую ссылку, нужно выполнить команду ln с опцией -s :

    ln -s целевой_файл имя_символьной_ссылки

    Например, создадим в текущем каталоге символическую ссылку с именем mylink на файл /home/pingvinus/myfile :

    ln -s /home/pingvinus/myfile.txt mylink

    Выполнив команду ls -li , можно увидеть, что ссылка myfile указывает на файл /home/pingvinus/myfile

    ls -li 792300 -rw-rw-r-- 1 pingvinus pingvinus 13 фев 13 13:07 myfile.txt 787622 lrwxrwxrwx 1 pingvinus pingvinus 10 фев 13 13:08 mylink -> /home/pingvinus/pingvinus/myfile

    Обратите внимание, что ссылка и целевой файл имеют разные inode (792300 и 787622. См. число в начале строки).

    Если теперь удалить целевой файл, а затем попробовать просмотреть его содержимое, используя ссылку, то получим сообщение о том, что файл не найден:

    rm myfile.txt ls -li 787622 lrwxrwxrwx 1 pingvinus pingvinus 10 фев 13 13:08 mylink -> /home/pingvinus/pingvinus/myfile cat mylink cat: mylink: Нет такого файла или каталога

    Символическая ссылка, команда ln -s

    Пример создания и использования символьной ссылки (при создании ссылки используется относительный путь до целевого файла, если такую ссылку переместить, то она будет невалидна):

    Создание жестких ссылок

    Чтобы создать жесткую ссылку нужно использовать команду ln без опции -s .

    ln целевой_файл имя_жесткой_ссылки

    Например, создадим жесткую ссылку с именем hardlinktofile на файл myfile.txt :

    ln myfile.txt hardlinktofile

    Выведем список файлов:

    ls -li 787622 -rw-rw-r-- 2 pingvinus pingvinus 13 фев 13 13:19 hardlinktofile 787622 -rw-rw-r-- 2 pingvinus pingvinus 13 фев 13 13:19 myfile.txt

    Можно заметить, что hardlinktofile и myfile.txt имеют одинаковый inode=787622, так как являются фактически разными именами для одного файла (inode которого 787622).

    Также видно, что на данный inode имеется 2 ссылки (см. цифру 2 в 3-м столбце). Если мы удалим исходный файл, то количество ссылок на него уменьшается на 1, то есть на самом деле файл не удаляется, так как на него больше, чем 1 ссылка. И мы по прежнему можем работать с файлом по имени hardlinktofile.

    rm myfile.txt ls -li 787622 -rw-rw-r-- 1 pingvinus pingvinus 13 фев 13 13:19 hardlinktofile cat hardlinktofile Hello World!

    Обратите внимание, что после выполнения команды rm, количество ссылок на файл стало равно 1.

    Создание жесткой ссылки в Linux

    Пример создания и использования жесткой ссылки:

    Как удалить ссылку

    Ссылки, как и обычные файлы, можно удалять, используя команду rm :

    rm имя_ссылки

    Создание ссылок через файловый менеджер

    Некоторые графические файловые менеджеры поддерживают создание символических ссылок. Чтобы создать символическую ссылку в таком файловом менеджере, достаточно кликнуть правой кнопкой мыши по файлу и выбрать в меню пункт Создать ссылку ( Create Link , Make Link ).

    Ссылка создается в том же каталоге, где находится целевой файл. После создания ссылку можно переместить в другой каталог.

    Резюме

    Ссылки — это удобный инструмент при работе с файлами в Linux. Мы рассмотрели два вида ссылок, которые существуют в Linux. Рассмотрели отличия символических ссылок от жестких. Для создания ссылок используется команда ln . При повседневной работе обычно используются символические ссылки, в то время как жесткие ссылки используются редко.

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

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