अनुमति नहीं मिली
स्क्रिप्ट चलाने के लिए फ़ाइल में एक निष्पादन योग्य अनुमति बिट सेट होना चाहिए ।
लिनक्स फ़ाइल अनुमतियों को पूरी तरह से समझने के लिए आप chmod
कमांड के लिए प्रलेखन का अध्ययन कर सकते हैं । chmod , चेंज मोड का संक्षिप्त नाम , वह कमांड है जिसका उपयोग किसी फाइल की अनुमति सेटिंग्स को बदलने के लिए किया जाता है।
अपने स्थानीय सिस्टम के लिए chmod प्रलेखन को पढ़ने के लिए, कमांड लाइन से दौड़ें man chmod
या चलाएं info chmod
। एक बार पढ़ने और समझने के बाद आपको रनिंग के आउटपुट को समझने में सक्षम होना चाहिए ...
ls -l foo.sh
... जो फ़ाइल स्वामी, समूह के स्वामी और अन्य सभी के लिए READ, WRITE और EXECUTE अनुमतियों को सूचीबद्ध करेगा, जो फ़ाइल स्वामी या उस समूह का सदस्य नहीं है, जिसके पास फ़ाइल है (जिसे अंतिम अनुमति समूह कभी-कभी संदर्भित किया जाता है) "दुनिया" या "अन्य" के रूप में)
आपके मामले में अनुमति अस्वीकृत त्रुटि का निवारण कैसे करें, इसका सारांश यहां दिया गया है।
$ 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
मालिक ने पहुंच आरडब्ल्यू को पढ़ा और लिखा है, लेकिन यह दर्शाता है कि निष्पादन योग्य अनुमति गायब है
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 परिणाम का उपयोग नहीं मिला
जब आप सुडो का उपयोग करके एक कमांड चलाते हैं तो आप इसे सुपरसुसर या रूट के रूप में प्रभावी रूप से चला रहे हैं।
मूल उपयोगकर्ता आपके आदेश को नहीं ढूंढ रहा है इसका कारण यह है कि रूट के लिए PATH
पर्यावरण चर में वह निर्देशिकाfoo.sh
शामिल नहीं है जहां स्थित है । इसलिए कमांड नहीं मिली है।
PATH पर्यावरण चर में निर्देशिकाओं की एक सूची होती है जो कमांड के लिए खोजी जाती हैं। प्रत्येक उपयोगकर्ता अपनी आवश्यकताओं के अनुसार अपना पैठ चर निर्धारित करता है। यह देखने के लिए कि इसे चलाने के लिए क्या निर्धारित है
env | grep ^PATH
यहाँ ऊपर env
कमांड को सामान्य उपयोगकर्ता के रूप में चलाने का कुछ नमूना आउटपुट है और फिर sudo का उपयोग कर रूट उपयोगकर्ता के रूप में
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
ध्यान दें, हालांकि, इसी तरह, इस मामले में PATH गैर-विशेषाधिकार प्राप्त उपयोगकर्ता (rkielty) और सुपर उपयोगकर्ता में निहित निर्देशिकाएं समान नहीं हैं ।
वह निर्देशिका जहां foo.sh
मूल उपयोगकर्ता के पथ चर में मौजूद नहीं है, इसलिए कमांड में त्रुटि नहीं मिली ।