क्यों मुझे लिनक्स में इसे निष्पादित करने के लिए हमेशा निष्पादन योग्य से पहले "./" टाइप करना होगा।


8

जब मैं egxc को संकलित करता हूं:

GCC x.c -o x

परिणाम निष्पादित करने के लिए मुझे लिखना होगा:

./x

और सिर्फ टाइप करना:

x

इस संदेश के साथ विफल:

x: कमांड नहीं मिला

इसका मतलब है कि लिनक्स इसके लिए वर्तमान निर्देशिका नहीं खोजता है! क्या इस व्यवहार के पीछे कोई उचित मुद्दा है (मुझे यकीन है कि वहाँ है)?


क्योंकि यह नियम है।
डैनियल आर हिक्स

@ दान: फिर "नियमों" को स्पष्ट करें।
तोरबेन गुंडोफ़्टे-ब्रून

जवाबों:


13

क्योंकि डिफ़ॉल्ट रूप से, वर्तमान कार्यशील निर्देशिका PATHचर में नहीं है ।

यह एक सुरक्षा / सुविधा उपाय है। यदि आपके पास वर्तमान कार्य निर्देशिका में बायनेरी / स्क्रिप्ट्स जैसे उदाहरण cd, lsआदि हैं, तो यह डिफ़ॉल्ट रूप से चलाए जाने पर बहुत कष्टप्रद होगा।


4
उत्तर केवल आंशिक रूप से सही है। यदि वर्तमान निर्देशिका केवल अंतिम विकल्प के रूप में उपयोग की गई थी, तो समस्या को घेर लिया जा सकता है। तब मानक उपकरण अभी भी पहले मिलेंगे।
उपयोगकर्ता अज्ञात

1
इसके अलावा, शेल बिल्डरों को प्राथमिकता मिलती है (यानी जब आप टाइप करते cdहैं bash, तो यह रूटीन आंतरिक को कोसने के लिए निष्पादित करता है और /bin/cdतब तक नहीं ) जब तक आप `.` के साथ पूर्व-निर्धारित नहीं करते हैं
लॉरेंस

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

7
@userunknown: और पहली बार जब आपने टाइप किया sl, तो आपको वही समस्या हुई। केवल विश्वसनीय निर्देशिकाएं ही होनी चाहिए $PATHऔर सापेक्ष पथ ऐसे हों .जो कभी भी एक इंटरैक्टिव शेल के लिए विश्वसनीय निर्देशिका न हों।

2
@ बासिक: यदि मेरा rm -r targetमतलब है rm -f targetकि जब मैं टाइप करता हूं तो आमतौर पर कोई अंतर नहीं होता है। यदि मेरा rm -f targetमतलब है तो मैं टाइप करता हूं rm -r target, या तो कोई अंतर नहीं है या एकमुश्त निष्कासन विफल रहता है। इसके अलावा, मुझे लगता है कि हर बार मैं प्रकार से पहले rm, विशेष रूप से अगर मैं जोड़ रहा -fया -rया एक ग्लोब - यह अपने स्वभाव से एक खतरनाक आदेश है। कोई भी lsआईएनजी से पहले नहीं सोचता ।

1

इसका अर्थ है कि वर्तमान निर्देशिका $ PATH चर में नहीं है।


1

आप इसे वर्तमान निर्देशिका (एकल डॉट द्वारा दर्शाया गया) को PATHपर्यावरण चर में जोड़कर ठीक कर सकते हैं ।
इसे करने का तरीका आपके द्वारा उपयोग किए जा रहे शेल पर निर्भर करता है।
अगर आप पार्टी का उपयोग कर रहे हैं, तो आप पंक्ति जोड़ सकते हैं export PATH=$PATH:.करने के लिए .bashrcअपने घर निर्देशिका में फाइल।
यदि आप csh या tsh का उपयोग कर रहे हैं, तो set PATH = ($PATH .)अपने होम डायरेक्टरी में फ़ाइल .cshrc में लाइन जोड़ें ।
IMHO, एक होम डेस्कटॉप कंप्यूटर के लिए यह एक स्वीकार्य काम है - सुरक्षा वार।


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