Как я могу изменить свою домашнюю папку Cygwin после установки?
Я только что установил Cygwin, и похоже, что домашний каталог в приглашении bash находится на моем диске Z:. Это не то, что я хочу.
Как я могу изменить это?
7 ответов:
начиная с Cygwin 1.7.34 рекомендуемый способ сделать это, чтобы добавить пользовательский
db_home
параметр/etc/nsswitch.conf
. Общим желанием при этом является сделать ваш домашний каталог Cygwin равным каталогу профиля пользователя Windows. Этот параметр будет делать это:db_home: windows
или, что то же самое:
db_home: /%H
вы должны использовать последнюю форму, если вы хотите некоторые изменения в этой схеме, например, чтобы разделить ваши домашние файлы Cygwin в a поддиректорию каталога профиля пользователя Windows:
db_home: /%H/cygwin
есть несколько других альтернативных схем
windows
вариант плюс несколько других%
токены можно использовать вместо%H
или в дополнение к нему. Смотрите thensswitch.conf
описание синтаксис на Руководство Пользователя Cygwin для сведения.если вы установили Cygwin до 1.7.34 или запустили его
mkpasswd
утилиты так что у вас есть/etc/passwd
file, вы можете изменить свой домашний каталог Cygwin, отредактировав запись пользователя в этом файле. Ваш домашний каталог является предпоследним элементом в строке пользователя в/etc/passwd
.1каким бы способом вы это ни делали, это вызывает
HOME
переменная окружения, устанавливаемая при запуске оболочки.2посмотреть этот пункт FAQ подробнее по теме.
Примечания:
рассмотреть переезд
/etc/passwd
и/etc/group
из пути, чтобы использовать новый механизм на основе SAM / AD.пока можно просто установить
%HOME%
через Панель управления, это официально обескураживают. Он не только бесцеремонно переопределяет вышеуказанные механизмы, но и не всегда работает, например, при запуске сценариев оболочки черезcron
.
Cygwin 1.7.34+
для тех, кто использует Cygwin 1.7.34 или выше, программа поддерживает настройку как принести домашняя директория, Shell входа и дополнительной информации учетной записи информации в
/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
The
/etc/nsswitch.conf
файлаdb_home:
настройка определяет, как Cygwin выбирает домашний каталог пользователя. Значение по умолчанию дляdb_home:
иdb_home: /home/%U
так, по умолчанию, программа просто устанавливает домашний каталог для
/home/$USERNAME
. Вы можете изменить это, хотя указать на любой другой пользовательский путь, который вы хотите. Поддерживаются следующие подстановочные знаки:
%u
имя пользователя Cygwin (это нижний регистр у.)%U
имя пользователя Windows (это верхний регистр U).%D
домен Windows в стиле NetBIOS.%H
домашний каталог Windows в стиле POSIX. Обратите внимание, что дляdb_home:
настройка, это имеет смысл только сразу после предшествующей косой чертой, а вdb_home: /%H/cygwin
%_
поскольку символы пробела и табуляции используются для разделения схем, пробел в имени файла должен быть задан как%_
(это подчеркивать.)%%
символ в процентах.вместо пути можно указать одну из четырех предопределенных схем именованных путей.
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
файлы, см. выше.Else, выполните следующие действия ниже.
во-первых, установите переменную среды Windows для дома, которая указывает на ваш профиль пользователя:
- открыть система на контроль Панель
- на Advanced tab click Переменные Среды (внизу)
- в области пользовательских переменных нажмите кнопку " Создать..."
- для имени переменной введите
HOME
- для значения переменной введите
%USERPROFILE%
- Нажмите кнопку " ОК " во всех открытых диалоговых окнах, чтобы применить этот новый параметр
теперь мы собираемся обновить Cygwin
/etc/passwd
файл с Windows%HOME%
переменная, которую мы только что создали. Логины оболочки и удаленные логины через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
The
-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
Это просто запускает локальную оболочку с этим домашним каталогом; это то, что я хотел. Я не собираюсь удаленно обращаться к этому, так что это сработало для меня.
программа
mount
теперь поддержка связать метод, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку/etc/fstab
, затем перезагрузите оболочку:c:/Users /home none bind 0 0
измените переменную домашней среды.
на XP щелкните правой кнопкой мыши Мой Компьютер > > Свойства > > дополнительно > > Переменные среды > > пользовательские переменные для > > [выберите переменную HOME] > > edit
Я хотел бы добавить исправление/обновление к биту о $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 но проблема присутствовала в обоих.
Я наконец понял, что домашний каталог в /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 появилась в текущем рабочем dir и rsync перестала раздражать отпечатками пальцев rsa.
это быстрое исправление, но позже вы должны изменить дом на более безопасный местоположение.