Щойно я встановив 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
.
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 підтримує налаштування того, як отримати домашній каталог, оболонку входу та інформацію про геокоди в /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
%_
Оскільки простір та символи TAB використовуються для розділення схем, пробіл у імені файлу повинен бути вказаний як %_
(це підкреслення).%%
Процентний персонаж.Замість шляху ви можете вказати одну з чотирьох іменованих схем шляху, які визначені заздалегідь.
windows
Домашній каталог користувача встановлений у тому самому каталозі, який використовується як домашній каталог Windows, як правило, щось уздовж рядків %USERPROFILE%
або C:\Users\$USERNAME
. Звичайно, Cygwin перетворює каталог Windows у стиль POSIX.
cygwin
Лише AD: Домашній каталог користувача встановлюється на шлях POSIX, вказаний в атрибуті cygwinHome з допоміжного класу cygwinUser. Дивіться також розділ під назвою «Схема цигувіна» .
unix
Лише AD: Домашній каталог користувача встановлюється на шлях POSIX, заданий в атрибуті unixHomeDirectory з допоміжного класу posixAccount. Дивіться також розділ під назвою «Unix-схема» .
desc
Домашній каталог користувача встановлюється на шлях POSIX, заданий у домівки home = "..." XML-подібний в атрибуті опису користувача в SAM або AD. Детальний опис див. У розділі "Схема опису".
Нижче зроблено домашній каталог користувача в 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 і запустіть його знову. Ви повинні виявити, що ваш ДОМАШНИЙ шлях вказує на те саме місце, що і ваш профіль користувача 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
шлях, який ви оголосили.
mount
Тепер Cygwin підтримує метод прив'язки, який дозволяє монтувати каталог. Отже, ви можете просто додати наступний рядок до /etc/fstab
, а потім перезапустити оболонку:
c:/Users /home none bind 0 0
Змініть змінну середовища HOME.
на XP, клацніть правою кнопкою миші Мій комп'ютер >> Властивості >> Додатково >> Змінні середовища >> Змінні користувача для >> [виберіть змінну ДОМАШНЯ СТОРІНКА] >> редагувати
Я хотів би додати виправлення / оновлення до біта про $ 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, це трохи незрозуміло.
Я випадково використовую 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.
Це швидке виправлення, але пізніше ви повинні змінити HOME на більш безпечне місце.
db_home:
щоб відмітити його і змусити його працювати.