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 .
--referenceseç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/{} {} \;
getfaclDosya 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.txtyeni 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
setfaclAş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-filebunun yerine şunu kullanabilirsiniz --restore:
$ setfacl --set-file acl.txt second_filename.txt
Bazı dosyalardaki izinlerin üzerine yazılır /usrancak 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: getfaclgöreli yollar oluşturur, bu nedenle cdher 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