जवाबों:
Cygwin 1.7.34 के साथ शुरू , ऐसा करने के लिए अनुशंसित तरीका कस्टम db_home
सेटिंग को जोड़ना है /etc/nsswitch.conf
। ऐसा करते समय एक सामान्य इच्छा यह है कि आप अपने सिगविन होम डायरेक्टरी को अपने विंडोज यूजर प्रोफाइल डायरेक्टरी के बराबर करें। यह सेटिंग यह करेगी:
db_home: windows
या, समकक्ष:
db_home: /%H
यदि आप इस योजना पर कुछ बदलाव चाहते हैं, तो आपको बाद के फॉर्म का उपयोग करने की आवश्यकता है, जैसे कि आपकी सिग्विन होम फाइलों को अपने विंडोज यूजर प्रोफाइल डायरेक्टरी की उपनिर्देशिका में अलग करना :
db_home: /%H/cygwin
विकल्प के लिए कई अन्य वैकल्पिक योजनाएं हैं windows
और कई अन्य %
टोकन जिन्हें आप इसके बजाय %H
या इसके अलावा उपयोग कर सकते हैं । देखें वाक्य रचना वर्णन में Cygwin उपयोगकर्ता गाइड जानकारी के लिए।nsswitch.conf
यदि आपने 1.7.34 से पहले Cygwin स्थापित किया है या इसकी mkpasswd
उपयोगिता को चलाया है ताकि आपके पास एक /etc/passwd
फ़ाइल हो, तो आप उस फ़ाइल में अपने उपयोगकर्ता के प्रवेश को संपादित करके अपनी Cygwin होम डायरेक्टरी को बदल सकते हैं। आपकी होम निर्देशिका आपके उपयोगकर्ता की लाइन में /etc/passwd
.¹ में दूसरा-से-अंतिम तत्व है
जो भी आप इसे करते हैं, यह HOME
शेल स्टार्टअप के दौरान पर्यावरण चर को सेट करता है। do
विषय पर अधिक के लिए यह FAQ आइटम देखें ।
फुटनोट:
इसके बजाय नए एसएएम / एडी-आधारित तंत्र का उपयोग करने के लिए आगे बढ़ने /etc/passwd
और /etc/group
बाहर निकलने पर विचार करें ।
हालांकि यह केवल %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
लाइन या हार्ड-कोड को विंडोज होम निर्देशिका में हटाता हूं , तो sh
शुरू होने में लगभग 0.2 से 0.3 सेकंड लगते हैं। मैं हार्ड-कोडेड समाधान के साथ जा रहा हूं, उदाहरण के लिए db_home: /cygdrive/c/Users/susam
, क्योंकि मैं अक्सर कमांड प्रॉम्प्ट से शेल स्क्रिप्ट चलाता हूं sh
, जैसे कमांड का उपयोग sh foo.sh
करना, और 2 सेकंड से अधिक समय तक इंतजार करना असुविधाजनक हो जाता है।
Cygwin 1.7.34 या उच्चतर Cygwin का उपयोग करने वालों के लिए कॉन्फ़िगर करने का समर्थन करता है कि घर की निर्देशिका, लॉगिन शेल, और gecre की जानकारी कैसे प्राप्त करें /etc/nsswitch.conf
। यह सिगविन उपयोगकर्ता गाइड अनुभाग में विस्तृत है:
यदि आपने पहले एक बनाया है /etc/passwd
/etc/group
फ़ाइल या फ़ाइल तो आप उन लोगों को हटाना चाहते हैं और नए विंडोज सिक्योरिटी मॉडल का उपयोग करके Cygwin को 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
तो डिफ़ॉल्ट रूप से, साइगविन सिर्फ घर के लिए निर्धारित करता है /home/$USERNAME
। आप इसे बदल सकते हैं, हालांकि किसी अन्य कस्टम पथ को इंगित करने के लिए जिसे आप चाहते हैं। समर्थित वाइल्डकार्ड वर्ण हैं:
%u
साइग्विन यूजरनेम (यह लोअरकेस यू है)।%U
विंडोज उपयोगकर्ता नाम (यह अपरकेस यू) है।%D
NetBIOS शैली में विंडोज डोमेन।%H
POSIX शैली में विंडोज होम डायरेक्टरी। ध्यान दें, db_home:
सेटिंग के लिए, यह केवल पूर्ववर्ती स्लैश के बाद सही समझ में आता है, जैसा कि अंदर हैdb_home: /%H/cygwin
%_
चूंकि स्कीमाटा को अलग करने के लिए स्पेस और TAB कैरेक्टर का इस्तेमाल किया जाता है, इसलिए फाइलनेम में स्पेस दिया जाना चाहिए %_
(जो कि एक अनटॉर्क है)।%%
प्रति-प्रतिशत चरित्र।पथ के स्थान पर, आप चार नामित पथ स्कीमाता में से एक निर्दिष्ट कर सकते हैं जो पूर्वनिर्धारित हैं।
windows
उपयोगकर्ता की होम निर्देशिका उसी निर्देशिका पर सेट होती है जिसका उपयोग Windows होम निर्देशिका के रूप में किया जाता है, आमतौर पर %USERPROFILE%
या की तर्ज पर कुछ C:\Users\$USERNAME
। बेशक, विंडोज निर्देशिका को सिगविन द्वारा पोसिक्स-शैली में परिवर्तित किया गया है।
cygwin
केवल विज्ञापन: उपयोगकर्ता की होम डायरेक्टरी cygwinUome विशेषता वर्ग से cygwinHome विशेषता में दिए गए POSIX पथ पर सेट है। "साइबरविन स्कीमा" नामक अनुभाग भी देखें ।
unix
केवल AD: उपयोगकर्ता की होम निर्देशिका पॉज़िक्स पथ में दी गई है, जो पॉज़िक्सअकाउंट सहायक वर्ग से unixHomeDirectory विशेषता में दी गई है। "यूनिक्स स्कीमा" नामक अनुभाग भी देखें ।
desc
उपयोगकर्ता की होम निर्देशिका घर में दिए गए POSIX पथ पर सेट है = "..." SAM या AD में उपयोगकर्ता के विवरण विशेषता में XML- एक जैसे सेटिंग। विस्तृत विवरण के लिए "desc स्कीमा" नामक अनुभाग देखें।
निम्नलिखित Cygwin में उपयोगकर्ता के होम डायरेक्टरी को वैसा ही बना देगा जैसा कि Windows होम डायरेक्टरी के लिए उपयोग किया जाता है।
db_home: windows
Cygwin 1.7.33 या इससे पहले का उपयोग करने वालों के लिए , नवीनतम संस्करण Cygwin में अपडेट करें और पहले उपयोग की गई /etc/passwd
और /etc/group
फ़ाइलों को हटा दें , फिर ऊपर दिए गए चरणों को देखें।
और, नीचे दिए गए इन पुराने चरणों का पालन करें।
सबसे पहले, होम के लिए एक विंडोज़ पर्यावरण चर सेट करें जो आपके उपयोगकर्ता प्रोफ़ाइल की ओर इशारा करता है:
HOME
%USERPROFILE%
अब हम केवल बनाए /etc/passwd
गए विंडोज %HOME%
चर के साथ Cygwin फ़ाइल को अपडेट करने जा रहे हैं । शेल लॉगिन और दूरस्थ लॉगिन के माध्यम से उपयोगकर्ता के स्थान को बताने के लिए उन ssh
पर भरोसा करेंगे/etc/passwd
$HOME
पथ ।
साइगविन बैश कमांड प्रॉम्प्ट पर निम्न टाइप करें:
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
-d
स्विच DOMAIN उपयोगकर्ताओं को शामिल करने के mkpasswd बताता है, जबकि-l
केवल उत्पादन स्थानीय मशीन उपयोगकर्ताओं के लिए है। यह महत्वपूर्ण है यदि आप कार्य में एक पीसी का उपयोग कर रहे हैं जहां उपयोगकर्ता जानकारी विंडोज डोमेन नियंत्रक से प्राप्त की जाती है।
अब, आप समूहों के लिए भी ऐसा कर सकते हैं, हालांकि यह आवश्यक नहीं है जब तक कि आप एक कंप्यूटर का उपयोग नहीं करेंगे जो विंडोज डोमेन का हिस्सा है। Cygwin, Windows खाता डेटाबेस से समूह की जानकारी पढ़ता है, लेकिन /etc/group
यदि आपकी मशीन अक्सर अपने डोमेन नियंत्रक से डिस्कनेक्ट हो जाती है, तो आप एक फ़ाइल जोड़ सकते हैं ।
सिग्विन बैश प्रॉम्प्ट पर निम्न टाइप करें:
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
अब, Cygwin से बाहर निकलें और इसे फिर से शुरू करें। आपको पता होना चाहिए कि आपका गृह पथ आपके विंडोज उपयोगकर्ता प्रोफ़ाइल के समान स्थान पर इंगित करता है - अर्थात/cygdrive/c/Users/username
mkgroup
उपरोक्त उद्देश्य को स्पष्ट करने के लिए एक स्पष्टीकरण जोड़ा है।
मैंने कुछ सरल किया। मैं विंडोज 7 पर्यावरण चर को बदलना नहीं चाहता था। इसलिए मैंने सीधे Cygwin.bat फ़ाइल को संपादित किया।
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
यह सिर्फ इस होम डायरेक्टरी के साथ स्थानीय शेल शुरू करता है; यही तो मैं चाहता था। मैं इसे दूरस्थ रूप से एक्सेस नहीं करने वाला हूं, इसलिए इसने मेरे लिए काम किया।
%HOME%
स्थान पर एक अलग vim कॉन्फ़िगरेशन बनाए रखेगा , जबकि Cygwin विम $HOME
आपके द्वारा घोषित नए पथ का उपयोग करता है ।
Cygwin mount
अब बाइंड पद्धति का समर्थन करता है जो आपको एक निर्देशिका माउंट करने देता है। इसलिए आप केवल निम्नलिखित पंक्ति को जोड़ सकते हैं /etc/fstab
, फिर अपना शेल पुनः आरंभ करें:
c:/Users /home none bind 0 0
अपने गृह परिवेश चर को बदलें।
XP पर, इसके राइट-क्लिक माय कंप्यूटर >> प्रॉपर्टीज >> एडवांस्ड >> एनवायरनमेंट वेरिएबल्स >> यूजर वेरिएबल्स के लिए >> [सिलेक्टेड वैरिएबल HOME] >> एडिट एड
मैं $ HOME के बारे में बिट में सुधार / अद्यतन जोड़ना पसंद करूंगा। / Etc / passwd में होम डाइरेक्टरी हर चीज पर पूर्वता लेती है।
मैं एक लंबे समय से Cygwin उपयोगकर्ता हूं और मैंने अभी-अभी विंडोज 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.
...
मैं Windows परिवेश में HOME = c: \ users \ dhaynes की परिभाषा जोड़ता हूं लेकिन फिर भी यह '/ home / dhaynes' बनाने का प्रयास करता रहा। मैंने हर उस कॉम्बो को आज़माया, जिसमें मैं घर पर / cygdrive / c / users / dhaynes सेट कर सकता हूं। त्रुटि संदेश के लिए खोजा गया, कुछ भी नहीं मिल सका, साइबरविन साइट पर कुछ भी नहीं मिला। मैं bg.exe नहीं, लेकिन cmd.exe से cygwin का उपयोग करता हूं, लेकिन समस्या दोनों में मौजूद थी।
मुझे आखिरकार एहसास हुआ कि घर की निर्देशिका में / etc / passwd $ HOME पर्यावरण चर पर पूर्वता ले रहा था। मैंने 'mkpasswd -l> / etc / passwd' को री-रन किया और उस होम डाइरेक्टरी को अपडेट किया, जो अब ssh के साथ ठीक है।
यह sysadmin अनुभव के साथ लिनक्स प्रकारों के लिए स्पष्ट हो सकता है, लेकिन हममें से जो मुख्य रूप से विंडोज का उपयोग करते हैं, वह थोड़ा अस्पष्ट है।
मैं cwRsync (विंडोज के लिए Cygwin + Rsync) का उपयोग करने के लिए होता हूं, जहां साइबरविन बंडल में आता है, और मैं / 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).
इसलिए मैंने एक बैच फ़ाइल लिखी, जिसने rsync चलाने से पहले गृह चर को बदल दिया। कुछ इस तरह:
set HOME=.
rsync /path1 user@host:/path2
और वायोला! .ssh फ़ोल्डर वर्तमान कार्यशील dir में दिखाई दिया और rsync ने rsa फ़िंगरप्रिंट से परेशान होना बंद कर दिया।
यह एक त्वरित हॉटफ़िक्स है, लेकिन बाद में आपको होम को अधिक सुरक्षित स्थान पर बदलना चाहिए।
db_home:
और इसे काम करने से पहले # हटाना न भूलें ।