उबंटू का कहना है कि "बैश :/program अनुमति से इनकार" [बंद]


206

मैं कंप्यूटर 1 और कंप्यूटर 2 पर Ubuntu चला रहा हूं। मैंने कंप्यूटर 1 पर C ++ प्रोग्राम संकलित किया है, और मैं इसका उपयोग करके टर्मिनल से निष्पादित कर सकता हूं ./program_name। यह ठीक चलता है।

हालाँकि, जब मैं कंप्यूटर 2 पर ऐसा करने की कोशिश करता हूं, तो यह कहता है: bash: ./program_name: permission denied

क्या गलत है और मैं इसके बारे में क्या कर सकता हूं?


7
क्या आपके पास निष्पादित करने की अनुमति है progam_name?
फेडोरक्वी 'SO रोकना नुकसान पहुँचाता है'

1
आपको कंप्यूटर 1 से कंप्यूटर 2 तक का प्रोग्राम कैसे मिला? क्या आपने निष्पादन योग्य प्रतिलिपि बनाई या स्रोत कोड को फिर से जमा किया? "Ls -l program_name" कमांड का आउटपुट क्या है?
एरिक पोस्टपिसिल

2
यह SO के लिए विषय से हटकर प्रतीत होता है, क्योंकि यह प्रोग्रामिंग के बारे में नहीं है, लेकिन लिनक्स पर अधिकार प्रबंधन
nijansen

4
कोशिशbash program_name
नदजीब ममी

10
मैंने एक .shफाइल लिखी । इस त्रुटि संदेश के साथ निष्पादित करने से इनकार कर दिया। मैं कहूंगा कि यह निश्चित रूप से StackOverflow के लिए विषय है। मैंने फिर से खोलने के लिए नामांकित किया है।
आर्टऑफवर्फ

जवाबों:


392

chmod u+x program_name। फिर उस पर अमल करें।

अगर वह काम नहीं करता है, तो सिस्टम पर एक मूल वॉल्यूम के लिए यूएसबी डिवाइस से प्रोग्राम को कॉपी करें। फिर chmod u+x program_nameस्थानीय प्रति और उस पर अमल करें।

यूनिक्स और यूनिक्स जैसी प्रणाली आम तौर पर एक कार्यक्रम को निष्पादित नहीं करेगी जब तक कि इसे निष्पादित करने की अनुमति के साथ चिह्नित नहीं किया जाता है। जिस तरह से आपने फ़ाइल को एक सिस्टम से दूसरे सिस्टम में कॉपी किया (या एक बाहरी वॉल्यूम माउंट किया है) हो सकता है कि उसने एक्ज़ीक्यूट अनुमति (सुरक्षा सुविधा के रूप में) को बंद कर दिया हो। कमांड chmod u+x nameउस उपयोगकर्ता के लिए अनुमति जोड़ता है जो इसे निष्पादित करने के लिए फ़ाइल का मालिक है।

यह कमांड केवल फाइल से जुड़ी अनुमतियों को ही बदलता है; यह संपूर्ण वॉल्यूम से जुड़े सुरक्षा नियंत्रणों को परिवर्तित नहीं करता है। यदि यह वॉल्यूम पर सुरक्षा नियंत्रण है जो निष्पादन के साथ हस्तक्षेप कर रहा है (उदाहरण के लिए, noexecयूनिक्स fstabफ़ाइल में वॉल्यूम के लिए एक विकल्प निर्दिष्ट किया जा सकता है , जो कहता है कि वॉल्यूम पर फ़ाइलों के लिए निष्पादन की अनुमति नहीं देने के लिए), तो आप वॉल्यूम को हटा सकते हैं निष्पादन की अनुमति देने के विकल्पों के साथ। हालाँकि, फ़ाइल को स्थानीय वॉल्यूम में कॉपी करना एक त्वरित और आसान समाधान हो सकता है।


3
मुझे लगता था कि यह केवल FAT32 जैसे गैर यूनिक्स / लिनक्स देशी विभाजन पर होगा, और ऐसा नहीं होगा /tmp। यह पता चला है कि मेरे tmpfs /tmpएक ही समस्या से ग्रस्त हैं, और मुझे निष्पादन योग्य फ़ाइल को एक वास्तविक देशी वॉल्यूम में कॉपी करना है, अर्थात मेरे ext4 विभाजन में होम फोल्डर ~।
रायलू

13
मुझे आज इस समस्या का सामना करना पड़ा, इसलिए मैं STFW, पहला खोज परिणाम बैंगनी रंग में है, जिसका अर्थ है कि मैंने पहले पढ़ा है। "यह एक आशाजनक संकेत है", मैंने खुद से बात की, और फिर उस खोज परिणाम पर क्लिक करें। इसने मुझे इस पृष्ठ पर लाया, यह उत्तर जो मेरे मामले में काम नहीं करता है, और फिर अंत में ऊपर टिप्पणी जो काम करता है। और फिर मैंने देखा कि टिप्पणी मेरे द्वारा लिखी गई थी, 2 महीने पहले। वाह, क्या जिंदगी है।
रायलू

5
क्षमा करें यह क्यू / ए पर पिगीबैकिंग के लिए ... भी लगता है कि हो सकता है कृपया noexec में है fstab जो किसी भी निष्पादन विशेषाधिकारों के बिना ड्राइव mounts ... "मैंने सुना है" कि "कुछ लोग" कि तलाश में समय की काफ़ी खो दिया है। ..
साइमन 11

1
@Webman: chmodएक टिकाऊ परिवर्तन करता है। यदि आप chmodउन्हें सक्षम करने के लिए उपयोग करने के बाद अनुमतियाँ बदलते हैं, तो कुछ और उन्हें बदल रहा है। (इसमें फ़ाइल को हटाना और इसे फिर से बनाना या फ़ाइल को वॉल्यूम और रीमाउंट किए जाने पर वॉल्यूम कुछ और शामिल हो सकता है। यदि वॉल्यूम रीमाउंट किया जा रहा है, तो बाहरी वॉल्यूम पर फ़ाइलों के लिए डिफ़ॉल्ट अनुमतियाँ निर्दिष्ट करने के तरीके हैं, लेकिन यह गुंजाइश से परे है। मैं अब जवाब दे सकता हूं।)
एरिक पोस्टपिसिल

2
@SimonOpelt "अन्य लोग" आभारी हैं
मैट जैकबसेन

32

इसे इस्तेमाल करे:

sudo chmod +x program_name
./program_name 

आपके सुझाव के लिए धन्यवाद। मैं सिर्फ कोशिश की थी कि - लेकिन अब यह पार्टी का कहना है: ./program_name बाइनरी फ़ाइल निष्पादित नहीं कर सकते हैं
कियान

क्या ऐसा हो सकता है क्योंकि कंप्यूटर 2 32 बिट है और कंप्यूटर 1 64 बिट है? मुझे लगता है कि शायद मुझे इसे कंप्यूटर पर संकलित करना चाहिए 2. आपकी मदद के लिए सभी को धन्यवाद।
कियान सेप

हां, यदि आप 64 बिट्स में कुछ प्रोग्राम संकलित करते हैं, और सिस्टम 32 बिट्स में निष्पादित करने का प्रयास करते हैं, तो काम नहीं करता है। आपको कंप्यूटर पर स्रोत कोड को फिर से स्थापित करने की आवश्यकता है।
विटोर विल्लर

sudoआम तौर पर आवश्यक नहीं है, जब तक कि कार्यक्रम एक निर्देशिका में नहीं है जहां आपके पास अनुमति नहीं है (किस मामले में, आपने इसे पहले स्थान पर कैसे स्थापित किया है?)
ट्रिपल अष्ट

10

लगता है कि आपके पास फ़ाइल अनुमति पर निष्पादित ध्वज सेट नहीं है, आज़माएं:

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