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_homeustawienia 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 windowsopcji oraz kilka innych %tokenów, których można użyć zamiast niej %Hlub oprócz niej. Patrz na nsswitch.confopis składni w Użytkownikowi Cygwin przewodnik dla szczegółów.
Jeśli zainstalowałeś Cygwin przed 1.7.34 lub uruchomiłeś jego mkpasswdnarzędzie , aby mieć /etc/passwdplik, 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 HOMEzmiennej środowiskowej podczas uruchamiania powłoki.²
Zobacz ten artykuł FAQ, aby uzyskać więcej informacji na ten temat.
Przypisy:
Rozważ przeniesienie się /etc/passwdi /etc/groupzejś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.
sshnie działałby poprawnie, dopóki nie został zmodyfikowany /etc/passwdzgodnie z opisem.
/etc/passwdpliku. Zobacz moją odpowiedź tutaj, aby uniknąć takich problemów.
db_home: /%Hmoż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/%Uzrobił, co chciałem.
db_home: windows, shuruchomienie zajmuje około 2,5 do 3,5 sekundy. Kiedy używam db_home: /cygdrive/c/Users/%U, shuruchomienie zajmuje około 0,9 do 1,0 sekundy. Po usunięciu db_homelinii lub zakodowaniu go na stałe w katalogu domowym systemu Windows, shuruchomienie zajmuje około 0,2 do 0,3 sekundy. Idę z rozwiązaniem zakodowanym na stałe, np. db_home: /cygdrive/c/Users/susamDlatego, że często uruchamiam skrypty powłoki z wiersza polecenia za pomocą shpolecenia, np. sh foo.shI 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/passwdlub /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.confpliku 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.%HKatalog 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.
windowsKatalog 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.
cygwinTylko 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” .
unixTylko 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” .
descKatalog 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/passwdi /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/passwdplik Cygwin za pomocą %HOME%właśnie utworzonej zmiennej Windows . Loginy powłoki i logowanie zdalne za pośrednictwem sshbędą polegały na /etc/passwdinformowaniu 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
-dPrzełącznik mówi mkpasswd obejmować użytkowników domeny, a -ljest 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/groupplik, 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
mkgrouppowyż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 $HOMEzadeklarowanej ścieżki.
Cygwin mountobsł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ł.