Что такое код symlink


Содержание

Портирование кода Unix с помощью функции symlink() для Windows

Я переношу код C/С++ из Unix в Windows, который использует функцию symlink().

Из того, что я понимаю, последние файловые системы Windows имеют эквивалент символических ссылок.

Какой лучший/самый переносимый способ заменит функцию symlink(), поэтому тот же код работает на обеих платформах?

В Windows Vista существует функция создания настоящих символических ссылок: CreateSymbolicLink

Обратите внимание, что Junctions, как упоминалось в другом, отвечает только на поддержку каталогов, и даже с более новой функцией, символические ссылки Windows требуют, чтобы указать, является ли цель каталогом или файлом. Таким образом, вы не сможете получить тривиальную функцию замены «drop-in replacement» symlink() .

Основная технология в Windows называется точки соединения. Библиотека файловой системы Boost является кросс-платформенной и может создавать символические ссылки:

Жёсткая ссылка на файл не отличима от оригинального файла, так как это ссылка на объект, на который указывает оригинальное имя файла (более точно: каждая из жёстких ссылок на файл — это ссылка на один номер inode, где номер inode — индекс в таблице inode, в которой содержатся метаданные о всех файлах файловой системы; смотрите stat(2)). Изменения файла не зависят от используемого при этом имени файла. Жёсткие ссылки не могут указывать на каталоги (чтобы не возникало петель в дереве файловой системы, что могло бы привести к неправильной работе многих программ) и на файлы из разных файловых систем (так как номера inode не уникальны в файловых системах).

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

Объект с именем, на которое ссылается символьная ссылка, может не существовать. Символьную ссылку, указывающую на не существующее имя, называют оборванной ссылкой (dangling link).

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

Владельцы, права и отметки времени символьных ссылок

Время последнего обращения и изменения символьной ссылки можно изменять с помощью utimensat(2) или lutimes(3).

В Linux права на символьную ссылку не учитываются при любых операциях; права всегда имеют значение 0777 (чтение, запись и исполнение для всех категорий пользователей) и его нельзя изменить.

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

По умолчанию (т. е., если не указан флаг AT_SYMLINK_FOLLOW), если name_to_handle_at(2) вызывается для символьной ссылки, то он возвращает описатель символьной ссылки (а не файла, на который она указывает). Затем с его помощью можно получить файловый дескриптор символьной ссылки (а не файла, на который она указывает), указав флаг O_PATH в последующем вызове open_by_handle_at(2). Данный файловый дескриптор можно использовать в вышеупомянутых системных вызовах для работы с самой символьной ссылкой.

Трактовка символьных ссылок в системных вызовах и командах

Есть три области, которые требуют обсуждения:

1. Использование символьных ссылок в виде имён файлов в аргументах системных вызовов. 2. Символьные ссылки, указываемые в аргументах командной строки утилит, которые не выполняют обход дерева файлов. 3. Символьные ссылки, встреченные утилитами при обходе дерева файлов (задаваемые в командной строке или встреченные как часть файла при обходе иерархии).

Системные вызовы

За исключениями, описанными ниже, все системные вызовы переходят по символьным ссылкам. Например, если есть символьная ссылка slink, которая указывает на файл с именем afile, то системный вызов open(«slink» . ) вернёт файловый дескриптор, ссылающийся на файл afile.

Другие системные вызовы могут переходить по ссылкам: faccessat(2), fchownat(2), fstatat(2), linkat(2), name_to_handle_at(2), open(2), openat(2), open_by_handle_at(2) и utimensat(2); подробности смотрите в их справочных страницах. Так как remove(3) является псевдонимом unlink(2), библиотечная функция также не переходит по символьным ссылкам. При указании символьной ссылки rmdir(2) вызов завершается с ошибкой ENOTDIR.

Вызов link(2) заслуживает отдельного описания. В POSIX.1-2001 говорится, что link(2) должен разыменовывать oldpath, если это символьная ссылка. Однако в Linux этого не делается (по умолчанию Solaris делается тоже самое, но в POSIX.1-2001 определяется как такое поведение можно получить с помощью специальных параметров компилятора). В POSIX.1-2008 изменено описание, которое позволяет реализовывать любое из этих вариантов поведения.

Команды, не выполняющие обход дерева файлов

За исключением, описанным далее, команды переходят по ссылкам, указанным в аргументах командной строки. Например, если slink — символьная ссылка, которая указывает на файл с именем afile, то команда cat slink выведет содержимое файла afile.

Важно понимать, что это правило учитывается командами, которые не обязательно выполняют обход дерева файлов; например, команда chown file следует этому правилу, а команда chown -R file, выполняющая обход дерева, нет (последняя описана далее).

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

Есть несколько исключений из этого правила:

* Команды mv(1) и rm(1) не переходят по символьным ссылкам, указанным в аргументах, а пытаются переименовать и удалить их (заметим, если символьная ссылка указывает на файл через относительный путь, то перемещение файла в другой каталог с большой вероятностью вызовет проблемы, так как путь может оказаться неправильным). * Команда ls(1) также является исключением из этого правила. Для совместимости со старыми системами (когда ls(1) не делает обход дерева, то есть не указан параметр -R), команда ls(1) переходит по символьным ссылкам, указанным в аргументах, если задан параметр -H или -L, или если не указан параметр -F, -d или -l (команда ls(1) — единственная команда, у которой параметры -H и -L влияют на поведение даже когда не выполняется обход дерева файлов). * Команда file(1) также является исключением из этого правила. По умолчанию file(1) не переходит по символьной ссылке, указанной в аргументе. Команда file(1) переходит по символьной ссылке, указанной в аргументе, если указан параметр -L.

Команды, выполняющие обход дерева файлов

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

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

Команда rm -r slink каталог удалит slink, а также все символьные ссылки, обнаруженные при обходе каталога, так как символьные ссылки могут быть удалены. Команда rm(1) никогда не удаляет файл, на который указывает slink.

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

При обходе дерева файлов командами соблюдаются (должны) определённые соглашения, если это возможно:

* Команду можно заставить перейти по любой символьной ссылке, указанной в командной строке, независимо от типа файла, на который она ссылаются, указав параметр -H (от «half-logical»). Этот параметр заставляет пространство имён командной строки выглядеть как логическое пространство имён (заметим, что команды, которые не всегда делают обход дерева файлов, будут игнорировать флаг -H, если также не указан флаг -R).

Например, команда chown -HR user slink выполнит обход файловой иерархии с корнем как у файла, указанном slink. Заметим, что здесь -H делает не тоже самое, что и флаг -h, описанный ранее. При флаге -H символьные ссылки, указанные в командной строке, будут разыменовываться и при обходе файлового дерева и как если бы пользователь указал имя файла, на которое указывает символьная ссылка.

* Команду можно заставить перейти по любой символьной ссылке, указанной в командной строке, а также по всем символьным ссылкам, встреченным при обходе, независимо от типа файла, на который она ссылается, указав параметр -H (от «half-logical»). Этот параметр заставляет всё пространство имён выглядеть как логическое пространство имён (заметим, что команды, которые не всегда делают обход дерева файлов, будут игнорировать флаг -L, если также не указан флаг -R).


Например, команда chown -LR user slink изменит владельца файла, на который указывает slink. Если slink указывает на каталог, то chown обойдёт дерево файлов с корнем в этом каталоге. Также, если символьные ссылки встречаются в любом файловом дереве, которое обходит chown, то с ними будет сделано тоже что и с slink.

* Команду можно заставить следовать поведению по умолчанию, указав флаг -P (от «physical»). Этот флаг предназначен для работы со всем пространством имён как с физическим пространством имён.

Команды, которые по умолчанию не выполняют обход дерева файлов, игнорируют флаги -H, -L и -P, если не указан флаг -R. Также вы можете указать параметры -H, -L и -P более одного раза; последний указанный параметр определяет поведение команды. Это позволяет создавать псевдонимы команд с некоторым поведением, а затем переопределять это поведение в командной строке.

У команд ls(1) и rm(1) есть исключения из этих правил:

* Команда rm(1) работает с символьными ссылками, а не с файлами, на который они ссылаются, и поэтому никогда не переходит по символьной ссылке. Команда rm(1) не поддерживает параметры -H, -L и -P. * Для совместимости со старыми системами работа команды ls(1) чуть отличается. Если не указан параметр -F, -d или -l, то ls(1) переходит по символьной ссылке, указанной в командной строке. Если указан флаг -L, то ls(1) переходит по всем символьным ссылкам независимо от их типа и где они встретились — в командной строке или при обходе дерева.

Илон Маск рекомендует:  extension_loaded - определяет, загружено ли расширение

Перемещено JB из Talks

В мс в меню сверху по F9 в меню файл ЕМНИП пунк т (симв ссылка/symlink)

В номинации — «Самый тупой вопрос столетия» победил анонимус!

Что куда? Ты б хоть ман почитал бы сначала.

А что, Убунту уже не любит тебя?

Таких не берут в линупсисты.

зачем? Я знаю, что sudo ln -s /mach_kernel_9.2 /mach_kernel работает корректно

Заспиртуем тебя и будем показывать студентам как пример того с человеком может сделать макось :-)

>Заспиртуем тебя и будем показывать студентам как пример того с человеком может сделать макось :-)

Вечно молодой, вечно пьяный?

А что в моем ответе неправильно?

> А что в моем ответе неправильно?

> А что в моем ответе неправильно?

Кстати да, что не так? Из мана: ln [опции] исходный [куда]

Устами нечестивого маковода говорит Лукавый :-)

>>Что куда? Ты б хоть ман почитал бы сначала.


не тупи, всё правильно =)

я пропустил священное слово «Опции»

А как создать симлинк на каталог?
Если без cd или pushd?

Он создается, но «красный».
Если находишься в 3/, а надо создать ссылку на 1/ в 2/

Если:
pushd 2/
ln -s 1/
popd

то работает, а:
ln -s 1/ 2/ — из 3/ нет

$ln -s /root /tmp нормально создает в tmp симлинк на /root

C:\test>mklink Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Creates a directory symbolic link. Default is a file symbolic link. /H Creates a hard link instead of a symbolic link. /J Creates a Directory Junction. Link specifies the new symbolic link name. Target specifies the path (relative or absolute) that the new link refers to.

>то работает, а:
ln -s 1/ 2/ — из 3/ нет
не совсем понял что да как. вобщем посмотри куда указывает эта ссылка по ls -l

Также для диркеторий важно стоит ли слеш в конце или нет
Если сделать ln -s 1/ 2/ и 2/ — существует (и это диркетория или ссылка на валидную директорию) то мы получем совершенно не то что мы хотели) (ссылку 2->1/ внутри директории 2/)

используй ln -s 1 2

>$ ln -s file link2file

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

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

>Потому что перевести TARGET как «Что» вместо «Куда» .

Борис, ты не прав! (с) Михаил

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

Разве здесь, кроме тебя, кто-то упоминал «русские маны»?

Target, как и слово «цель» отвечает и на вопрос «куда» и на вопрос «что».
Тебя просто переклинило на одном из значений слова «цель», я так понимаю.

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

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

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


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

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

Вот основные особенности символических ссылок:

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

Теперь давайте рассмотрим жесткие ссылки.

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

Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:

  • Работают только в пределах одной файловой системы;
  • Нельзя ссылаться на каталоги;
  • Имеют ту же информацию inode и набор разрешений что и у исходного файла;
  • Разрешения на ссылку изменяться при изменении разрешений файла;
  • Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.

Использование ссылок в Linux

Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:

$ ln опции файл_источник файл_ссылки

Рассмотрим опции утилиты:

  • -d — разрешить создавать жесткие ссылки для директорий суперпользователю;
  • -f — удалять существующие ссылки;
  • -i — спрашивать нужно ли удалять существующие ссылки;
  • -P — создать жесткую ссылку;
  • -r — создать символическую ссылку с относительным путем к файлу;
  • -s — создать символическую ссылку.

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

Сначала создайте папку test и перейдите в нее:

mkdir test && cd test

Затем создайте файл с именем source с каким-либо текстом:

echo «текст текст текст текст» > source
$ cat source

Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:

ln -s source softlink

Попробуем посмотреть содержимое файла по ссылке:

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

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

Теперь удалите исходный файл и посмотрите что будет:

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

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

Снова создайте файл source с произвольным текстом:

echo «текст текст текст текст» > source
$ cat source

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

ln source hardlink

Посмотрите содержимое файла:

Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:

Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:

Затем посмотрите содержимое:

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


Выводы

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

IT Blog. Code Ins >
  • Главная
  • Услуги
  • Контакты
  • Заметки

Cимвольная ссылка (также симлинк от англ. Symbolic link, символическая ссылка) — специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу). Символьная ссылка занимает ровно столько места в файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).

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

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

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

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

ln -s filename linkname # создаётся символьная ссылка (symbolic link)

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

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

В результате выполнения команды в поле stat будет показан символ l (link).

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

Удаление символьной ссылки

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

При удалении символьной ссылки на каталог следует учитывать, что записывать команду без слеша в конце, иначе bash выдаст ошибку «невозможно удалить ссылку: Это не каталог».

Что такое символические ссылки? Как создать Symlinks в Windows 10?

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

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

Не путайте Symlink как ярлыки

Важно понимать, что Symlinks — это больше, чем просто ярлыки, которые, как пользователь Windows, вы уже знаете. Файл ярлыка просто указывает на нужный файл, в то время как Symlink сделает его похожим на связанный файл. Как только вы нажмете на Symlink, вы будете направлены в фактическое местоположение файла.

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

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

  1. Symlinks потребляют очень мало места и очень быстро создаются. Вы сохраняете много места на жестком диске с помощью Symlinks
  2. В отличие от жестких ссылок, символические ссылки могут ссылаться на файлы в файловых системах. Помните, что если вы удалите исходный файл, жесткая ссылка все еще сохраняет его, Symlink не делает
  3. Symlinks поддерживают структуру папок, в которой содержатся ссылки. Например, предположим, что есть текст файл содержится в «Полезность» папка, расположенная по адресу /D/Myfolder/Utility/windowsclub.txt , Теперь, если Symlink для Полезность папка была создана в папке Dropbox, и вы отправились искать windowsclub.txt в папке Dropbox путь к файлу будет читаться /D/Myfolder/Utility/windowsclub.txt вместо того, чтобы преобразовать обратно в исходный / фактический путь к файлу.
  4. Используя Symlinks, вы можете хранить медиафайлы Music / Videos на другом жестком диске, но заставляйте их отображаться в стандартных папках «Музыка / Видео», чтобы они были обнаружены вашими медиа-программами
  5. Разработчики часто заменяют дубликаты копий общих файлов / папок символическими ссылками на физические файлы / папки. Замена избыточных копий файлов может сэкономить много места на физическом диске и значительно сократить время, затрачиваемое на проекты копирования / резервного копирования / развертывания / клонирования.
Илон Маск рекомендует:  Что такое код pg_lo_tell

Значение Symlinks в современном мире развития

Как говорит Йосеф Дурр, ведущий старший менеджер программ, Microsoft упоминает о блоге Windows,

Many popular development tools like git and package managers like npm recognize and persist symlinks when creating repos or packages, respectively. When those repos or packages are then restored elsewhere, the symlinks are also restored, ensuring disk space (and the user’s time) isn’t wasted. Git, for example, along with sites like GitHub, has become the main go-to-source code management tool used by most developers today.

В последние годы также взорвалось использование менеджеров пакетов в современном развитии. Например, менеджер пакетов узлов (npm) обслуживал


400 миллионов инсталляций в неделю с 1 июля 2015 года, но через год был установлен более 1,2 миллиарда инсталляций — увеличение на 3 раза всего за один год! В конце июня 2020 года npm обслуживал более 1,7 миллиарда пакетов узлов всего за семь дней!

Хотя Symlinks обладает определенными преимуществами, в основном это использовалось UNIX-совместимыми операционными системами, такими как Linux, FreeBSD, OSX и т. Д., Где символические ссылки могут быть созданы без ограничений. Для пользователей Windows, хотя Symlinks был доступен, начиная с Windows Vista, было сложно и утомительно создавать.

Из-за требований безопасности Windows Vista пользователям необходимы права локального администратора и, что важно, пришлось запускать MLink в консоли командной строки, назначенной администратором для создания / изменения Symlinks. Последнее ограничение приводило к тому, что Symlinks редко использовались большинством разработчиков Windows и заставляли многие современные кросс-платформенные инструменты разработки работать менее эффективно и надежно на Windows.

Однако теперь Обновление для разработчиков Windows 10, как только пользователь с правами администратора включит режим разработчика, любой пользователь ПК может запустить mklink без добавления консоли командной строки.

Символы могут быть созданы либо с помощью команда mklink или API CreateSymbolicLink.

Использование команды mklink

При использовании команда mklink, используйте следующий синтаксис:

Примечание. Mklink может создавать несколько типов ссылок. Ниже приведены типы —

  • / D Создает символическую ссылку каталога. По умолчанию используется символическая ссылка файла.
  • / H Создает жесткую ссылку вместо символической ссылки.
  • / J Создает соединение с каталогом.

Например, я создал узел каталога моей папки «Музыка» на своем рабочем столе. См. Снимок экрана ниже:

Поэтому, когда я нажимаю на Symlink, мне кажется, что мои музыкальные файлы хранятся в C: Users Desktop Music хотя он первоначально присутствует в C: Users Музыка .

Помните, что если в вашем пути есть пробелы, вам нужно поместить туда кавычки.

Использование CreateSymbolicLink

Чтобы включить новое поведение при использовании API CreateSymbolicLink, есть дополнительная dwFlags вам нужно будет установить значение как:

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

Чтобы узнать больше о том, как создавать Symlink, используя CreateSymbolicLink API, посетите сайт windows.com.

Заключение

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

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

Символическая ссылка (еще известная как мягкая ссылка или симлинк) — это особый файл (запись) который указывает на фактическое местоположения файла или папки на диске (как ярлык в Windows).

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

Команда ln — это стандартная утилита в Linux для создания ссылок.

Дельный Совет: Создаете симлинк к примонтированной NFS шаре? Уже задумывались о производительности? Проверьте скорость ЧТЕНИЯ/ЗАПИСИ на удаленной шаре из командной строки в Linux! Читать далее →

Ниже вы найдете как создавать символические ссылки на файлы и папки из командной строки в Linux.

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

Легко запомнить: В целом, синтаксис команды ln такой же, как и команд cp или mv , в частности .

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

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

Если путь к существует и это файл, вы получите ошибку «ln: failed to create symbolic link ‘ ’: File exists».

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

Создать Ссылку на Файл

Создать симлинк к файлу:

Создать Ссылку на Директорию

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


Дельный Совет: Добавили новый диск в /etc/fstab ? Перезагрузка не нужна! Примонтируйте его всего лишь одной командной! Читать далее →

Файлы SYMLINK связаны с один типом (-ами) файлов, и их можно просматривать с помощью Unknown Software, разработанного Unknown Developer. В целом, этот формат связан с один существующим (-и) прикладным (-и) программным (-и) средством (-ами). Обычно они имеют формат Uncommon File Extension. Чаще всего файлы SYMLINK классифицируют, как Uncommon Files.

Файлы SYMLINK можно просматривать с помощью операционной системы Windows. Они обычно находятся на настольных компьютерах (и ряде мобильных устройств) и позволяют просматривать и иногда редактировать эти файлы. Рейтинг популярности файлов SYMLINK составляет «Низкий», что означает, что данные файлы встречаются редко.

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

Популярность типов файлов
Ранг Файла
Статус файла
Страница Последнее обновление

Откройте файлы в %%os%% с помощью средства для просмотра файлов FileViewPro

Формат файла: .symlink
Тип файла: Uncommon File Extension

Этот тип расширения файла считается редкостью.

Создатель: Unknown Developer
Категория файла: Необычные файлы
Ключ реестра: HKEY_CLASSES_ROOT\.symlink

Программные обеспечения, открывающие Uncommon File Extension:

Попробуйте универсальное средство для просмотра файлов

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

Поиск типов файлов

Самостоятельное устранение неполадок файла любого типа

Устранение неполадок при открытии файлов SYMLINK

Unknown Software не установлен

Дважды щелкнув по файлу SYMLINK вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Unknown Software для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.

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

Установлена неправильная версия Unknown Software

В некоторых случаях у вас может быть более новая (или более старая) версия файла Uncommon File Extension, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Unknown Software (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.

Совет: Иногда вы можете получить общее представление о версии файла SYMLINK, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).

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

Другие причины проблем с открытием файлов SYMLINK

Даже если на вашем компьютере уже установлено Unknown Software или другое программное обеспечение, связанное с SYMLINK, вы все равно можете столкнуться с проблемами во время открытия файлов Uncommon File Extension. Если проблемы открытия файлов SYMLINK до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):

  • Неверные ссылки на файлы SYMLINK в реестре Windows («телефонная книга» операционной системы Windows)
  • Случайное удаление описания файла SYMLINK в реестре Windows
  • Неполная или неправильная установка прикладного программного средства, связанного с форматом SYMLINK
  • Повреждение файла SYMLINK (проблемы с самим файлом Uncommon File Extension )
  • Заражение SYMLINK вредоносным ПО
  • Повреждены или устарелидрайверы устройств оборудования, связанного с файлом SYMLINK
  • Отсутствие на компьютере достаточных системных ресурсов для открытия формата Uncommon File Extension

Викторина: Какое расширение файла предназначено для аудио файла?

Верно!

AAC, или Advanced Audio Coding формат файла, с потерями цифровой формат сжатия звука. Это достигается лучшее качество звука, чем MP3 при той же скорости передачи данных.


Близко, но не совсем.

AAC, или Advanced Audio Coding формат файла, с потерями цифровой формат сжатия звука. Это достигается лучшее качество звука, чем MP3 при той же скорости передачи данных.

Лучшие операционные системы Windows

7 (45.73%)
10 (44.56%)
8.1 (5.41%)
XP (2.79%)
8 (0.97%)

Событие дня

Созданный в 1989 году PKWARE Инк Phil Katz, формат ZIP файл создает сжатые контейнеры для файлов различных размеров. ZIP-файлы имеют возможность сжатия данных на разные уровни, и шифровании могут быть добавлены в файл ZIP, а также, что позволяет пользователям защитить пароль своих ZIP файлы.

Как исправить проблемы с открытием файлов SYMLINK

Шаг 1

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

Например, на данном рисунке выделен файл my-file.symlink , далее необходимо щелкнуть правой кнопкой мыши по этому файлу, и в меню файла выбрать опцию «сканировать с помощью AVG». При выборе данного параметра откроется AVG Antivirus, который выполнит проверку данного файла на наличие вирусов.

Шаг 2

Переустановите Unknown Software

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

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

Совет: Попробуйте обновить Unknown Software до последней версии, чтобы убедиться, что установлены последние исправления и обновления.

Шаг 3

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

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

Шаг 4

Обновите драйверы устройств, связанных с Unknown Developer

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

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

Совет: Если при попытке открыть файл SYMLINK вы получаете сообщение об ошибке, связанной с .SYS file, проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств, которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc.

Шаг 5

Закройте другие запущенные приложения

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

Илон Маск рекомендует:  Что такое код ncurses_insertln

Такая проблема может возникнуть, когда компьютеру трудно справиться с заданием, так как операционная система (и другие службы, работающие в фоновом режиме) могут потреблять слишком много ресурсов для открытия файла SYMLINK. Попробуйте закрыть все приложения на вашем ПК, прежде чем открывать Uncommon File Extension. Освободив все доступные ресурсы на вашем компьютере вы обеспечите налучшие условия для попытки открыть файл SYMLINK.

Шаг 6

Обновление аппаратного обеспечения компьютера

Если вы выполнили все описанные выше шаги, а ваш файл SYMLINK по-прежнему не открывается, может потребоваться выполнить обновление оборудования. В большинстве случаев, даже при использовании старых версий оборудования, вычислительная мощность может по-прежнему быть более чем достаточной для большинства пользовательских приложений (если вы не выполняете много ресурсоемкой работы процессора, такой как 3D-рендеринг, финансовое/научное моделирование или интенсивная мультимедийная работа). Таким образом, вполне вероятно, что вашему компьютеру не хватает необходимого объема памяти (чаще называемой «ОЗУ», или оперативной памятью) для выполнения задачи открытия файла.

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

Жёсткая ссылка на файл не отличима от оригинального файла, так как это ссылка на объект, на который указывает оригинальное имя файла (более точно: каждая из жёстких ссылок на файл — это ссылка на один номер inode, где номер inode — индекс в таблице inode, в которой содержатся метаданные о всех файлах файловой системы; смотрите stat(2)). Изменения файла не зависят от используемого при этом имени файла. Жёсткие ссылки не могут указывать на каталоги (чтобы не возникало петель в дереве файловой системы, что могло бы привести к неправильной работе многих программ) и на файлы из разных файловых систем (так как номера inode не уникальны в файловых системах).

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

Объект с именем, на которое ссылается символьная ссылка, может не существовать. Символьную ссылку, указывающую на не существующее имя, называют оборванной ссылкой (dangling link).

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


Владельцы, права и отметки времени символьных ссылок

Время последнего обращения и изменения символьной ссылки можно изменять с помощью utimensat(2) или lutimes(3).

В Linux права на символьную ссылку не учитываются при любых операциях; права всегда имеют значение 0777 (чтение, запись и исполнение для всех категорий пользователей) и его нельзя изменить.

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

По умолчанию (т. е., если не указан флаг AT_SYMLINK_FOLLOW), если name_to_handle_at(2) вызывается для символьной ссылки, то он возвращает описатель символьной ссылки (а не файла, на который она указывает). Затем с его помощью можно получить файловый дескриптор символьной ссылки (а не файла, на который она указывает), указав флаг O_PATH в последующем вызове open_by_handle_at(2). Данный файловый дескриптор можно использовать в вышеупомянутых системных вызовах для работы с самой символьной ссылкой.

Трактовка символьных ссылок в системных вызовах и командах

Есть три области, которые требуют обсуждения:

1. Использование символьных ссылок в виде имён файлов в аргументах системных вызовов. 2. Символьные ссылки, указываемые в аргументах командной строки утилит, которые не выполняют обход дерева файлов. 3. Символьные ссылки, встреченные утилитами при обходе дерева файлов (задаваемые в командной строке или встреченные как часть файла при обходе иерархии).

Системные вызовы

За исключениями, описанными ниже, все системные вызовы переходят по символьным ссылкам. Например, если есть символьная ссылка slink, которая указывает на файл с именем afile, то системный вызов open(«slink» . ) вернёт файловый дескриптор, ссылающийся на файл afile.

Другие системные вызовы могут переходить по ссылкам: faccessat(2), fchownat(2), fstatat(2), linkat(2), name_to_handle_at(2), open(2), openat(2), open_by_handle_at(2) и utimensat(2); подробности смотрите в их справочных страницах. Так как remove(3) является псевдонимом unlink(2), библиотечная функция также не переходит по символьным ссылкам. При указании символьной ссылки rmdir(2) вызов завершается с ошибкой ENOTDIR.

Вызов link(2) заслуживает отдельного описания. В POSIX.1-2001 говорится, что link(2) должен разыменовывать oldpath, если это символьная ссылка. Однако в Linux этого не делается (по умолчанию Solaris делается тоже самое, но в POSIX.1-2001 определяется как такое поведение можно получить с помощью специальных параметров компилятора). В POSIX.1-2008 изменено описание, которое позволяет реализовывать любое из этих вариантов поведения.

Команды, не выполняющие обход дерева файлов

За исключением, описанным далее, команды переходят по ссылкам, указанным в аргументах командной строки. Например, если slink — символьная ссылка, которая указывает на файл с именем afile, то команда cat slink выведет содержимое файла afile.

Важно понимать, что это правило учитывается командами, которые не обязательно выполняют обход дерева файлов; например, команда chown file следует этому правилу, а команда chown -R file, выполняющая обход дерева, нет (последняя описана далее).

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

Есть несколько исключений из этого правила:

* Команды mv(1) и rm(1) не переходят по символьным ссылкам, указанным в аргументах, а пытаются переименовать и удалить их (заметим, если символьная ссылка указывает на файл через относительный путь, то перемещение файла в другой каталог с большой вероятностью вызовет проблемы, так как путь может оказаться неправильным). * Команда ls(1) также является исключением из этого правила. Для совместимости со старыми системами (когда ls(1) не делает обход дерева, то есть не указан параметр -R), команда ls(1) переходит по символьным ссылкам, указанным в аргументах, если задан параметр -H или -L, или если не указан параметр -F, -d или -l (команда ls(1) — единственная команда, у которой параметры -H и -L влияют на поведение даже когда не выполняется обход дерева файлов). * Команда file(1) также является исключением из этого правила. По умолчанию file(1) не переходит по символьной ссылке, указанной в аргументе. Команда file(1) переходит по символьной ссылке, указанной в аргументе, если указан параметр -L.

Команды, выполняющие обход дерева файлов

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

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

Команда rm -r slink каталог удалит slink, а также все символьные ссылки, обнаруженные при обходе каталога, так как символьные ссылки могут быть удалены. Команда rm(1) никогда не удаляет файл, на который указывает slink.

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

При обходе дерева файлов командами соблюдаются (должны) определённые соглашения, если это возможно:

* Команду можно заставить перейти по любой символьной ссылке, указанной в командной строке, независимо от типа файла, на который она ссылаются, указав параметр -H (от «half-logical»). Этот параметр заставляет пространство имён командной строки выглядеть как логическое пространство имён (заметим, что команды, которые не всегда делают обход дерева файлов, будут игнорировать флаг -H, если также не указан флаг -R).

Например, команда chown -HR user slink выполнит обход файловой иерархии с корнем как у файла, указанном slink. Заметим, что здесь -H делает не тоже самое, что и флаг -h, описанный ранее. При флаге -H символьные ссылки, указанные в командной строке, будут разыменовываться и при обходе файлового дерева и как если бы пользователь указал имя файла, на которое указывает символьная ссылка.

* Команду можно заставить перейти по любой символьной ссылке, указанной в командной строке, а также по всем символьным ссылкам, встреченным при обходе, независимо от типа файла, на который она ссылается, указав параметр -H (от «half-logical»). Этот параметр заставляет всё пространство имён выглядеть как логическое пространство имён (заметим, что команды, которые не всегда делают обход дерева файлов, будут игнорировать флаг -L, если также не указан флаг -R).

Например, команда chown -LR user slink изменит владельца файла, на который указывает slink. Если slink указывает на каталог, то chown обойдёт дерево файлов с корнем в этом каталоге. Также, если символьные ссылки встречаются в любом файловом дереве, которое обходит chown, то с ними будет сделано тоже что и с slink.

* Команду можно заставить следовать поведению по умолчанию, указав флаг -P (от «physical»). Этот флаг предназначен для работы со всем пространством имён как с физическим пространством имён.

Команды, которые по умолчанию не выполняют обход дерева файлов, игнорируют флаги -H, -L и -P, если не указан флаг -R. Также вы можете указать параметры -H, -L и -P более одного раза; последний указанный параметр определяет поведение команды. Это позволяет создавать псевдонимы команд с некоторым поведением, а затем переопределять это поведение в командной строке.

У команд ls(1) и rm(1) есть исключения из этих правил:

* Команда rm(1) работает с символьными ссылками, а не с файлами, на который они ссылаются, и поэтому никогда не переходит по символьной ссылке. Команда rm(1) не поддерживает параметры -H, -L и -P. * Для совместимости со старыми системами работа команды ls(1) чуть отличается. Если не указан параметр -F, -d или -l, то ls(1) переходит по символьной ссылке, указанной в командной строке. Если указан флаг -L, то ls(1) переходит по всем символьным ссылкам независимо от их типа и где они встретились — в командной строке или при обходе дерева.

int symlink(const char * topath , const char * frompath );

ОПИСАНИЕ

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

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

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

Права доступа к символьной ссылке не используются; её владелец игнорируется при поиске по ссылке, но проверяется при удалении или переименовании ссылки, находящейся в каталоге с установленным sticky битом.

Если newpath существует, он не будет перезаписан.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


ОШИБКИ

EPERM Файловая система, содержащая pathname , не поддерживает создание символьных ссылок. EFAULT oldpath или newpath указывают за пределы доступного адресного пространства. EACCES Доступ для записи в каталог, содержащий newpath, не разрешен для эффектиного uid владельца процесса, или же один из каталогов, являющихся частью newpath, не допускает поиск. ENAMETOOLONG oldpath или newpath слишком длинны. ENOENT Одна из частей пути oldpath или newpath не существует или является «висячей» символьной ссылкой. ENOTDIR Компонент пути, использованный как каталог в oldpath или newpath , в действительности таковым не является. ENOMEM Ядру не хватило памяти. EROFS Файл находится на файловой системе, смонтированной только для чтения. EEXIST newpath уже существует. ELOOP newpath является зацикленной символьной ссылкой, то есть при подстановке возникает ссылка на неё саму. ENOSPC На устройстве, содержащем newpath , нет места для создания новой записи в каталоге. Это может произойти также, если исчерпана квота дискового пространства пользователя.

ЗАМЕЧАНИЯ

Удаление файла, на который ссылается символьная ссылка, действительно удалит файл (если только у него нет других жестких ссылок). Если такое поведение нежелательно, используйте link .

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL