क्यों / एक रन करने योग्य फ़ाइल को चलाने के लिए आवश्यक है?


9

मैं उबंटू का उपयोग कर रहा हूं और मैं नोटिस करता हूं कि जब तक मैं इस विषय को पसंद नहीं करता, तब तक मेरी कई रननीय स्क्रिप्ट नहीं चलेंगी ./

उदाहरण के लिए, यदि मेरे पास एक पर्ल स्क्रिप्ट है: /home/me/script.plऔर मैं वर्तमान में हूं /home/me, तो टाइपिंग script.plयह नहीं करेगा, लेकिन ./script.plकरेगा।

ऐसा क्यों है?


@ डेविड बी runnable file => executable file:?
लेज़र

जवाबों:


13

किसी स्क्रिप्ट को निष्पादित करने के लिए, आपको स्क्रिप्ट के पूर्ण पथ में टाइप करने की आवश्यकता है जब तक कि स्क्रिप्ट आपके $PATHपर्यावरण चर में सूचीबद्ध निर्देशिकाओं में से एक में मौजूद न हो । आम तौर पर (डिफ़ॉल्ट रूप से) .(वर्तमान निर्देशिका) आपके में नहीं है $PATH, इसलिए आपको ./scriptइसे निष्पादित करने के लिए टाइप करने की आवश्यकता है।


21

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


3
यह कुछ भ्रामक है। जब तक .थे /usr/bin/, तब तक यह असली नहीं था sudo। यह सुनिश्चित करने के लिए है कि आप गलती से अपने पथ पर प्रोग्राम न जोड़ें, लेकिन यह मुख्य रूप से मौजूदा लोगों को सुपरसीडिंग करने के बारे में नहीं है।
मैथ्यू फ्लैशेन

इसके बजाय sudo, मैं उपयोग करूँगा lsऔर rm। बहुत अधिक होने की संभावना है।
एरोन दिगुल्ला

@ हारून: यकीन है, लेकिन lsअपने पासवर्ड के लिए पूछना नहीं है और अगर उपयोगकर्ता sudoपासवर्ड का उपयोग कर सकते हैं दिलचस्प है ...?)
laurent

1
@Matthew। हां, अभी भी शोषण करना मुश्किल है लेकिन वास्तविक सुरक्षा जोखिम है। आइए कहते हैं कि मैं एक ऐसी पटकथा लिखता हूं slजो खराब काम करती है, फिर आह्वान करती है ls, फिर खुद को हटा देती है। आप सिस्टम टूल को ओवरराइड नहीं कर सकते हैं, लेकिन आप 23 टाइप पर 'टाइपोस्क्वाट'
रिच होमोलका

@ साहित्यकार: मेरे मन में जो था वह था cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@":। पासवर्ड जानने की जरूरत नहीं।
आरोन दिगुल्ला

4
echo $PATH

इस कार्य के लिए आपके पास आपके मार्ग में वर्तमान निर्देशिका (एक एकल बिंदु) होनी चाहिए।

आप इसे अपने पथ पर जोड़ सकते हैं यदि आप निम्न आदेशों के साथ चाहते हैं।

श / बैश: export PATH=$PATH:.

tcsh / csh: set PATH = ($PATH .)


3

शेल निष्पादन योग्य के लिए पथ खोजता है, और डिफ़ॉल्ट रूप ./से पथ में नहीं है।

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