मैं ~~
एक अलग निर्देशिका को इंगित करना चाहता हूं ताकि मैं इसे शॉर्टकट के रूप में उपयोग कर सकूं। मैं चाहता हूं कि इसमें ठीक वैसा ही कार्य हो ~
। मैं यह कैसे कर सकता हूँ?
मैं ~~
एक अलग निर्देशिका को इंगित करना चाहता हूं ताकि मैं इसे शॉर्टकट के रूप में उपयोग कर सकूं। मैं चाहता हूं कि इसमें ठीक वैसा ही कार्य हो ~
। मैं यह कैसे कर सकता हूँ?
जवाबों:
वास्तव में, एक रास्ता है, यह एक शानदार तरीका नहीं है, लेकिन यह एक तरीका है, हाहा!
अपनी /etc/passwd
फ़ाइल में निम्न जोड़ें :
~:x:1111:99:special Character user:/test:/sbin/nologin
1111
UID को उस चीज़ के साथ बदलें जो कुछ समझ में आता है, /test
उस निर्देशिका से बदलें जिसे आप चाहते हैं ~ ~ की नकल करें।
99
मेरे सिस्टम पर वह nobody
समूह है जिसकी मैं अनुशंसा करता हूं यदि आप यह सुनिश्चित करने के लिए ऐसा करते हैं कि यह किसी भी फाइल पर NO अनुमतियों वाला एक समूह है जो कभी भी उपयोग किया जाएगा। सैद्धांतिक /sbin/nologin
रूप से शेल के रूप में, इसका उपयोग करने में सक्षम नहीं होना चाहिए, इसमें /etc/shadow
प्रविष्टि भी नहीं होगी, इसलिए इसमें पासवर्ड नहीं होगा। सैद्धांतिक रूप से ठीक होना चाहिए, लेकिन सुनिश्चित करें कि यह किसी भी तरह से आपको खाते के रूप में लॉग इन नहीं करने देता है।
एक साइड नोट के रूप में: मैं किसी भी तरह से यह नहीं कह रहा हूं कि यह एक अच्छा विचार है, लेकिन यह उस कार्यक्षमता को पूरा करेगा जो आप चाहते हैं।
संपादित करें: पूर्णता 'खातिर इस VarunAgw द्वारा सुझाव दिया गया था: आप के साथ सामान्य रूप में उपयोगकर्ता जोड़ सकता है useradd -s /sbin/nologin -N tmp
और उसके बाद संशोधित /etc/passwd
और /etc/shadow
उपयोगकर्ता को बदलने के लिए tmp
करने के लिए ~
और का स्थान बदलने केhome directory
useradd 'tmp'
और उसके बाद की जगह tmp
के साथ~
shadow
प्रविष्टि के साथ वैध बनाने के बारे में कैसा महसूस करता हूं, लेकिन मुझे लगता है कि जब तक कोई पासवर्ड सेट नहीं होता है तब तक यह वास्तव में एक अतिरिक्त जोखिम नहीं है।
आप CDPATH का उपयोग कर सकते हैं और ~~
अपनी CDPATH घटकों में से एक में शाब्दिक रूप से नामित निर्देशिका रख सकते हैं ।
से man bash
(लेकिन CDPATH में भी उपलब्ध है sh
)
सीडी कमांड के लिए खोज पथ। यह निर्देशिकाओं की एक बृहदान्त्र-अलग-अलग सूची है जिसमें शेल सीडी कमांड द्वारा निर्दिष्ट गंतव्य निर्देशिकाओं के लिए दिखता है। एक नमूना मूल्य "है ।: ~: / usr"।
जो आपको करने की अनुमति देगा cd ~~
।
यदि आप vi ~~/someFile
निर्देशिका ट्री में कहीं से भी चीजें करना चाहते हैं , तो आप भाग्य से बाहर हैं यदि आप ~~
शाब्दिक रूप से जोर देते हैं जब तक कि आप अपने शेल को हैक नहीं करते हैं, हालांकि, आप अपनी जादुई निर्देशिकाओं को संग्रहीत करने के लिए चर या पर्यावरण चर का उपयोग कर सकते हैं ताकि आप कर सकें। , जैसे,$tilda/someFile
मैं आमतौर पर अपने घर निर्देशिका में शीघ्र ही नामित निर्देशिकाओं के अंदर अक्सर एक्सेस की गई फ़ाइलों को डाल देता हूं ताकि मैं उन्हें इस तरह ~/b
या जैसे पथों के साथ एक्सेस कर सकूं ~/l
।
स्वाभाविक रूप से, आप आमतौर पर निर्देशिकाओं को सहानुभूति के साथ निर्देशिकाओं में बदल सकते हैं जितना आप चाहते हैं।
शेल का ~
टिल्ड विस्तार ज्यादातर प्रोग्रामेबल है। यह या तो अपने अनुगामी संदर्भ में घोषित सिस्टम उपयोगकर्ता नाम की उपयोगकर्ता निर्देशिका में फैलता है (और इन पंक्तियों के साथ एक उत्कृष्ट समाधान पहले से ही पेश किया गया है) , $HOME
शेल चर का मूल्य , या बिल्कुल भी नहीं।
इसलिए:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
मैं $HOME
हर समय बदलता हूं , और मैं इसे रीसेट करने के लिए अपने शेल के पर्यावरण फ़ाइल में एक फ़ंक्शन रखता हूं:
home(){
HOME=~$USER
cd ~; pwd
}
यदि आप ~
किसी तरह से टिल्ड का उपयोग करना चाहते हैं जो आपके होम डायरेक्टरी को संदर्भित नहीं करता है, तो ऐसा करें । बस फिर से भरोसा $HOME
। इससे डरो मत। $HOME
किसी भी अन्य की तरह सिर्फ एक शेल चर है।
मेरे पास एक और सुझाव है कि @ PSkocik के उपयोग के बारे में उत्कृष्ट सलाह पर केवल थोड़ा विस्तार है $CDPATH
। एक बात जिसका उन्होंने उल्लेख नहीं किया, वह यह है कि आप $CDPATH
वर्तमान शेल मूल्य $CDPATH
को बिल्कुल भी बदले बिना इनलाइन का उपयोग और परिवर्तन कर सकते हैं । उदाहरण के लिए:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
यह आवश्यक रूप से एक शेल बिलिन है, लेकिन यह एक POSIX विशेष शेल बिलिन नहीं है, और इसलिए इसके मूल्य को घोषित करने से $CDPATH
इसका शेल शेल मूल्य प्रभावित नहीं होता है। यदि आप इसका उपयोग करते हैं जैसा कि मैंने ऊपर किया $CDPATH
है तो केवल एक cd
कमांड के पर्यावरण के लिए बदल दिया गया है , और इसके पिछले मूल्य को इसके बाद से बहाल किया गया है। इतिहास पूरा होने के साथ संयोजन में उपयोग किए जाने पर मुझे उपरोक्त तकनीक सबसे उपयोगी लगती है। मैं उपरोक्त कार्य करूंगा, एक निर्देशिका में बदलूंगा, कुछ कमांड चलाऊंगा, तब तक cd
दबाऊंगा जब तक कि मैं अपनी कमांड पर वापस नहीं आता और एक पथ खंड या दो को अन्यत्र स्थानांतरित करने के लिए बैकस्पेस देता हूं ।
अब यदि आप इन दोनों अवधारणाओं को जोड़ते हैं तो आप अगली बार इस्तेमाल किए जाने वाले कमांड का मतलब पूरी तरह से अलग कर सकते हैं जब आप इसे इस्तेमाल करते हैं।
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
पूरी तरह से एक काम करता है के रूप में अच्छी तरह से काम करता है:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
यहाँ एक और दृष्टिकोण है जो थोड़ा करीब आता है (मुझे पता है कि मैं आवश्यकताओं के करीब नहीं जा रहा हूँ)
function ~~ { echo /test; }
फिर कुछ और पात्रों के साथ:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
इतनी अच्छी तरह से काम करने के लिए जा नहीं है, या vim ~~/foo.txt
, आदि ...
CDPATH
को संभालने के लिए चर का उपयोग करूंगा cd
।
~
। और ~
एक कमांड की तरह उपयोग नहीं किया जाता है।
CDPATH
यह है कि .... सीडी के बाहर के कमांड के लिए काम नहीं करता है। IE आप cd ~~
या कर सकते हैं, cd ~~/testdir1
लेकिन आप नहीं कर सकते हैंvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '