Как создавать символические ссылки (Symlinks) в системе Windows

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

СПРАВКА, или что такое ссылка для Windows?

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

Если вы перешли на современную платформу со времён ещё Windows XP, вы можете вспомнить, что все пользовательские данные тогда хранились в одной только папке – C:\Documents and Settings. Она была отправной точкой для остальных папок и файлов. Со времён Vista базовых папок стало две: С:\Пользователи (данные программ и настроек для конкретной учётной записи) и C:\ProgramData (данные для всей системы  в целом, которые разделяли все установленные в Windows Vista/7 программы и приложения: и встроенные и со стороны). Однако, с целью обеспечения обратной совместимости с приложениями для предыдущих поколений Windows, папку C:\Documents and Settings … решили пока оставить. Вот так: физически её давно уже не существует, однако в проводнике она отображена. И успешно содержит в себе две указанные выше папки нового поколения Windows. Если не очень заняты, полюбопытствуйте прямо сейчас, обратив внимание на само содержимое папок:

А вот она в Windows 7:

загляните внутрь папки Documents and Settings: ничего не замечаете?

А в Windows 10 этой папки нет? Вскроем скрытые файлы и папки:

Да нет, всё на месте:

Обратите внимание на Cвойства папки. Если вы не проводили дополнительный операций с разрешениями для папок и файлов, папку Documents and Setting вы вообще не сможете открыть. И всё по той же причине: её просто не существует, но “старым” службам и программам она необходима по определению. Так, Windows сохранила в своё время за пользователями право использовать устаревшие, но привычные (и, тем более, оплаченные по лицензии) программы. Особенно это касается пакета Microsoft Office. А та, как вы уже поняли, без папки обойтись не могла. Кстати, в этих фактах и кроется небольшая для первооткрывающих ссылки загадка: создаются они в основном для системных нужд. Вообще, все символьные ссылки в Windows делятся на две условные категории: системные связи и связи конечного пользователя. При этом по умолчанию символьные ссылки система для нас с вами не создаёт.

Читайте также:  Запуск командной строки/ программы от имени SYSTEM в Windows

Вы можете создавать символические ссылки, используя команду mklink в окне командной строки в качестве администратора. Чтобы открыть её, найдите ярлык «Командная строка» в меню «Пуск», щелкните его правой кнопкой мыши и выберите «Запуск от имени администратора».

В Windows Creators Update вы можете использовать обычное окно командной строки, не запуская его как администратор. Однако, чтобы сделать это без окна командной строки администратора, вы должны сначала включить режим разработчика в Параметры → Обновление и безопасность → Разработчики.

Без каких-либо дополнительных опций mklink создает символическую ссылку на файл. Команда ниже создает символическую или «мягкую» ссылку (Link) на объект Target:

mklink Link Target

Используйте /D, если вы хотите создать символическую ссылку, указывающую на каталог:

mklink /D Link Target

Используйте /H, если вы хотите создать жесткую ссылку, указывающую на файл:

mklink /H Link Target

Используйте /J для создания жесткой ссылки, указывающую на каталог:

mklink /J Link Target

Так, например, если вы хотите создать жесткую ссылку в C:\LinkToFolder, которая указывала бы на C:\Users\Name\OriginalFolder, вы должны выполнить следующую команду:

mklink /J C:\LinkToFolder C:\Users\Name\OriginalFolder

Вам нужно будет помещать в кавычки пути с пробелами. Например, если папка называется C:\Link To Folder и C:\Users\Name\Original Folder, вы должны использовать следующую команду:

mklink /J «C:\Link To Folder» «C:\Users\Name\Original Folder»

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

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

Как сравнить два текстовых файла? ответ

diff файл_1 файл_2 или diff -a файл_1 файл_2

Как посчитать количество строк в текстовом файле? ответ

wc -l имя_файла

или awk ‘END {print NR}’ имя_файла

а можно открыть файл в текстовом редакторе vi имя_файла и посмотреть кол-во строк CTRL+G

Как вывести на экран отсортированные строки текстового файла? ответ

sort имя_файла

Как удалить дубли строк из файла? ответ

sort -u имя_файла

или sort имя_файла | uniq

Как дописать содержимое одного текстового файла в конец второго? ответ

cat файл_1 >> файл_2

Как разбить текстовый файл на несколько по 100 строк в каждом? ответ

split -l 100 имя_файла 100-

в результате работы этой команды в директории появятся файлы 100-aa, 100-ab… содержащие по 100 строк из исходного файла. Если исходный файл содержал число строк не кратное 100, то в последнем файле будет меньше ста строк.

Как вывести на экран первые 30 строк файла? ответ

head -n30 имя_файла

Как вывести на экран последние 30 строк файла? ответ

tail -n30 имя_файла

Как посмотреть содержимое текстового файла? ответ

cat имя_файла — вывести файл на экран целиком

more имя_файла — выводить файл на экран постранично (пробел — перейти к следующей странице, enter — на строку вниз)

less имя_файла — выводить файл на экран с возможностью перемещаться по нему вверх и вниз

Читайте также:  Сравнение магазинов приложений для Linux: какой из них вам подходит?

vi имя_файла или nano имя_файла или emacs имя_файла — открыть файл в любимом текстовом редакторе

Как вывести на экран строки текстового файла /tmp/ начинающиеся со слова ‘START’? ответ

sed -n ‘/%[email protected]~*!G4;:%#`START/ p’ имя_файла

grep ‘%[email protected]~*!G4;:%#`START’ имя_файла

Как вывести на экран содержимое текстового файла без однострочных комментариев (строка комментария начинается с символа #)? ответ

sed -n ‘/%[email protected]~*!G4;:%#`[%[email protected]~*!G4;:%#`#]/ p’ имя_файла

grep -v ‘%[email protected]~*!G4;:%#`#’ имя_файла

Как среди нескольких файлов в директории найти те, которые содержат слово ‘test’? ответ

grep ‘test’ * — поиск во всех файлах в текущей директории

grep ‘test’ файл_1 файл_2 файл_3 — поиск только в указанных файлах

Что нужно помнить о символических ссылках

Символические ссылки иногда могут сбивать с толку, поэтому следует помнить о нескольких вещах.

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

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

У меня есть файл в newdir / test_dir. Имеет следующие атрибуты:

-rw-r—r— 1 abhishek abhishek 163 Apr 13 15:07 newdir/test_dir/

Теперь я создам мягкую ссылку на этот файл в моем текущем каталоге:

ln -s newdir/test_dir/ link_prog

Вот атрибуты вновь созданной ссылки:

lrwxrwxrwx 1 abhishek abhishek 23 Jul 2 08:51 link_prog -> newdir/test_dir/

Заметьте l (это L, а не один) в начале строки? Если вы знакомы с правами доступа к файлам в Linux , вы должны знать, что «l» означает ссылку и, следовательно, говорит, что этот файл на самом деле является ссылкой. Давайте обновим вашу память, — означает файл, а d означает каталог.

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

touch link_prog ls -l newdir/test_dir/ -rw-r—r— 1 abhishek abhishek 163 Jul 2 10:04 newdir/test_dir/

Это ссылка на файл или каталог? Вы можете не знать!

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

Вы можете создавать ссылки на несуществующий файл или каталог

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

Вы получите ошибку только при попытке получить доступ к целевому файлу, либо по ссылке, либо самостоятельно. Команда ls все равно будет работать.

ln -s non_existant_dir link_dir less link_dir link_dir: No such file or directory

Символические ссылки создаются с разрешения 777, но это ничего не значит

Заметили ли вы разрешение файла на символическую ссылку? Символические ссылки всегда создаются с разрешением 777 (rwxrwxrwx). Для обычного файла это будет означать, что любой может получить доступ к файлу. Но это не относится к ссылкам.

lrwxrwxrwx 1 abhishek abhishek 23 Jul 2 08:51 link_prog -> newdir/test_dir/

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

Читайте также:  Обновление до Kubuntu 20.04 с Kubuntu 18.04

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

Вы можете сослаться на ссылку ссылки или символическую ссылку

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

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

.. Parent Directory

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

cd ..

.. Parent Directory

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

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

cd ../gc_help

.. Parent Directory

Работа с текстом

  1. Ctrl + A / Ctrl + E

    Клавиши быстрого перехода в начало (А) и конец (E) строки.

  2. Ctrl + Shift + C / Ctrl + Shift + V

    Это сочетание клавиш в Linux позволит быстро скопировать (C) и вставить (V) текст в терминале.

  3. more / less

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

  4. head / tail

    Пара дополняющих друг друга команд для просмотра на одном экране начала и конца текста. Команда head выдаёт 10 (по умолчанию) первых строк текста, tail — последних. Число строк в обоих случаях меняется с помощью аргумента -n. Оператор -f позволяет отслеживать на экране изменения в файле. Чтобы лог (журнал) файла отображался в режиме реального времени, ввести команду:

    tail –nf,

    Для отслеживания логов нескольких файлов применяется модификация команды — multitail.

  5. grep

    (Global Regular Expression and Print). Ищет текст по заданному шаблону. Это очень полезно, когда надо проанализировать работу команды, которая сопровождается большим объёмом текстовой информации. Шаблон может заполняться строкой или регулярным выражением. Пример:

    alias старое_название новое_название

  6. sort

    Сортировка текстовой информации по заданным показателям. Дополнительные переменные позволяют:

  • -n ­— сортировать строки текста по числовому значению;
  • du ­— по размеру;
  • -r ­— применять обратную сортировку;
  • -u ­— удалять дубликаты при сортировке.
  1. wc

    (Word Count). Программа для подсчета заданных параметров в тексте. Считает такие показатели, как символы, слова, строки и байты.

  2. diff

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

    diff файл_№1 файл_№2

    Различия между двумя версиями файлов отмечают такие символы, как:

  • c — изменённые строки;
  • d — удалённые строки;
  • а —новые строки.