Я только что установил 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
в Руководство пользователя Cygwin для деталей.
Если вы установили Cygwin до 1.7.34 или запустили утилиту mkpasswd
, чтобы у вас был файл /etc/passwd
, вы может изменить ваш домашний каталог Cygwin, отредактировав свою запись пользователя в этом файле. Ваш домашний каталог является вторым по последнему элементу в вашей пользовательской строке в /etc/passwd
.¹
Каким бы способом вы это ни делали, это приводит к тому, что переменная среды HOME
устанавливается во время запуска оболочки.²
Подробнее см. этот пункт часто задаваемых вопросов.
Сноска:
Рассмотрите возможность перемещения /etc/passwd
и /etc/group
, чтобы использовать новый механизм SAM/AD вместо этого.
Пока можно просто установить %HOME%
с помощью панели управления, официально обескуражен. Он не только бесцеремонно отменяет описанные выше механизмы, но не всегда работает, например, при запуске сценариев оболочки через cron
.
Для тех, кто использует 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
file 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
%_
Поскольку для разделения схем используются символы пространства и 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%
Теперь мы собираемся обновить файл 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
должен выводить только пользователей LOCAL. Это важно, если вы используете ПК на работе, где информация пользователя получена от контроллера домена 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
Я сделал что-то очень простое. Я не хотел менять переменную среды 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
теперь поддерживает метод привязки, который позволяет монтировать каталог. Следовательно, вы можете просто добавить следующую строку в /etc/fstab
, а затем перезапустить оболочку:
c:/Users /home none bind 0 0
Измените переменную среды HOME.
на XP, щелкните его правой кнопкой мыши My Computer → Properties → Advanced → Переменные среды → Пользовательские переменные для → [select variable 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 to/cygdrive/c/users/dhaynes. Googled для сообщения об ошибке, ничего не мог найти, не смог найти что-либо на сайте 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).
Итак, я написал пакетный файл, который изменил переменную HOME перед запуском rsync. Что-то вроде:
set HOME=.
rsync /path1 [email protected]:/path2
И альт!.ssh в текущем рабочем каталоге и rsync перестали раздражать отпечатки rsa.
Это быстрое исправление, но позже вы должны изменить HOME в более безопасное место.