Apakah ada cara untuk mencadangkan dan mengembalikan kepemilikan dan izin file (hal-hal yang dapat diubah dengan chown
dan chmod
)?
Anda dapat melakukan ini di Windows menggunakan icacls .
Bagaimana dengan daftar kontrol akses?
Apakah ada cara untuk mencadangkan dan mengembalikan kepemilikan dan izin file (hal-hal yang dapat diubah dengan chown
dan chmod
)?
Anda dapat melakukan ini di Windows menggunakan icacls .
Bagaimana dengan daftar kontrol akses?
Jawaban:
Anda dapat melakukan ini dengan perintah dari paket acl (yang seharusnya tersedia di semua distribusi utama, tetapi mungkin tidak menjadi bagian dari instalasi basis). Mereka mencadangkan dan mengembalikan ACL ketika ACL hadir, tetapi mereka juga bekerja untuk izin dasar bahkan pada sistem yang tidak mendukung ACL.
Untuk mencadangkan izin di direktori saat ini dan subdirektori secara rekursif:
getfacl -R . >permissions.facl
Untuk mengembalikan izin:
setfacl --restore=permissions.facl
setfacl
maka tidak bisa chmod
lagi, mungkin akan menyebabkan konflik?
Saya tidak tahu apa-apa "dari rak" yang akan melakukan ini. Berikut ini skrip pemula untuk Anda, yang akan menangani izin dasar. Itu tidak menangani ACL deskripsi apa pun - tetapi Pertanyaan Anda secara eksplisit mengecualikannya. (Ini juga akan gagal pada nama file patologis - yang dimulai dengan spasi putih, atau mengandung karakter yang tidak dapat dicetak.)
Simpan izinnya
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
Kembalikan izin
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
Script bash ini hanya mendapatkan acl dirs (dalam kasus saya file acls = dir (parent) acl) Setelah eksekusi script, akan menciptakan "recovery_acl.sh" lainnya.
Saat memulihkan Kesalahan seperti "Tidak ada file atau direktori" berarti dir itu kosong atau dirname memiliki dua spasi lebih.