Для тех, кто использует Cygwin 1.7.34 или выше, используйте методы, описанные в других сообщениях, но не забудьте удалить # перед db_home:тем, как убрать кавычки и заставить его работать.
Maieul
Ответы:
180
Начиная с Cygwin 1.7.34 , рекомендуемый способ сделать это - добавить пользовательский db_homeпараметр в /etc/nsswitch.conf. Обычно при этом желают сделать ваш домашний каталог Cygwin равным каталогу вашего профиля пользователя Windows. Этот параметр сделает это:
db_home: windows
Или, что то же самое:
db_home: /%H
Вам нужно использовать последнюю форму, если вы хотите внести какие-то изменения в эту схему, например, чтобы разделить ваши домашние файлы Cygwin в подкаталог каталога вашего профиля пользователя Windows:
db_home: /%H/cygwin
Есть несколько других альтернативных схем для этой windowsопции, а также несколько других %токенов, которые вы можете использовать вместо %Hнее или в дополнение к ней. См в nsswitch.confописании синтаксиса в User Guide Cygwin для деталей.
Если вы установили Cygwin до версии 1.7.34 или запустили его mkpasswdутилиту, чтобы у вас был /etc/passwdфайл, вы можете изменить домашний каталог Cygwin, отредактировав запись вашего пользователя в этом файле. Ваш домашний каталог - это предпоследний элемент в строке вашего пользователя в /etc/passwd.¹
Каким бы способом вы это ни сделали, HOMEпри запуске оболочки будет установлена переменная среды .²
Хотя это можно просто установить %HOME%через панель управления, официально это не рекомендуется . Он не только бесцеремонно отменяет вышеуказанные механизмы, но и не всегда работает, например, при запуске сценариев оболочки через cron.
Обратите внимание: если вы установили оболочку Git bash с git-scm.com/download/win , у вас могут возникнуть проблемы с установкой cygwin (в зависимости от того, какие параметры вы выбрали). Мой cygwin ~ оказался в моем пользовательском каталоге Win7 и sshне работал правильно, пока не отредактировал, /etc/passwdкак описано.
Аллан
Проблемы, упомянутые здесь @Allan с установками git, решаются путем установки переменной среды Windows для HOME и последующего воссоздания /etc/passwdфайла. Смотрите мой ответ здесь, чтобы избежать таких проблем.
Christopher
11
db_home: /%Hможет разрешаться для имени пользователя домена (вместо имени локального пользователя), что может быть не тем, что вы хотели бы иметь. db_home: /cygdrive/c/Users/%Uсделал то, что хотел.
Абдул
2
Я вижу разницу в производительности между различными методами. Когда я использую db_home: windows, shзапуск занимает от 2,5 до 3,5 секунд. Когда я использую db_home: /cygdrive/c/Users/%U, shзапуск занимает от 0,9 до 1,0 секунды. Когда я удаляю db_homeстроку или жестко записываю ее в домашний каталог Windows, shзапуск занимает от 0,2 до 0,3 секунды. Я использую жестко запрограммированное решение, например db_home: /cygdrive/c/Users/susam, потому что я часто запускаю сценарии оболочки из командной строки с помощью shкоманды, например, sh foo.shи становится неудобно ждать более 2 секунд.
Susam Pal
1
Спасибо @abdull, db_home: / cygdrive / c / Users /% U - это то, что мне было нужно. db_home: windows использует "/ home /% U", которого нет в моей конфигурации.
Джефф
74
Cygwin 1.7.34+
Для тех, кто использует Cygwin 1.7.34 или выше, Cygwin поддерживает настройку получения домашнего каталога, оболочки входа и информации gecos в /etc/nsswitch.conf. Это подробно описано в разделе руководства пользователя Cygwin:
Если вы ранее создали файл /etc/passwdили, /etc/groupвы захотите удалить его и настроить Cygwin с использованием новой модели безопасности Windows для сопоставлений POSIX.
Настройка /etc/nsswitch.confфайла db_home:определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию для db_home:IS
db_home: /home/%U
Поэтому по умолчанию Cygwin просто устанавливает домашний каталог в /home/$USERNAME. Вы можете изменить это, указав любой другой путь по вашему желанию. Поддерживаемые подстановочные знаки:
%u Имя пользователя Cygwin (строчная буква u).
%U Имя пользователя Windows (буква U в верхнем регистре).
%D Домен Windows в стиле NetBIOS.
%HДомашний каталог Windows в стиле POSIX. Обратите внимание, что для db_home:параметра это имеет смысл только сразу после предыдущей косой черты, как вdb_home: /%H/cygwin
%_Поскольку для разделения схем используются пробелы и символы TAB, пробел в имени файла должен быть указан как %_(подчеркивание).
%% Процентный символ.
Вместо пути можно указать одну из четырех заранее определенных схем именованных путей.
windowsДомашний каталог пользователя устанавливается в тот же каталог, который используется в качестве домашнего каталога Windows, обычно что-то вроде %USERPROFILE%или C:\Users\$USERNAME. Конечно, каталог Windows конвертируется в стиль POSIX Cygwin.
cygwinТолько AD: для домашнего каталога пользователя задан путь POSIX, указанный в атрибуте cygwinHome из вспомогательного класса cygwinUser. См. Также раздел «Схема cygwin» .
unixТолько AD: для домашнего каталога пользователя задан путь POSIX, указанный в атрибуте unixHomeDirectory из вспомогательного класса posixAccount. См. Также раздел «Схема unix» .
descДомашний каталог пользователя устанавливается на путь POSIX, указанный в настройке home = "...", подобной XML, в атрибуте описания пользователя в SAM или AD. См. Подробное описание в разделе «Схема desc».
Следующее сделает домашний каталог пользователя в Cygwin таким же, какой используется для домашнего каталога Windows.
db_home: windows
Cygwin 1.7.33 или более ранняя
Для тех , кто использует Cygwin 1.7.33 или более ранней версии, обновление до последней версии Cygwin и удалить ранее использовались /etc/passwdи /etc/groupфайлы, а затем просмотрите описанные выше действия.
В противном случае выполните эти более старые шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
Откройте систему на панели управления
На вкладке Advanced щелкните Environment Variables (внизу).
В области «Пользовательские переменные» нажмите «Создать…»
В поле Имя переменной введите HOME
Для значения переменной введите %USERPROFILE%
Нажмите OK во всех открытых диалоговых окнах, чтобы применить этот новый параметр.
Теперь мы собираемся обновить /etc/passwdфайл Cygwin %HOME%только что созданной переменной Windows . Входы в оболочку и удаленные входы через них sshбудут полагаться на то, /etc/passwdчтобы сообщить им местоположение пути пользователя $HOME.
-dПереключатель указывает mkpasswd включать пользователей Домена, в то время как -lэто только выходные МЕСТНЫХ пользователей машины. Это важно, если вы используете ПК на работе, на котором информация о пользователе получается из контроллера домена Windows.
Теперь вы можете сделать то же самое для групп, хотя в этом нет необходимости, если только вы не будете использовать компьютер, который является частью домена Windows. Cygwin считывает информацию о группах из баз данных учетных записей Windows, но вы можете добавить /etc/groupфайл, если ваш компьютер часто отключается от контроллера домена.
Теперь выйдите из Cygwin и снова запустите его. Вы должны обнаружить, что ваш путь HOME указывает на то же место, что и ваш профиль пользователя Windows, т.е./cygdrive/c/Users/username
Бен прав, вы можете просто добавить запись для текущего пользователя, указав вместо этого -c. Если вы это сделаете, Cygwin отобразит ????? для пользователя и группы при перечислении файлов в общих файловых системах, так как в нем не будет записей для других пользователей и групп в вашем домене или локальном компьютере.
Кристофер
1
Могу ли я предложить небольшое изменение формулировки: вместо «Теперь обновите файл Cygwin / etc / passwd с новым путем $ HOME» я бы предложил: «Теперь мы собираемся обновить файл Cygwin / etc / passwd с помощью Переменная HOME, которую мы только что создали. Большое спасибо
Роберт
С -d Для завершения требуется несколько минут (я убил через 5) минут. Итак, я повторил попытку с -c. Все хорошо для моих нужд.
bartosz.r
1
@Samuel Я добавил объяснение, чтобы прояснить цель mkgroupвышеизложенного.
Кристофер
30
Я сделал довольно простое. Я не хотел менять переменную среды Windows 7. Поэтому я напрямую отредактировал файл Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Это просто запускает локальную оболочку с этим домашним каталогом; это то, что я хотел. Я не собираюсь получать к нему удаленный доступ, поэтому у меня это сработало.
Во-вторых, я не могу изменить переменную домашней среды на своей машине разработчика.
Deqing
@WernerCD Я бы просто предупредил, что это может иметь непредвиденные последствия при взаимодействии с собственными приложениями Windows. Ваши приложения Windows будут продолжать искать ДОМ в старом месте. Примером может служить Gvim, который будет поддерживать отдельную конфигурацию vim в старом %HOME%расположении Windows , в то время как Cygwin vim использует новый $HOMEпуть, который вы объявили.
Кристофер
Это здорово ... 5 лет спустя, и мне это нравится, потому что "инженерия" достаточно проста для использования и понимания новичком Cygwin (вроде меня). Между прочим, размещение ярлыка для вашего .bat-файла в C: \ Users \ <your_user_name> \ AppData \ Roaming \ Microsoft \ Windows \ SendTo означает, что вы можете выбрать Отправить -> Cygwin в контекстно-зависимом меню (щелчок правой кнопкой мыши) в Проводник (и откройте терминал где угодно, используя ~ /, где хотите).
Майк грызун
19
Cygwin mountтеперь поддерживает метод привязки, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку /etc/fstab, а затем перезапустить оболочку:
В настоящее время это правильный путь. Остальные ответы устарели.
ceve
@ceving Это где-нибудь задокументировано?
Асад Саидуддин
10
Измените переменную среды HOME.
в XP щелкните правой кнопкой мыши Мой компьютер >> Свойства >> Дополнительно >> Переменные среды >> Пользовательские переменные для >> [выберите переменную HOME] >> изменить
Это также изменит переменную среды HOME для всех ваших приложений Windows.
моб
Совершенно верно. Но какие у вас есть приложения Windows, которые используют переменную HOME? У меня есть EmacsW32 и .... Cygwin. Поскольку я сначала установил Emacs, там же находится и мой дом cygwin.
Майкл Паулуконис,
1
Не будет ли это как-то конфликтовать с / etc / passwd? Будет ли он по умолчанию HOME / etc / passwd, если переменная среды не установлена? Если конфликта нет, и по умолчанию он будет / etc / passwd, это похоже на идеальную настройку: я запускаю Cygwin с флэш-накопителя, чтобы избежать необходимости спрашивать разрешение на установку на работе, поэтому у меня есть Unix- как среда в моем кармане, которую я могу использовать, когда доступен только ящик Windows. На работе у меня будет домашний каталог моего рабочего компьютера, а в другом месте у меня может быть домашний каталог на флешке.
iconoclast
6
Я хотел бы добавить исправление / обновление в бит о приоритете $ HOME. Домашний каталог в / etc / passwd имеет приоритет над всем.
Я давно пользуюсь Cygwin и только что выполнил чистую установку Windows 7 x64 и Cygwin V1.126. Я сходил с ума, пытаясь понять, почему каждый раз, когда я запускал ssh, я получал:
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of host 'foo.bar.com (10.66.19.19)' can't be established.
...
Я добавляю определение HOME = c: \ users \ dhaynes в среду Windows, но по-прежнему пытаюсь создать '/ home / dhaynes'. Я пробовал все возможные комбинации, включая установку HOME в / cygdrive / c / users / dhaynes. Погуглил сообщение об ошибке, ничего не нашел, ничего не нашел на сайте cygwin. Я использую cygwin из cmd.exe, а не bash.exe, но проблема присутствовала в обоих.
Наконец я понял, что домашний каталог в / etc / passwd имеет приоритет над переменной окружения $ HOME. Я просто повторно запустил mkpasswd -l> / etc / passwd и обновил домашний каталог, теперь с ssh все в порядке.
Это может быть очевидно для тех, кто использует Linux и имеет опыт работы с системным администратором, но для тех из нас, кто в основном использует Windows, это немного неясно.
Домашний каталог в / etc / passwd НЕ имеет приоритета над всем. Однако он используется в качестве основного источника для пути к вашему HOME каталогу при удаленном входе в систему или с помощью ssh. См. Это из часто задаваемых вопросов
Кристофер,
2
Я использую cwRsync (Cygwin + Rsync для Windows), где cygwin идет в комплекте, и я не смог найти / etc / passwd.
И он продолжал говорить
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Поэтому я написал командный файл, который изменил переменную HOME перед запуском rsync. Что-то вроде:
set HOME=.
rsync /path1 user@host:/path2
И альт! Папка .ssh появилась в текущем рабочем каталоге, и rsync перестала раздражать отпечатками пальцев rsa.
Это быстрое исправление, но позже вам следует сменить ДОМ на более безопасное место.
db_home:
тем, как убрать кавычки и заставить его работать.Ответы:
Начиная с Cygwin 1.7.34 , рекомендуемый способ сделать это - добавить пользовательский
db_home
параметр в/etc/nsswitch.conf
. Обычно при этом желают сделать ваш домашний каталог Cygwin равным каталогу вашего профиля пользователя Windows. Этот параметр сделает это:Или, что то же самое:
Вам нужно использовать последнюю форму, если вы хотите внести какие-то изменения в эту схему, например, чтобы разделить ваши домашние файлы Cygwin в подкаталог каталога вашего профиля пользователя Windows:
Есть несколько других альтернативных схем для этой
windows
опции, а также несколько других%
токенов, которые вы можете использовать вместо%H
нее или в дополнение к ней. См вnsswitch.conf
описании синтаксиса в User Guide Cygwin для деталей.Если вы установили Cygwin до версии 1.7.34 или запустили его
mkpasswd
утилиту, чтобы у вас был/etc/passwd
файл, вы можете изменить домашний каталог Cygwin, отредактировав запись вашего пользователя в этом файле. Ваш домашний каталог - это предпоследний элемент в строке вашего пользователя в/etc/passwd
.¹Каким бы способом вы это ни сделали,
HOME
при запуске оболочки будет установлена переменная среды .²См. Этот элемент часто задаваемых вопросов для получения дополнительной информации по теме
Примечания:
Рассмотрим перемещение
/etc/passwd
и/etc/group
из пути для того , чтобы использовать в / механизм новый SAM AD на основе вместо этого.Хотя это можно просто установить
%HOME%
через панель управления, официально это не рекомендуется . Он не только бесцеремонно отменяет вышеуказанные механизмы, но и не всегда работает, например, при запуске сценариев оболочки черезcron
.источник
ssh
не работал правильно, пока не отредактировал,/etc/passwd
как описано./etc/passwd
файла. Смотрите мой ответ здесь, чтобы избежать таких проблем.db_home: /%H
может разрешаться для имени пользователя домена (вместо имени локального пользователя), что может быть не тем, что вы хотели бы иметь.db_home: /cygdrive/c/Users/%U
сделал то, что хотел.db_home: windows
,sh
запуск занимает от 2,5 до 3,5 секунд. Когда я используюdb_home: /cygdrive/c/Users/%U
,sh
запуск занимает от 0,9 до 1,0 секунды. Когда я удаляюdb_home
строку или жестко записываю ее в домашний каталог Windows,sh
запуск занимает от 0,2 до 0,3 секунды. Я использую жестко запрограммированное решение, напримерdb_home: /cygdrive/c/Users/susam
, потому что я часто запускаю сценарии оболочки из командной строки с помощьюsh
команды, например,sh foo.sh
и становится неудобно ждать более 2 секунд.Cygwin 1.7.34+
Для тех, кто использует Cygwin 1.7.34 или выше, Cygwin поддерживает настройку получения домашнего каталога, оболочки входа и информации gecos в
/etc/nsswitch.conf
. Это подробно описано в разделе руководства пользователя Cygwin:Если вы ранее создали файл
/etc/passwd
или,/etc/group
вы захотите удалить его и настроить Cygwin с использованием новой модели безопасности Windows для сопоставлений POSIX.Настройка
/etc/nsswitch.conf
файлаdb_home:
определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию дляdb_home:
ISПоэтому по умолчанию Cygwin просто устанавливает домашний каталог в
/home/$USERNAME
. Вы можете изменить это, указав любой другой путь по вашему желанию. Поддерживаемые подстановочные знаки:%u
Имя пользователя Cygwin (строчная буква u).%U
Имя пользователя Windows (буква U в верхнем регистре).%D
Домен Windows в стиле NetBIOS.%H
Домашний каталог Windows в стиле POSIX. Обратите внимание, что дляdb_home:
параметра это имеет смысл только сразу после предыдущей косой черты, как вdb_home: /%H/cygwin
%_
Поскольку для разделения схем используются пробелы и символы TAB, пробел в имени файла должен быть указан как%_
(подчеркивание).%%
Процентный символ.Вместо пути можно указать одну из четырех заранее определенных схем именованных путей.
windows
Домашний каталог пользователя устанавливается в тот же каталог, который используется в качестве домашнего каталога Windows, обычно что-то вроде%USERPROFILE%
илиC:\Users\$USERNAME
. Конечно, каталог Windows конвертируется в стиль POSIX Cygwin.cygwin
Только AD: для домашнего каталога пользователя задан путь POSIX, указанный в атрибуте cygwinHome из вспомогательного класса cygwinUser. См. Также раздел «Схема cygwin» .unix
Только AD: для домашнего каталога пользователя задан путь POSIX, указанный в атрибуте unixHomeDirectory из вспомогательного класса posixAccount. См. Также раздел «Схема unix» .desc
Домашний каталог пользователя устанавливается на путь POSIX, указанный в настройке home = "...", подобной XML, в атрибуте описания пользователя в SAM или AD. См. Подробное описание в разделе «Схема desc».Следующее сделает домашний каталог пользователя в Cygwin таким же, какой используется для домашнего каталога Windows.
Cygwin 1.7.33 или более ранняя
Для тех , кто использует Cygwin 1.7.33 или более ранней версии, обновление до последней версии Cygwin и удалить ранее использовались
/etc/passwd
и/etc/group
файлы, а затем просмотрите описанные выше действия.В противном случае выполните эти более старые шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
HOME
%USERPROFILE%
Теперь мы собираемся обновить
/etc/passwd
файл Cygwin%HOME%
только что созданной переменной Windows . Входы в оболочку и удаленные входы через нихssh
будут полагаться на то,/etc/passwd
чтобы сообщить им местоположение пути пользователя$HOME
.В командной строке Cygwin bash введите следующее:
-d
Переключатель указывает mkpasswd включать пользователей Домена, в то время как-l
это только выходные МЕСТНЫХ пользователей машины. Это важно, если вы используете ПК на работе, на котором информация о пользователе получается из контроллера домена Windows.Теперь вы можете сделать то же самое для групп, хотя в этом нет необходимости, если только вы не будете использовать компьютер, который является частью домена Windows. Cygwin считывает информацию о группах из баз данных учетных записей Windows, но вы можете добавить
/etc/group
файл, если ваш компьютер часто отключается от контроллера домена.В командной строке Cygwin bash введите следующее:
Теперь выйдите из Cygwin и снова запустите его. Вы должны обнаружить, что ваш путь HOME указывает на то же место, что и ваш профиль пользователя Windows, т.е.
/cygdrive/c/Users/username
источник
mkgroup
вышеизложенного.Я сделал довольно простое. Я не хотел менять переменную среды Windows 7. Поэтому я напрямую отредактировал файл Cygwin.bat.
Это просто запускает локальную оболочку с этим домашним каталогом; это то, что я хотел. Я не собираюсь получать к нему удаленный доступ, поэтому у меня это сработало.
источник
%HOME%
расположении Windows , в то время как Cygwin vim использует новый$HOME
путь, который вы объявили.Cygwin
mount
теперь поддерживает метод привязки, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку/etc/fstab
, а затем перезапустить оболочку:источник
Измените переменную среды HOME.
в XP щелкните правой кнопкой мыши Мой компьютер >> Свойства >> Дополнительно >> Переменные среды >> Пользовательские переменные для >> [выберите переменную HOME] >> изменить
источник
Я хотел бы добавить исправление / обновление в бит о приоритете $ HOME. Домашний каталог в / etc / passwd имеет приоритет над всем.
Я давно пользуюсь Cygwin и только что выполнил чистую установку Windows 7 x64 и Cygwin V1.126. Я сходил с ума, пытаясь понять, почему каждый раз, когда я запускал ssh, я получал:
Я добавляю определение HOME = c: \ users \ dhaynes в среду Windows, но по-прежнему пытаюсь создать '/ home / dhaynes'. Я пробовал все возможные комбинации, включая установку HOME в / cygdrive / c / users / dhaynes. Погуглил сообщение об ошибке, ничего не нашел, ничего не нашел на сайте cygwin. Я использую cygwin из cmd.exe, а не bash.exe, но проблема присутствовала в обоих.
Наконец я понял, что домашний каталог в / etc / passwd имеет приоритет над переменной окружения $ HOME. Я просто повторно запустил mkpasswd -l> / etc / passwd и обновил домашний каталог, теперь с ssh все в порядке.
Это может быть очевидно для тех, кто использует Linux и имеет опыт работы с системным администратором, но для тех из нас, кто в основном использует Windows, это немного неясно.
источник
Я использую cwRsync (Cygwin + Rsync для Windows), где cygwin идет в комплекте, и я не смог найти / etc / passwd.
И он продолжал говорить
Поэтому я написал командный файл, который изменил переменную HOME перед запуском rsync. Что-то вроде:
И альт! Папка .ssh появилась в текущем рабочем каталоге, и rsync перестала раздражать отпечатками пальцев rsa.
Это быстрое исправление, но позже вам следует сменить ДОМ на более безопасное место.
источник