उत्तर देने योग्य: कैसे पुनरावर्ती निर्देशिका और फ़ाइल अनुमतियाँ सेट करें


52

Ansible में, मैं यह कर सकता हूं:

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes

और यह उस पथ के सभी निर्देशिकाओं और फ़ाइलों पर 0775 के स्वामी, समूह और अनुमतियों को पुन: सेट करता है। लेकिन मैं निर्देशिका को 0775 पर सेट करना चाहता हूं, और 0664 को फाइल करता हूं। क्या ऐसा करने का कोई तरीका है?


जवाबों:


33
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes

755 को डायरेक्टरी सेट करेगा, और 644 को फाइल करेगा।


यह फ़ाइलों के लिए काम नहीं करता है।
मिरज़ा

1
@ अदम चांस जादू कहाँ है? यू, जी, ओ को कैसे निर्दिष्ट किया जाता है, इसे संख्या से अलग बनाते हैं (और जहां 644 लिखा है?)
linuxbandit

4
स्रोत कोड में उल्लेख किया गया है कि प्रतीकात्मक ugo हैंडलिंग "man chmod" हैंडलिंग के समान है - पूंजी X में dir / फ़ाइल स्थिति और मौजूदा निष्पादित बिट्स के आधार पर विशेष हैंडलिंग है। github.com/ansible/ansible/blob/…
मार्क टैम्स्की

2
दूसरे शब्दों में, Xहै xनिर्देशिकाओं के लिए, और फ़ाइलों के लिए कुछ भी नहीं है। और वह यह है कि chmod, ansibleमोड स्ट्रिंग का इलाज नहीं करता है। काश, Sइसी तरह व्यवहार किया जाता।
x- यूरी

1
लेकिन ध्यान दें, यह सभी के द्वारा निष्पादन योग्य स्वामी द्वारा फ़ाइलों को निष्पादन योग्य बनाता है ।
x- यूरी

25

Ansible फ़ाइल / कॉपी मॉड्यूल आपको फ़ाइल प्रकार के आधार पर अनुमतियों को निर्दिष्ट करने की विशिष्टता नहीं देता है, इसलिए आपको इन लाइनों के साथ कुछ करके मैन्युअल रूप से ऐसा करने की आवश्यकता होगी:

- name: Ensure directories are 0755
  command: find {{ path }} -type d -exec chmod 0755 {} \;

- name: Ensure files are 0644
  command: find {{ path }} -type f -exec chmod 0644 {} \;

इनमें {{ path }}हर फ़ाइल या निर्देशिका की अनुमतियों को बदलने और निर्दिष्ट अनुमतियों को बदलने का प्रभाव होगा ।

स्रोत: https://stackoverflow.com/a/28782805/1306186


@luckytaxi gmangin द्वारा दिया गया उत्तर पुनरावर्ती उपनिर्देशिकाओं की अनुमतियों को सेट नहीं करता है।
देजय क्लेटन

आहह तुम सही हो! मैंने एक recurseविकल्प देखा, लेकिन दूसरा नहीं।
सौभाग्यवती

9

यदि आप ansible में मॉड्यूल फ़ाइल का उपयोग करना चाहते हैं, तो आप कर सकते हैं:

फ़ाइल: dest = / foo / bar / somedir owner = root group = apache mode = 0644 recurse = yes

फ़ाइल: dest = / foo / bar / somedir owner = root group = apache mode = 0775

इस विधि के साथ आप पहले सभी फ़ाइल (पुनरावृत्ति = हाँ) को '644' पर सेट करते हैं और फिर आप '775' के लिए / foo / bar / somedir सेट करते हैं।

यह सही नहीं है क्योंकि यह आपकी निर्देशिका की अनुमति को हर बार आपकी प्लेबुक खेलते समय बदल देगा। लेकिन कम से कम यह वैमानिक है, न कि मॉड्यूल कमांड की तरह।

यदि आप 'परिवर्तित' स्थिति नहीं चाहते हैं, तो आप मॉड्यूल स्टेट का उपयोग कर सकते हैं। यह सभी फाइलों और निर्देशिका को / foo / bar / somedir में सूचीबद्ध करेगा ताकि आप उत्तर को पंजीकृत करें और फिर केवल उन फाइलों पर एक लूप बनाएं।


7
आपका जवाब 775. करने के लिए केवल शीर्ष स्तर की डायरेक्टरी सेट करते समय सभी के लिए की जरूरत है, 644 के लिए सभी subfiles और उप सेट हो जाएगा निर्देशिका 775 होने के लिए, उपनिर्देशिकाएं।
एडवर्ड नेड हार्वे

यह सुझाव बेमतलब नहीं है। अनुमतियों को पहले एक मान पर सेट करना, और बाद में दूसरे में, इसका मतलब है कि अनुमतियाँ हर रन पर बदल दी जाएंगी।
केविन कीन

5

मुझे यकीन नहीं है कि निर्देशिका को 0775 ( rwxrwxr-x) और फ़ाइलों को 0644 ( rw-r--r--): समूह-लेखन योग्य निर्देशिकाओं में सेट करने के लिए कितना अर्थ होगा लेकिन फाइलें नहीं?

यदि आप फ़ाइलों को 0664 ( rw-rw-r--) में सेट करना चाहते हैं, तो यह सुनिश्चित करने के लिए कि फाइलें निष्पादन योग्य नहीं हैं, जबकि निर्देशिकाएं ट्रैवर्सेबल हैं, केवल एक chmodकमांड से युक्त एक सुरुचिपूर्ण समाधान है :

chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"

यहाँ कैसे उस में इस्तेमाल किया जा सकता है Ansible :

- name: recursive chmod example
  command: |
    chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
  register: chmod_status
  changed_when: chmod_status.stdout != ""
  with_items:
    - "/home/user/sample/dir"

chmod -cउन सभी परिवर्तनों को प्रिंट करता है जिनका उपयोग हम आसानी से Ansible में "परिवर्तित" स्थिति को पॉप्युलेट करने के लिए कर सकते हैं । मुझे उम्मीद है कि यह समझ में आएगा।


3

आवश्यकता होने पर केवल मॉड बदलने के लिए:

- name: make dirs 0755   
  command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;

- name: make files 0644   
  command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.