क्या टिल्ड को फिर से परिभाषित करना संभव है ('~', होम डायरेक्टरी)?


13

क्या घर की निर्देशिका को फिर से परिभाषित करना संभव है? इसके बजाय उदाहरण के लिए , यानी किसी अन्य निर्देशिका में विस्तार करना (जैसा कि वास्तविक होम निर्देशिका को बदलने का विरोध किया जाता है, जहां उपयोगकर्ताओं की होम फाइलें स्थित हैं)।/ext1/username/home/username~

(यह सवाल ज्यादातर अकादमिक है, क्योंकि ऐसा करने के लिए यह बुरी प्रथा लगती है। cshशीर्ष 10. पढ़ने के बावजूद मेरे पास उपयोग करने के मामले में कोई विकल्प नहीं है ।)


11
क्या आप वास्तविक घर निर्देशिका को बदलने का मतलब है , या आप ~वास्तविक घर निर्देशिका के अलावा कुछ और करने के लिए खोल का विस्तार करते हैं?
derobert

मेरा मतलब ~एक और निर्देशिका का विस्तार करना है (नहीं, यदि मैं आपके विकल्प को सही ढंग से समझता हूं, तो यह बदलते हुए कि सभी उपयोगकर्ताओं की होम निर्देशिका कहां स्थित होगी)। मुझे नहीं पता ~था कि $HOMEउनके उत्तर में वर्णित @michas के संक्षिप्त रूप के रूप में व्याख्या की गई थी ।
एंड्रयू चेयोंग

2
नहीं सभी उपयोगकर्ताओं के घर निर्देशिका, तो आप सिर्फ एक को बदल सकते हैं, उसके जवाब में SLM शो के रूप में।
derobert

जवाबों:


28

टिल्ड ~की व्याख्या आपके शेल द्वारा की जाती है। आपका खोल ~एक संक्षिप्त रूप के रूप में व्याख्या करेगा $HOME

कोशिश करो (echo ~; HOME=foo; echo ~)। यह पहले अपने असली घर निर्देशिका और बाद में "फू" प्रिंट करना चाहिए, जैसा $HOMEकि आप उस पर सेट करते हैं।

$HOMEआपके सिस्टम कॉन्फ़िगरेशन से डिफ़ॉल्ट मान आता है। getent passwdसभी ज्ञात उपयोगकर्ताओं और उनके होम निर्देशिकाओं को सूचीबद्ध करने के लिए उपयोग करें । आपके सिस्टम कॉन्फ़िगरेशन के आधार पर वे प्रविष्टियाँ /etc/passwdया किसी दूरस्थ निर्देशिका सेवा से आ सकती हैं ।

यदि आप केवल अपने होम डायरेक्टरी को अस्थायी रूप से पुनर्परिभाषित करना चाहते हैं, तो बस दूसरा सेट करें $HOME

यदि आप इसे स्थायी रूप से बदलना चाहते हैं, तो आपको पासवार्ड प्रविष्टि को बदलना होगा, उदाहरण के लिए मैन्युअल रूप से संपादन द्वारा /etc/passwd


धन्यवाद, @michas। विश्वास नहीं कर सकता कि मैं उस चर को याद किया। (BTW, cshप्रासंगिक चर में निकला है $home(लोअरकेस), और आप setenv HOME /ext1/acheongकेवल नहीं कर सकते हैं set home=/ext1/acheong, और यह मेरे लिए काम कर सकता है।)
एंड्रयू चेन्ग

2
इसे स्थायी रूप से बदलने के लिए, आप उपयोग भी कर सकते हैंusermod -d
user606723 15

1
सीधे vipwसंपादन के बजाय (या जो भी आपका OS प्रदान करता है) का उपयोग करें /etc/passwd। डायरेक्ट एडिटिंग फ़ाइल को दूषित कर देती है, जिससे उबरना मुश्किल हो सकता है।
कीथ थॉम्पसन

11

जिस मूल्य के लिए उपयोग किया जाता है, ~वह उस मूल्य से निर्धारित होता है जो आपको प्रशासनिक डेटाबेस से प्राप्त होता है ( getent passwd), आमतौर पर /etc/passwdफ़ाइल में, प्रत्येक उपयोगकर्ता के घर निर्देशिका के लिए निर्धारित किया जाता है।

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

इस फ़ाइल में 6 वाँ कॉलम वह है जहाँ किसी प्रकार से cd ~आने वाले मूल्य का उपयोग किया जाता है।

nsswitch

आप देख सकते हैं कि कमांड का उपयोग करके उपयोगकर्ता के होम डायरेक्टरी के लिए एक सिस्टम क्या उपयोग करेगा getent passwd:

$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

"डेटाबेस" जो इन्हें प्रदान करता है, आपके सिस्टम रिज़ॉल्वर के माध्यम से नियंत्रित होता है, जिसमें परिभाषित किया गया है /etc/nsswitch.conf

$ grep passwd /etc/nsswitch.conf 
#passwd:    db files nisplus nis
passwd:     files

उपर्युक्त फाइलें मतलब है /etc/passwd, लेकिन "डेटाबेस" उदाहरण के लिए, LDAP, NIS या नेटवर्क के अन्य स्थानों से आ सकता है।

आगे बढ़ते / पुनर्परिभाषित?

इस ऑपरेशन को करने के लिए खातों के निर्माण के बाद थोड़ा मुश्किल है। यदि आप स्क्रैच से खाते बना रहे हैं, तो उपयोगकर्ता के अपने होम डायरेक्टरी के स्थान को फिर से परिभाषित करना तुच्छ है। useraddकमांड चलाते समय आप उपयोगकर्ता के घर निर्देशिका के लिए उपयोग किए जाने वाले स्थान को निर्दिष्ट कर सकते हैं।

उदाहरण

$ useradd -d /ext1/acheong ...

मैन पेज से अंश

-d, --home HOME_DIR
   The new user will be created using HOME_DIR as the value for the users 
   login directory. The default is to append the LOGIN name to BASE_DIR and 
   use that as the login directory name. The directory HOME_DIR does not 
   have to exist but will not be created if it is missing.

मौजूदा खातों के लिए?

यह सर्जिकल ऑपरेशन से अधिक हो जाता है क्योंकि अक्सर उपयोगकर्ता की होम डायरेक्टरी के पथ को कॉन्फ़िगरेशन फ़ाइलों में सांख्यिकीय रूप से शामिल किया जाता है, जिससे यह पेचीदा हो जाता है।

उदाहरण

$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"

ये या तो, तय करने की आवश्यकता होगी या आप से एक लिंक प्रदान करना होगा /home/sam, नए स्थान पर /ext1/sam

जब "डेटाबेस" नहीं चल रहा है /etc/passwd

अगर सिस्टम को LDAP, NIS इत्यादि से होम डाइरेक्टरी मिल रही है, तो आपको उन सिस्टम में रिलोकेशन को पर्फॉर्म करने की आवश्यकता होगी, और फाइलों को अंदर जाने के साथ समन्वयित /home/samकरना होगा /ext1/sam

संदर्भ


बेशक, बदलने से उपयोगकर्ता की फ़ाइलों को स्थानांतरित करने की आवश्यकता होगी। और शायद पुराने स्थान पर एक सिमलिंक छोड़ना (जैसा कि अन्यथा बहुत सी चीजें
टूटेंगी

@derobert - हाँ, कुछ बार ऐसा करने के बाद मैं प्लेग की तरह इससे बचने की कोशिश करता हूँ।
SLM

@ एसएलएम - इस तरह के एक विस्तृत जवाब (और इतिहास के बिट) के लिए धन्यवाद। मुझे डर है कि मैं कुछ सरल करना चाह रहा था - और मैं सत्र के होम डायरेक्टरी का प्रतिनिधित्व करने वाले पर्यावरण चर के अस्तित्व से अनभिज्ञ था। मुझे यकीन है कि आपका उत्तर भविष्य में किसी अन्य पाठक की मदद करेगा। एक बार फिर धन्यवाद।
एंड्रयू चेयोंग

1

यदि कारण कई फ़ाइल सिस्टम में उपयोगकर्ताओं को फैलाना है, तो आप इसका उपयोग भी कर सकते हैं automounter। और यहां तक ​​कि आप अपने उपयोगकर्ताओं के लिए एक अलग "आधार" निर्देशिका भी दे सकते हैं।

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