मैं फ़ाइल अनुमतियों को निष्पादित करने के बारे में उलझन में हूँ, जैसा कि मैं उम्मीद करता हूं कि वह व्यवहार नहीं कर रहा है। शायद इसलिए कि मेरी उम्मीदें गलत हैं। वैसे भी:
मेरे पास एक स्क्रिप्ट फ़ाइल है, सादगी के लिए बस कहा जाता है s
, में स्थित है ~/bin
। इस उदाहरण के लिए, फ़ाइल में केवल निम्न पंक्तियाँ हैं:
#!/bin/zsh
echo "Test";
बहुत आसान।
मैं करने के लिए नेविगेट ~/bin
निर्देशिका, और chmod
की फाइल अनुमति s
के लिए 400
- यानी, केवल पढ़ने के लिए मुझे के लिए ही। कोई निष्पादन अनुमति नहीं। तो फिर मैं इसकी राह में प्रवेश करते हुए स्क्रिप्ट को निष्पादित करने का प्रयास करता हूं:
% ./s
zsh: permission denied: ./s
अब तक सब ठीक है। गलत अनुमतियों के कारण फ़ाइल को निष्पादित नहीं किया जा सकता है। अनुमतियों को ऊपर ले जाना 500
(अनुमति देना निष्पादित करना) भी ठीक काम करता है - इन अनुमतियों के साथ, फ़ाइल ठीक निष्पादित होती है:
% ./s
Test
यह सब उम्मीद के मुताबिक है। लेकिन फिर मैं chmod
नीचे अनुमति देता हूं 400
(फिर से अनुमति को निष्पादित करें), source
फ़ाइल को निगलना का प्रयास करें , और ऐसा होता है:
% source s
Test
हालाँकि अनुमतियाँ हैं 400
, स्क्रिप्ट निष्पादित करता है।
तो यहाँ मेरा सवाल है: क्यों ./s
विफल रहता है (जैसे यह होना चाहिए) लेकिन source s
सामान्य रूप से निष्पादित होता है? क्या यह निष्पादन की अनुमति के पूरे उद्देश्य को नहीं हराता है?
पर 400
अनुमतियाँ, sh s
और zsh s
भी काम करते हैं।
मुझे यकीन है कि मैं कहीं न कहीं कुछ गलत कर रहा हूं। जहां मेरे लिए किसी बिंदु बाहर कर सकते हैं, और के बीच अंतर की व्याख्या ./s
, source s
, sh s
और zsh s
?