Командная строка Linux, ссылки на файлы (links): команда ln

Командная строка Linux, ссылки на файлы (links): команда ln

Обновлено 23.02.2024

Приветствую!

Это пятый пост из цикла по командной строке Linux. Сегодня мы поговорим про ссылки на файлы (жесткие и символические), а также рассмотрим команду для их создания: ln.

Предыдущие посты цикла

Если вы только начинаете изучать Linux, то настоятельно рекомендую посмотреть предыдущие посты:

Практические примеры из постов данного цикла выполнялись в среде дистрибутива Linux Mint 21.

Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .

Введение

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

Механизм ссылок был введен в Unix в начале 1970-х годов и с тех пор он стал важной частью Unix-подобных операционных систем.

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

Для создания жестких ссылок достаточно использовать команду ln без ключей. А для создания символических обязателен ключ -s. Символические ссылки являются более распространёнными в использовании.

Перейдём к разбору команды ln.

Команда ln (link) – создание ссылок на файлы

Синтаксис:

ln [ключи] <путь_до_файла_назначения> <путь_до_файла_ссылки>

Часто используемые ключи:

КлючЗначение
-vвывод выполняемых действий
-iинтерактивный режим (спрашивать перед тем, как перезаписать файл назначения файлом ссылки)
-sсоздать символьную ссылку на файл
-fигнорировать предупреждения о существующих файлах

Для получения справки воспользуйтесь командами:

ln --help

man ln

Символические ссылки (Symbolic link)

Символические ссылки в Linux часто сравнивают с ярлыками в Windows. Они похожи, но по механизму работы несколько отличаются.

Для создания символической ссылки, как уже было сказано, команде ln нужно передать ключ -s (symbolic) затем указать путь до файла, на который будет указывать данный линк, и затем путь до самой ссылки.

Ключи -v -i -f у команды ln работают аналогичным образом, как у команд cp и mv, с которыми мы познакомились в прошлый раз.

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

А теперь попрактикуемся.

Создадим тестовые директории и простые тестовые файлы. Если не знаете, как это делается, то мы подробно разбирали работу с файлами в предыдущем посте.

Создаём две директории: testdir и внутри неё testdir2, а также один пустой файл new_text_file.txt, который наполним любым содержимым с помощь графического редактора xed (я добавил строку “Bye R4ven.me!!!”):

mkdir -p testdir/testdir2

cd testdir

touch new_text_file.txt

xed new_text_file.txt

И так, мы в директории ~/testdir, давайте создадим символьную ссылку наш файл ~/testdir/new_text_file.txt в поддиректории testdir2:

ln -sv ~/testdir/new_text_file.txt testdir2/

ls -l testdir2/

Обратите внимание, что при выводе команды ls файл ссылки выделяется другим цветом, а при выводе ls -l первый символ в описании ссылки, обозначающий тип файла – это l, что является обозначением символьной ссылки (link). Также при таком вывод можно увидеть, на что указывает данная ссылка. При обращении к этой ссылке, она будет перенаправлять нас на другой файл. Попробуем вывести содержимое файла-ссылки:

cat testdir2/new_text_file.txt

cat new_text_file.txt

Как видим в выводе команды cat одинаковое содержимое. Давайте создадим символьную ссылку на этот файл с относительным путём:

ln -sv ../new_text_file.txt ./testdir2/

Увидим ошибку, т.к. файл с таким именем существует. Чтобы перезаписать его используем ключ -f:

ln -svf ../new_text_file.txt ./testdir2/

ls -l testdir2/

Видим, что адрес линка изменился.

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

ln -sv ~/ ./link_to_home

ls -l

cd link_to_home

pwd

Как мы видим, мы попали “внутрь” линка, это, так называемый, логический путь. Об этом говорит вывод команды pwd и адрес в prompt нашей оболочки (подробнее про prompt). Но на самом деле мы просто перешли в нашу домашнюю директорию.

Проверить это можно командой pwd с помощью ключа -P (physical), который выводит наше физическое расположение:

pwd -P

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

Для интереса, выполните команды ls -l в директории /usr/bin, где хранятся исполняемые файлы и посмотрите, сколько там символьных линков и куда они ведут:

ls -l /usr/bin

Жесткие ссылки (Hard link)

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

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

Рассмотрим несколько примеров. Находясь в директории testdir скопируем в нее исполняемый файл команды ls и создадим на него жесткую ссылку с другим именем:

cd ~/testdir

cp /usr/bin/ls .

ln ./ls hard_ls

ls -l

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

Вот несколько особенностей жестких ссылок в Linux:

  1. Жесткие ссылки на один и тот же файл имеют одинаковый inode номер.
  2. Жесткие ссылки не имеют собственного блока данных в файловой системе, они всего лишь являются другими именами файла.
  3. Удаление жесткой ссылки не влияет на оригинальный файл, пока есть еще одна жесткая ссылка, указывающая на него. Когда все ссылки на файл будут удалены, только тогда он будет фактически удален.

Для просмотра inode (дискового дескриптора) файла можно воспользоваться командой ls -i. Проверим:

ls -li

Номер inode в выводе команды ls отображается в первом столбце. Как вы заметили, у нашего файла ls и его хардлинка одинаковый дисковый дескриптор т.е. inode номер. Это означает, что оба эти файла указывают на один и тот блок данных на жёстком диске.

Также обратите внимание на колонку №3 данного вывода: тут указано количество жестких ссылок файла существующих в системе.

Подробно вывод команды ls мы рассматривали в посте про команду ls.

Давайте создадим еще один хардлинк на наш файл ls, только в другом месте, например в папке Documents нашей домашней директории:

ls -li

ln -v ./ls ~/Документы

ls -li ~/Документы

Как видим, после создание еще одной жесткой ссылки, цифра в атрибутах файла увеличилась, а номер inode у всех файлов одинаковый.

Команда ls не является единственным способом узнать номер inode файла. Для этого можно воспользоваться полезной командой stat, которая выводит метаданные файла. Попробуем:

stat hard_ls

Видим номер, количество ссылок и другую полезную инфу.

Послесловие

Сегодня мы рассмотрели важный и интересный механизм ссылок на файлы в Linux. Узнали чем отличаются жесткий ссылки от символических и научились создавать и использовать их с помощью команды ln. В следующем посте мы рассмотрим еще один очень полезный и мощный механизм перенаправления ввода вывода и вывода ошибок в консоли Linux.

Спасибо что читаете. Успехов в становлении “линуксоидом”.

Полезные источники

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии