Символические ссылки: основы работы | 8HOST.COM

В чем разница между жесткими ссылками, символическими ссылками и соединениями

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

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

Жесткая ссылка или Hard Link имеет схожий функционал с символическими ссылками, но её ключевыми отличиями являются:

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

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

Как изменить или удалить символическую ссылку в linux?

Вы можете удалить существующие ссылки, прикреплённые к файлам или каталогам, с помощью команды unlink или rm. Вот как вы можете сделать это с помощью команды unlink:

unlink [симлинк_для_удаления]

Аналогичным образом удаляем символическую ссылку с помощью команды rm:

rm [имя_символической_ссылки]

Например:

rm simpleText

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

Как создать жесткие ссылки

Мы выяснили, что Microsoft использует жесткие ссылки для обеспечения совместимости (пример с блокнотами) и безотказного обслуживания операционной системы (пример с папкой winsxs). Предлагаю вам самостоятельно создать жесткие ссылки и поиграть с ними.

Жесткие ссылки необязательно должны иметь такие же имена, как файл, на который они указывают. Это легко проверить:

Как создать символическую ссылку в linux

Итак, давайте разберёмся, как создать символические ссылки на файлы и папки в Linux.

Как увидеть жесткие ссылки

Символические ссылки легко определить – в файловом менеджере их видно по значку, а в результатах команды dir напротив ссылок пишется SYMLINK. Жесткие ссылки не очевидны, в прямом смысле этого слова.

Проверить уникальность блокнота можно в командной строке, запущенной от имени администратора. Команда fsutil покажет вам жесткие ссылки на файл:

fsutil hardlink list %windir%notepad.exe

Сюрприз! Блокнотов в Windows 7 не два, а четыре! Как видите, еще два обнаруживаются в папке winsxs.

А в 64-разрядной Windows 7 их вообще шесть.Жесткие ссылки
Увеличить рисунок

Это связано с тем, что в папке System32 лежат 64-разрядные версии файлов, в том числе блокнот (я выделил еще одну занятную нестыковку Windows, уходящую корнями в прошлое).  А в папке SysWOW64 хранится 32-разрядная версия notepad.exe, которая имеет свою жесткую ссылку в папке winsxs, в чем вы можете убедиться самостоятельно.

Внушительное количество жестких ссылок подводит нас к вопросу использования ими дискового пространства.

Как упростить создание символических и жестких ссылок?

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

Одной из самых популярных программ для быстрого создания ссылок из контекстного меню является Link Shell Extension.

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

Шаг 1. Нажимаем ПКМ по нужному объекту и выбираем пункт «Запомнить источник ссылки».

Шаг 2. Переходим в любой каталог, куда будет помещена ссылка, нажимаем ПКМ по пустому месту и выбираем пункт «Поместить как», после чего следует выбрать «Жесткую ссылку» или «Символическую ссылку».

Независимо от метода создания, ссылки будут функционировать в штатном режиме.

Как ускорить свою работу с помощью ссылок

В комментариях все к той же записи про AppPath читатель jakv поделился своим опытом использования ссылок.

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

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

Вы уже видели, как создает ссылки fsutil. Давайте теперь сделаем это командой mklink.

:: Символическая ссылка на файл
mklink D:MyToolspe.exe D:Sysinternalsprocexp.exe
:: Жесткая ссылка на файл
mklink /h D:MyToolspe1.exe D:Sysinternalsprocexp.exe

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

:/>  ✅ Как удалить папку windowsapps в windows 10 -

В отдельном столбце проводника я отобразил атрибуты файлов, чтобы показать, что буква L обозначает символическую ссылку. Вы также можете добавить столбец «Цель ссылки», чтобы посмотреть, куда она ведет. Этот рисунок также хорошо подчеркивает разницу между жесткими и символическими ссылками. Первые являются полноценными файлами, а вторые больше похожи на ярлыки.

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

Преданья старины глубокой

Два файла notepad.exe обеспечивают совместимость приложений, играя ту же роль, что и некоторые подразделы App Paths.

Жесткие ссылки
Увеличить рисунок

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

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

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

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

ln -s one three

Теперь у вас должно быть 3 каталога, один из которых указывает на другой. Чтобы получить более подробный обзор текущей структуры каталогов, вы можете использовать команду ls и вывести содержимое текущего рабочего каталога:

Вы увидите:

one  three  two

Теперь в каталоге symlinks/ есть три каталога. В зависимости от вашей системы это может означать, что каталог three на самом деле является символической ссылкой. Иногда в выводе имя ссылки выделяется другим цветом или к нему добавляется символ @.

Для большей детализации вывода вы можете передать команде ls аргумент -l, чтобы определить, куда на самом деле указывает символическая ссылка:

ls -l

На экране появится:

total 8
drwxrwxr-x 2 8host 8host 4096 Oct 30 19:51 one
lrwxrwxrwx 1 8host 8host    3 Oct 30 19:55 three -> one
drwxrwxr-x 2 8host 8host 4096 Oct 30 19:51 two

Обратите внимание, ссылка three указывает на каталог one, как и ожидалось. Кроме того, в выводе его имя начинается с l, что указывает на то, что это ссылка. Два других элемента начинаются с d, что означает, что это обычные каталоги.

Символические ссылки также могут содержать символические ссылки. В качестве примера давайте попробуем связать файл one.txt из каталога three с каталогом two:

ln -s three/one.txt two/one.txt

Теперь у вас должен быть файл one.txt внутри каталога two. Вы можете проверить это с помощью следующей команды ls:

ls -l two/

total 4
lrwxrwxrwx 1 8host 8host 13 Oct 30 19:58 one.txt -> three/one.txt
-rw-rw-r-- 1 8host 8host  4 Oct 30 19:51 two.txt

В зависимости от конфигурации вашего терминала ссылка (выделенная выше) может отображаться в красном цвете, что указывает на то, что она не работает. Хотя ссылка и была создана, но для ее создания использовался относительный путь. Ссылка не работает, потому что каталог two не содержит каталога three с файлом one.txt в нем.

К счастью, вы можете исправить эту ситуацию при помощи команды ln. Она может создать симлинк относительно расположения ссылки с помощью аргумента -r (или –relative).

Однако даже с флагом -r вы не сможете исправить неработающую символическую ссылку. Причина ошибки в том, что символическая ссылка уже существует, и вы не сможете перезаписать ее, не добавив аргумент -f (или –force):

ln -srf three/one.txt two/one.txt

Теперь у вас есть файл two/one.txt, он связан с three/one.txt, который является ссылкой на one/one.txt.

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

tree

.
├── one
│   └── one.txt
├── three -> one
└── two
    ├── one.txt -> ../one/one.txt
    └── two.txt

3 directories, 3 files

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

:/>  Что за папка WinSxS, и как ее очистить? |

Чтобы понять, что содержат ваши файлы, выполните следующую команду cat.

cat {one,two,three}/one.txt

Она выведет на экран содержимое файла one.txt в каждом из трех каталогов, созданных вами в этом руководстве:

one
one
one

Затем обновите содержимое исходного файла one.txt в каталоге one/:

Реализация в разных операционных системах

В Windows XP и Windows Vista в обеих папках лежит по файлу notepad.exe. А разработчики Windows Server 2008 решили убрать блокнот из папки Windows, оставив его только в System32. Наверное, они сочли, что на серверной системе устанавливается меньше прикладных программ, и вероятность попадания на несовместимую программу намного ниже.

Судя по тому, что в  следующих серверах от этой идеи не отказались, расчет оправдался. Любопытно, что после включения компонента Desktop Experience блокнот все-таки появляется в папке Windows (спасибо за информацию, Morpheus).

В Windows 7 и Windows 8 блокнот присутствует в обеих папках, но на диске размещен только один файл notepad.exe.

Его наличие в разных папках обеспечивают жесткие ссылки (hard links), которые и станут основными героинями сегодняшнего разговора. Аналогично, в серверных системах после включения компонента создается именно жесткая ссылка на notepad.exe, а не копия файла. Кстати, программа write тоже дублируется жесткой ссылкой.

Не совсем понятно, почему это решение не внедрили еще в Vista, но совершенно ясно, почему так не сделали в XP. Дело в том, что жесткие ссылки являются свойством файловой системы NTFS, а ХР можно было устанавливать еще и на FAT32.

[ ]Дальше в программе

Символическая ссылка linux на папки

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

ln -s [конкретный_файл/каталог] [имя_символической_ссылки] 

Символическая ссылка linux на файлы

Обычно для создания ссылок мы используем команду ln и опцию -s, чтобы указать символическую ссылку. Это самый простой и гибкий способ, который позволяет максимально экспериментировать с языком. В создании символических ссылок в Linux нет ничего сложного — нужно просто выполнить один простой шаг.

ln -s [целевой_файл] [имя_символической_ссылки]

Команда ln в Linux создает ссылки между исходными файлами и каталогами.

  • -s — команда для символических ссылок.
  • [целевой файл] — имя существующего файла, для которого вы создаёте ссылку.
  • [имя символической ссылки] — эта часть команды объясняет сама себя.

Проверить создалась ли ссылка можно с помощью команды вывода подробного списка содержимого каталога:

ls -l
Информация О Символической Ссылке в Выводе

Однако, если вы не укажете [имя символической ссылки], команда автоматически создаст новую ссылку в существующем каталоге.

Сколько места на диске занимают жесткие ссылки

Нисколько! В файловой системе NTFS каждый файл можно считать жесткой ссылкой на самого себя. На файл может ссылаться сколько угодно жестких ссылок (точнее, не больше 1023). Они могут запускать его из разных расположений, и при этом неотличимы друг от друга в проводнике и результатах команды dir.

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

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

Не пропустите рассказы о том, как грамотно уменьшить размер папки winsxs в Windows 7 и в Windows 8 и новее.

Проводник видит папку winsxs так:

Но в реальности папка содержит немного уникальных файлов, которые изначально занимают на диске в среднем 400 Мб. Эта цифра относится к Windows Vista, и логично предположить, что в Windows 7 дело обстоит примерно так же (по крайней мере, понятен порядок цифры).

Все остальные файлы с помощью жестких ссылок проецируются в папки Windows, System32 и т.д. Появление папки winsxs связано с изменением платформы Windows, которая теперь складывается из компонентов как дом из кирпичей. По сравнению с Windows XP такая модель упрощает развертывание и обслуживание WIM-образов.

Dism /online /Get-Features

Может показаться, что зачистка папки winsxs никак не нарушает нормальную работу системы. Так, Антон лишился только русского языка в Internet Explorer, причем с его слов исключительно по невнимательности. Однако нарушения нормальной работы Windows не всегда заметны, если они происходят под капотом системы.

:/>  Ping Command | Network diagnostics in Windows - IONOS

Для стабильной работы Windows необходимо нормальное управление компонентами, безотказное восстановление и правильное обновление.

Так, содержимое папки winsxs используется для проверки системных файлов (SFC), а хранящиеся в ней версии файлов обеспечивают подбор наиболее подходящей версии при установке и удалении обновлений.

Подробнее о назначении папки winsxs вы можете узнать из блогов создателей Windows и команды Windows Server Core (EN), а я предлагаю вернуться к разговору о жестких ссылках.

Создание и удаление связей

Команда mklink в Windows 7 и Vista умеет создавать все три типа связей. Жесткие ссылки можно создать только на файлы, но не на папки — для этого исторически существуют соединения.

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

Удаление ссылок в Windows 7 и Vista не несет в себе особых сюрпризов, поскольку целевые файлы и папки остаются в целости и сохранности. Внимательным нужно быть лишь при рекурсивном удалении файлов из папки командой del /s, т.к. при этом будут удалены все файлы в целевой папке.

Создание тестовой файловой системы

Системный вызов, необходимый для создания символических ссылок, обычно доступен в Unix-подобных и POSIX-совместимых операционных системах. Для создания ссылок мы будем использовать команду ln.

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

Для начала давайте создадим в каталоге /tmp/ пару новых каталогов. Каталог /tmp/ предназначен для временных (temporary) файлов, то есть все хранящиеся здесь файлы и каталоги будут удалены при следующей загрузке сервера. Это очень удобно: вы можете создать столько каталогов, файлов и ссылок, сколько захотите, и не беспокоиться о том, что впоследствии они засорят систему.

Следующая команда mkdir создает сразу три каталога: сначала каталог symlinks/ внутри /tmp/, а затем – каталоги one/ и two/ внутри symlinks/.

mkdir -p /tmp/symlinks/{one,two}

Перейдите в новый каталог symlinks/:

cd /tmp/symlinks

Создайте здесь пару тестовых файлов, по одному в каждом из подкаталогов внутри symlinks/. Следующая команда создает в подкаталоге one/ файл one.txt, единственным содержимым которого является строка one:

Сравнительная таблица

Для полноты картины в таблице отражены некоторые возможности, которых я не касался в своих материалах.

* Не путайте том с диском или разделом. Тома могут включать в себя несколько разделов или даже дисков. Подробнее читайте в статье о конфигурировании динамических томов (мой перевод 2006 года:)

Сторонние программы

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

Все дело в том, что в Windows 3.0  местом хранения блокнота была папка Windows, а в Windows NT 3.х – папка System32. Несмотря на то, что обе системы давно стали пыльной историей, блокнот до сих пор размещают в обеих папках. Интересно, что делается это не во всех операционных системах Microsoft, а если и делается, то различными способами!

Требования

Чтобы следовать этому руководству, вам потребуется доступ к компьютеру с операционной системой Linux. Подойдет и виртуальный сервер, к которому вы подключаетесь через SSH, и просто ваш локальный компьютер. Обратите внимание: мы проверили данный мануал на сервере Ubuntu 20.04, но приведенные в нем команды и примеры должны работать на компьютерах с любой версией любого дистрибутива Linux.

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

Итоги

Linux — замечательная платформа для разработки интерактивного и динамичного приложения, где вы можете экспериментировать и пробовать что-то новое. Но для этого вам нужна прочная база. Изучите основы языка, чтобы использовать весь потенциал платформы. 

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

Оставьте комментарий

Adblock
detector