चामड़ फिर से


249

मेरे पास एक संग्रह है, जिसे किसी और ने संग्रहित किया है, और मैं इसे डाउनलोड करने के बाद स्वचालित रूप से फाइल एक्सेस की एक शाखा को बदलने के लिए फ़ाइल सिस्टम की एक शाखा को बदलने के लिए इसे डाउनलोड करना चाहता हूं। (मैं नहीं बदल सकता कि संग्रह कैसे बनाया जाता है)।

मैंने इस धागे में देखा है: chmod: कैसे पुनरावर्ती जोड़ने के लिए केवल उन अनुमतियों को जोड़ने के लिए जो पहले से ही कुछ अन्य के रूप में अनुमति निष्पादित है, लेकिन कोई खुशी नहीं है।

निर्देशिका मूल रूप से कई लेकिन सभी गलत झंडे के साथ आती हैं, वे इस प्रकार दिखाई दे सकती हैं:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

मैं अभी तक खोजे गए कुछ ही हैं, लेकिन अधिक हो सकता है।

findत्रुटि जब बिना xअनुमति के एक निर्देशिका में देखने की कोशिश करता है , और इसलिए इसे पास नहीं करता है chmod। मैं अब तक क्या कर रहा हूं, मूल निर्देशिका पर अनुमतियों को मैन्युअल रूप से बदल रहा है, फिर बच्चे निर्देशिकाओं में जाएं और उनके लिए भी ऐसा ही करें। लेकिन यह बहुत श्रम है। क्या स्वचालित रूप से ऐसा करने का कोई तरीका नहीं है?

यानी मैं इसे अभी कैसे कर रहा हूं:

करना:

$ chmod -R +x
$ chmod -R +r

जब तक मुझे कोई त्रुटि नहीं मिलती, तब तक

$ find -type f -exec chmod -x {} +

लेकिन एक बेहतर तरीका होना चाहिए।


3
-R समान नहीं है -R
PJ ब्रुनेट

ध्यान दें, यदि आप कहना चाहते हैं कि सभी समूह अनुमतियां स्वामी की अनुमतियों से मेल खाती हैं (लगता है कि IMO तक सब कुछ फ़ॉग करने की संभावना कम है) तो serverfault.com/a/284478/210994 पर
ThorSummoner

जवाबों:


131

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

find . -type d -exec chmod +rx {} \;

2
दोनों के बीच क्या अंतर है '\;' और '+' जिसका उपयोग ओपी द्वारा कमांड के अंत में किया गया था?
कोन मन

1
@konpsych स्पष्ट रूप +से एक अलग तरीके से कमांड-लाइन बनाता है। मैं वास्तव में इसके बारे में नहीं जानता था; \;सामान्य तरीका है, खोज के साथ मेल खाने वाली प्रति फ़ाइल एक कमांड के साथ।
फ्रेड फू

काम नहीं करता है अगर कुछ फाइलों में उनके नाम के स्थान हैं
११

3
@Soonts तो "{}"बजाय {}इसे ठीक करना चाहिए।
15:

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

176

आप Xकेवल निर्देशिका के लिए निष्पादन योग्य ध्वज सेट करने के लिए मोड अक्षर (राजधानी एक्स) के साथ चामोद का उपयोग कर सकते हैं ।

निष्पादन योग्य ध्वज के नीचे के उदाहरण में साफ़ किया गया है और फिर सभी निर्देशिकाओं के लिए पुनरावर्ती रूप से सेट किया गया है:

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

थोड़ा स्पष्टीकरण:

  • chmod -x foo- के लिए eXecutable ध्वज को साफ़ करेंfoo
  • chmod +x foo- के लिए eXecutable ध्वज सेट करेंfoo
  • chmod go+x foo- ऊपर के समान, लेकिन केवल समूह और अन्य उपयोगकर्ताओं के लिए ध्वज सेट करें, उपयोगकर्ता (स्वामी) की अनुमति न दें
  • chmod go+X foo - ऊपर के समान, लेकिन केवल निर्देशिकाओं पर लागू करें, फ़ाइलों को स्पर्श न करें
  • chmod -R go+X foo- ऊपर के समान, लेकिन सभी के सभी उपनिर्देशिकाओं के लिए यह पुनरावर्ती करेंfoo

80

एक ही समय में सभी पर्चे बदलने की कोशिश करें:

chmod -R +xr

यह सभी गैर-निर्देशिकाओं के साथ ही निष्पादन की अनुमति देगा।
फ्रेड फू

1
हाँ। यह सिर्फ पहले पुनरावृत्त कदम की जगह लेता है। आपको अभी भी find -type f -exec chmod -x {} +बाद में चलना है।
choroba

50

स्वामी द्वारा सब कुछ लिखने योग्य बनाने के लिए, समूह द्वारा पढ़ें / निष्पादित करें, और विश्व निष्पादन योग्य:

chmod -R 0755

सब कुछ व्यापक बनाने के लिए:

chmod -R 0777

12
वर्तमान फ़ोल्डर स्थान जोड़ें:chmod -R 0777 .
Danijel

18

विस्तार के साथ वर्तमान फ़ोल्डर के भीतर सभी फ़ाइलों (नहीं फ़ोल्डर्स) के लिए निष्पादन योग्य अनुमतियों, पुनरावृत्ति को जोड़ना sh:

find . -name '*.sh' -type f | xargs chmod +x

* पाइप नोटिस ( |)


2

वर्तमान पथ से शुरू होने वाली सभी फ़ाइलों और निर्देशिकाओं को 0777 दें:

chmod -R 0777 ./

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