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

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

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

107 голосов | спросил Nathan Long 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 30 Sep 2009 00:10:16 +0400 2009, 00:10:16

7 ответов


0

Начиная с 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 для получения подробной информации.

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

Как бы вы это ни делали, это приводит к установке переменной среды /etc/passwd во время запуска оболочки .²

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


Сноска:

  1. Рассмотрите возможность перемещения HOME и /etc/passwd, чтобы использовать новый SAM /Механизм на основе AD .

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

ответил Warren Young 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 30 Sep 2009 00:21:56 +0400 2009, 00:21:56
0

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. Нажмите кнопку "ОК" во всех открытых диалоговых окнах, чтобы применить этот новый параметр

Теперь мы собираемся обновить файл 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 

Переключатель -d сообщает 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

ответил Christopher 25 J0000006Europe/Moscow 2012, 06:34:05
0

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

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

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

ответил Ajay 22 SatEurope/Moscow2012-12-22T01:38:54+04:00Europe/Moscow12bEurope/MoscowSat, 22 Dec 2012 01:38:54 +0400 2012, 01:38:54
0

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

c:/Users /home none bind 0 0
ответил Jihem 22 PM00000020000004131 2013, 14:18:41
0

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

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

ответил Michael Paulukonis 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 30 Sep 2009 00:22:59 +0400 2009, 00:22:59
0

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

ответил Dan Haynes 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 07 Sep 2011 20:39:46 +0400 2011, 20:39:46
0

Я использую 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 [email protected]:/path2

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

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

ответил TEHEK 7 J000000Wednesday10 2010, 02:23:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132