Izin umumnya tidak disebarkan oleh direktori tempat file sedang disalin, melainkan izin baru dikendalikan oleh pengguna umask. Namun ketika Anda menyalin file dari satu lokasi ke lokasi lain, ini merupakan kasus khusus di mana pengguna pada umaskdasarnya diabaikan dan izin yang ada pada file tersebut dipertahankan. Memahami konsep ini adalah kunci untuk mendapatkan apa yang Anda inginkan.
Jadi untuk menyalin file tetapi "jatuhkan" izinnya saat ini, Anda dapat mengatakan cpuntuk "tidak menyimpan" menggunakan --no-preserve=allsakelar.
Contoh
Katakanlah saya memiliki file berikut ini seperti Anda.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Dan seperti yang telah Anda konfirmasi jika kami hanya menyalinnya secara membabi buta dengan menggunakan cpkami mendapatkan ini:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Sekarang mari kita ulangi ini, tetapi kali ini beri tahu cp"drop permissions":
$ rm -f somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
Jadi file yang disalin sekarang memiliki izin yang ditetapkan ke 664, dari mana mendapatkannya?
$ umask
0002
Jika saya mengubah saya umaskke sesuatu yang lain, kami dapat mengulangi tes ini untuk ketiga kalinya dan melihat efeknya umaskterhadap yang tidak diawetkan cp:
$ umask 037
$ rm somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
Perhatikan bahwa izin tidak lagi 664, tetapi 640? Itu didikte oleh umask. Ia memberi tahu setiap perintah yang membuat file untuk menonaktifkan 5 bit lebih rendah dalam izin ... orang-orang ini: ( ----wxrwx).
setfaclPerintah apa yang Anda coba? Apa hasilnya?