Oke, saya membaca kembali halaman manual "chmod" untuk Mac OS X, BSD, dan Linux, dan melakukan beberapa percobaan. Inilah yang saya pelajari tentang mode simbolik. Ini bisa menjadi rumit, tetapi perlu dipahami:
- Bentuk umum adalah klausa [, klausa ...] di mana:
- klausa : = [ugoa] [+ - =] [rwxXstugo]
- [ugoa] ( siapa ) (sebutkan beberapa) berarti mengatur izin untuk pengguna, grup, lainnya, atau semua. Jika tidak ditentukan, standarnya adalah 'a', tetapi umask berlaku.
- [+ - =] ( tindakan ) (sebutkan satu) berarti:
- + berarti menambahkan izin yang ditentukan ke izin yang sudah berlaku
- - Berarti menghapus izin yang ditentukan dari izin yang sudah berlaku
- = berarti mengatur izin ke izin yang ditentukan, membersihkan semua yang lain
- [rwxXstugo] ( izin ) (tentukan kelipatan rwxXst ATAU salah satu dari ugo) menetapkan izin untuk pengguna yang ditentukan sebagai berikut:
- r - baca
- menulis - w
- x - jalankan / cari
- X - jalankan / cari direktori iff ATAU bit eksekusi sudah ditetapkan.
- s - suid atau sgid
- t - lengket
- u - salin izin pengguna
- g - salin izin grup
- o - salin izin lain
Jadi misalnya, a+x
akan membuat file dapat dieksekusi oleh semua orang. a+X
akan membuat file dapat dieksekusi oleh semua orang JIKA itu bisa dieksekusi oleh siapa pun.
a+x
akan membuat direktori dicari oleh semua orang. a+X
juga akan membuat direktori dapat dicari oleh semua orang.
Perbedaan utama antara BSD dan Linux adalah bahwa dengan BSD, penentuan dilakukan berdasarkan izin file sebelum chmod dieksekusi. Sementara dengan Linux, penentuan dilakukan segera sebelum klausa + X dijalankan.
Jadi dengan BSD, kombinasi tersebut a-x,a+X
akan menghapus izin eksekusi / pencarian dan kemudian membuat direktori dapat dicari oleh semua orang, dan membuat file dapat dieksekusi oleh semua orang jika awalnya dapat dieksekusi oleh siapa pun.
Dengan Linux, a-x,a+X
akan menghapus izin eksekusi / pencarian dan kemudian membuat direktori dapat dicari oleh semua orang, sementara meninggalkan file yang dapat dieksekusi oleh siapa pun.
Berikut adalah contoh nyata: pada mesin BSD: direktori, file yang dapat dieksekusi, dan file yang tidak dapat dieksekusi:
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
Perhatikan bahwa direktori dan "fie" dapat dieksekusi / dicari oleh pengguna, tetapi tidak oleh orang lain.
Sekarang kita jalankan chmod a-x,a+X *
. Klausa pertama akan menghapus bit eksekusi / pencarian dari semua pengguna untuk semua file, tetapi klausa kedua akan menambahkannya kembali untuk "biaya" dan "fie". "fee" karena ini adalah direktori, dan "fie" karena memiliki setidaknya satu bit yang dapat dieksekusi untuk memulai.
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
Saya memiliki hasil yang sama mengeksekusi chmod -x+X
.
Kesimpulan: Solusi Jak Gibb akan bekerja di Linux, tetapi untuk BSD, Anda harus membuat dua lintasan.
Saya tidak menguji ini pada SVr4 atau varian Unix lainnya.