Как я могу изменить домашнюю папку Cygwin после установки?

Я только что установил Cygwin, и похоже, что домашний каталог в приглашении bash находится на моем диске Z:. Это не то, где я хочу это.

Как я могу это изменить?

7 ответов

Решение

Начиная с 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 подробное описание синтаксиса в Cygwin User Guide.

Если вы установили Cygwin до 1.7.34 или запустили его mkpasswd утилита, так что у вас есть /etc/passwd файл, вы можете изменить свой домашний каталог Cygwin, отредактировав запись пользователя в этом файле. Ваш домашний каталог является вторым по последнему элементом в строке вашего пользователя в /etc/passwd

Как бы вы это ни делали, это вызывает HOME Переменная среды, которая будет установлена ​​во время запуска оболочки.

См. Этот пункт часто задаваемых вопросов для получения дополнительной информации по этой теме.


Примечания:

  1. Подумайте о переезде /etc/passwd а также /etc/group чтобы использовать новый механизм, основанный на SAM/AD.

  2. Пока можно просто установить %HOME% через панель управления это официально не рекомендуется. Он не только бесцеремонно отменяет вышеуказанные механизмы, но и не всегда работает, например, при запуске сценариев оболочки через cron,

Cygwin 1.7.34+

Для тех, кто использует Cygwin 1.7.34 или выше, Cygwin поддерживает настройку получения информации о домашнем каталоге, регистрационной оболочке и gecos в /etc/nsswitch.conf, Это подробно описано в разделе "Руководство пользователя Cygwin":

Если вы ранее создали /etc/passwd или же /etc/group файл, который вы хотите удалить и настроить Cygwin, используя новую модель безопасности Windows для сопоставлений POSIX.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.conf файла db_home: Параметр определяет, как Cygwin выбирает домашний каталог пользователя. Настройка по умолчанию для db_home: является

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
  • %_ Поскольку для разделения схем используются пробелы и символы табуляции, пробел в имени файла должен быть задан как %_ (это подчеркивание).
  • %% Процентный символ.

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

  1. windows Домашний каталог пользователя установлен в тот же каталог, который используется в качестве домашнего каталога Windows, обычно что-то вроде %USERPROFILE% или же C:\Users\$USERNAME, Конечно, каталог Windows преобразуется в стиль POSIX Cygwin.

  2. cygwin Только для AD: в домашнем каталоге пользователя указан путь POSIX, указанный в атрибуте cygwinHome из вспомогательного класса cygwinUser. Смотрите также раздел под названием "Схема Cygwin".

  3. unix Только для AD: в домашнем каталоге пользователя указан путь POSIX, указанный в атрибуте unixHomeDirectory из вспомогательного класса posixAccount. Смотрите также раздел "Схема Unix".

  4. 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, которая указывает на ваш профиль пользователя:

  1. Открытая система на панели управления
  2. На вкладке " Дополнительно " щелкните " Переменные среды" (внизу)
  3. В области "Пользовательские переменные" нажмите "Новый…"
  4. Для имени переменной введите HOME
  5. Для значения переменной введите %USERPROFILE%
  6. Нажмите OK во всех открытых диалоговых окнах, чтобы применить этот новый параметр.

Теперь мы собираемся обновить Cygwin /etc/passwd файл с виндой %HOME% переменная, которую мы только что создали. Вход в систему Shell и удаленный вход через ssh будет полагаться на /etc/passwd сообщить им местонахождение пользователя $HOME дорожка.

В командной строке Cygwin bash введите следующее:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-d switch указывает mkpasswd включить пользователей DOMAIN, а -l это только вывод локальных пользователей машины. Это важно, если вы используете компьютер на работе, где пользовательская информация получается из контроллера домена Windows.

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

В командной строке Cygwin bash введите следующее:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Теперь выйдите из Cygwin и запустите его снова. Вы должны обнаружить, что ваш путь HOME указывает на то же местоположение, что и ваш профиль пользователя Windows - т.е. /cygdrive/c/Users/username

Я сделал что-то довольно простое. Я не хотел менять переменную среды Windows 7. Поэтому я напрямую отредактировал файл Cygwin.bat.

@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL

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

Cygwin mount теперь поддерживает метод связывания, который позволяет вам монтировать каталог. Следовательно, вы можете просто добавить следующую строку в /etc/fstab, затем перезапустите вашу оболочку:

c:/Users /home none bind 0 0

Измените переменную среды HOME.

в XP щелкните правой кнопкой мыши Мой компьютер >> Свойства >> Дополнительно >> Переменные среды >> Переменные пользователя для >> [выберите переменную HOME] >> изменить

Я хотел бы добавить исправление / обновление к биту о $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 с опытом sysadmin, но для тех из нас, кто в основном использует Windows, это немного неясно.

Я использую 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.

Это быстрое исправление, но позже вы должны сменить HOME на более безопасное место.

Другие вопросы по тегам