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

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

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

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

fsutil hardlink list %windir%\notepad.exe

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

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

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

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

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

Чтобы создать символическую ссылку на данный файл, откройте свой терминал и введите:

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

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

В следующем примере мы создаем символическую ссылку с именем файла  :

Чтобы убедиться, что символическая ссылка была успешно создана, используйте команду:

Вывод будет выглядеть примерно так:

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

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

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

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

В данном случае речь идет о совместимости со сторонними программами, в которых жестко прописан путь к блокноту. Например, многие установщики программ до сих пор открывают readme.txt именно в нем, и кто его знает, как разработчики это прописали.

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

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

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

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

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

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

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

Что именно является символической ссылкой?

Обычно называемые symlink(символической ссылкой) или soft link(мягкой ссылкой), символические ссылки представляют собой очень маленькие файлы. На самом деле символическая ссылка содержит только имя любого файла, на который она указывает, обычно вместе с путем к файловой системе (относительно текущего местоположения или абсолютного значения).

Если файл с именем file1 указывает на файл с именем /apps/files/file-2020, длина file1 будет составлять 21 символ, даже если размер файла file-2020 составляет 2 терабайта. Если он указывает на ./file-2020, длина его будет всего 11 символов. Если указывает на file-2020, то только девять.

Если вы выполните команду, подобную «vi file1» (где file1 — имя символической ссылки), вы в конечном итоге отредактируете любой файл, на который указывает file1, а не содержимое самой символической ссылки. Системы Linux знают, как работать с символическими ссылками, и просто делают правильные вещи. Точно так же, если вы используете такие команды, как cat, more, head или tail, вы будете просматривать содержимое указанного файла.

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

Когда ломаются ссылки

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

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

Если вы попытаетесь получить доступ к символической ссылке, которая указывает на себя (бывает и так), вы увидите что-то вроде этого:

Если первая буква в длинном списке не привлекла вашего внимания, это означает, что файл является символической ссылкой. Разрешения rwxrwxrwx являются стандартными и не отражают разрешения для файла, на который указывает символическая ссылка.

Нахождение сломанных символических ссылок

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

буква l указывает команде поиска искать символические ссылки.

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

Чтобы избежать ошибок, когда команда пытается просмотреть файлы или каталоги, на которые у вас нет разрешения, вы можете отправить весь вывод ошибок в /dev/null следующим образом:

Вы также можете найти неработающие символические ссылки с помощью такой команды. Она длиннее предыдущей, но делает тоже самое:

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

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

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

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

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

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

Dism /online /Get-Features

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

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

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

«Ил-2 Штурмовик» нового поколения — «Битва за Сталинград» и «Битва за Москву» #13

«Ил-2 Штурмовик» нового поколения — «Битва за Сталинград» и «Битва за Москву» #13

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

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

Симлинки существуют с первых дней вычислений

Больше, чем история, это продуктивное использование, которое вы можете использовать, чтобы привлечь внимание

Вот 5 практических применений символических ссылок

  • Символьные ссылки могут быть созданы для одного документа, доступ к которому осуществляется несколькими программами. Вместо создания нескольких копий вы сохраняете одну копию и создаете символические ссылки для каждой отдельной программы.
  • Символьные ссылки позволяют изменить расположение файлов настроек по сравнению с их местоположением по умолчанию и, по сути, защитить его от сбоя системы.
  • Симлинки позволяют хранить ваши медиафайлы в любом другом месте, а также делают их доступными через путь к папке по умолчанию медиа-программы.
  • Символьные ссылки позволяют легко выполнять облачную синхронизацию с файлами Dropbox, которые не находятся в «Моем Dropbox».
  • Симлинки используются для «взлома» игр Steam и хранения больших игр на внешнем диске.

Создание и использование символических ссылок раньше было задачей командной строки — строго для гиков — но теперь это немного проще с бесплатной программой под названием Link Shell Extension.

Установите и используйте символические ссылки

Расширение Link Shell и необходимые библиотеки времени выполнения можно загрузить здесь и установить. Документация также углубляется в детали использования символических ссылок. Вот краткое описание того, как вы можете использовать их в Windows. LSE поддерживается во всех версиях Windows с файловой системой NTFS. (Экраны для Windows XP)

Выберите папку или файл, из которого вы хотите создать символическую ссылку. Щелкните правой кнопкой мыши папку или файл и выберите «Выбрать источник ссылки» в контекстном меню.

Теперь перейдите к папке, в которую вы хотите сохранить символическую ссылку. Щелкните правой кнопкой мыши на папке и выберите « Удалить как…».

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

Hardlink Clone создает символическую ссылку на файл. Junction создает символическую ссылку на всю папку. Smart Copy в основном создает копию всей структуры каталогов от исходного местоположения до места назначения. Вы можете выбрать один из этих вариантов.

Это вводное руководство по символическим ссылкам. Симлинки — это расширенные ярлыки, которые могут повысить вашу производительность. Мы рассмотрим это в следующей статье.

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

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

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

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

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

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

Поэтому очень важно понимать, как создавать и использовать тот или иной тип ссылок

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как проверить статус доступа к символическим ссылкам

Тут в ход вступает знакомая нам утилита fsutil, о которой я уже рассказывал. Недавние примеры ее применения:

  • Слишком длинный целевой путь
  • Robocopy и примеры использования с параметрами
  • Как перенести ost файл IMAP почты в Outlook

Чтобы просмотреть текущий статус параметров Symlink в вашей системе, выполните следующую команду из командной строки с повышенными привилегиями (администратора):

fsutil behavior query SymlinkEvaluation

  • Local to local symbolic links are enabled — говорит, что локальные символические ссылки, открываются локально
  • Local to remote symbolic links are enabled — говорит, что локальные символические ссылки, открываются удаленно
  • Remote to local symbolic links are disabled — Удаленные символические ссылки открываются локально, это нужно включить
  • Remote to remote symbolic links are disabled — Удаленные символические ссылки открываются удаленно, это нужно включить

Чтобы устранить ошибку «the symbolic link cannot be followed because its type is disabled» нужно включить четвертый пункт «Remote to remote symbolic links are disabled». Для этого выполните команду:

fsutil behavior set SymlinkEvaluation R2R:1

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

Если вам также необходимо включить оценку удаленного и локального канала, вы можете заменить R2R:1 на R2L:1 в команде настройки поведения.

fsutil behavior set SymlinkEvaluation R2L:1

Симлинки против псевдонимов в macOS

Если вы когда-либо создавали псевдонимы в macOS, вы заметите, что они ведут себя почти как символические ссылки. Оба типа ссылок ссылаются на путь к связанному файлу или папке.

Разница в том, что псевдоним также помечает связанный объект с идентификатором, называемым inode (индексный узел). Этот идентификатор уникален для объекта и следует за ним по всей файловой системе.

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

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

Не можете определить разницу между псевдонимом и символической ссылкой, поскольку вы удалили тег псевдонима из имени файла псевдонима?

Откройте инспектор файлов или панель «Информация» для каждого ярлыка и посмотрите размер файла в разделе «Общие». Если это говорит (ноль байтов на диске), вы имеете дело с символической ссылкой.

Символьные ссылки (в текущей папке) также проявятся при использовании этой команды терминала:

ls -la

Команда работает и в Linux, и вы увидите символическую ссылку, указывающую на местоположение исходного объекта.

Симлинки лучше, чем ярлыки

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

Переменные символьные ссылки

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

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

Операционные системы , использующие вариантные символические ссылки, включают NetBSD , DragonFly BSD , Domain / OS .
Tru64 использует контекстно-зависимую символьную ссылку, где контекстом является номер члена кластера.

Пирамида Технология OSx «s Операционная система реализована условные символические ссылки , которые указывали на разные места , в зависимости от которых вселенной программы работала в. Вселенных поддерживаемом была AT & Ts игровой SysV.3 и распространение Berkeley Software (BSD 4.3). Например: если команда ps была запущена во вселенной att , то символическая ссылка для каталога / bin будет указывать на /.attbin, и будет выполнена программа /.attbin/ps . В то время как если бы команда ps была запущена в юниверсе ucb , то / bin указала бы на /.ucbbin и /.ucbbin/ps был бы выполнен. Подобные условные символические ссылки были также созданы для других каталогов, таких как / lib , / usr / lib , / usr / include .

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

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

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

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

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

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

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

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

Возможность Символическая(symbolic link) Жесткая(hard link) Соединение(junction)
Файловая система NTFS NTFS NTFS
Ссылка на локальную папку Да Нет Да
Ссылка на локальный файл Да Да Нет
Ссылка на сетевую папку или файл Да (UNC путь) Нет Нет
Относительный путь в ссылке Да Нет Нет
Связь между томами* Да(абсолютные ссылки) Нет Да(локальные тома)
Команда для просмотра ссылок dir fsutil dir

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

Различные типы связей между папками и файлами дают файловой системе NTFS преимущества, которые Microsoft использует для обеспечения совместимости приложений и стабильной работы Windows. В немалой степени именно по этой причине уже третье поколение систем Microsoft не устанавливается на файловую систем FAT32.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: