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 umask
dasarnya 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 cp
untuk "tidak menyimpan" menggunakan --no-preserve=all
sakelar.
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 cp
kami 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 umask
ke sesuatu yang lain, kami dapat mengulangi tes ini untuk ketiga kalinya dan melihat efeknya umask
terhadap 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
).
setfacl
Perintah apa yang Anda coba? Apa hasilnya?