Я только что установил Cygwin, и похоже, что домашний каталог в приглашении bash находится на моем диске Z :. Я не хочу этого.
Как я могу это изменить?
Я только что установил Cygwin, и похоже, что домашний каталог в приглашении bash находится на моем диске Z :. Я не хочу этого.
Как я могу это изменить?
Ответы:
Начиная с 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
при запуске оболочки будет установлена переменная среды .²
См. Этот элемент часто задаваемых вопросов для получения дополнительной информации по теме
Примечания:
Рассмотрим перемещение /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 поддерживает настройку получения домашнего каталога, оболочки входа и информации 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/$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 и удалить ранее использовались /etc/passwd
и /etc/group
файлы, а затем просмотрите описанные выше действия.
В противном случае выполните эти более старые шаги ниже.
Во-первых, установите переменную среды Windows для HOME, которая указывает на ваш профиль пользователя:
HOME
%USERPROFILE%
Теперь мы собираемся обновить /etc/passwd
файл Cygwin %HOME%
только что созданной переменной Windows . Входы в оболочку и удаленные входы через них 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 и снова запустите его. Вы должны обнаружить, что ваш путь HOME указывает на то же место, что и ваш профиль пользователя Windows, т.е./cygdrive/c/Users/username
mkgroup
вышеизложенного.
Я сделал довольно простое. Я не хотел менять переменную среды Windows 7. Поэтому я напрямую отредактировал файл Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
Это просто запускает локальную оболочку с этим домашним каталогом; это то, что я хотел. Я не собираюсь получать к нему удаленный доступ, поэтому у меня это сработало.
%HOME%
расположении Windows , в то время как Cygwin vim использует новый $HOME
путь, который вы объявили.
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 и имеет опыт работы с системным администратором, но для тех из нас, кто в основном использует 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.
Это быстрое исправление, но позже вам следует сменить ДОМ на более безопасное место.
db_home:
тем, как убрать кавычки и заставить его работать.