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?
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?
Yanıtlar:
Cygwin 1.7.34 ile başlayarak , bunu yapmak için tavsiye edilen yolu özel eklemektir db_home
ayarı /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
windows
Seçenek için birkaç başka alternatif şema ve %
onun yerine %H
veya 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 mkpasswd
yardımcı programını çalıştırdıysanız, /etc/passwd
Cygwin 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, HOME
ortam 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:
Hareketli düşünün /etc/passwd
ve /etc/group
kullanmak için yolumdan yeni SAM / AD tabanlı bir mekanizma yerine.
%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
.
ssh
düzenleme yapana kadar düzgün çalışmayacaktı /etc/passwd
.
/etc/passwd
dosyayı yeniden oluşturarak giderilir . Bu tür sorunları önlemek için cevabımı burada görün .
db_home: /%H
bir 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/%U
sahip olmak istediğimi yaptım.
db_home: windows
, sh
baş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/%U
sürüyor sh
. db_home
Satırı sildiğimde veya Windows ana dizinine sabit sh
kodladığı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
, sh
komutu kullanarak Komut İstemi'nden kabuk betikleri çalıştırdığım için , örneğin sh foo.sh
2 saniyeden fazla beklemek zahmetli hale geliyor.
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/passwd
veya /etc/group
dosya 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.conf
Dosyası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ı.%H
POSIX 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.
windows
Kullanı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.
cygwin
Yalnı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 .
unix
Yalnı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 .
desc
Kullanı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 önceki sürümleri kullananlar için , Cygwin'in en son sürümüne güncelleyin ve önceden kullanılan dosyaları /etc/passwd
ve /etc/group
dosyaları 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:
HOME
%USERPROFILE%
Şimdi Cygwin /etc/passwd
dosyası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/passwd
onlara kullanıcının $HOME
yolunun 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 -l
sadece çı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/group
makinenizin 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
mkgroup
Yukarıdakilerin amacını açıklığa kavuşturmak için bir açıklama ekledim .
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ı.
%HOME%
Cygwin vim, $HOME
ilan ettiğiniz yeni yolu kullanırken, eski Windows konumunda ayrı bir vim yapılandırmasını koruyacak olan Gvim buna bir örnek olabilir .
Cygwin mount
artı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
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
Ö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.
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.
db_home:
ve çalışmasını sağlamak için önce # işaretini kaldırmayı unutmayın .