अनुमति जाँच
से इनकार किया है, ताकि एक स्क्रिप्ट फ़ाइल होना आवश्यक है एक निष्पादन योग्य अनुमति बिट सेट चलाने के लिए।
लिनक्स file permissions को पूरी तरह से समझने के लिए आप chmod
कमांड के लिए प्रलेखन का अध्ययन कर सकते हैं। chmod, परिवर्तन मोड का संक्षिप्त नाम, एक आदेश है जो फ़ाइल की अनुमति सेटिंग्स को बदलने के लिए उपयोग किया जाता है।
अपने स्थानीय सिस्टम के लिए chmod दस्तावेज़ीकरण को पढ़ने के लिए, कमांड लाइन से man chmod
या info chmod
चलाएं। एक बार को पढ़ और समझ आप चलाने का उत्पादन समझने में सक्षम होना चाहिए ...
ls -l foo.sh
... जो पढ़ें सूची जाएगा, फ़ाइल स्वामी, समूह के मालिक और बाकी सब है जो के लिए लिख सकते हैं और अनुमतियाँ निष्पादित फ़ाइल स्वामी या समूह जो करने के लिए फ़ाइल अंतर्गत आता है के एक सदस्य (है कि पिछले अनुमति समूह कभी-कभी "दुनिया" या "अन्य" के रूप में जाना जाता है) नहीं
यहाँ कैसे अनुमति अस्वीकृत त्रुटि निवारण करने के लिए का एक सारांश है आपके मामले में।
$ ls -l foo.sh # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
^^^ | ^^^ ^^^^^^^ ^^^^^
| | | | |
Owner| World | |
| | Name of
Group | Group
Name of
Owner
मालिक पढ़ सकते हैं और पहुँच rw लिखने लेकिन है - इंगित करता है कि निष्पादन योग्य अनुमति
chmod
आदेश फिक्स कि याद आ रही है। (समूह और अन्य केवल पढ़ने के लिए अनुमति फ़ाइल पर सेट है, वे इसे करने के लिए नहीं लिख सकते हैं या यह निष्पादित कर सकते हैं)
$ chmod +x foo.sh # The owner can set the executable permission on foo.sh
$ ls -l foo.sh # Now we see an x after the rw
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
foo.sh जहाँ तक लिनक्स का सवाल है अब निष्पादन योग्य है।
कमान में sudo परिणाम का उपयोग करना
नहीं मिला जब आप sudo आप प्रभावी रूप से सुपर उपयोगकर्ता या रूट के रूप में यह चल रहे हैं का उपयोग कर एक आदेश चला।
कारण यह है कि मूल प्रयोक्ता अपने आदेश नहीं मिल रहा है संभावना है कि जड़ के लिए PATH
वातावरण चर निर्देशिका जहां foo.sh
स्थित है को शामिल नहीं करता है। इसलिए आदेश नहीं मिला है।
PATH पर्यावरण चर में निर्देशिकाओं की एक सूची है जो कमांड के लिए खोज की जाती है। प्रत्येक उपयोगकर्ता अपनी जरूरतों के हिसाब से अपने स्वयं के पैथ चर सेट करता है। देखने के लिए यह क्या है,
env | grep ^PATH
चलाने के लिए सेट यहाँ sudo का उपयोग कर
[email protected]:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
ध्यान दें कि जड़ उपयोगकर्ता के रूप में पहले एक साधारण उपयोगकर्ता के रूप में और फिर ऊपर env
आदेश चलाने का कुछ नमूना उत्पादन है है, हालांकि इसी तरह, इस मामले में PATH में निहित निर्देशिका गैर-विशेषाधिकार प्राप्त उपयोगकर्ता (rkielty) और सुपर उपयोगकर्ता समान नहीं हैं।
निर्देशिका जहां foo.sh
रहता है रूट उपयोगकर्ता के PATH चर में मौजूद नहीं है, इसलिए कमांड त्रुटि नहीं मिली है।
अजीब है कि 'sudo $ PWD/temp.sh' न तो काम नहीं करता है, जबकि 'sudo echo $ PWD' दिखाता है कि मैंने जो इंतजार किया था। (मैक) – Nakilon
@ नाकिलॉन यदि आप इसे पूर्ण विवरण के साथ एक प्रश्न में डालते हैं तो मुझे इसके लिए आपके लिए समस्या निवारण करने में सक्षम होना चाहिए। मुद्दा यह है कि कौन सा खोल (आपका पहला कमांड खोल या सुडो द्वारा लॉन्च किया गया खोल) ने $ PWD –
@RobKielty का मूल्यांकन किया है, कभी भी ध्यान न दें। मुझे सही समस्या याद नहीं है, लेकिन शायद यह स्क्रिप्ट में एक कमांड के लिए chmod -x को सेट करने की तरह smth था, और सुडो के माध्यम से स्क्रिप्ट कॉलिंग इतना समझ में नहीं आया त्रुटि संदेश। – Nakilon