Dosya sahipliğini ve izinlerini (değiştirilebilir şeyler yedeklemek ve geri yüklemek için bir yol var mı chown
ve chmod
)?
Bunu Windows'ta icacls kullanarak yapabilirsiniz .
Erişim kontrol listeleri ne olacak?
Dosya sahipliğini ve izinlerini (değiştirilebilir şeyler yedeklemek ve geri yüklemek için bir yol var mı chown
ve chmod
)?
Bunu Windows'ta icacls kullanarak yapabilirsiniz .
Erişim kontrol listeleri ne olacak?
Yanıtlar:
Bunu acl paketindeki komutlarla yapabilirsiniz (tüm ana dağıtımlarda olması gerekir, ancak temel kurulumun bir parçası olmayabilir). ACL mevcut olduğunda ACL'yi yedekler ve geri yükler, ancak ACL'yi desteklemeyen sistemlerde bile temel izinler için çalışırlar.
Geçerli dizindeki ve alt dizinlerindeki izinleri yinelemeli olarak yedeklemek için:
getfacl -R . >permissions.facl
İzinleri geri yüklemek için:
setfacl --restore=permissions.facl
setfacl
dosyalarına dayanarak chmod
tekrar yapamaz , belki de çatışmaya neden olur?
Bunu yapacak "raftan" hiçbir şeyin farkında değilim. Bununla birlikte, sizin için temel izinleri işleyecek bir başlangıç komut dosyası. Herhangi bir açıklamanın ACL'lerini işlemez - ancak Sorunuz bunları açıkça hariç tutar. (Patolojik dosya adlarında da başarısız olur - boşlukla başlayan veya yazdırılamayan karakterler içerenler.)
İzinleri kaydet
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
İzinleri geri yükle
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
Bu bash betiği sadece acl dirs olsun (benim durumumda acls = dir (parent) acl) Betiğin yürütülmesinden sonra başka bir "recovery_acl.sh" oluşturur.
"Böyle bir dosya veya dizin yok" gibi hataları kurtarırken dir boş veya dirname iki / daha fazla boşluk birlikte anlamına gelir.