stringtranslate.com

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

В вычислительной технике символическая ссылка ( также символическая ссылка или мягкая ссылка ) — это файл, целью которого является указание на файл или каталог (называемый «целью») путем указания пути к нему. [1]

Символические ссылки поддерживаются POSIX и большинством Unix-подобных операционных систем , таких как FreeBSD , Linux и macOS . Ограниченная поддержка также существует в Windows 7 и Windows Vista , а также в некоторой степени в Windows 2000 и Windows XP в виде файлов ярлыков. CTSS на IBM 7090 имел файлы, связанные по имени в 1963 году . [2] [3] [4] К 1978 году операционные системы мини-компьютеров от DEC и в RDOS от Data General включали символические ссылки.

Обзор

Символическая ссылка содержит текстовую строку, которая автоматически интерпретируется и отслеживается операционной системой как путь к другому файлу или каталогу. Этот другой файл или каталог называется «целью». Символическая ссылка — это второй файл, который существует независимо от своей цели. Если символическая ссылка удаляется, ее цель остается неизменной. Если символическая ссылка указывает на цель, а через некоторое время эта цель перемещается, переименовывается или удаляется, символическая ссылка не обновляется и не удаляется автоматически, а продолжает существовать и по-прежнему указывает на старую цель, теперь несуществующее местоположение или файл. Символические ссылки, указывающие на перемещенные или несуществующие цели, иногда называются сломанными , осиротевшими , мертвыми или висячими .

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

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

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

POSIX и Unix-подобные операционные системы

В операционных системах, совместимых с POSIX , символические ссылки создаются с помощью системного вызова symlink[6] . lnКоманда оболочки обычно использует системный вызов link[7] , который создает жесткую ссылку . Если указан флаг, вместо этого используется системный вызов symlink(), который создает символическую ссылку. Символические ссылки были введены в 1982 году в 4.1a BSD Unix из Калифорнийского университета в Беркли . [8]ln -s

Следующая команда создает символическую ссылку в интерфейсе командной строки (оболочке):

ln -s целевой_путь путь_ссылки

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

После создания символической ссылки некоторые операции могут использоваться для ее обработки в качестве псевдонима для цели. Однако операции lstat, [9] lchown[10] и readlink[11] являются уникальными для символических ссылок и не применяются к цели; используя эти системные вызовы, программы, которые проверяют файловую систему (например, ls, find), могут сообщать о символических ссылках (вместо их целей, если таковые имеются). Поскольку системные вызовы renameи unlinkзакодированы для работы непосредственно с символическими ссылками, команды управления файловой системой (например, rm, mv) влияют на саму символическую ссылку (вместо того, чтобы применяться к цели символической ссылки, если таковая имеется). rmКоманда (delete file) удаляет саму ссылку, а не целевой файл. Аналогично, команда mvперемещает или переименовывает ссылку, а не цель. cpУ команды есть параметры, которые позволяют копировать либо символическую ссылку, либо цель. Команды, которые читают или записывают содержимое файла, будут получать доступ к содержимому целевого файла.

Приложение для листинга каталогов POSIX, ls, обозначает символические ссылки стрелкой после имени, указывающей на имя целевого файла (см. следующий пример), когда запрашивается длинный список каталогов ( -lопция). Когда запрашивается листинг каталога символической ссылки, указывающей на каталог, будет отображена только сама ссылка. Чтобы получить листинг связанного каталога, путь должен включать завершающий символ-разделитель каталогов ('/', косая черта).

Примечание: в приведенном ниже примере не создавайте каталог «three» перед созданием ссылки в каталоге /tmp.

$ mkdir  -p  /tmp/one/two $ echo "test_a" >/tmp/one/two/a $ echo "test_b" >/tmp/one/two/b $ cd /tmp/one/two $ ls -l -rw-r--r-- 1 группа пользователей 7 Янв 01 10:01 a -rw-r--r-- 1 группа пользователей 7 Янв 01 10:01 b      $ cd  /tmp $ ln  -s  /tmp/one/two  three $ ls  -l  three lrwxrwxrwx 1 группа пользователей 12 июля 22 10:02 /tmp/three -> /tmp/one/two $ ls  -l  three/ -rw-r--r-- 1 группа пользователей 7 января 01 10:01 a -rw-r--r-- 1 группа пользователей 7 января 01 10:01 b$ cd  three $ ls  -l -rw-r--r-- 1 группа пользователей 7 янв. 01 10:01 a -rw-r--r-- 1 группа пользователей 7 янв. 01 10:01 b $ cat  a test_a $ cat  /tmp/one/two/a test_a $ echo "test_c" >/tmp/one/two/a $ cat /tmp/one/two/a test_c $ cat a test_c    

Хранение символических ссылок

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

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

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

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

Разрешения файловой системы символической ссылки не используются; режимы доступа целевого файла контролируются собственными разрешениями целевого файла. Некоторые операционные системы, такие как FreeBSD, предлагают возможность изменять разрешения файлов и атрибуты файловой системы символической ссылки с помощью системных вызовов lchmod[12] и lchflags[13] соответственно.

Сообщаемый размер символической ссылки — это количество символов в пути, на который она указывает.

Обработка ошибок

Традиционная файловая система Unix имеет древовидную структуру, [14] однако символические ссылки позволяют ей содержать циклы. [5]

Майкрософт Виндоус

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

NTFS 3.1 представила поддержку символических ссылок для любого типа файлов. Она была включена в Windows XP , но была включена по умолчанию только для приложений режима ядра. Windows Vista и более поздние версии Windows включили поддержку символических ссылок для приложений пользовательского режима. mklinkВнутренняя команда командной строки Windows может создавать символические ссылки. Для включения поддержки символических ссылок NTFS в Windows XP требуются сторонние драйверы. [15] В отличие от точек соединения , символическая ссылка также может указывать на файл или удаленный сетевой путь Server Message Block (SMB). Кроме того, реализация символических ссылок NTFS обеспечивает полную поддержку ссылок между файловыми системами. Однако функциональность, включающая символические ссылки между хостами, требует, чтобы удаленная система также поддерживала их.

Символические ссылки предназначены для помощи в миграции и совместимости приложений с операционными системами POSIX . Microsoft стремилась к тому, чтобы символические ссылки Windows Vista «функционировали так же, как ссылки UNIX». [16] Однако реализация отличается от символических ссылок Unix несколькими способами. Например, пользователи Windows Vista должны вручную указывать при создании символической ссылки, является ли она файлом или каталогом. [17] Windows 7 и Vista поддерживают максимум 31 точку повторной обработки (и, следовательно, символические ссылки) для заданного пути (т. е. любой заданный путь может иметь максимум 31 косвенных ссылок, прежде чем Windows сдастся). [18] Только пользователи с новой привилегией Create Symbolic Link , которая по умолчанию есть только у администраторов, могут создавать символические ссылки. [19] Если это нежелательное поведение, его необходимо изменить в консоли управления локальной политикой безопасности. Кроме того, символические ссылки NTFS на файлы отличаются от символических ссылок NTFS на каталоги и, следовательно, не могут использоваться взаимозаменяемо, в отличие от POSIX, где одна и та же символическая ссылка может ссылаться как на файлы, так и на каталоги.

В Windows Vista и более поздних версиях, когда путь рабочего каталога заканчивается символической ссылкой, текущая родительская ссылка на путь, ..будет ссылаться на родительский каталог символической ссылки, а не на ее цель. Такое поведение также встречается на уровне оболочки по крайней мере в некоторых системах POSIX, включая Linux , но никогда при доступе к файлам и каталогам через вызовы операционной системы. Например, встроенные команды bash pwdи cdработают с текущим логическим каталогом. pwdчасто используется в скриптах для определения фактического текущего рабочего каталога. Когда любой путь используется с системным вызовом, любое использование ..будет использовать фактическую родительскую файловую систему каталога, содержащего ..запись псевдокаталога. Таким образом, cd ..; cat somethingи cat ../somethingмогут возвращать совершенно разные результаты.

Примеры

В обоих следующих примерах создается символическая ссылка с именем «Загрузки» на «E:\", которая указывает на папку «Загрузки» в профиле текущего пользователя.

mklink /D E:\Downloads %UserProfile%\Downloads
New-Item -Path 'E:\Downloads' -ItemType 'SymbolicLink' -Value "$Env:UserProfile\Downloads"

Точки соединения NTFS

Версия NTFS для Windows 2000 представила точки повторной обработки , которые, помимо прочего, позволили использовать точки монтирования томов и точки соединения. Точки соединения предназначены только для каталогов, и, более того, только для локальных каталогов; точки соединения с удаленными общими ресурсами не поддерживаются. [20] В комплекты ресурсов Windows 2000 и XP входит программа linkd для создания точек соединения; более мощная программа Junction была распространена Марком Руссиновичем из Sysinternals .

Не все стандартные приложения поддерживают точки повторной обработки. Наиболее заметно, что Backup страдает от этой проблемы и выдает сообщение об ошибке 0x80070003 [21] , когда папки, подлежащие резервному копированию, содержат точку повторной обработки.

Ярлыки

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

Механизмы также имеют различные возможности:

Ярлыки папок

Почти как ярлыки, но прозрачные для оболочки Windows. [24] Они реализованы как обычные папки (которые должны иметь атрибут « только для чтения» и/или «системный» атрибут [25] ), содержащие ярлык с именем target.lnk , который ссылается на цель, и (скрытый) desktop.ini со (как минимум) следующим содержимым:

 [.ShellClassInfo] CLSID2 = {0AFACED1-E828-11D1-9187-B532F1E9575D} 

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

Объекты оболочки

Объекты оболочки [26] или папки оболочки определяются в реестре Windows и могут также использоваться для реализации своего рода символической ссылки. Как и ярлыки папок, они прозрачны для оболочки Windows.

Минимальная реализация выглядит так (CLSID {00000000-0000-0000-0000-0000000000000} используется в качестве заполнителя):

 [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}] @ = "отображаемое имя" [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\DefaultIcon] @ = "..." ; путь к значку [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\InProcServer32] @ = "%SystemRoot%\\System32\\ShDocVw.Dll" "ThreadingModel" = "Apartment" [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\Instance] "CLSID" = "{0AFACED1-E828-11D1-9187-B532F1E9575D}" [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\Instance\InitPropertyBag] "Attributes" = hex : 15,00,00,00 "Target" = "..." ; абсолютный (только БЕЗ "TargetKnownFolder" или "TargetSpecialFolder") ; или относительный путь к цели "TargetKnownFolder" = "{guidguid-guid-guid-guid-guidguidguid}" ; GUID целевой папки, Windows Vista и более поздние версии "TargetSpecialFolder" = "0x00xy" ; CSIDL цели [ HKEY_CLASSES_ROOT \CLSID\{00000000-0000-0000-0000-000000000000}\ShellFolder] "Атрибуты" = hex : 00,00,00,00                

Папка «Мои документы» на рабочем столе, а также папки «Шрифты» и «Администрирование» на панели управления являются примерами объектов оболочки , перенаправленных в папки файловой системы.

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

Cygwin имитирует POSIX-совместимые символические ссылки в файловой системе Microsoft Windows. Он использует идентичные интерфейсы программирования и пользовательских утилит, как и Unix (см. выше), но создает ярлыки Windows (файлы .lnk) с дополнительной информацией, используемой Cygwin во время разрешения символических ссылок. Символические ссылки Cygwin соответствуют стандарту POSIX с точки зрения того, как они разрешаются, и стандартам Windows с точки зрения их представления на диске.

Кроме того, Cygwin можно настроить для поддержки собственных символических ссылок Windows, которые можно использовать из Cygwin без ограничений. [27] Для этого требуется:

  1. Изменение переменной среды CYGWIN для включения winsymlinks:native ;
  2. Запуск Cygwin с повышенными правами, поскольку Windows ограничивает создание символических ссылок только привилегированным пользователям.

Однако существуют некоторые различия. Cygwin не может указать информацию, связанную с ярлыками, например, рабочий каталог или значок, поскольку в ln -sкоманде нет места для таких параметров. Для создания стандартных файлов Microsoft .lnk Cygwin предоставляет утилиты mkshortcutи readshortcut. [28]

Более подробную информацию по этой теме можно найти в руководстве пользователя Cygwin. [27] MSYS2 , основанный на Cygwin, имеет аналогичный набор настроек winsymlinks , но по умолчанию копирует файлы. [29]

Сравнение символических ссылок POSIX и Windows

  1. ^ за исключением случаев использования специальных инструментов
  2. ^ При сохранении становится абсолютным путем.
  3. ^ Поддерживается в Windows Vista и более поздних версиях. Реализация Windows несовместима с POSIX. Для их создания требуется привилегия «создать символическую ссылку» (SeCreateSymbolicLinkPrivilege). По умолчанию учетная запись пользователя имеет эту привилегию, если она является администратором или у нее включен режим разработчика (Windows 10 v1703 и более поздние версии). [30]
  4. ^ POSIX допускает жесткие ссылки на папки, но не требует их. Современные файловые системы, как правило, не поддерживают это.

Другие реализации

Реализации функций, аналогичных символическим ссылкам.

Ранний Массачусетский технологический институт

Совместимая с MIT система разделения времени ок.  1963 г. и несовместимая с MIT система разделения времени имеют связанные файлы, в которых имя целевого файла указано в записи каталога. [2] [3] [4]

Амига

Команда, создающая символические ссылки makelink, — , которая также используется для жестких ссылок. Внутри dos.library возвращает код ошибки, указывающий на то, что цель является мягкой ссылкой, если вы пытаетесь выполнить с ней действия, которые допустимы только для файла, и приложения, которые хотят следовать по символической ссылке, должны явно сделать вызов, чтобы следовать по ссылке, и повторить операцию. Оболочка AmigaDOS будет следовать по ссылкам автоматически.

ОС Mac

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

ОС/2

В операционной системе OS/2 символические ссылки несколько напоминают тени в графической оболочке Workplace Shell . Однако тени, благодаря полностью объектно-ориентированной модели системных объектов, значительно мощнее и надежнее простой ссылки. Например, тени не теряют своих возможностей при переименовании или при перемещении объекта или субъекта ссылки. [31]

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

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

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

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

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

Смотрите также

Ссылки

  1. ^ Разрешение имени пути, POSIX .
  2. ^ ab Walden, David; Van Vleck, Tom , ред. (2011). "Compatible Time-Sharing System (1961-1973): Fiftieth Anniversary Commemorative Overview" (PDF) . IEEE Computer Society . Получено 20 февраля 2022 г. . По мере развития CTSS мы предоставляли пользователям способы совместного использования своих файлов на диске через "общие файлы" и "ссылки",
  3. ^ ab Crisman, Patricia A., ed. (31 декабря 1969 г.). "The Compatible Time-Sharing System, A Programmer's Guide" (PDF) . The MIT Computation Center . Получено 10 марта 2022 г. . Записи UFD, которые указывают на другие записи UFD, а не на сам файл
  4. ^ ab Corbato, FJ ; Daggett, MM; Daley, RC; Creasy, RJ; Hellwig, JD; Orenstein, RH; Korn, LK (1963). "The Compatible Time-Sharing System A Programmer's Guide" (PDF) . MIT . Получено 29 ноября 2022 г. . Ссылка: Формат похож на Copy. Указанный файл не копируется
  5. ^ abc Пайк, Роб (2000). Лексические имена файлов в Plan 9 или как правильно использовать точку-точку (PDF) . Proc. USENIX Annual Tech. Conf.
  6. ^ символическая ссылка, символическая ссылка. Стандарт IEEE 1003.1, издание 2013 г.
  7. ^ ссылка, ссылка. IEEE Std 1003.1, издание 2013 г.
  8. ^ Билл Джой ; Сэм Леффлер . "Surviving with 4.1a bsd". GitHub . Получено 8 сентября 2023 г. Он также включает несколько других функций, которые могут оказаться полезными, например, символические ссылки и улучшенную схему групп.
  9. ^ fstatat, lstat, stat - получить статус файла IEEE Std 1003.1, издание 2013 г.
  10. ^ lchown - сменить владельца и группу символической ссылки IEEE Std 1003.1, издание 2013 г.
  11. ^ readlink, readlinkat - чтение содержимого символической ссылки IEEE Std 1003.1, издание 2013 г.
  12. ^ "lchmod(2)". Страницы руководства для FreeBSD 11.
  13. ^ "lchflags(2)". Страницы руководства для FreeBSD 11.
  14. ^ Ритчи, Д. М.; Томпсон , К. (июль 1978 г.). «Система разделения времени UNIX». Bell System Tech. J . 57 (6): 1905–1929. CiteSeerX 10.1.1.112.595 . doi :10.1002/j.1538-7305.1978.tb02136.x. 
  15. ^ "Ссылка на веб-сайт расширения Shell". Ссылка на веб-сайт расширения Shell .
  16. ^ Символические ссылки, библиотека MSDN, разработка Win32 и COM, 2008-01-18
  17. ^ "Функция CreateSymbolicLinkA (winbase.h)". MSDN . Июнь 2023 г.
  18. ^ Вопросы программирования символических ссылок, MSDN
  19. ^ Марк Руссинович: Внутри ядра Windows Vista: Часть 1 – Файловые символические ссылки, Microsoft Technet, февраль 2007 г.
  20. ^ "Документация Sysinternals Junction". microsoft.com . Получено 23 марта 2018 г. .
  21. ^ «Ошибки резервного копирования или восстановления Windows 0x80070001, 0x81000037 или 0x80070003». support.microsoft.com .
  22. ^ «Отслеживание распределенных ссылок на контроллерах домена — Windows Server». 23 февраля 2023 г.
  23. ^ "Distributed Link Tracking and Object Identifiers". Microsoft Developers Network . Microsoft Corporation. 20 марта 2011 г. Получено 30 июня 2011 г.
  24. ^ «Указание местоположения расширения пространства имен». msdn.microsoft.com . 11 января 2008 г. . Получено 23 марта 2018 г. .
  25. ^ "Вы не можете просматривать или изменять атрибуты "Только для чтения" или "Системные" папок в Windows Server 2003, Windows XP, Windows Vista или Windows 7". support.microsoft.com . Получено 2021-07-08 .
  26. ^ Создание расширений оболочки с объектами экземпляров оболочки. msdn.microsoft.com
  27. ^ ab "Глава 3. Использование Cygwin". www.cygwin.com . Получено 2021-07-08 .
  28. ^ «Эффективное использование Cygwin с Windows».
  29. ^ "Coreutils: ln --symbolic создает жесткие ссылки (MSYS2-packages #249)". GitHub .
  30. ^ "Создание символических ссылок". Документация клиента Windows для IT-специалистов . Microsoft . 18 января 2023 г. – через Microsoft Learn.
  31. Рохас, Мигель (16 декабря 2020 г.). «Какие версии Python отличаются от предопределенных». manualestutor.com/ . Проверено 20 декабря 2020 г.
  32. ^ symlink(7)  –  Руководство по различным сведениям о NetBSD : магические символические ссылки.
  33. ^ Брукс Дэвис (2008). «Варианты символических ссылок для FreeBSD» (PDF) .
  34. ^ Нил Браун (2016). «Дело в пользу вариантных символических ссылок». LWN .

Внешние ссылки