Относительная ссылка на папку windows

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

Символические ссылки используются в Windows довольно часто для системных файлов и каталогов. Пользователь может их применять, когда нужно перенести часть “тяжелых” файлов на другой диск, но чтобы Windows считала, что файлы все еще находятся в исходном каталоге (например в ситуациях, когда нужно экономить место на SSD, перенеся некоторые каталоги на более медленный и емкий SSD, не нарушая работоспособности программ). Можно использовать симлинки на SMB файловом сервере, когда каталоги с разных LUN должны быть доступны через одну точку входа.

В Windows есть три типа файловых ссылок для NTFS томов: жесткие, мягкие (симлинки), точки соединения (Junction point).

  • Hard Links (жесткие ссылки) – могут указывать только на локальный файл, но не на папку. Такой файл – это ссылка на другой файла на этом же диске без фактического дублирования самого файла. У него отображается такой же размер и свойства, как у целевого файла (но реальное место на диске он не занимает);
  • Junction Points (Directory Hard Link, точка соединения) – могут указывать только на папку (на этом же или на другом разделе);
  • Symbolic Links (мягкая ссылка, симлинк) – могут указывать на локальный файл, папку и сетевой каталог на удаленном компьютере (UNC), поддерживаются относительные пути.

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

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

Для создания символических и жестких ссылок в Windows можно использовать встроенную утилиты mklink или PowerShell.

mklink утилита для создания симлинков в windows

Синтаксис у утилиты
mklink
простой. Чтобы создать символическую ссылку на файл, нужно указать имя ссылки и целевой объект, на который она должна указывать. Можно указать тип ссылки:
/D
— символьная (мягкая) ссылка на каталог,
/H
— жесткая ссылка,
/J
– точка соединения (Junction point).

Чтобы использовать mklinkдля создания символических ссылок нужно запустить командную строку с правами администратора. Иначе при запуске команды появится ошибка “
You do not have sufficient privilege to perform this operation
”.

Если вам нужно разрешить создавать символические ссылки обычным пользователям, нужно добавить группу пользователей в параметр групповой политики Create Symbolic Links (Computer configuration -> Window Settings -> Security settings -> User Rights Assignment в редакторе GPO). По умолчанию в этой политике добавлена только локальная группа «Administrators». Обновите локальные политики после изменения параметра: gpupdate /force

параметр групповой политики Create Symbolic Links

Создадим в каталоге C:\PS символическую ссылку на файл notepad.exe:

mklink C:\PS\note.exe c:\Windows\System32\notepad.exe

Должно появится сообщение:

symbolic link created for C:\PS\note.exe <<===>> c:\Windows\System32\notepad.exe

Теперь для запуска процесса notepad.exe можно использовать символическую ссылку note.exe.

Теперь создадим в этом каталоге симлинк на другой каталог на этом же диcке:

mklink /D “C:\PS\Downloads” “C:\Users\user\Downloads”

пример использования mklink для создание символьных ссылок в windows

Теперь при переходе в каталог C:\PS\Downloads вы будете видеть содержимое каталога, на который он ссылается.

символическая ссылка на каталог в windows

Выведем содержимое каталога C:\PS:

Dir c:\ps

Как вы видите, в атрибутах некоторых файлов указано, что это symlink/simlinkd. Также указан объект, на который они ссылаются. В Windows File Explorer симлинки отображаются с иконками ярлыков, а в их свойствах можно посмотреть целевой объект на который они ссылаются.

Dir вывести информацию о всех symlink в папке

Также можно создать символически ссылки в Windows 10 с помощью PowerShell (в этом примере я использую относительные пути, чтобы создать символическую ссылку):

New-Item -ItemType SymbolicLink -Path ".\test\tmpfiles" -Target "..\tmp\files"

создать SymbolicLink с помощью powershell

Можно создать символическую ссылку на сетевую папку на удаленном компьютере/сервере. Адрес сетевой папки нужно указывать в формате UNC. Следующий пример создаст симлинк на сетевой каталог на сервере:

mklink /D c:\ps\share \\mskfs01\Share

Например, подключим административную шару C$ с удаленного компьютера по IP адресу:

mklink /D c:\remotePC\server1 \\192.168.31.15\С$

Если при доступе к сетевой папке через симлинк, вы получили ошибку

The symbolic link cannot be followed because its type is disabled

проверьте разрешенные способы использования символических ссылок на вашем компьютере:

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.

fsutil behavior query SymlinkEvaluation

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

fsutil behavior set SymlinkEvaluation R2R:1
fsutil behavior set SymlinkEvaluation R2L:1

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

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

Del c:\ps\note.exe
RD c:\ps\downloads

Как найти и вывести все символические ссылки на диске?

В Windows нет простых инструментов для просмотра и управления всеми симлинками на диске.

Вы можете вывести список всех символических ссылок на диске с помощью команды:

dir /AL /S C:\ | find "SYMLINK"

  • /A
    – вывести файлы с атрибутом L (симлинк);
  • /S
    –выполнить команду рекурсивно для всех вложенных каталогов;
  • C:\
    — укажите имя диска, на котором нужно найти все символические ссылки (если вы не хотите сканировать весь диск, укажите путь к нужному каталогу)

вывести все симлинке на диске в windows

Также можно вывести список всех символических ссылок на диске с помощью PowerShell. Для этого нужно просканировать все каталоги и найти NTFS объекты с атрибутом ReparsePoint:

Get-ChildItem -Path C:\ -Force -Recurse -ErrorAction 'silentlycontinue' | Where { $_.Attributes -match "ReparsePoint"}

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

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

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

Вкратце

Форматы абсолютных путей

Форматы относительных путей

Запрещённые символы

Ограничения длины

Схемы путей Windows

В Windows существует три разных вида абсолютного пути и три разных типа относительного пути.

Абсолютные пути

Абсолютные, или полные пути — это завершённые пути, сами по себе уникальным образом идентифицирующие местоположение в файловой системе.

Пути к диску

Пути к диску — это старые добрые пути, которые мы знаем и любим, они состоят из буквы диска и последовательности папок.

D:\Doughnut preferences\With jam in

UNC-пути

UNC расшифровывается как Universal Naming Convention, это описание файлов, начинающееся с \\, часто используемое для ссылок на сетевые накопители. Первый сегмент после \\ — это хост, который может быть или сервером с именем, или IP-адресом:

\\Work\Hard
\\192.168.1.15\Hard

UNC-пути также можно использовать для доступа к локальным дискам:

\\localhost\C$\Users\Andrew Fletcher
\\127.0.0.1\C$\Users\Alan Wilder

Или с использованием имени компьютера:

\\Pipeline\C$\Users\Martin Gore

Символ $ в C$ обозначает скрытую административную общую папку; он не заменяет двоеточие рядом с именем диска :. Общие диски в стиле C$ — это просто удобные ярлыки, автоматически создаваемые Windows. Доступ к дискам через них возможен, только если вы вошли как администратор.

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

Пути к устройству

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

  • \\?\
  • \\.\

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

Синтаксис доступа к локальной папке выглядит как один из этих вариантов:

\\?\Z:\Animals\Cute
\\.\Z:\Animals\Cunning

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

\\?\Volume{59e01a55-88c5-411f-bf0b-92820bdb2548}\Animals\Cryptic

Здесь Volume{59e01a55-88c5-411e-bf0a-92820bdb2549} — это идентификатор дискового тома, на котором находится Z: в компьютере.

Также существует специальный синтаксис для описания UNC-путей как путей к устройству:

\\?\UNC\localhost\Z$\Animals\Curious

В путях к устройству часть, идущая после \\?\ или \\.\ — это имя, определённое во внутреннем пространстве имён Object Manager Windows. Те, кому любопытно исследовать это пространство имён, могут скачать инструмент WinObj и посмотреть.

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

Так в чём же разница между \\?\ и \\.\?

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

Путь \\?\ пропускает этот этап очистки, а \\.\ не пропускает. Поэтому можно назвать пути \\?\ литеральными путями к устройству, а \\.\нормализованными путями к устройству.

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

Относительные пути

Относительные пути — это неполные пути, которые для уникальной идентификации местоположения необходимо скомбинировать с другим путём.

Пути, относительные к текущей папке

Эти пути используют в качестве начальной точки текущую папку, например, .\Torquay относится к подпапке текущей папки, а ..\Wales относится к подпапке родителя текущей папки.

Папки, относительные к корню текущего диска

Если начать путь с одной \, то путь интерпретируется как относительный к корню текущего диска. Поэтому если вы находитесь в любом месте диска E: и введёте \Africa, то окажетесь в E:\Africa.

Когда доступ к текущей папке выполняется через UNC-путь, то путь, относительный к текущему диску, интерпретируется относительно к общей корневой папке, допустим \\Earth\Asia.

Пути, относительные к текущей папке диска

Эти более редко используемые пути указывают диск без обратной косой черты, например E:Kreuzberg, и интерпретируются относительно к текущей папке этого накопителя. На самом деле это имеет смысл только в контексте оболочки командной строки, отслеживающей текущую рабочую папку для каждого диска.

Это единственный тип путей, не поддерживаемый Fileside, потому что в нём нет понятия текущей папки каждого диска. Текущую папку имеют только панели.

Нормализация

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

  • Замена косых черт (/) на обратные косые черты (\)
  • Сворачивание повторяющихся разделителей в виде обратных косых черт в один
  • Резолвинг относительных путей заменой всех . или ..
  • Отсечение завершающих пробелов и точек

Таким образом, в общем случае можно указывать пути Windows при помощи косых черт.

Правила именования в Windows

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

Запрещённые символы

В имени нельзя использовать следующие символы:

< > " / \ | ? *

Также исключаются любые непечатаемые символы со значением ASCII меньше 32.

Хитрое двоеточие

В большинстве случаев : также запрещено.

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

Опасная точка

Символ . допустим внутри или в начале имени, но запрещён в конце.

Начинающие и завершающие пробелы

Любопытно, что Windows допускает пробелы в начале, но не в конце имён. Так как имя с пробелами в начале и конце часто выглядит похожим на имя без пробелов, обычно это ужасная идея, и при переименовании или создании файлов Fileside автоматически удаляет их.

Запрещённые имена

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

CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9.

Это включает и имена с расширениями. Например, если вы назовёте файл COM1.txt, то внутри он преобразуется в \\.\COM1\ и интерпретируется самой Windows как устройство. А это не то, что нам нужно.

Чувствительность к регистру

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

C:\Polish hamlet, c:\polish Hamlet, C:\Polish Hamlet и C:\POliSh hAMlET считаются абсолютно одинаковыми.

Однако с обновления Windows 10 за апрель 2018 года файловые системы NTFS имеют опцию включения чувствительности к регистру на уровне папок.

Ограничения длины

Мы ещё не закончили: ограничения есть и на длину.

Пути

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

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

Имена

Имена файлов и папок не могут быть длиннее 255 символов.

Так много способов сказать одно и то же

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

  • C:\CHAMELEON
  • c:\chameleon
  • C:\/\\//\\\///Chameleon
  • C:\Windows\..\Users\..\Chameleon
  • \\localhost\C$\Chameleon
  • \\127.0.0.1\C$\Chameleon
  • \\?\C:\Chameleon
  • \\.\C:\Chameleon
  • \\.\UNC\localhost\C$\Chameleon
  • \\?\Volume{59e01a55-88c5-411e-bf0a-92820bdb2549}\Chameleon
  • \\.\GLOBALROOT\Device\HarddiskVolume4\Chameleon
  • и так далее

Вот что получаешь, когда приходится обеспечивать полную обратную совместимость в течение нескольких десятилетий!

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

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

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

Что такое пути? 

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

Существует два типа путей:

  • Абсолютный путь. Полный и точный путь к файлу или каталогу из корневого каталога системы.
  • Относительный путь. Расположение файла или каталога относительно текущего рабочего каталога.

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

Что такое абсолютный путь?

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

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

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

Пример абсолютного пути

Абсолютный путь может записываться по-разному. Это зависит от операционной системы. Любой абсолютный путь начинается с корневого каталога. В Unix-подобных ОС он записывается в виде слеша (/), а в Windows – в виде буквы диска и обратного слеша (например, С:\).

Вот пример абсолютного пути в Linux:

/home/user/documents/file.txt

А вот так выглядит абсолютный путь в Windows:

C:\Users\User\Documents\file.txt

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

Что такое относительный путь?

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

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

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

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

  • Символ .. говорит о том, что файл расположен в родительском каталоге
  • Символ . говорит о том, что файл расположен в текущем каталоге

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

Пример относительного пути

Относительный путь записывается по-разному в зависимости от ОС. Например, в Linux для разделения каталогов используется слеш (/), а в Windows – обратный слеш (\).

Linux

Если ваш текущий рабочий каталог – это /home/user/documents, и вы хотите обратиться к файлу с именем file.txt, который находится в этом каталоге, относительный путь будет выглядеть вот так:

file.txt

Система будет искать указанный файл в текущем рабочем каталоге.

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

./reports/report.txt

Путь указывает ОС, что искать файл report.txt нужно в каталоге report текущего рабочего каталога.

Windows

Если в данный момент вы находитесь в каталоге C:\Users\John\Documents и хотите обратиться к файлу с именем document.txt, который расположен в текущем каталоге, то запишите следующий относительный путь:

.\document.txt

Этот путь указывает Windows, что искать файл document.txt необходимо в текущем рабочем каталоге, то есть C:\Users\John\Documents. Символ точки (.) обозначает текущий каталог. 

Если вы хотите обратиться к файлу invoice.pdf, который расположен в подкаталоге invoices текущего каталога, относительный путь будет выглядеть вот так:

.\invoices\invoice.pdf

Путь указывает системе, что искать файл invoice.pdf необходимо в каталоге invoices текущего рабочего каталога. Здесь символ обратного слеша (\) разделяет каталоги.

Абсолютные и относительные пути в Windows

Если речь идет о Windows, здесь для разделения каталогов в абсолютных и относительных путях используется обратный слеш (\). Абсолютный путь здесь начинается с буквы диска, двоеточий и обратного слеша (например, С:\).

Как найти абсолютный путь в Windows

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

Проводник (File Explorer)

1. Нажмите клавишу Windows и введите «Проводник». Откройте приложение, нажав Enter.

Opening the file explorer in Windows.

2. Перейдите туда, где расположен файл или каталог, абсолютный путь которого вы хотите найти.

3. После того, как вы окажетесь там, нажмите на адресную строку. Здесь отображается полный путь к текущему местоположению. Это и есть абсолютный путь:

Getting the absolute path in Windows explorer.

4. Или вы можете щелкнуть правой кнопкой мыши на файл, для которого хотите найти абсолютный путь, и выбрать «Свойства» (Properties).

Obtaining a file's properties to see its absolute path in Windows.

Окно свойств содержит расположение файла, то есть его абсолютный путь:

Командная строка (Command prompt)

1. Нажмите клавишу Windows и введите «Командная строка». Откройте приложение, нажав Enter.

Opening the command prompt.

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

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

cd

Getting the absolute path using the Command Prompt.

PowerShell

1. Нажмите клавишу Windows и введите «PowerShell». Откройте приложение, нажав Enter.

Opening Windows PowerShell.

2. Воспользуйтесь командой cd (Change-Location), чтобы перейти к каталогу, где содержится файл или каталог.

3. После того, как вы окажетесь в нужном каталоге, запустите командлет Get-Location, чтобы отобразить абсолютный путь текущего каталога.

Getting the absolute path using Windows PowerShell.

Абсолютные и относительные пути в Linux

Если речь идет о Linux, то здесь для разделения каталогов в абсолютных и относительных путях используются слеши (/). Любой абсолютный путь здесь начинается с корневого каталога (/). 

Ниже приведены инструкции, как найти абсолютный путь в Linux.

Как найти абсолютный путь в Linux

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

Команда pwd

1. Откройте терминал, нажав Ctrl+Alt+T.

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

3. Запустите команду pwd (print working directory). Отобразится абсолютный путь текущего каталога. 

pwd

Printing the working directory in Linux.

Команда realpath

1. Откройте терминал.

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

realpath [/path/to/file]

Например, 

Resolving a relative path in Linux.

Графический пользовательский интерфейс

Чтобы найти абсолютный путь файла в Linux вам понадобиться Проводник.

1. Найдите в Файлах (Files) тот файл, абсолютный путь которого вы хотите найти.

2. Щелкните по нему правой кнопкой мыши и выберите «Свойства» (Properties).

Viewing file properties in Linux GUI.

3. В окне свойств найдите строку «Корневая папка» (Parent folder), где и указан абсолютный путь к родительскому каталогу файла.

Obtaining a file's absolute path using GUI in Linux.

Как создать относительный путь?

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

Абсолютные пути к файлам (полный URL-адрес) используют теги HTML, например, <a> и <img>, и это логично, так как он указывает на URL-адрес файла в Интернете. А вот относительные пути указывают на файл относительно текущей страницы. Относительные пути начинаются с ./. Далее следует путь к локальному файлу.

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

Шаг 1. Убедитесь, что файл, на который вы хотите создать ссылку, и HTML-файл, с которым вы работаете, находятся на одном сервере. Неважно, разрабатываете ли вы веб-сайт онлайн или локально, файл, на который вы хотите создать ссылку, должен быть доступен.

Шаг 2. Чтобы создать относительный путь, путь к файлу должен быть записан относительно каталога, где расположен HTML-файл, с которым вы работаете. Представим, что вы хотите создать ссылку на файл с именем example.jpg, который располагается на текущей странице, а ваш локальный HTML-файл находится в каталоге web-development.

Шаг 3. Если относительно вашего HTML-файла файл example.jpg находится в подкаталоге images, то используйте символ ../, чтобы переместиться на один уровень каталога вверх. А затем укажите каталог images. В результате получится вот такой относительный путь:

<a href="../images/example.jpg"><img src="../images/example.jpg"></a>

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

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

Заключение

В этой статье мы выяснили, чем отличается абсолютный путь от относительного, а также продемонстрировали, как можно найти абсолютный путь к файлу или каталогу в Linux и Windows с помощью графического пользовательского интерфейса или командной строки. Кроме того, мы рассмотрели, как можно создать относительный путь, ведущий к URL-адресу файла в Интернете. 

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

В наших проектах мы постоянно работаем с файлами:

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

Но при этом в одних проектах мы пишем просто имя файла, например 'data.json', а в других — вот так: '/Users/mike/server/data.json'. Или в одном месте подключаем скрипт командой

<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>

а в другом — командой <script src="script.js"></script>

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

Абсолютный путь к файлу

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

В Windows всё начинается с диска — это может быть C:, D: или диск с любой другой буквой. Если на диске C: сделать папку Thecode, внутри неё — папку Media, а в Media положить файл «статья.txt», то абсолютный путь к этому файлу будет такой:

C:\Thecode\Media\статья.txt

Полный путь к файлу в Windows формируется так: Диск → все вложенные папки → имя файла. Обратите внимание — названия дисков, папок и файлов отделяются друг от друга обратной косой чертой.

C\Thecode\Media\статья.txt ← пропущено двоеточие после буквы диска.

C: Thecode Media статья.txt ← нет разделителей между названиями папок и файлов.

C:\Thecode\Media ← это путь к папке, но имя файла не указано.

В MacOS у дисков нет отдельной назначенной буквы, поэтому всё начинается с корневой папки /, внутри которой и находятся все остальные папки. 

Кстати, в MacOS, Linux и любой UNIX-подобной файловой системе все диски — это тоже папки. Например, когда мы делали скрипт для бэкапа, то флешка с названием WIN10_64 находилась по такому адресу: /Volumes/WIN10_64. А всё потому, что все новые диски по умолчанию подключаются как папки внутри папки /Volumes.

Ещё одно отличие MacOS и Linux в том, что вместо обратной косой черты используется просто косая черта, у которой наклон в другую сторону: /. Всё остальное работает по тому же принципу: в абсолютном пути мы собираем все папки, которые нужно пройти, начиная с корня.

Например, если у нас есть в документах папка Notes, внутри которой лежит markdown-файл с задачами на день tasks.md, то полный путь к нему будет в MacOS выглядеть так:

/Users/mike/Documents/Notes/tasks.md

Что такое абсолютный и относительный путь к файлу

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

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

Относительный путь к файлу

Относительный путь — это путь к файлу относительно текущего каталога. Текущий каталог — это тот, в котором запускается скрипт, программа или открывается страница в браузере.

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

/Users/mike/Documents/Notes/index.html
/Users/mike/Documents/Notes/style.css
/Users/mike/Documents/Notes/script.js

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

index.html
style.css
script.js

Когда браузер встретит такой путь, он возьмёт путь к каталогу, где лежит страница, и в нём будет искать эти файлы. А если нам понадобится файл data.json из папки Documents, которая лежит уровнем выше, то мы можем обратиться к нему так: 

../data.json

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

Что такое абсолютный и относительный путь к файлу

Вам может быть интересно:

Когда что использовать

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

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

Художник:

Даня Берковский

Вёрстка:

Кирилл Климентьев

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Жесткие ссылки (HardLink)

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

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

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

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

mklink /H C:\Folder1\LinkFileName C:\Folder\FileName

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

windows-hardlink-and-symlink-001.png

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

New-Item -ItemType HardLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName

Команда другая, но принцип тот же самый: -ItemType — тип создаваемой ссылки, в нашем случае жесткая ссылка, -Path — путь к создаваемому файлу ссылки, -Target — файл на который мы делаем ссылку.

windows-hardlink-and-symlink-002.png

Можно ли сделать жесткую ссылку на директорию? Нет, только на файлы.

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

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

windows-hardlink-and-symlink-003.png

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

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

Точки соединения (Junction)

Очень старая технология, поддерживаемая еще начиная с Windows 2000, позволяет сделать один из каталогов псевдонимом другого каталога. Чем-то напоминает символические ссылки, но в крайне упрощенном варианте. В качестве цели можно использовать только локальные папки, но при этом нет ограничения по размещению их на одном томе. Т.е. целевая папка может находиться на диске C:, а точка соединения для нее на диске D: и все будет работать. Точки соединения поддерживаются файловыми системами NTFS и ReFS.

Для создания точки соединения можно использовать mklink:

mklink /J D:\LinkFolder C:\Folder

Ключ /J указывает на создание точки соединения, далее следует папка каталога-псевдонима и папка целевого каталога. При любом изменении целевого каталога (перемещение, переименование, удаление) точка соединения перестает работать.

Обратите внимание, что данная папка в проводнике отображается как ярлык, а выводе команды dir как точка соединения.

windows-hardlink-and-symlink-004.png

Это же действие в PowerShell:

New-Item -ItemType Junction -Path D:\LinkFolder -Target C:\Folder

Комментировать здесь особо нечего, краткость не входит в число добродетелей PowerShell, но не оставляет места догадкам, все просто и понятно.

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

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

Пожалуй, самый популярный вид связи, позволяет создавать множество псевдонимов для файлов или каталогов размещая их на любых поддерживаемых локальных файловых системах. В качестве цели могут быть использованы как локальные, так и сетевые объекты. При создании символической ссылки можно использовать как абсолютные, так и относительные пути. Но в последнем случае вы не можете перемещать ссылку — она перестанет работать. Символические ссылки поддерживаются начиная с NT 6.0 (Vista и Server 2008) и работают с файловыми системами NTFS и ReFS.

Для создания символических ссылок можно использовать mklink, без параметров она создает симлинк для файла:

mklink  C:\Folder1\LinkFileName C:\Folder\FileName

При создании ссылки не забываем указать расширения для файла. Как и в случае с точкой соединения символическая ссылка отображается в виде ярлыка и обозначается в выводе команды dir:

windows-hardlink-and-symlink-005.png

Для создания символической ссылки на директорию добавьте ключ /D:

mklink /D D:\LinkFolder C:\Folder

В PowerShell все проще, тип объекта будет определен автоматически:

New-Item -ItemType SymbolicLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName

Если в качестве цели указан файл — будет создана ссылка на файл, каталог — ссылка на каталог.

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

windows-hardlink-and-symlink-006.png

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как зайти под правами администратора windows xp
  • Программа для скачивания windows с официального сайта
  • Windows 2003 pe native
  • Служба windows search как включить
  • Установочный диск windows 10 что это