वहाँ बैक अप लेने और फ़ाइल का स्वामित्व और अनुमतियाँ (चीजों के साथ बदला जा सकता है कि बहाल करने के लिए एक रास्ता है chown
और chmod
)?
आप इसे आइकल्स का उपयोग करके विंडोज में कर सकते हैं ।
एक्सेस कंट्रोल लिस्ट के बारे में क्या?
वहाँ बैक अप लेने और फ़ाइल का स्वामित्व और अनुमतियाँ (चीजों के साथ बदला जा सकता है कि बहाल करने के लिए एक रास्ता है chown
और chmod
)?
आप इसे आइकल्स का उपयोग करके विंडोज में कर सकते हैं ।
एक्सेस कंट्रोल लिस्ट के बारे में क्या?
जवाबों:
आप इसे एसीएल पैकेज से कमांड के साथ कर सकते हैं (जो सभी मुख्यधारा के वितरण पर उपलब्ध होना चाहिए, लेकिन आधार स्थापना का हिस्सा नहीं हो सकता है)। एसीएल मौजूद होने पर वे वापस एसीएल को बहाल करते हैं, लेकिन वे एसीएल का समर्थन नहीं करने वाली प्रणालियों पर भी बुनियादी अनुमति के लिए काम करते हैं।
वर्तमान निर्देशिका और इसकी उपनिर्देशिकाओं में पुनरावृत्ति की अनुमति के लिए:
getfacl -R . >permissions.facl
अनुमतियाँ पुनर्स्थापित करने के लिए:
setfacl --restore=permissions.facl
setfacl
फ़ाइलों के आधार पर chmod
फिर से नहीं हो सकता है, शायद संघर्ष का कारण होगा?
मैं कुछ भी "शेल्फ से दूर" के बारे में नहीं जानता जो ऐसा करेगा। यहाँ आपके लिए एक स्टार्टर स्क्रिप्ट है, हालाँकि, यह बुनियादी अनुमतियाँ संभाल लेगी। यह किसी भी विवरण के एसीएल को संभालता नहीं है - लेकिन आपका प्रश्न स्पष्ट रूप से उन को बाहर करता है। (यह पैथोलॉजिकल फाइलनेम पर भी विफल हो जाएगा - जो व्हाट्सएप से शुरू होते हैं, या गैर-मुद्रण योग्य वर्ण होते हैं।)
अनुमतियाँ सहेजें
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
अनुमतियों को पुनर्स्थापित करें
while read PERMS OWNER GROUP FILE
do
chmod "$PERMS" "$FILE"
chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list
.htaccess
, gitignore
...
#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user/\-m\ u/g' acl
sed -i 's/group/\-m\ g/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i 's,\\,\\\\,g' acl
while IFS='' read -r line ; do
# grep dir name
if echo "$line" | grep -q "$f" ; then
dir="$line"
continue
fi
echo setfacl $line '"'$dir'"'>>recovery_acl.sh
# grep non def acl (for files)
if echo "$line" | grep -q '\-m' ; then
echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
fi
done < "acl"
sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh
इस बैश स्क्रिप्ट को acl केवल dirs मिलता है (मेरे केस में फाइल acls = dir (पैरेंट) acl) स्क्रिप्ट के निष्पादन के बाद, एक और "Recovery_acl.sh" बनाएगा।
"कोई ऐसी फ़ाइल या निर्देशिका नहीं" जैसे त्रुटियों को पुनर्प्राप्त करते समय, इसका मतलब है कि dir खाली है या dirname में एक साथ दो / अधिक रिक्त स्थान हैं।