Jawaban:
Versi GNU dari utilitas chmod dapat menyalin mode dari satu file ( RFile
) ke yang lain ( file
).
chmod --reference=RFile file
GNU coreutils ditemukan di sebagian besar distribusi Linux dan Cygwin, di antara tempat-tempat lain. Tidak semua implementasi chmod menyediakan opsi ini.
--reference
pilihan disertakan dalam versi GNU; OSX mungkin menggunakan chmod yang berasal dari BSD sebagai gantinya. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
kehendak, saat menyalin file, copy perizinan serta file.r yang
Saya datang dengan ini:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Ini bukan bukti peluru sepenuhnya, tetapi melakukan apa yang saya butuhkan.
coba ini:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
ini akan naik secara berulang dan chmod setiap file, jika dua direktori tidak cocok pada file Anda akan melihat banyak kesalahan "Tidak ada file atau direktori".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Anda dapat menggunakan getfacl
untuk mengambil daftar lengkap izin file, pemilik, grup, dan ACL tambahan (daftar kontrol akses).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Jika Anda menyimpan output itu ke file (misalnya acl.txt
), Anda dapat mengembalikan dari format ini dengan setfacl --restore acl.txt
. Jika Anda hanya ingin mengembalikan satu file, dan file itu memiliki nama file yang berbeda dengan aslinya, Anda akan ingin menggunakan setfacl --set-file acl.txt filename.txt
(di mana filename.txt
nama file baru).
Simpan izin asli ke acl.txt
:
$ getfacl filename.txt > acl.txt
Timpa izin (untuk demonstrasi; ini hanya agar Anda dapat melihatnya memulihkannya di langkah berikutnya berfungsi)
$ 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
Gunakan setfacl
untuk mengembalikan izin yang benar dari acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Nama file diambil dari # file:
komentar yang dihasilkan oleh getfacl
, jadi tidak perlu menentukannya di baris perintah.
Jika Anda ingin mengembalikan izin tersebut ke file lain, Anda dapat menggunakan --set-file
alih-alih --restore
seperti itu:
$ setfacl --set-file acl.txt second_filename.txt
Jika Anda akhirnya menimpa izin pada beberapa file /usr
, tetapi Anda tidak tahu file apa yang Anda timpa, Anda biasanya dapat memperbaikinya dengan mengembalikan dari sistem lain yang dikonfigurasi dengan cara yang sama.
Izin cadangan dari sistem kerja (catatan: getfacl
menghasilkan jalur relatif, jadi pastikan Anda cd
ke lokasi yang konsisten di kedua mesin)
# cd /
# getfacl -R usr > /root/acls.txt
Salin dump ACL ke sistem dengan izin yang rusak
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Kembalikan dump ACL untuk menimpa izin yang rusak dengan izin dari mesin yang dikenal baik
# cd /
# setfacl --restore /root/acls.txt