Dosya izinlerini yedekleme ve geri yükleme


17

Dosya sahipliğini ve izinlerini (değiştirilebilir şeyler yedeklemek ve geri yüklemek için bir yol var mı chownve chmod)?

Bunu Windows'ta icacls kullanarak yapabilirsiniz .

Erişim kontrol listeleri ne olacak?


Farklı dağıtımlar farklı paket yöneticilerini kullandığından, hangi dağıtımın kullandığınızı belirttiyseniz yardımcı olur.
garethTheRed

@garethTheRed, kullanılan fs'ye mi, yoksa sadece distroya mı bağlı?
leeand00

1
Dosya sistemine bağlı olacağından şüpheliyim.
garethTheRed

Şimdiye kadar mükemmel bir cevap yok.
kittygirl

Yanıtlar:


24

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

Hmm. Ben gerçekten ACL kadar okumak gerekir.
roaima

1
Oluşturulan dosyada, onlar da bir dizine göreli midir?
leeand00

2
@ leeand00 Evet, oluşturulan dosya her zaman göreli dosya adları kullanır.
Gilles 'SO

@ Gilles, unix.stackexchange.com/questions/364517/… setfacl dosyalarına dayanarak chmodtekrar yapamaz , belki de çatışmaya neden olur?
kittygirl

1
@kittygirl Ne istediğini bilmiyorum. “Setfacl dosyaları tekrar chmod olamaz” ne demektir? Bunun unix.stackexchange.com/questions/364517/… ile ne ilgisi var ? Ne çatışması?
Gilles 'SO- kötü olmayı kes

2

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

ACL'nin patolojik dosya adlarında da başarısız olacağını mı söylüyorsunuz?
kittygirl

@kittygirl Ben OP açıkça onları gereksinimlerinden dışlamıştı çünkü ben komut dosyası ACLs herhangi bir işleme dahil etmedi. Kodun özellikle sağlam olmadığını aklınızda tutarak, istediğinizi ekleyebilirsiniz (patolojik dosya adlarını açıklayan yoruma bakın).
roaima

Bir sorun buldum: bulamıyorum .htaccess, gitignore...
kittygirl

0
#!/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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.