Включить собственные символические ссылки 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/..."