Właśnie zainstalowałem Cygwin i wygląda na to, że katalog domowy w zachęcie bash znajduje się na moim dysku Z:. Nie tego chcę.
Jak mogę to zmienić?
Właśnie zainstalowałem Cygwin i wygląda na to, że katalog domowy w zachęcie bash znajduje się na moim dysku Z:. Nie tego chcę.
Jak mogę to zmienić?
Odpowiedzi:
Począwszy od Cygwin 1.7.34 , zalecanym sposobem jest dodanie niestandardowego db_home
ustawienia do /etc/nsswitch.conf
. Powszechnym życzeniem podczas robienia tego jest uczynienie katalogu domowego Cygwin równym katalogowi profilu użytkownika Windows. To ustawienie zrobi to:
db_home: windows
Lub równoważnie:
db_home: /%H
Musisz użyć tego drugiego formularza, jeśli chcesz zmienić ten schemat, na przykład posegregować pliki domowe Cygwin do podkatalogu katalogu profilu użytkownika systemu Windows:
db_home: /%H/cygwin
Istnieje kilka innych alternatywnych schematów tej windows
opcji oraz kilka innych %
tokenów, których można użyć zamiast niej %H
lub oprócz niej. Patrz na nsswitch.conf
opis składni w Użytkownikowi Cygwin przewodnik dla szczegółów.
Jeśli zainstalowałeś Cygwin przed 1.7.34 lub uruchomiłeś jego mkpasswd
narzędzie , aby mieć /etc/passwd
plik, możesz zmienić katalog domowy Cygwin, edytując wpis użytkownika w tym pliku. Twój katalog domowy jest przedostatnim elementem w wierszu użytkownika w /etc/passwd
.¹
Niezależnie od tego, jak to zrobisz, spowoduje to ustawienie HOME
zmiennej środowiskowej podczas uruchamiania powłoki.²
Zobacz ten artykuł FAQ, aby uzyskać więcej informacji na ten temat.
Przypisy:
Rozważ przeniesienie się /etc/passwd
i /etc/group
zejście z drogi, aby zamiast tego użyć nowego mechanizmu opartego na SAM / AD .
Chociaż można to po prostu ustawić %HOME%
za pośrednictwem Panelu sterowania, oficjalnie jest to odradzane . Nie tylko bezceremonialnie przesłania powyższe mechanizmy, ale nie zawsze działa, na przykład podczas uruchamiania skryptów powłoki za pośrednictwem cron
.
ssh
nie działałby poprawnie, dopóki nie został zmodyfikowany /etc/passwd
zgodnie z opisem.
/etc/passwd
pliku. Zobacz moją odpowiedź tutaj, aby uniknąć takich problemów.
db_home: /%H
może rozwiązać nazwę użytkownika domeny (zamiast nazwy użytkownika lokalnego), która może nie być taka, jaką chciałbyś mieć. db_home: /cygdrive/c/Users/%U
zrobił, co chciałem.
db_home: windows
, sh
uruchomienie zajmuje około 2,5 do 3,5 sekundy. Kiedy używam db_home: /cygdrive/c/Users/%U
, sh
uruchomienie zajmuje około 0,9 do 1,0 sekundy. Po usunięciu db_home
linii lub zakodowaniu go na stałe w katalogu domowym systemu Windows, sh
uruchomienie zajmuje około 0,2 do 0,3 sekundy. Idę z rozwiązaniem zakodowanym na stałe, np. db_home: /cygdrive/c/Users/susam
Dlatego, że często uruchamiam skrypty powłoki z wiersza polecenia za pomocą sh
polecenia, np. sh foo.sh
I czekanie dłużej niż 2 sekundy staje się niewygodne.
Dla tych, którzy używają Cygwin 1.7.34 lub nowszego Cygwin obsługuje konfigurację sposobu pobierania katalogu domowego, powłoki logowania i informacji o gecos w plikach/etc/nsswitch.conf
. Jest to szczegółowo opisane w sekcji Podręcznik użytkownika Cygwin:
Jeśli wcześniej utworzyłeś plik /etc/passwd
lub /etc/group
, będziesz chciał je usunąć i skonfigurować Cygwin przy użyciu nowego modelu Windows Security do mapowań POSIX.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
Ustawienie /etc/nsswitch.conf
pliku db_home:
definiuje sposób, w jaki Cygwin pobiera katalog domowy użytkownika. Domyślne ustawienie db_home:
to
db_home: /home/%U
Więc domyślnie Cygwin po prostu ustawia katalog domowy na /home/$USERNAME
. Możesz to jednak zmienić, aby wskazywać dowolną inną ścieżkę niestandardową. Obsługiwane symbole wieloznaczne to:
%u
Nazwa użytkownika Cygwin (to małe litery u).%U
Nazwa użytkownika systemu Windows (to wielkie litery U).%D
Domena Windows w stylu NetBIOS.%H
Katalog domowy Windows w stylu POSIX. Zauważ, że w przypadku db_home:
ustawienia ma to sens tylko zaraz po poprzedzającym go ukośniku, jak wdb_home: /%H/cygwin
%_
Ponieważ do oddzielania schematów używane są znaki spacji i tabulacji, w nazwie pliku należy podać spację jako %_
(to jest podkreślenie).%%
Znak procentu.Zamiast ścieżki można określić jeden z czterech wstępnie zdefiniowanych nazwanych schematów ścieżek.
windows
Katalog domowy użytkownika jest ustawiony na ten sam katalog, który jest używany jako katalog domowy systemu Windows, zwykle coś podobnego do %USERPROFILE%
lub C:\Users\$USERNAME
. Oczywiście katalog Windows jest konwertowany na styl POSIX przez Cygwin.
cygwin
Tylko AD: katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w atrybucie cygwinHome z klasy pomocniczej cygwinUser. Zobacz także sekcję „Schemat Cygwin” .
unix
Tylko AD: Katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w atrybucie unixHomeDirectory z klasy pomocniczej posixAccount. Zobacz także sekcję „Schemat unixa” .
desc
Katalog domowy użytkownika jest ustawiony na ścieżkę POSIX podaną w ustawieniu home = "..." podobnym do XML w atrybucie opisu użytkownika w SAM lub AD. Szczegółowy opis znajduje się w sekcji „Schemat opisu”.
Poniższe sprawi, że katalog domowy użytkownika w Cygwin będzie taki sam, jak jest używany dla katalogu domowego systemu Windows.
db_home: windows
Dla tych, którzy używają Cygwin 1.7.33 lub wcześniejszej, zaktualizuj do najnowszej wersji Cygwin i usuń wcześniej używane pliki /etc/passwd
i /etc/group
, a następnie zobacz kroki powyżej.
W przeciwnym razie wykonaj te starsze kroki poniżej.
Po pierwsze, ustaw zmienną środowiskową Windows dla HOME, która wskazuje na Twój profil użytkownika:
HOME
%USERPROFILE%
Teraz zaktualizujemy /etc/passwd
plik Cygwin za pomocą %HOME%
właśnie utworzonej zmiennej Windows . Loginy powłoki i logowanie zdalne za pośrednictwem ssh
będą polegały na /etc/passwd
informowaniu ich o lokalizacji $HOME
ścieżki użytkownika .
W wierszu polecenia Cygwin bash wpisz:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
-d
Przełącznik mówi mkpasswd obejmować użytkowników domeny, a -l
jest jedynie wyjściowych użytkowników maszyn lokalnych. Jest to ważne, jeśli używasz komputera w pracy, na którym informacje o użytkowniku są pobierane z kontrolera domeny systemu Windows.
Teraz możesz zrobić to samo dla grup, chociaż nie jest to konieczne, chyba że będziesz używać komputera, który jest częścią domeny Windows. Cygwin odczytuje informacje o grupie z baz danych kont Windows, ale możesz dodać /etc/group
plik, jeśli twój komputer jest często odłączony od kontrolera domeny.
Po znaku zachęty Cygwin bash wpisz:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
Teraz wyjdź z Cygwin i uruchom go ponownie. Powinieneś zauważyć, że twoja ścieżka HOME wskazuje tę samą lokalizację, co twój profil użytkownika Windows - tj/cygdrive/c/Users/username
mkgroup
powyższego.
Zrobiłem coś całkiem prostego. Nie chciałem zmieniać zmiennej środowiskowej systemu Windows 7. Więc bezpośrednio zredagowałem plik Cygwin.bat.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
To po prostu uruchamia lokalną powłokę z tym katalogiem domowym; tego właśnie chciałem. Nie mam zamiaru uzyskać do tego zdalnego dostępu, więc to zadziałało.
%HOME%
lokalizacji Windows , podczas gdy Cygwin vim używa nowej $HOME
zadeklarowanej ścieżki.
Cygwin mount
obsługuje teraz metodę wiązania , która pozwala zamontować katalog. Dlatego możesz po prostu dodać następujący wiersz do /etc/fstab
, a następnie ponownie uruchomić powłokę:
c:/Users /home none bind 0 0
Zmień zmienną środowiskową HOME.
w XP, kliknij prawym przyciskiem myszy Mój komputer >> Właściwości >> Zaawansowane >> Zmienne środowiskowe >> Zmienne użytkownika dla >> [wybierz zmienną HOME] >> edytuj
Chciałbym dodać poprawkę / aktualizację do bitu o $ HOME mającym pierwszeństwo. Katalog domowy w / etc / passwd ma pierwszeństwo przed wszystkim.
Jestem długoletnim użytkownikiem Cygwin i właśnie wykonałem czystą instalację systemu Windows 7 x64 i Cygwin V1.126. Szalałem, próbując dowiedzieć się, dlaczego za każdym razem, gdy uruchamiałem ssh, otrzymywałem:
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.
...
Dodałem definicję HOME = c: \ users \ dhaynes w środowisku Windows, ale nadal próbowałem utworzyć '/ home / dhaynes'. Wypróbowałem każdą kombinację, jaką mogłem, w tym ustawienie HOME na / cygdrive / c / users / dhaynes. Wyszukałem w Google komunikat o błędzie, nie mogłem nic znaleźć, nie mogłem znaleźć niczego na stronie cygwin. Używam cygwin z cmd.exe, a nie bash.exe, ale problem występował w obu.
W końcu zdałem sobie sprawę, że katalog domowy w / etc / passwd ma pierwszeństwo przed zmienną środowiskową $ HOME. Po prostu ponownie uruchomiłem 'mkpasswd -l> / etc / passwd' i zaktualizowałem katalog domowy, teraz wszystko jest w porządku z ssh.
Może to być oczywiste dla typów linuksowych z doświadczeniem sysadmin, ale dla tych z nas, którzy używają głównie systemu Windows, jest to nieco niejasne.
Tak się składa, że używam cwRsync (Cygwin + Rsync dla Windows), gdzie cygwin jest dostarczany w pakiecie i nie mogłem znaleźć / etc / passwd.
I powtarzał
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
Więc napisałem plik wsadowy, który zmienił zmienną HOME przed uruchomieniem rsync. Coś jak:
set HOME=.
rsync /path1 user@host:/path2
I altówka! Folder .ssh pojawił się w bieżącym katalogu roboczym, a rsync przestał denerwować odciskami palców rsa.
To szybka poprawka, ale później powinieneś zmienić HOME na bezpieczniejszą lokalizację.
db_home:
cudzysłowu i sprawić, by działał.