मैं यूनिक्स में एक कमांड में एक निर्देशिका की सभी फ़ाइल अनुमतियों को कैसे बदल सकता हूं?
मैं यूनिक्स में एक कमांड में एक निर्देशिका की सभी फ़ाइल अनुमतियों को कैसे बदल सकता हूं?
जवाबों:
गैर-पुनरावर्ती रूप से किसी फ़ाइल या निर्देशिका प्रविष्टि पर अनुमतियां बदलने के लिए, chmodकमांड का उपयोग करें ( इसके अन्य विकल्पों के बारे में अधिक पढ़ने के लिए मैन चामॉड देखें :
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
किसी फ़ाइल / निर्देशिका के मालिक को पुनरावर्ती रूप से बदलना (सभी वंशजों को प्रभावित करना):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
निर्देशिका में सभी फ़ाइलों की अनुमतियों के बिट्स को बदलने के लिए:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
सभी निर्देशिकाओं की अनुमतियों को बदलने के लिए:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
यह अच्छा होगा यदि आप ऐसा कर सकते हैं:
chmod -R 755 dir
हालाँकि, यह समस्या है। यह फ़ाइलों और निर्देशिकाओं का समान व्यवहार करता है। उपरोक्त आदेश सभी उपयोगकर्ताओं द्वारा निर्देशिकाओं को सूचीबद्ध और पठनीय बनाता है, लेकिन यह सभी फ़ाइलों को निष्पादन योग्य भी बनाता है, जो कि आमतौर पर आप क्या करना चाहते हैं।
यदि हम इसे बदलते हैं 644, तो हमें एक और समस्या आती है:
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
समस्या यह है कि 644निर्देशिका सूची बिट को बाहर निकालती है, और यह साइड इफेक्ट फ़ाइल ट्री के आगे के ट्रैवर्सल को रोकता है। आप इस समस्या का उपयोग करके काम कर सकते हैं sudo, लेकिन आप अभी भी उन निर्देशिकाओं के साथ समाप्त होते हैं जो गैर-रूट उपयोगकर्ताओं के लिए पूरी तरह से बेकार हैं।
बिंदु chmod -Rकुछ मामलों (जैसे chmod -R g-r) में ठीक काम करता है , लेकिन उन मामलों में नहीं, जहां आप -xबिट के साथ गड़बड़ करना चाहते हैं , क्योंकि यह फ़ाइलों और निर्देशिकाओं पर अंधाधुंध रूप से काम करता है।
644या वह -xनिर्देशिकाओं को बिल्कुल सेट कर रहा है ? प्रश्न केवल यह बताता है कि वह अनुमति बदलना चाहता है, विशेष रूप से नहीं।
chmod -R go=u,go-w /dir
chmodएक -Rध्वज है जिसका अर्थ है फ़ाइलों और निर्देशिकाओं पर पुनरावृत्ति की अनुमति बदलना।
आप फ़ोल्डर के लिए सही काम करने के लिए पूंजी 'X' का उपयोग कर सकते हैं: 'X' = "केवल तभी निष्पादित / खोजें जब फ़ाइल निर्देशिका है या पहले से ही किसी उपयोगकर्ता के लिए अनुमति निष्पादित है"
तो, जैसे: chmod -R ug = rwX, o-rwx।
एक संपूर्ण पेड़ को स्वामी और प्रत्येक फ़ाइल के समूह के लिए और किसी और के लिए सुलभ नहीं होगा। कोई भी पहले से ही निष्पादन योग्य फ़ाइलें अभी भी बाद में निष्पादन योग्य होंगी, और सभी निर्देशिकाओं में उपयोगकर्ता और समूह के लिए 'x' होगा और दूसरों के लिए नहीं।
chmod -R 444 somedirइसमें फ़ाइलों के साथ एक निर्देशिका पर प्रयास करें । आपको Permission deniedइसलिए मिलता है क्योंकि -x ध्वज निर्देशिकाओं से दूर हो रहा है, और निर्देशिका को पढ़ना जारी रखना आवश्यक है।
chmod -R <file permission> *
के मैन पेज से chmod:
-R, --recursive
change files and directories recursively
कई दिशाओं के लिए स्विच के chmodसाथ उपयोग करें, -Rजिसमें उप-निर्देशिका ट्री में लाखों फाइलें हैं और आप इन फ़ाइलों की फ़ाइल अनुमतियों को एक साथ एक शॉट में बदलना चाहते हैं।
फ़ाइल की अनुमति उदाहरण के लिए हो सकती है। 777, 755, 644 आदि।