Mv का उपयोग करते समय मुझे अनुमति देने से इनकार क्यों किया जाता है, हालांकि निर्देशिका अधिकार सही हैं?


15

मुझे अनुमति देने से इनकार कर दिया जाता है जब फ़ोल्डर को स्थानांतरित करने का प्रयास किया Musicजाता है, mvहालांकि निर्देशिका स्वामी मेरे उपयोगकर्ता के लिए सेट है और उपयोगकर्ता अनुमतियाँ 7 पर सेट हैं। क्या चल रहा है?

(मुझे पता है कि मैं sudo का उपयोग कर सकता हूं, लेकिन मैं यह पता लगाना चाहता हूं कि क्या गलत है। यहां कुछ गड़बड़ है)। Ps: मैं Mac OS X El Capitan पर हूं।

टर्मिनल स्क्रीनशॉट


1
कोई भी एक ही त्रुटि पर ठोकर खा रहा है, ऐसा इसलिए हो सकता है क्योंकि आप किसी फ़ाइल को खोलने की कोशिश कर रहे हैं जो खुली है। ओपी का मामला नहीं है, हालांकि यह कह रहा है कि यह मदद कर सकता है।
aderchox

जवाबों:


21

ध्यान दें कि, जब फ़ोल्डर में a, गतिमान bहो c, तो फ़ोल्डर की अनुमतियाँ aनिर्धारित करें कि आप क्या कर सकते हैं।

इस मामले में, अनुमतियाँ .सबसे महत्वपूर्ण होंगी।

निरीक्षण करें कि अनुमतियाँ बस की तुलना में अधिक जटिल हैं rwx। आपके musicफ़ोल्डर @में सबसे अंत में .फ़ोल्डर होता है +

  • xattr -h@ प्रतीक के लिए जटिल अनुमति निर्धारित करने के लिए उपयोग करें ।
  • getfacl+ प्रतीक के लिए ACL निर्धारित करने के लिए उपयोग करें ।

क्या आपके पास एक संसाधन है जो "जटिल अनुमतियाँ" को कवर करता है, जैसा कि आप उन्हें कहते हैं?
user1717828

man xattrएक अच्छा प्रारंभिक बिंदु हो सकता है।
कोनरक

1
नहीं, कोई मैनुअल प्रविष्टि नहीं। मैं Google को इसके लिए एक और नाम खोजने में सक्षम था: विस्तारित विशेषताएँ , अगर कोई और सीखना चाहता है।
user1717828

4
या उपयोग करें ls -la@e। यहां सबसे अधिक संभावना है, एक deny deleteएसीएल था जो नाम बदलने से भी रोकता है।
स्टीफन चेज़लस

1
@ टिमो, वे एसीएल उन निर्देशिकाओं को हटाने या उनका नाम बदलने से रोकते हैं। संभवतः, उन्हें वहां एक कारण के लिए रखा गया था, जैसे कि कुछ एप्लिकेशन उनके वहां होने पर भरोसा करते हैं और अन्यथा विफल हो जाते हैं।
स्टीफन चेज़लस

19

मैं लिनक्स के लिए विंडोज सबसिस्टम का उपयोग कर रहा था। मेरे पास अलग बैश इंस्टेंस में डायरेक्टरी खुली थी। इसे बंद करने से मुझे निर्देशिका को स्थानांतरित करने में मदद मिली।


4
WSL पर रिमोट के साथ VS कोड में मुझे संपादक को बंद करना पड़ा और उस VS कोड परियोजना के बाहर WSL को एक टर्मिनल खोलना पड़ा।
ब्योर्न

10

ऐसा लगता है जैसे उस निर्देशिका में कम से कम 1 फ़ाइल कहीं गहरी थी जिसमें सही अनुमति नहीं थी।

इसलिए, मैंने जो किया वह था:

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

अब यह काम कर रहा है।


17
जो भी समस्या थी, संगीत फ़ाइलों को निष्पादित करने की अनुमति देना समाधान नहीं होना चाहिए।
स्टीफन चेज़लस

3
और ऐसा नहीं लगता है कि किसी निर्देशिका में कोई वस्तु उस निर्देशिका का नाम बदलने की आपकी क्षमता में हस्तक्षेप कर सकती है।
स्कॉट

मुझे पता है कि यह अजीब है लेकिन इसने चाल चली। निर्देशिका पर chmod और chown का उपयोग करने से कोई प्रभाव नहीं पड़ा।
टिमो

क्या यह संभव है कि chmod 755संगीत फ़ोल्डर पर विशेष '@' अनुमतियाँ हटा दी जाए?
होरस्कॉल

@ हॉर्सकोल, या चांस। ओपी के लक्षण एसीएल को हटाने से इनकार करने वाली निर्देशिकाओं से मेल खाते हैं , लेकिन कम से कम योसेमाइट पर, एक चाउन या चामॉड 755 करने से उस एसीएल को नहीं हटाया जाता है। आपको इसके लिए आवश्यकता होगी chmod -a 'everyone deny delete' Music। यह एल Capitan में अलग हो सकता है।
स्टीफन चेज़लस

4

यहां समस्या की संभावना म्यूजिक फोल्डर के एक्सेस कंट्रोल लिस्ट (ACL) से है। ACL नियमित रूप से POSIX वालों के लिए एक अलग अनुमति प्रणाली है जो सामान्य रूप से सूचीबद्ध होती है ls -l। होम फोल्डर और कुछ अन्य निर्देशिकाओं में ACL भी है।

घर निर्देशिका के भीतर ACLs देखने के लिए, उपयोग करें:

/bin/ls -le ~

आपको संभवतः 0: group:everyone deny deleteसंगीत निर्देशिका के लिए एक नियम दिखाई देगा । जैसा कि आपने उल्लेख किया है कि आप समस्या को ओवरराइड कर सकते हैं sudo। यदि आप ऐसा नहीं करना चाहते (या नहीं कर सकते), तो आपके पास अन्य विकल्प हैं, यह देखते हुए कि आप फ़ाइल के मालिक हैं। आप संगीत निर्देशिका के एसीएल से इसके प्रवेश पर आधारित अनुक्रमणिका को हटा सकते हैं (उदाहरण में मैंने ऊपर दिया है):

/bin/chmod -a# 0 Music

या आप ACL में सभी प्रविष्टियों को हटा सकते हैं:

/bin/chmod -N Music

अब आप निर्देशिका को चारों ओर ले जा सकते हैं (नियमित POSIX अनुमतियों के अधीन)। यदि आप इस कदम के बाद ACL वापस लाना चाहते हैं, तो आप उपयोग कर सकते हैं:

/bin/chmod +a "group:everyone deny delete" Music_tmp

और /bin/ls -leएसीएल की पुष्टि के लिए फिर से उपयोग करें जैसा आप चाहते हैं। man chmodअधिक जानकारी के लिए ACL उदाहरण देखें । विशेष रूप से, यह परिचय सहायक है:

प्रत्येक फ़ाइल में एक एसीएल है, जिसमें प्रविष्टियों की एक आदेशित सूची है। प्रत्येक प्रविष्टि एक उपयोगकर्ता या समूह को संदर्भित करता है, और अनुमतियों के एक सेट को अनुदान या इनकार करता है। ऐसे मामलों में जहां एक उपयोगकर्ता और एक समूह एक ही नाम के साथ मौजूद हैं, उपयोगकर्ता / समूह का नाम "उपयोगकर्ता:" या "समूह:" के साथ उपसर्ग किया जा सकता है ताकि नाम का प्रकार निर्दिष्ट किया जा सके।

एसीएल आदेश

मुझे नहीं लगता कि मैन पेज ऑर्डर करने के आसपास के नियमों की व्याख्या करता है, लेकिन यह पेज एसीएल के लिए स्पष्ट रूप से आदेश नियमों को स्पष्ट करता है। विशेष रूप से, एक स्पष्ट denyनियम से पहले एक स्पष्ट allowनियम लागू किया जाएगा । इसलिए, जब तक group:everyone deny deleteप्रविष्टि जगह में है, तब तक अपने उपयोगकर्ता को allowनियम से हटाने की अनुमति देना संभव नहीं है । ऐसा इसलिए है क्योंकि अनुमति everyoneसमूह से इनकार की जाती है , जिसमें आप शामिल हैं, और उस नियम को पहले लागू किया जाएगा।


2
मुझे नहीं पता कि यह क्यों अस्वीकृत किया गया था। everyone deny deleteMacOS 'डिफ़ॉल्ट घर निर्देशिका पर एसीएल प्रविष्टि है वास्तविक कारण निर्देशिका न ले जाया गया है और न ही नष्ट कर दिया जा सकता है। (इसके अलावा, ध्यान दें कि OS उन्हें फिर से कभी भी बना सकता है।)
Diti

1
यह जवाब रोकेट !!! पवित्र बकवास, ये नए ACL एक बड़ी PITA हैं।
डीन हिलर

3

मुझे यह समस्या थी जब एक निर्देशिका में प्रोग्राम का एक सेट चल रहा था जिसे मैं हटाने की कोशिश कर रहा था। निर्देशिका को स्थानांतरित करने के लिए, मुझे पहले उस निर्देशिका से सभी चल रहे कार्यक्रमों को मारना था।

निम्नलिखित आदेशों में, आप अपने कार्यक्रम के नाम का चयन कैसे करें, इसके बारे में बहुत सावधान रहें । मैंने संदर्भ के लिए निम्नलिखित आदेशों का उपयोग किया:

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

सामान्य प्रक्रिया है:

  1. सवाल में निर्देशिका से चल रहे सभी कार्यक्रमों को मार डालो
  2. निर्देशिका का नाम बदलने का प्रयास
  3. यदि वह विफल रहता है, तो निर्देशिका से सभी कार्यक्रमों को ( kill -9बहुत सावधानी के साथ ) बलपूर्वक मारें
  4. निर्देशिका का नाम बदलने का प्रयास
  5. यदि वह विफल रहता है, तो देखें कि क्या प्रोग्राम फिर से चल रहा है, यानी कि यह एक अलग निर्देशिका से चल रहे कुछ डेमॉन प्रोग्राम द्वारा फिर से शुरू किया गया है
  6. बल डेमन प्रोग्राम को मारता है जो कष्टप्रद कार्यक्रम को पुनरारंभ करता है
  7. बल कष्टप्रद कार्यक्रम को मार डालो
  8. नाम बदलें निर्देशिका
  9. फायदा

1
मुझे नहीं लगता कि ओपी संभावना में कोई कार्यक्रम चल रहे हैं ~ / संगीत निर्देशिका से। वैसे भी उन्होंने कहा कि वह sudo का उपयोग नहीं करना चाहते हैं, जो यह उत्तर देता है।
स्पिनअप

मैं बस इतना ही कह रहा हूं कि मेरी यही स्थिति थी। भले ही यह ओपी के लिए उपयोगी न हो, लेकिन किसी के लिए उपयोगी हो सकता है।
वट्सइनबॉक्‍स

यह संभवतः किसी के लिए मददगार है, निश्चित रूप से - इसीलिए मैंने इसे कम नहीं किया। लेकिन मुझे लगता है कि StackExchange का इरादा यह है कि पोस्ट किए गए उत्तर वास्तव में पूछे गए प्रश्न का उत्तर देते हैं।
।:

1
एक अन्य संभावित मुद्दा, यदि आप इस उत्तर के लिए एक नौसिखिए के लिए सामान्य उपयोग के अर्थ के लिए हैं: आप पहले में बहुत सावधानी से अपने खोज शब्दों को चुनने grepऔर इसे जांचने के बारे में कोई चेतावनी नहीं देते हैं । जो कुछ भी आप पहली बार डाल रहे grepहैं, वह सभी चल रहे कार्यक्रमों के पूल में से चुनेंगे और killइसे रूट विशेषाधिकारों के साथ ...
स्पिनअप

1
नाइस, केटस, मुझे लगता है कि यह एक बड़ा सुधार है
स्पिनअप

0

वह भी तब हो सकता है जब अंदर की कोई फाइल राइट-प्रोटेक्टेड हो। मेरे पास आज का वह मामला था जब access.logअपाचे को लिखा गया था, जिसे पहले ही रोक दिया गया था। मैंने अभी यह फ़ाइल निकाली है, इसलिए आगे मैं पैरेंट डायरेक्टरी को स्थानांतरित करने में सक्षम था।

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