लिनक्स बाश में टिल्ड का अर्थ (होम डायरेक्टरी नहीं)


106

सबसे पहले, मुझे पता है कि ~/होम डायरेक्टरी है। सीडी करना ~या ~/मुझे घर निर्देशिका में ले जाना।

हालांकि, cd ~Xमुझे एक विशेष स्थान पर ले जाता है, जहां Xकुछ भी प्रतीत होता है।

बैश में, यदि मैं "हिट cd ~" और हिट टैब, यह संभव का एक समूह से पता चलता ~Xजैसे विकल्प ~mailऔर ~postgresऔर ~ssh। उन फ़ोल्डरों में जाना और pwdमुझे यह दिखाना कि ये फ़ोल्डर्स होम डायरेक्टरी में नहीं हैं; वे सभी जगह पर हैं।

वे उपनाम नहीं हैं। मैंने देख लिया है। वे नहीं कर रहे हैं env.चर, वरना वे एक की आवश्यकता होगी $

इन लिंक को क्या सेट कर रहा है, और मुझे यह कहां मिल सकता है कि ये कहां सेट हो रहे हैं?


~ X केवल शाब्दिक "~ X" लौटाता है, लेकिन ~ $ HOME लौटाता है और ~ $ $ PWD देता है - वे इसके अलावा विशेष नहीं हैं कि वे शेल चर प्राप्त करते हैं। यानी वे मूल्यों को संग्रहीत नहीं करते हैं या उन्हें देखने के लिए एक कमांड निष्पादित करते हैं। वे पहले से ही परिभाषित हैं। क्या आपने कोशिश की ~ -? मैं इसके लिए एक उपयोग के बारे में सोच भी नहीं सकता, लेकिन फिर से, यह एक शेल वैरिएबल $ OLDPWD
SDsolar

जवाबों:


71

यह बैश फीचर है जिसे " टिल्ड एक्सपेंशन " कहा जाता है । यह ओएस का नहीं, शेल का एक फंक्शन है। उदाहरण के लिए, आपको csh के साथ अलग व्यवहार मिलेगा।

आपके प्रश्न का उत्तर देने के बारे में कि जानकारी कहाँ से आती है: आपकी होम निर्देशिका चर से आती है $HOME(कोई फर्क नहीं पड़ता कि आप वहां क्या स्टोर करते हैं), जबकि अन्य उपयोगकर्ता के घर वास्तविक समय का उपयोग करके पुनर्प्राप्त किए जाते हैं getpwent()। यह फ़ंक्शन आमतौर पर एनएसएस द्वारा नियंत्रित होता है ; इसलिए डिफ़ॉल्ट मानों को बाहर निकाला जाता है /etc/passwd, हालांकि इसे वांछित किसी भी स्रोत, जैसे NIS, LDAP या SQL डेटाबेस का उपयोग करके जानकारी प्राप्त करने के लिए कॉन्फ़िगर किया जा सकता है।

टिल्ड का विस्तार होम डायरेक्टरी लुकअप से अधिक है। यहाँ एक सारांश है:

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirsऔर ~1, ~-1आदि, के साथ संयोजन के रूप में उपयोग किया जाता है pushdऔर popd


नोट के रूप में मछली सादे

वे साथ क्यों आए ~+? बल्कि बेकार लगता है।
cregox

3
~ + लगभग के रूप में ही है। हालाँकि, जैसे कुछ का उपयोग करने के लिए /। फाइल सिस्टम पर जाना है और यह पता लगाना है कि कहाँ है। स्थित है - यह कुछ चक्र लेता है। ~ + का उपयोग करने से यह शेल चर $ पीडब्ल्यूडी की सामग्री को वापस करके कार्य को बचाता है जो पहले से ही परिभाषित है जैसा कि आप फ़ाइल सिस्टम को पार करते हैं।
2

32

उन उपयोगकर्ताओं के घर निर्देशिका हैं। cd ~(your username)उदाहरण के लिए कोशिश करें ।


1
वे सहानुभूति नहीं रखते हैं, सेवा खाते में घर निर्देशिकाओं के तहत / घर नहीं है
Ana Betts

मेरे मामले में सबसे अच्छा जवाब। इसके अलावा, मेरे विशेष मामले में, यह रूट निर्देशिका / फ़ोल्डर था, न कि होम फ़ोल्डर।
wlwl2

16

क्या वे उपयोगकर्ताओं की होम निर्देशिका हैं /etc/passwd? पोस्टग्रेज, सेंडेल, एपाचे, आदि जैसी सेवाएं, ऐसे सिस्टम उपयोगकर्ता बनाती हैं, जिनके पास सामान्य उपयोगकर्ताओं की तरह होम डाइरेक्टरी होती हैं।


2
वास्तव में वे ~ उपयोगकर्ता नाम निर्दिष्ट उपयोगकर्ता की होम डायरेक्टरी है
स्टीव वेट

14

वे उपयोगकर्ता हैं। अपनी जाँच करें /etc/passwd

cd ~username आपको उस उपयोगकर्ता की होम निर्देशिका पर ले जाता है।


FTW। वोट दें। TNX कि समाशोधन के लिए। मुझे आश्चर्य है कि उस एक में कितने चक्र और शायद एक उपधारा भी शामिल है। जरा सोचिए कि यदि आपके सिस्टम में 3K उपयोगकर्ता हैं, जैसे कि एक छोटे आईएसपी पर। ओह।
एसडीसोलर

9

मेरी मशीन पर, मेरे काम करने के तरीके के कारण, करना:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

पहले पर्यावरण चर के मूल्य पर ध्यान देता है $HOME; मैंने जानबूझकर $HOMEएनएफएस-माउंटेड फ़ाइल सिस्टम के बजाय स्थानीय फ़ाइल सिस्टम पर सेट किया है। दूसरा पासवर्ड फ़ाइल से पढ़ता है (लगभग; एनआईएस चीजों को थोड़ा जटिल करता है) और पाता है कि पासवर्ड फ़ाइल कहती है कि मेरी होम निर्देशिका है /u/jlefflerऔर उस निर्देशिका में परिवर्तन होता है।

कष्टप्रद सामान यह है कि अधिकांश सॉफ़्टवेयर ऊपर के रूप में व्यवहार करते हैं (और शेल के लिए POSIX विनिर्देशन को इस व्यवहार की आवश्यकता होती है)। मैं कुछ सॉफ़्टवेयर का उपयोग करता हूं (और मेरे पास इसके उपयोग के बारे में अधिक विकल्प नहीं हैं) जो पासवर्ड फ़ाइल से जानकारी को $ HOME के ​​वर्तमान मूल्य के रूप में मानता है, जो गलत है।

इस प्रश्न पर इसे लागू करना - जैसा कि अन्य ने बताया है, ' cd ~x' उपयोगकर्ता 'x' की होम डायरेक्टरी में जाता है, और आम तौर पर, जब भी टिल्ड का विस्तार होता है, ~xउपयोगकर्ता 'x' की होम डायरेक्टरी का अर्थ होता है (और यह एक त्रुटि है। यदि उपयोगकर्ता 'x' मौजूद नहीं है)।


यह उल्लेखनीय है कि:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

मैं तुरंत ' ~+' के लिए एक उपयोग नहीं ढूँढ सकता , जब तक कि आप मौजूदा निर्देशिका के लिए जाने वाले मार्ग में बढ़ते सिम्बलिंक्स के साथ कुछ अजीब सामान नहीं करते हैं।

आप भी कर सकते हैं:

cd -

इसका मतलब वही है ~-


1
के बारे में cd ~+: आप संभावित रूप से यह जांचने के लिए उपयोग कर सकते हैं कि क्या कोई निर्देशिका आप अभी भी मौजूद है - भले ही वह ऐसा करने का एक सुंदर अपरंपरागत तरीका हो।
प्रोफेसर्सलॉथ


1

यदि आप उपयोग कर रहे हैं autofsतो विस्तार वास्तव में /etc/auto.home(या आपके डिस्ट्रो के समान) से आ सकता है । उदाहरण के लिए, मेरी /etc/auto.masterतरह दिखता है:

/home2 auto.home --timeout 60

और /etc/auto.homeजैसा दिखता है:

mgalgs -rw,noquota,intr space:/space/mgalgs

0

यह संभव है कि आप OpenDirectory / ActiveDirectory / LDAP उपयोगकर्ताओं को "स्वनिर्धारित" आपके घर निर्देशिका में देख रहे हों।

* Nix में, ~आपके होम डायरेक्टरी को हल करेगा। इसी तरह ~XX यूजर एक्स ’का समाधान होगा।

निर्देशिकाओं के लिए ऑटोमाउंट के समान, OpenDirectory / ActiveDirectory / LDAP का उपयोग उपयोगकर्ता निर्देशिकाओं को स्वचालित करने के लिए बड़े / कॉर्पोरेट वातावरण में किया जाता है। ये उपयोगकर्ता वास्तविक लोग हो सकते हैं या वे विभिन्न सुविधाएँ प्रदान करने के लिए बनाए गए मशीन खाते हो सकते हैं।

यदि आप लिखते हैं ~Tabतो आपको अपने मशीन पर उपयोगकर्ताओं की एक सूची दिखाई देगी।

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