Включить собственные символические ссылки NTFS для Cygwin
последние NTFS и Windows реализуют символические ссылки:
-
точка соединения NTFS может использоваться в качестве символической ссылки каталога с NTFS 3.0 (Windows 2000) с помощью
linkdилиjunctionинструменты. - символическая ссылка NTFS также может использоваться в качестве символической ссылки (как для файла, так и для каталога) с Windows Vista с помощью .
но на Cygwin 1.7 (установлен на Windows 7),ln -s создает текстовый файл.
on В Cygwin:
$ ln -s -v target mylink
`mylink' -> `target'
на MinGW (или ваш любимый редактор):
$ cat mylink
!<symlink>ÿþt a r g e t
можно ли сказать Cygwing использовать точка соединения NTFS или символическая ссылка NTFS?
другой вопрос: это доступно на MinGW?
4 ответов
короткий ответ:
определить переменную окружения:
CYGWIN=winsymlinks:nativestrict
как указал mwm возможно, вам придется работать Баш от имени администратора.
ответ
символические ссылки Cygwin по умолчанию - это обычные файлы
по умолчанию Cygwin создает текстовые файлы в качестве обходного пути для ошибки символической ссылки Windows. Эти файлы на самом деле не ссылки. Почти все Программы Windows не рассматривают эти файлы как символические ссылки.
собственные символические ссылки доступны в последних версиях Windows
последние NTFS и Windows реализуют символические ссылки:
-
точка соединения NTFS можно использовать как симлинк каталога
начиная с NTFS 3.0 (Windows 2000) с помощью
linkdилиjunctionинструменты. - символическая ссылка NTFS также может использоваться в качестве символической ссылки (как для файла, так и для каталога) с Windows Vista используя .
Cygwin может создавать собственные NTFS символические ссылки
упрощенный экстракт документация Cygwin:
символические ссылки
[...]
Cygwin создает символические ссылки потенциально несколькими различными способами:
символические ссылки по умолчанию-это простые файлы, содержащие волшебный cookie затем путь к которой точки связи. [...]
символические ссылки стиля ярлыка-Windows
.lnk[...] создан если переменная среды CYGWIN [...] может содержать строкаwinsymlinksилиwinsymlinks:lnk. [...]собственные символические ссылки Windows создаются только в Windows Vista / 2008 и более поздних версиях, и только на файловых системах, поддерживающих точки повторного разбора. Из-за их странных ограничений и поведения они только создаются если пользователь явно запросы на их создание. Это делается путем установки переменной среды CYGWIN чтобы содержать строку
winsymlinks:nativeилиwinsymlinks:nativestrict. [...]в файловой системе NFS Cygwin всегда создает реальные символические ссылки NFS.
Настройка Cygwin
Cygwin руководство пользователя представлена переменной CYGWIN и вариант winsymlinks:
на
CYGWINпеременная окружения используется для настройка многих глобальных параметров [...]. Он содержит перечисленные ниже параметры, разделенные пустыми символами. [...]
- [...]
- [...]
- [...]
- [...]
winsymlinks:{lnk,native,nativestrict}- если указано толькоwinsymlinksилиwinsymlinks:lnk, Cygwin создает символические ссылки как сочетания клавиш Windows с помощью специального headerand Р/О набор атрибутов., если значение
winsymlinks:nativeилиwinsymlinks:nativestrict, Cygwin создает символические ссылки как родной Windows ссылки на файловые системы и версии ОС, поддерживающие их. Если ОС не поддерживает собственные символические ссылки (Windows XP, Windows Server 2003), предупреждающее сообщение производится один раз за сеанс.разницу между
winsymlinks:nativeиwinsymlinks:nativestrictэто: если файловая система поддерживает native симлинки и Cygwin не удается создать собственное ссылку почему-то, он вернется на создание под Cygwin симлинки по умолчаниюwinsymlinks:native, а сwinsymlinks:nativestrictэтотsymlink(2)системный вызов будет немедленно выполнена.
CYGWIN=winsymlinks:native
всегда создает ссылку, но использует запасной вариант Cygwin, когда target не существует
на Cygwin:
$ export CYGWIN="winsymlinks:native"
$ ln -s -v target mylink
`mylink' -> `target'
$ echo content > target
на MinGW:
$ cat mylink
content
люди, использующие программы Windows и Cygwin, могут иметь проблемы, когда символическая ссылка создается как фиктивный файл (Cygwin fallback, когда цель отсутствует)...
CYGWIN=winsymlinks:nativestrict
всегда использует native-Windows symlink, но терпит неудачу, когда target не существует
на Cygwin:
$ export CYGWIN="winsymlinks:nativestrict"
$ rm -f a b
$ ln -sv a b
ln: failed to create symbolic link `b': No such file or directory
$ touch b
$ ln -sv a b
ln: failed to create symbolic link `b': File exists
$ rm b
$ touch a
$ ln -sv a b
`b' -> `a'
, потому что nativestrict требует, чтобы цель существовала до создания символической ссылки, некоторые команды / скрипты могут завершиться неудачей при создании ссылки.
Примечание: только администраторы имеют возможность создавать собственные символические ссылки NT поэтому под Windows UAC эмулятор терминала Cygwin (mintty) должен выполняться с повышенными привилегиями (щелкните правой кнопкой мыши ярлык и выберите Запуск от имени администратора или установите свойство mintty shortcut,дополнительно → Запуск от имени администратора).
принятый ответ правильный, две маленькие Примечания.
если вы заботитесь только о символических ссылках, которые вы создаете сами в командной строке, установите , Он включает в себя winln команда, которая имеет тот же синтаксис, что и ln, но создает собственные ссылки Windows. Создайте псевдоним:alias ln=winln (работает только в интерактивной оболочке), или даже заменить С winln (работает и в скриптах оболочки) - но он может быть перезаписан в следующий раз coreutils пакет усовершенствованный.
я только узнал, что можно использовать родные символические ссылки, когда я уже установил Cygwin, и добавил некоторые символические ссылки сам. После того, как я поставил CYGWIN=winsymlinks:native как моя системная переменная среды, я хотел преобразовать все существующие неродные ссылки в native. Вот что я сделал.
на всякий случай сначала создайте резервную копию всего каталога Cygwin.
найдите все символические ссылки и сохраните список в /links файл:
cd /; find . -regextype egrep -regex './(dev|proc|mnt|cygdrive)' -prune -o -type l -print >links
комментарий links.
Создать tar архив со всеми ссылками: tar c --files-from=links >links.tar
извлечь tar архив: tar x --files-from=links <links.tar
С родной симлинки сейчас включен, ТАР будет перезаписывать старые симлинки по Cygwin с родной симлинки.
очистить: rm -f links links.tar
С. П. Сначала я использовал CYGWIN=winsymlinks:nativestrict, но потом я узнал, что в этом режиме ln -s target link, если не target не существует. Напротив,native создаст Cygwin (неродным) симлинк link указывая на несуществующий target - это соответствует поведению ln в системах UNIX. В редких случаях, nativestrict может сломать некоторые программы или скрипты, например Gentoo run-crons скрипт использует файл блокировки, который является символической ссылкой, указывающей на PID запущенного процесса. В nativestrict mode скрипт перестал работать, потому что он больше не мог создавать файл блокировки. Примечание:run-crons является crontab вспомогательный скрипт на Gentoo Linux, добавив поддержку cron.{hourly,daily,weekly,monthly}/ Дирс это очень хорошо работает с Cygwin.
Так как ответ @olibre не работал для меня. Я только что создал функцию оболочки.
: '
mklink - Create NTFS (Windows) links that is usable by Windows and Cygwin
Usage: mklink [/D | /H | /J] <link-path> <target-path>
Options:
/D Directory Symbolic Link
/H Hardlink
/J Directory Junction (you should prefer /D)
With no options, it creates a NTFS file symlink.
'
mklink () {
if [ "$#" -ge "3" ]; then
cmd /c mklink "" "$(cygpath --windows --absolute "")" "$(cygpath --windows --absolute "")"
else
cmd /c mklink "$(cygpath --windows --absolute "")" "$(cygpath --windows --absolute "")"
fi
}
обратите внимание, что вам нужны разрешения администратора (для Cygwin) для запуска выше без проблем.
обратите внимание, что я не знаю, есть ли разница между символической ссылкой на абсолютный путь и символической ссылкой на относительный путь с помощью CMD mklink. На Linux, эти 2 разные модели поведения, если вы вдруг решили переместить ссылку или переместить файл, или переместить оба.
вы, вероятно, искали способ добраться до другого места назначения в дереве каталога с помощью MSYS. Есть способ. Вы должны создать сценарий оболочки ("*.SH " файл), который содержит строку:
cd "/drive_letter/SubCatalogue/SubFolder/..."