जवाबों:
Chmod उपयोगिता का GNU संस्करण एक फ़ाइल ( ) से दूसरी ( ) में मोड को कॉपी कर सकता है ।RFile
file
chmod --reference=RFile file
GNU कोरुटिल्स अधिकांश लिनक्स वितरण और सिगविन, अन्य स्थानों में पाए जाते हैं। सभी chmod कार्यान्वयन इस विकल्प को प्रदान नहीं करते हैं।
--reference
विकल्प जीएनयू संस्करण में शामिल किया गया है; OSX शायद एक chmod का उपयोग करता है जो इसके बजाय BSD के साथ उत्पन्न होता है। OSX मैन chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
होगा कि किसी फ़ाइल की प्रतिलिपि बनाते समय, अनुमतियाँ और साथ ही फ़ाइल की प्रतिलिपि बनाएँ।
मैं इसके साथ आया:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
यह पूरी तरह से बुलेट प्रूफ नहीं है, लेकिन मुझे इसकी आवश्यकता है।
इसे इस्तेमाल करे:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
यदि यह दो डायरेक्टरी फाइलों पर मेल नहीं खाता है, तो आपको "ऐसी कोई फ़ाइल या निर्देशिका" त्रुटि नहीं दिखेगी।
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
आप getfacl
फ़ाइल अनुमतियों, स्वामी, समूह और अतिरिक्त ACL (एक्सेस कंट्रोल लिस्ट) की पूरी सूची को पुनः प्राप्त करने के लिए उपयोग कर सकते हैं ।
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
यदि आप उस आउटपुट को एक फ़ाइल (जैसे acl.txt
) में सहेजते हैं , तो आप इस प्रारूप से फिर से बहाल कर सकते हैं setfacl --restore acl.txt
। यदि आप केवल एक फ़ाइल को पुनर्स्थापित करना चाहते हैं, और उस फ़ाइल का मूल फ़ाइल नाम अलग है, तो आप उपयोग करना चाहेंगे setfacl --set-file acl.txt filename.txt
(जहां filename.txt
नया फ़ाइल नाम है)।
मूल अनुमतियाँ सहेजें acl.txt
:
$ getfacl filename.txt > acl.txt
अनुमतियों को ओवरराइट करें (प्रदर्शन के लिए; यह सिर्फ इतना है कि आप देख सकते हैं कि अगले चरण के कार्यों में इसे बहाल कर सकते हैं)
$ chmod 777 filename.txt
$ sudo chown nobody:root filename.txt
$ ls -l filename.txt
-rwxrwxrwx 1 nobody root 0 Jan 8 14:24 filename.txt
setfacl
से सही अनुमति बहाल करने के लिए उपयोग करें acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
फ़ाइल नाम से लिया गया है # file:
getfacl
, द्वारा की गई टिप्पणी गया है , इसलिए इसे कमांड लाइन पर निर्दिष्ट करने की कोई आवश्यकता नहीं है।
यदि आप उन अनुमतियों को किसी भिन्न फ़ाइल में पुनर्स्थापित करना चाहते हैं, तो आप --set-file
इसके बजाय उपयोग कर सकते हैं --restore
:
$ setfacl --set-file acl.txt second_filename.txt
यदि आप कुछ फ़ाइलों पर अनुमतियों को अधिलेखित करते हैं /usr
, लेकिन आपको नहीं पता कि आपके पास कौन सी फाइलें अधिलेखित हैं, तो आप आमतौर पर इसे उसी तरह से कॉन्फ़िगर की गई प्रणाली से पुनर्स्थापित करके ठीक कर सकते हैं।
कार्य प्रणाली से बैकअप अनुमतियाँ (ध्यान दें: getfacl
सापेक्ष पथ उत्पन्न करता है, इसलिए आपको cd
दोनों मशीनों पर एक सुसंगत स्थान सुनिश्चित करें )
# cd /
# getfacl -R usr > /root/acls.txt
टूटी हुई अनुमतियों के साथ सिस्टम में ACL डंप की प्रतिलिपि बनाएँ
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
ज्ञात अच्छी मशीन से टूटी हुई अनुमतियों को अधिलेखित करने के लिए ACL डंप को पुनर्स्थापित करें
# cd /
# setfacl --restore /root/acls.txt