स्थापना के बाद मैं अपना Cygwin होम फ़ोल्डर कैसे बदल सकता हूं?


121

मैंने अभी Cygwin स्थापित किया है, और यह मेरे Z: ड्राइव पर बैश प्रॉम्प्ट में होम डायरेक्टरी जैसा दिखता है। यह वह जगह नहीं है जहाँ मैं चाहता हूँ।

मेरे द्वारा इसे कैसे बदला जा सकता है?


1
Cygwin 1.7.34 या इसके बाद के संस्करण का उपयोग करने वालों के लिए, अन्य पोस्ट में बताए गए तरीकों का उपयोग करें, लेकिन इसे हटाने के लिए db_home:और इसे काम करने से पहले # हटाना न भूलें ।
मय्युल

जवाबों:


180

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 आइटम देखें ।


फुटनोट:

  1. इसके बजाय नए एसएएम / एडी-आधारित तंत्र का उपयोग करने के लिए आगे बढ़ने /etc/passwdऔर /etc/groupबाहर निकलने पर विचार करें ।

  2. हालांकि यह केवल %HOME%नियंत्रण कक्ष के माध्यम से सेट करना संभव है , यह आधिकारिक रूप से हतोत्साहित किया जाता है । इतना ही नहीं यह अनजाने में उपरोक्त तंत्र को ओवरराइड करता है, यह हमेशा काम नहीं करता है, जैसे कि शेल स्क्रिप्ट के माध्यम से चल रहा है cron


3
ध्यान दें कि यदि आपने git-scm.com/download/win से Git bash शेल स्थापित किया है , तो आपके पास साइबरविन इंस्टॉल (आपके द्वारा चुने गए विकल्पों के आधार पर) के साथ समस्याएँ हो सकती हैं। मेरा cygwin ~ मेरे Win7 उपयोगकर्ता निर्देशिका में समाप्त हो गया और वर्णित के अनुसार sshसंपादन तक सही ढंग से काम नहीं करेगा /etc/passwd
एलन

Git इंस्टॉलेशन के साथ @Allan में दिए गए मुद्दों का उल्लेख है कि होम के लिए Windows पर्यावरण चर सेट करके और फिर /etc/passwdफ़ाइल को फिर से बनाना । ऐसे मुद्दों से बचने के लिए मेरा जवाब यहां देखें ।
क्रिस्टोफर

11
db_home: /%Hएक डोमेन उपयोगकर्ता नाम (स्थानीय उपयोगकर्ता नाम के बजाय) के लिए हल हो सकता है, जो वह नहीं हो सकता है जो आप करना चाहते हैं। db_home: /cygdrive/c/Users/%Uमैंने वही किया जो मैं करना चाहता था।
अब्दुल

2
मुझे विभिन्न तरीकों के बीच एक प्रदर्शन अंतर दिखाई देता है। जब मैं उपयोग करता हूं 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 सेकंड से अधिक समय तक इंतजार करना असुविधाजनक हो जाता है।
सुषम पाल

1
धन्यवाद @abdull, db_home: / cygdrive / c / Users /% U मेरे लिए आवश्यक उत्तर है। db_home: विंडोज़ "/ home /% U" का उपयोग करती है, जो मेरे विन्यास पर मौजूद नहीं है।
जेफ

74

साइगविन 1.7.34+

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 शैली में विंडोज डोमेन।
  • %HPOSIX शैली में विंडोज होम डायरेक्टरी। ध्यान दें, db_home:सेटिंग के लिए, यह केवल पूर्ववर्ती स्लैश के बाद सही समझ में आता है, जैसा कि अंदर हैdb_home: /%H/cygwin
  • %_ चूंकि स्कीमाटा को अलग करने के लिए स्पेस और TAB कैरेक्टर का इस्तेमाल किया जाता है, इसलिए फाइलनेम में स्पेस दिया जाना चाहिए %_ (जो कि एक अनटॉर्क है)।
  • %% प्रति-प्रतिशत चरित्र।

पथ के स्थान पर, आप चार नामित पथ स्कीमाता में से एक निर्दिष्ट कर सकते हैं जो पूर्वनिर्धारित हैं।

  1. windowsउपयोगकर्ता की होम निर्देशिका उसी निर्देशिका पर सेट होती है जिसका उपयोग Windows होम निर्देशिका के रूप में किया जाता है, आमतौर पर %USERPROFILE%या की तर्ज पर कुछ C:\Users\$USERNAME। बेशक, विंडोज निर्देशिका को सिगविन द्वारा पोसिक्स-शैली में परिवर्तित किया गया है।

  2. cygwinकेवल विज्ञापन: उपयोगकर्ता की होम डायरेक्टरी cygwinUome विशेषता वर्ग से cygwinHome विशेषता में दिए गए POSIX पथ पर सेट है। "साइबरविन स्कीमा" नामक अनुभाग भी देखें ।

  3. unixकेवल AD: उपयोगकर्ता की होम निर्देशिका पॉज़िक्स पथ में दी गई है, जो पॉज़िक्सअकाउंट सहायक वर्ग से unixHomeDirectory विशेषता में दी गई है। "यूनिक्स स्कीमा" नामक अनुभाग भी देखें ।

  4. descउपयोगकर्ता की होम निर्देशिका घर में दिए गए POSIX पथ पर सेट है = "..." SAM या AD में उपयोगकर्ता के विवरण विशेषता में XML- एक जैसे सेटिंग। विस्तृत विवरण के लिए "desc स्कीमा" नामक अनुभाग देखें।

निम्नलिखित Cygwin में उपयोगकर्ता के होम डायरेक्टरी को वैसा ही बना देगा जैसा कि Windows होम डायरेक्टरी के लिए उपयोग किया जाता है।

db_home: windows

सिग्विन 1.7.33 या पहले

Cygwin 1.7.33 या इससे पहले का उपयोग करने वालों के लिए , नवीनतम संस्करण Cygwin में अपडेट करें और पहले उपयोग की गई /etc/passwdऔर /etc/groupफ़ाइलों को हटा दें , फिर ऊपर दिए गए चरणों को देखें।

और, नीचे दिए गए इन पुराने चरणों का पालन करें।

सबसे पहले, होम के लिए एक विंडोज़ पर्यावरण चर सेट करें जो आपके उपयोगकर्ता प्रोफ़ाइल की ओर इशारा करता है:

  1. कंट्रोल पैनल पर ओपन सिस्टम
  2. पर उन्नत टैब पर क्लिक करें पर्यावरण चर (नीचे की ओर) पर
  3. उपयोगकर्ता चर क्षेत्र में "नया ..." पर क्लिक करें
  4. चर नाम के लिए दर्ज करें HOME
  5. परिवर्तनशील मान दर्ज करने के लिए %USERPROFILE%
  6. इस नई सेटिंग को लागू करने के लिए सभी खुले संवाद बॉक्स में ओके पर क्लिक करें

अब हम केवल बनाए /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


7
-d वास्तव में धीमी है। यदि आपको केवल वर्तमान उपयोगकर्ता की आवश्यकता है तो आप इसके बजाय -c का उपयोग कर सकते हैं: sinewalker.wordpress.com/2006/10/27/cygwin-users-and-groups
बेन

बेन सही है, कि आप वर्तमान उपयोगकर्ता के लिए प्रविष्टि निर्दिष्ट कर सकते हैं-इसके बजाय -c निर्दिष्ट करके। यदि आप फिर भी, Cygwin प्रदर्शित करेंगे ????? साझा फ़ाइल-सिस्टम पर फ़ाइलों को सूचीबद्ध करते समय उपयोगकर्ता और समूह के लिए, क्योंकि इसमें आपके डोमेन या स्थानीय कंप्यूटर पर अन्य उपयोगकर्ताओं और समूहों के रिकॉर्ड नहीं होंगे।
क्रिस्टोफर

1
क्या मैं शब्दांकन में एक छोटा सा बदलाव सुझा सकता हूं: 'अब के बजाय, अपनी Cygwin / etc / passwd फ़ाइल को एक नए $ HOME पथ के साथ अपडेट करें', मैं सुझाव दूंगा कि अब हम Cygwin / etc / passwd फ़ाइल को अपडेट करने जा रहे हैं होम वेरिएबल हमने अभी बनाया है। ' बहुत धन्यवाद
रॉबर्ट

-D के साथ इसमें मिनट लगते हैं (मैंने 5 मिनट बाद मार दिया है) पूरा होने में। इसलिए मैंने -c के साथ फिर से दौड़ लगाई है। मेरी जरूरतों के लिए सभी अच्छा है।
bartosz.r

1
@ शमूएल ने mkgroupउपरोक्त उद्देश्य को स्पष्ट करने के लिए एक स्पष्टीकरण जोड़ा है।
क्रिस्टोफर

30

मैंने कुछ सरल किया। मैं विंडोज 7 पर्यावरण चर को बदलना नहीं चाहता था। इसलिए मैंने सीधे Cygwin.bat फ़ाइल को संपादित किया।

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

यह सिर्फ इस होम डायरेक्टरी के साथ स्थानीय शेल शुरू करता है; यही तो मैं चाहता था। मैं इसे दूरस्थ रूप से एक्सेस नहीं करने वाला हूं, इसलिए इसने मेरे लिए काम किया।


दूसरा यह कि मैं अपने घरेलू वातावरण चर को अपने देव यंत्र में नहीं बदल सकता।
डेकांग

@WernerCD मैं केवल सावधानी बरतूँगा कि देशी विंडोज अनुप्रयोगों के साथ बातचीत करते समय इसके अनपेक्षित परिणाम हो सकते हैं। आपके Windows अनुप्रयोग पुराने स्थान पर गृह की तलाश करते रहेंगे। एक उदाहरण Gvim होगा, जो पुराने Windows %HOME%स्थान पर एक अलग vim कॉन्फ़िगरेशन बनाए रखेगा , जबकि Cygwin विम $HOMEआपके द्वारा घोषित नए पथ का उपयोग करता है ।
क्रिस्टोफर

यह बहुत अच्छा है ... 5 साल बाद और मुझे यह पसंद है क्योंकि "इंजीनियरिंग" साइगविन रिश्तेदार नवाब (मेरे जैसे) के लिए उपयोग करने और समझने के लिए काफी सरल है। संयोग से, C: \ Users \ C में आपकी .bat फ़ाइल का शॉर्टकट डालना: \ Users \ <your_user_name> \ AppData \ Roaming \ Microsoft \ Windows \ SendTo का अर्थ है कि आप अपने संदर्भ-संवेदनशील (राइट-क्लिक) मेनू में Send -> Cygwin पर जा सकते हैं एक्सप्लोरर (और कहीं भी एक टर्मिनल खोलें, ~ जहाँ भी आप चाहें सेट करें)।
माइक कृंतक

19

Cygwin mountअब बाइंड पद्धति का समर्थन करता है जो आपको एक निर्देशिका माउंट करने देता है। इसलिए आप केवल निम्नलिखित पंक्ति को जोड़ सकते हैं /etc/fstab, फिर अपना शेल पुनः आरंभ करें:

c:/Users /home none bind 0 0

यह आजकल सही तरीका है। अन्य उत्तर अप्रचलित हैं।
छत

@ceving क्या यह कहीं भी प्रलेखित है?
असद सईदुद्दीन

10

अपने गृह परिवेश चर को बदलें।

XP पर, इसके राइट-क्लिक माय कंप्यूटर >> प्रॉपर्टीज >> एडवांस्ड >> एनवायरनमेंट वेरिएबल्स >> यूजर वेरिएबल्स के लिए >> [सिलेक्टेड वैरिएबल HOME] >> एडिट एड


1
यह आपके सभी विंडोज़ अनुप्रयोगों के लिए आपके गृह परिवेश चर को भी बदल देगा।
भीड़

सच सच। लेकिन आपके पास कौन से विंडोज़ अनुप्रयोग हैं जो गृह चर का उपयोग करते हैं? मेरे पास EmacsW32 और .... सिगविन है। जब से मैंने Emacs को सबसे पहले स्थापित किया है, वहीं मेरा साइबरविन होम निहित है।
माइकल पॉलुकोनिस

1
इस संघर्ष के साथ / etc / passwd किसी तरह नहीं होगा? पर्यावरण चर सेट नहीं है, तो क्या यह डिफ़ॉल्ट रूप से / etc / passwd के घर पर होगा? यदि कोई संघर्ष नहीं है और यह डिफ़ॉल्ट रूप से / etc / passwd के लिए होगा, तो यह बिल्कुल सही सेट अप जैसा लगता है: मैं एक थंबड्राइव से साइगविन चला रहा हूं, दोनों को काम पर स्थापित करने की अनुमति मांगने से बचने के लिए, और इसलिए मेरे पास एक यूनिक्स है- मेरी जेब में पर्यावरण जैसा है जिसका उपयोग मैं तब कर सकता हूं जब केवल एक विंडोज बॉक्स उपलब्ध हो। काम पर मैं अपने काम के कंप्यूटर की होम निर्देशिका, और कहीं और मैं थंबड्राइव पर एक घर निर्देशिका हो सकता है।
iconoclast

6

मैं $ 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 अनुभव के साथ लिनक्स प्रकारों के लिए स्पष्ट हो सकता है, लेकिन हममें से जो मुख्य रूप से विंडोज का उपयोग करते हैं, वह थोड़ा अस्पष्ट है।


1
घर की निर्देशिका / etc / passwd हर चीज पर पूर्वता नहीं बरतता है। हालाँकि इसे दूरस्थ रूप से लॉग इन करते समय, या ssh का उपयोग करते हुए आपके होम निर्देशिका पथ के लिए प्राथमिक स्रोत के रूप में उपयोग किया जाता है। इसे साइगविन
क्रिस्टोफर

2

मैं 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 फ़िंगरप्रिंट से परेशान होना बंद कर दिया।

यह एक त्वरित हॉटफ़िक्स है, लेकिन बाद में आपको होम को अधिक सुरक्षित स्थान पर बदलना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.