Как изменить домашнюю папку 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 или в дополнение к нему. См.the nsswitch.conf описание синтаксис на Cygwin Руководство Пользователя для сведения.

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

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

посмотреть этот пункт FAQ дополнительные ПО ТЕМЕ.


Примечания:

  1. рассмотреть двигаемся!--10--> и /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: is

db_home: /home/%U

поэтому по умолчанию Cygwin просто устанавливает home dir в /home/$USERNAME. Вы можете изменить это, хотя указать на любой другой пользовательский путь, который вы хотите. Поддерживаются подстановочные знаки:

  • %u имя пользователя Cygwin (это нижний регистр у.)
  • %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 файл с Windows %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 переключатель сообщает mkpasswd включить пользователей домена, в то время как -l только для вывода локальных пользователей машины. Это важно, если вы используете компьютер на работе, где сведения о пользователе получены от контроллера домена Windows.

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

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

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

теперь выйдите из Cygwin и запустите его снова. Ты должен найти свой путь домой. указывает на то же место, что и ваш профиль пользователя 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 теперь поддержка bind метод, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку /etc/fstab, затем перезапустите оболочку:

c:/Users /home none bind 0 0

измените переменную домашней среды.

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


Я хотел бы добавить исправление/обновление к биту о $ 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).

поэтому я написал пакетный файл, который изменил домашнюю переменную перед запуском rsync. Что-то вроде:

set HOME=.
rsync /path1 user@host:/path2

и вуаля! .папка ssh появилась в текущем рабочем каталоге, и rsync перестала раздражать отпечатками пальцев rsa.

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