एक कमांड में डायरेक्टरी के लिए फाइल परमिशन कैसे बदलें


11

मैं यूनिक्स में एक कमांड में एक निर्देशिका की सभी फ़ाइल अनुमतियों को कैसे बदल सकता हूं?


क्या आपका मतलब है कि आप निर्देशिका में सभी फ़ाइलों के लिए अनुमतियाँ बदलना चाहते हैं? क्या आप इसे नेस्टेड डायरेक्टरी में भी जाना चाहते हैं? क्या आप निर्देशिका (ies) की अनुमति को स्वयं बदलना चाहते हैं, या केवल फाइलों को? अंत में, क्या आपने अपना प्रश्न पोस्ट करने से पहले इस साइट को खोजने का प्रयास किया?
ईथर

जवाबों:


21

गैर-पुनरावर्ती रूप से किसी फ़ाइल या निर्देशिका प्रविष्टि पर अनुमतियां बदलने के लिए, 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निर्देशिकाओं को बिल्कुल सेट कर रहा है ? प्रश्न केवल यह बताता है कि वह अनुमति बदलना चाहता है, विशेष रूप से नहीं।
रीस मूर

@ रीस मूर: आप सही कह रहे हैं। पुनरावर्ती को अनुमति बदलने के बारे में पूछने वाले ने भी कुछ नहीं कहा।
जॉय एडम्स

1
आप आम तौर पर उस के लिए + और - प्रतीकात्मक मोड सामान का उपयोग करना चाहते हैं; यानी,chmod -R go=u,go-w /dir
dannysauer

6

chmodएक -Rध्वज है जिसका अर्थ है फ़ाइलों और निर्देशिकाओं पर पुनरावृत्ति की अनुमति बदलना।

आप फ़ोल्डर के लिए सही काम करने के लिए पूंजी 'X' का उपयोग कर सकते हैं: 'X' = "केवल तभी निष्पादित / खोजें जब फ़ाइल निर्देशिका है या पहले से ही किसी उपयोगकर्ता के लिए अनुमति निष्पादित है"

तो, जैसे: chmod -R ug = rwX, o-rwx।

एक संपूर्ण पेड़ को स्वामी और प्रत्येक फ़ाइल के समूह के लिए और किसी और के लिए सुलभ नहीं होगा। कोई भी पहले से ही निष्पादन योग्य फ़ाइलें अभी भी बाद में निष्पादन योग्य होंगी, और सभी निर्देशिकाओं में उपयोगकर्ता और समूह के लिए 'x' होगा और दूसरों के लिए नहीं।


chmod -R 444 somedirइसमें फ़ाइलों के साथ एक निर्देशिका पर प्रयास करें । आपको Permission deniedइसलिए मिलता है क्योंकि -x ध्वज निर्देशिकाओं से दूर हो रहा है, और निर्देशिका को पढ़ना जारी रखना आवश्यक है।
जोए एडम्स

1
इस के लिए एक उपयोगी परिशिष्ट X = Y वाक्यविन्यास है। आप उदाहरण के लिए समूह अनुमति सेट कर सकते हैं उपयोगकर्ता की अनुमति के लिए chmod -R g = u dir का उपयोग करके समूह और उपयोगकर्ता के बराबर सेट करें। यह उन चीजों के आस-पास काम करता है जैसे कि "प्लेन" फाइलों के निष्पादन की आवश्यकता होती है।
पॉल रूबेल नोवेल

3
chmod -R <file permission> *

के मैन पेज से chmod:

-R, --recursive
              change files and directories recursively

कई दिशाओं के लिए स्विच के chmodसाथ उपयोग करें, -Rजिसमें उप-निर्देशिका ट्री में लाखों फाइलें हैं और आप इन फ़ाइलों की फ़ाइल अनुमतियों को एक साथ एक शॉट में बदलना चाहते हैं।

फ़ाइल की अनुमति उदाहरण के लिए हो सकती है। 777, 755, 644 आदि।

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