जवाबों:
लिनक्स में, यूनिक्स और संबंधित ऑपरेटिंग सिस्टम, .
वर्तमान निर्देशिका को दर्शाता है। चूंकि आप अपनी वर्तमान निर्देशिका में फ़ाइल चलाना चाहते हैं और वह निर्देशिका आपके पास नहीं है $PATH
, तो आपको ./
शेल को यह बताने की आवश्यकता है कि निष्पादन योग्य कहां है। तो, ./foo
इसका मतलब है कि निष्पादन योग्य चलाएं जो foo
इस निर्देशिका में है।
आप अपने में पाए जाने वाले किसी भी कमांड के पूर्ण पथ का उपयोग कर सकते हैं type
या कर सकते हैं ।which
$PATH
alias
कि रास्ते में मिल सकता है, न कि बस $PATH
।
.
पहली बार खोजा गया है तो यह एक सुरक्षा मुद्दा होगा, आप या कोई और ls
उदाहरण के लिए प्रतिस्थापित कर सकता है (एक साधारण वायरस / ट्रोजन: इसमें एक निष्पादन योग्य नाम के साथ एक जिप फाइल बनाएं ls
, जैसा कोई व्यक्ति खोज रहा है , वे इस निष्पादन योग्य, कि ...) चलाते हैं। यदि यह .
अंतिम में खोजा गया है, तो आप लंबे समय तक यह जानने में पागल हो सकते हैं कि न जाने क्यों आपका कार्यक्रम काम नहीं कर रहा है (जैसे कि आप एक प्रोग्राम बनाते हैं जिसे टेस्ट कहा जाता है, आपके प्रोग्राम को चलाने के बजाय यह सिस्टम टेस्ट प्रोग्राम चलाता है। जो कोई आउटपुट नहीं पैदा करता है)।
export PATH="$PATH:."
मौजूदा निर्देशिका में कमांड निष्पादित करने के लिए निष्पादित कर सकते हैं यदि PATH में कहीं और नहीं मिला है, तो आप इसे अपनी .bashrc फ़ाइल में जोड़ सकते हैं
शाब्दिक उत्तर अन्य लोगों द्वारा दिया गया है: क्योंकि वर्तमान निर्देशिका आपके में नहीं है $PATH
।
लेकिन क्यों? संक्षेप में, यह सुरक्षा के लिए है। यदि आप किसी और के घर निर्देशिका (या / tmp) में देख रहे हैं, और बस टाइप करें, gcc
या ls
आप यह जानना चाहते हैं कि आप वास्तविक एक चला रहे हैं, न कि एक दुर्भावनापूर्ण संस्करण जिसे आपके प्रैंकस्टर मित्र ने लिखा है जो आपकी सभी फाइलों को मिटा देता है। एक अन्य उदाहरण होगा test
या [
, जो शेल स्क्रिप्ट्स में उन कमांड को ओवरराइड कर सकता है, अगर आपके शेल में बिल्ट-इन नहीं हैं।
बीत रहा है .
के रूप में पिछले अपना रास्ता में प्रवेश थोड़ा सुरक्षित है, लेकिन वहाँ अन्य हमलों जो कि का उपयोग कर रहे हैं। एक आसान एक सामान्य टाइपो का शोषण करना है, जैसे sl
या ls-l
। या, एक सामान्य कमांड को ढूंढें जो इस सिस्टम पर स्थापित नहीं किया जाता है - vim
उदाहरण के लिए, चूंकि सिस्मैडिन्स टाइप करने के लिए ऊपर-औसत संभावना से हैं।
PATH
पर्यावरण चर में पूर्ण पथ है ।
अगर आपका मतलब है, तो आपको इसकी आवश्यकता क्यों है। प्रारंभ में / - क्योंकि (विंडोज में) इसके विपरीत, वर्तमान निर्देशिका डिफ़ॉल्ट रूप से आपके पथ का हिस्सा नहीं है। यदि आप चलाते हैं:
$ ls
आपका शेल ls
आपके PATH परिवेश चर ( echo $PATH
इसे देखने के लिए) में निर्देशिकाओं की तलाश करता है, और पहली निष्पादन योग्य रन चलाता है जिसे ls
यह पाता है। यदि आप टाइप करते हैं:
$ a.out
शेल इसी तरह करेगा - लेकिन यह संभवतः a निष्पादन योग्य नहीं होगा जिसे a.out कहा जाता है। आपको शेल को यह बताने की आवश्यकता है कि a.out कहां है - यह वर्तमान निर्देशिका (।) में है, फिर पथ है ./a.out
।
यदि आप पूछ रहे हैं कि इसे "a.out" क्यों कहा जाता है, तो यह केवल gcc के लिए डिफ़ॉल्ट आउटपुट फ़ाइल नाम है। -O कमांड लाइन आर्ग के साथ आप इसे बदल सकते हैं। उदाहरण के लिए:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
इसे देखने की कोशिश करें।)
<dir>/<file>
इसलिए आप मूल रूप से वर्तमान निर्देशिका में एक फ़ाइल निष्पादित करने के लिए कह रहे हैं, जो इंगित करता है./test
आप :.
अपने $ PATH चर में जोड़ने का प्रयास कर सकते हैं ।
ALT + F2 आज़माएँ और टाइप करें: gksudo gedit /etc/environment
यदि लिनक्स / जीटीके चल रहा है (यह उबंटू का उपयोग करते समय आपके पास है)।
फिर भी, मैं दृढ़ता से आपको सलाह देता हूं कि ऐसा न करें। यह बुरा बुरा बुरा और बुरा है।
आप जानते हैं, 1970 के बाद से इस तरह की चीजें काम करती हैं। एक कारण है कि वर्तमान निर्देशिका $ PATH में शामिल नहीं है।
.
वर्तमान निर्देशिका है
.something
एक छुपी हुई फ़ाइल होगी (Nautilus में प्रकट होने के लिए "ALT +" टाइप करें, या " ls -la
" आज़माएँ ।
./someProgram.sh
क्या आप मौजूदा निर्देशिका में एक निष्पादन योग्य someProgram.sh चलाने के लिए टाइप करते हैं।
.somethingElse
इसका मतलब होगा कि आपके पास वर्तमान निर्देशिका में एक छिपा हुआ निष्पादन योग्य है, जो एक बुरा विचार है।
./command_name
एक कमांड निष्पादित करने के लिए क्यों उपयोग करते हैं ?"