Yanıtlar:
Chmod yardımcı programının GNU sürümü , modu bir dosyadan ( RFile
) diğerine ( file
) kopyalayabilir .
chmod --reference=RFile file
GNU coreutils , diğer Linux dağıtımlarının ve Cygwin'in çoğunda bulunur. Tüm chmod uygulamaları bu seçeneği sunmaz .
--reference
seçenek GNU versiyonunda dahildir; OSX muhtemelen BSD kaynaklı bir chmod kullanıyor. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
bir dosyayı kopyalarken, izinleri ve dosyayı kopyalayacağından bahsetmenin yararlı olacağını düşündüm . R
Ben bununla geldim:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Tamamen kurşun geçirmez değil, ama ihtiyacım olanı yapıyor.
bunu dene:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
iki özniteliğin dosyalarla eşleşmemesi durumunda, bu tür özyinelemeli olarak artar ve her dosya için chmod olur.
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
getfacl
Dosya izinlerinin, sahibinin, grubun ve ek EKL'lerin (erişim denetim listeleri) tam listesini almak için kullanabilirsiniz .
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Bu çıktıyı bir dosyaya (örneğin acl.txt
) kaydederseniz, ile bu formattan geri yükleyebilirsiniz setfacl --restore acl.txt
. Yalnızca tek bir dosyayı geri yüklemek istiyorsanız ve bu dosyanın orijinalinden farklı bir dosya adı varsa, kullanmak isteyeceksiniz setfacl --set-file acl.txt filename.txt
( filename.txt
yeni dosya adı nerede ).
Orijinal izinleri şuraya kaydet acl.txt
:
$ getfacl filename.txt > acl.txt
İzinlerin üzerine yazma (gösterim için; bu sadece bir sonraki adımda geri yüklemenin işe yaradığını görebilmeniz için)
$ 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
Aşağıdakilerden doğru izinleri geri yüklemek için kullanın acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Dosya adı, # file:
tarafından oluşturulan yorumdan alınır getfacl
, bu nedenle komut satırında belirtilmesine gerek yoktur.
Bu izinleri farklı bir dosyaya geri yüklemek istiyorsanız, --set-file
bunun yerine şunu kullanabilirsiniz --restore
:
$ setfacl --set-file acl.txt second_filename.txt
Bazı dosyalardaki izinlerin üzerine yazılır /usr
ancak hangi dosyaların üzerine yazdığınızı bilmiyorsanız, genellikle benzer şekilde yapılandırılmış başka bir sistemden geri yükleyerek düzeltebilirsiniz.
Çalışma sisteminden yedekleme izinleri (not: getfacl
göreli yollar oluşturur, bu nedenle cd
her iki makinede de tutarlı bir konuma sahip olduğunuzdan emin olun )
# cd /
# getfacl -R usr > /root/acls.txt
ACL dökümünü kırık izinlerle sisteme kopyalayın
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Bilinen iyi makineden gelen izinlerle bozuk izinlerin üzerine yazmak için ACL dökümü
# cd /
# setfacl --restore /root/acls.txt