Я только что установил 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:тем, как убрать кавычки и заставить его работать.