Kurulumdan sonra Cygwin ana klasörümü nasıl değiştirebilirim?


121

Cygwin'i yeni kurdum ve görünüşe göre bash istemindeki ana dizin Z: sürücümde. İstediğim yer orası değil.

Bunu nasıl değiştirebilirim?


1
Cygwin 1.7.34 veya üstünü kullananlar için, diğer yazılarda açıklanan yöntemleri kullanın, ancak alıntıyı kaldırmak db_home:ve çalışmasını sağlamak için önce # işaretini kaldırmayı unutmayın .
Maieul

Yanıtlar:


180

Cygwin 1.7.34 ile başlayarak , bunu yapmak için tavsiye edilen yolu özel eklemektir db_homeayarı /etc/nsswitch.conf. Bunu yaparken ortak bir istek, Cygwin ana dizininizi Windows kullanıcı profili dizininize eşit yapmaktır. Bu ayar bunu yapacak:

db_home: windows

Veya eşdeğer olarak:

db_home: /%H

Bu şemada Cygwin ev dosyalarınızı Windows kullanıcı profili dizininizin bir alt dizinine ayırmak gibi bazı değişiklikler istiyorsanız, ikinci formu kullanmanız gerekir :

db_home: /%H/cygwin

windowsSeçenek için birkaç başka alternatif şema ve %onun yerine %Hveya ona ek olarak kullanabileceğiniz birkaç başka simge vardır . Bkz sözdizimi açıklamasını içinde Cygwin Kullanıcı Kılavuzu Ayrıntılar için.nsswitch.conf

Cygwin'i 1.7.34'ten önce kurduysanız veya bir dosyaya sahip olmak için onun mkpasswdyardımcı programını çalıştırdıysanız, /etc/passwdCygwin ana dizininizi o dosyadaki kullanıcı girişini düzenleyerek değiştirebilirsiniz. Ana dizininiz, kullanıcınızın satırındaki ikinci-son elemandır /etc/passwd

Hangi yolu yaparsanız yapın, bu, HOMEortam değişkeninin kabuk başlatılırken ayarlanmasına neden olur.²

Konuyla ilgili daha fazla bilgi için bu SSS maddesine bakın .


Dipnotlar:

  1. Hareketli düşünün /etc/passwdve /etc/groupkullanmak için yolumdan yeni SAM / AD tabanlı bir mekanizma yerine.

  2. %HOME%Kontrol Paneli aracılığıyla basitçe ayarlamak mümkün olsa da, resmi olarak tavsiye edilmiyor . Sadece yukarıdaki mekanizmaları belirsiz bir şekilde geçersiz kılmakla kalmaz, örneğin aracılığıyla kabuk komut dosyalarını çalıştırırken her zaman çalışmaz cron.


3
Git bash kabuğunu git-scm.com/download/win adresinden kurduysanız , cygwin kurulumunda sorun yaşayabileceğinizi unutmayın (seçtiğiniz seçeneklere bağlı olarak). Cygwin ~ Win7 kullanıcı dizinime geldi ve açıklandığı gibi sshdüzenleme yapana kadar düzgün çalışmayacaktı /etc/passwd.
Allan

@Allan'ın burada git yüklemelerinde bahsettiği sorunlar, HOME için Windows ortam değişkenini ayarlayarak ve ardından /etc/passwddosyayı yeniden oluşturarak giderilir . Bu tür sorunları önlemek için cevabımı burada görün .
Christopher

11
db_home: /%Hbir etki alanı kullanıcı adı (yerel kullanıcı adı yerine) için çözümlenebilir, bu sizin sahip olmak istediğiniz şey olmayabilir. db_home: /cygdrive/c/Users/%Usahip olmak istediğimi yaptım.
Abdull

2
Çeşitli yöntemler arasında bir performans farkı görüyorum. Kullandığımda db_home: windows, shbaşlaması yaklaşık 2,5 ila 3,5 saniye sürüyor . Kullandığımda başlaması yaklaşık 0,9 ila 1,0 saniye db_home: /cygdrive/c/Users/%Usürüyor sh. db_homeSatırı sildiğimde veya Windows ana dizinine sabit shkodladığımda, başlaması yaklaşık 0,2 ila 0,3 saniye sürüyor. Sabit kodlu çözüme gidiyorum, örneğin db_home: /cygdrive/c/Users/susam, shkomutu kullanarak Komut İstemi'nden kabuk betikleri çalıştırdığım için , örneğin sh foo.sh2 saniyeden fazla beklemek zahmetli hale geliyor.
Susam Pal

1
Teşekkür ederim @abdull, db_home: / cygdrive / c / Kullanıcılar /% U ihtiyacım olan cevap. db_home: windows, yapılandırmamda bulunmayan "/ home /% U" kullanıyor.
Jeff

74

Cygwin 1.7.34+

Cygwin 1.7.34 veya üstünü kullananlar için Cygwin , ana dizin, oturum açma kabuğu ve gecos bilgilerinin /etc/nsswitch.conf. Bu, Cygwin Kullanıcı Kılavuzu bölümünde ayrıntılı olarak açıklanmıştır:

Daha önce bir /etc/passwdveya /etc/groupdosya oluşturduysanız, bunları kaldırmak ve Cygwin'i yeni Windows Güvenlik modelini kullanarak POSIX eşlemelerine yapılandırmak isteyeceksiniz.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.confDosyasını klasöre db_home:Cygwin kullanıcının ev dizinini getirir nasıl tanımlarınızı ayarı. İçin varsayılan ayar db_home:DİR

db_home: /home/%U

Dolayısıyla, Cygwin varsayılan olarak sadece ana dizini olarak ayarlar /home/$USERNAME. Bunu, istediğiniz başka bir özel yolu işaret edecek şekilde değiştirebilirsiniz. Desteklenen joker karakterler şunlardır:

  • %u Cygwin kullanıcı adı (küçük u harfidir).
  • %U Windows kullanıcı adı (büyük U harfidir).
  • %D NetBIOS tarzında Windows etki alanı.
  • %HPOSIX stilinde Windows ana dizini. db_home:Ayar için bunun yalnızca öndeki eğik çizgiden hemen sonra mantıklı olduğunu unutmayın .db_home: /%H/cygwin
  • %_Şemayı ayırmak için boşluk ve SEKME karakterleri kullanıldığından, dosya adında bir boşluk olarak verilmelidir %_(bu bir alt çizgidir).
  • %% Yüzde bir karakter.

Bir yol yerine, önceden tanımlanmış dört adlandırılmış yol şemasından birini belirtebilirsiniz.

  1. windowsKullanıcının ev dizini, Windows ev dizini olarak kullanılan aynı dizine ayarlanır, tipik olarak %USERPROFILE%veya satırları boyunca bir şey C:\Users\$USERNAME. Elbette, Windows dizini Cygwin tarafından POSIX stiline dönüştürülür.

  2. cygwinYalnızca AD: Kullanıcının ev dizini, cygwinUser yardımcı sınıfından cygwinHome özniteliğinde verilen POSIX yoluna ayarlanır. "Cygwin şeması" adlı bölüme de bakın .

  3. unixYalnızca AD: Kullanıcının ev dizini, posixAccount yardımcı sınıfından unixHomeDirectory özniteliğinde verilen POSIX yoluna ayarlanır. Ayrıca "Unix şeması" adlı bölüme bakın .

  4. descKullanıcının ev dizini, SAM veya AD'deki kullanıcının açıklama özniteliğinde home = "..." XML benzeri ayarında verilen POSIX yoluna ayarlanır. Ayrıntılı açıklama için "Açıklama şeması" adlı bölüme bakın.

Aşağıdakiler, kullanıcının Cygwin'deki ev dizinini Windows ana dizini için kullanılanla aynı yapacaktır.

db_home: windows

Cygwin 1.7.33 veya öncesi

Cygwin 1.7.33 veya önceki sürümleri kullananlar için , Cygwin'in en son sürümüne güncelleyin ve önceden kullanılan dosyaları /etc/passwdve /etc/groupdosyaları kaldırın , ardından yukarıdaki adımlara bakın.

Aksi takdirde, aşağıdaki eski adımları izleyin.

Öncelikle, HOME için kullanıcı profilinize işaret eden bir Windows ortam değişkeni ayarlayın:

  1. Açık Sistem üzerinde Kontrol Paneli
  2. Açık Gelişmiş sekmesine tıklayın Ortam değişkenleri (altta doğru)
  3. Kullanıcı Değişkenleri alanında "Yeni…" öğesini tıklayın.
  4. Değişken adı için girin HOME
  5. Değişken değer için girin %USERPROFILE%
  6. Bu yeni ayarı uygulamak için tüm açık iletişim kutularında Tamam'ı tıklayın.

Şimdi Cygwin /etc/passwddosyasını %HOME%yeni oluşturduğumuz Windows değişkeni ile güncelleyeceğiz . Kabuk oturum açma ve uzaktan oturum açma işlemleri ssh, /etc/passwdonlara kullanıcının $HOMEyolunun konumunu söylemeye güvenecektir .

Cygwin bash komut isteminde aşağıdakileri yazın:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-dİken anahtarı, ALAN kullanıcılarını kapsayacak şekilde mkpasswd söyler -lsadece çıkış YEREL makine kullanıcıları etmektir. Kullanıcı bilgilerinin bir Windows Etki Alanı Denetleyicisi'nden elde edildiği bir iş yerinde bir PC kullanıyorsanız bu önemlidir.

Şimdi, aynı şeyi gruplar için de yapabilirsiniz, ancak bir Windows Etki Alanının parçası olan bir bilgisayar kullanmadığınız sürece bu gerekli değildir. Cygwin, Windows hesap veritabanlarından grup bilgilerini okur, ancak /etc/groupmakinenizin Etki Alanı Denetleyicisi ile bağlantısı sık sık kesilirse bir dosya ekleyebilirsiniz .

Cygwin bash isteminde aşağıdakileri yazın:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Şimdi, Cygwin'den çıkın ve yeniden başlatın. HOME yolunuzun Windows Kullanıcı Profiliniz ile aynı konumu gösterdiğini bulmalısınız - örn./cygdrive/c/Users/username


7
-d gerçekten yavaş. Yalnızca mevcut kullanıcıya ihtiyacınız varsa, bunun yerine -c'yi
Ben

Ben doğru, bunun yerine -c belirterek geçerli kullanıcı için bir girdi ekleyebilirsiniz. Ancak bunu yaparsanız, Cygwin ????? Etki Alanınızdaki veya yerel bilgisayarınızdaki diğer kullanıcılar ve gruplar için kayıtlara sahip olmayacağından, paylaşılan dosya sistemlerinde dosyaları listelerken Kullanıcı ve Grup için.
Christopher

1
İfadede küçük bir değişiklik önerebilir miyim: 'Şimdi, Cygwin / etc / passwd dosyanızı yeni bir $ HOME yolu ile güncelleyin' yerine, 'Şimdi Cygwin / etc / passwd dosyasını güncelleyeceğiz. HOME değişkenini yeni oluşturduk. ' Çok teşekkürler
Robert

-D ile Tamamlanması dakikalar (5 dakika sonra öldürdüm) dakika sürer. Bu yüzden -c ile yeniden çalıştım. İhtiyaçlarım için hepsi iyi.
bartosz.r

1
@Samuel mkgroupYukarıdakilerin amacını açıklığa kavuşturmak için bir açıklama ekledim .
Christopher

30

Oldukça basit bir şey yaptım. Windows 7 ortam değişkenini değiştirmek istemedim. Ben de doğrudan Cygwin.bat dosyasını düzenledim.

@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL

Bu, yerel kabuğu bu ana dizinle başlatır; istediğim buydu. Buna uzaktan erişmeyeceğim, bu yüzden bu benim için çalıştı.


İkinci olarak bu, dev makinemdeki ev ortamı değişkenimi değiştiremediğim için.
Deqing

@WernerCD Bunun yerel Windows uygulamalarıyla etkileşimde istenmeyen sonuçlara yol açabileceğine dikkat ediyorum. Windows uygulamalarınız, eski konumda HOME'u aramaya devam edecek. %HOME%Cygwin vim, $HOMEilan ettiğiniz yeni yolu kullanırken, eski Windows konumunda ayrı bir vim yapılandırmasını koruyacak olan Gvim buna bir örnek olabilir .
Christopher

Bu harika ... 5 yıl sonra ve bundan hoşlanıyorum çünkü "mühendislik" bir Cygwin göreceli yenisinin (benim gibi) kullanması ve anlaması için yeterince basit. Bu arada, C: \ Users \ <your_user_name> \ AppData \ Roaming \ Microsoft \ Windows \ SendTo klasörüne .bat dosyanıza bir kısayol koymak, içindeki içeriğe duyarlı (sağ tıklama) menünüzden Gönder -> Cygwin'e gidebileceğiniz anlamına gelir. Explorer (ve istediğiniz yerde ~ / set ile istediğiniz yerde bir terminal açın).
mike rodent

19

Cygwin mountartık bir dizini bağlamanıza izin veren bağlama yöntemini destekliyor . Bu nedenle, aşağıdaki satırı /etc/fstaböğesine ekleyebilir ve ardından kabuğunuzu yeniden başlatabilirsiniz:

c:/Users /home none bind 0 0

Bu günümüzde doğru yoldur. Diğer cevaplar geçerliliğini yitirdi.
2014

@ceving Bu herhangi bir yerde belgelenmiş mi?
Esad Saeeduddin

10

HOME ortam değişkeninizi değiştirin.

XP'de, Bilgisayarım >> Özellikler >> Gelişmiş >> Ortam Değişkenleri >> Kullanıcı Değişkenleri >> [değişken HOME'u seçin] >> için sağ tıklayın


1
Bu, tüm Windows uygulamalarınız için de HOME ortam değişkeninizi değiştirecektir.
mob

Çok doğru. Peki HOME değişkenini kullanan hangi Windows uygulamalarınız var? EmacsW32 ve .... Cygwin var. Emacs'i ilk kurduğumdan beri, cygwin'deki evim de burada yatıyor.
Michael Paulukonis

1
Bu / etc / passwd ile bir şekilde çelişmeyecek mi? Ortam değişkeni ayarlanmamışsa, varsayılan olarak / etc / passwd'nin HOME'u olur mu? Eğer bir çakışma yoksa ve varsayılan olarak / etc / passwd olacaksa, mükemmel bir kurulum gibi görünüyor: Cygwin'i iş yerinde kurmak için izin istemekten kaçınmak için bir başparmak sürücüsünden çalıştırıyorum ve bu yüzden bir Unix'im var- cebimde sadece bir Windows kutusu varken kullanabileceğim bir ortam gibi. İş yerinde, iş bilgisayarımın ana dizinine sahip olacağım ve başka bir yerde başparmak sürücüsünde bir ana dizine sahip olabilirim.
iconoclast

6

Öncelikli olarak $ HOME ile ilgili bit için bir düzeltme / güncelleme eklemek istiyorum. / Etc / passwd'deki ev dizini her şeyden önceliklidir.

Uzun süredir Cygwin kullanıcısıyım ve Windows 7 x64 ve Cygwin V1.126'nın temiz bir kurulumunu yaptım. Her seferinde ssh koştuğumda neden şunu almaya devam ettiğimi anlamaya çalışırken çıldırıyordum:

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.
...

Windows ortamında HOME = c: \ users \ dhaynes tanımını ekledim ama yine de '/ home / dhaynes' oluşturmaya çalışıyordu. HOME'u / cygdrive / c / users / dhaynes olarak ayarlamak dahil yapabildiğim her kombinasyonu denedim. Hata mesajı için Google arandı, hiçbir şey bulamadı, cygwin sitesinde hiçbir şey bulamadı. Cygwin'i bash.exe'den değil cmd.exe'den kullanıyorum ama sorun her ikisinde de mevcuttu.

Sonunda / etc / passwd'deki ana dizinin $ HOME ortam değişkenine göre öncelikli olduğunu fark ettim. Basitçe 'mkpasswd -l> / etc / passwd'yi yeniden çalıştırdım ve bu ana dizini güncelledi, şimdi her şey ssh ile iyi.

Bu, sysadmin deneyimi olan linux türleri için açık olabilir, ancak esas olarak Windows'u kullanan bizler için biraz belirsizdir.


1
/ Etc / passwd'deki ev dizini her şeyden öncelikli DEĞİLDİR. Ancak, uzaktan oturum açarken veya ssh kullanırken HOME dizin yolunuz için birincil kaynak olarak kullanılır. Cygwin SSS sayfasından
Christopher

2

Cygwin'in birlikte geldiği cwRsync (Windows için Cygwin + Rsync) kullanıyorum ve / etc / passwd'yi bulamıyorum.

Ve söylemeye devam etti

Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).

Bu yüzden rsync'i çalıştırmadan önce HOME değişkenini değiştiren bir toplu iş dosyası yazdım. Gibi bir şey:

set HOME=.
rsync /path1 user@host:/path2

Ve viyola! .ssh klasörü mevcut çalışma dizininde belirdi ve rsync, rsa parmak izleriyle can sıkıcı bir durum bıraktı.

Bu hızlı bir düzeltme, ancak daha sonra HOME'u daha güvenli bir konuma değiştirmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.