Ok, tôi đã đọc lại các trang man "chmod" cho Mac OS X, BSD và Linux, và đã làm một vài thử nghiệm. Đây là những gì tôi học được về các chế độ biểu tượng. Nó có thể trở nên phức tạp, nhưng nó đáng để hiểu:
- Hình thức chung là mệnh đề [, mệnh đề ] trong đó:
- mệnh đề : = [ugoa] [+ - =] [rwxXstugo]
- [ugoa] ( ai ) (chỉ định nhiều) có nghĩa là đặt quyền cho người dùng, nhóm, người khác hoặc tất cả. Nếu không quy định, mặc định là 'a', nhưng umask có hiệu lực.
- [+ - =] ( hành động ) (chỉ định một) có nghĩa là:
- + có nghĩa là thêm các quyền được chỉ định vào các quyền đã có hiệu lực
- - có nghĩa là xóa các quyền được chỉ định khỏi các quyền đã có hiệu lực
- = có nghĩa là đặt quyền cho các quyền được chỉ định, xóa tất cả các quyền khác
- [rwxXstugo] ( quyền ) (chỉ định nhiều rwxXst HOẶC một trong số ugo) đặt quyền cho (các) người dùng được chỉ định như sau:
- r - đọc
- w - viết
- x - thực hiện / tìm kiếm
- X - thực hiện / tìm kiếm thư mục iff HOẶC bất kỳ bit thực thi nào đã được đặt.
- s - suid hoặc sgid
- t - dính
- u - sao chép quyền người dùng
- g - sao chép quyền của nhóm
- o - sao chép sự cho phép khác
Vì vậy, ví dụ, a+x
sẽ làm cho một tập tin thực thi bởi tất cả mọi người. a+X
sẽ làm cho một tập tin thực thi bởi mọi người NẾU nó đã được thực thi bởi bất cứ ai.
a+x
sẽ làm cho một thư mục có thể tìm kiếm bởi tất cả mọi người. a+X
cũng sẽ làm cho một thư mục có thể tìm kiếm bởi tất cả mọi người.
Sự khác biệt chính giữa BSD và Linux là với BSD, việc xác định được thực hiện dựa trên các quyền của tệp trước khi chmod được thực thi. Trong khi với Linux, việc xác định được đưa ra ngay trước khi mệnh đề + X được thực thi.
Vì vậy, với BSD, sự kết hợp a-x,a+X
sẽ loại bỏ quyền thực thi / tìm kiếm và sau đó làm cho mọi người có thể tìm thấy một thư mục và tạo một tệp có thể thực thi được bởi mọi người nếu ban đầu nó có thể được thực thi bởi bất kỳ ai.
Với Linux, a-x,a+X
sẽ loại bỏ quyền thực thi / tìm kiếm và sau đó tạo cho mọi người một thư mục có thể tìm kiếm được, trong khi không để ai thực hiện một tệp.
Đây là một ví dụ cụ thể: trên máy BSD: thư mục, tệp thực thi và tệp không thể thực thi:
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
Quan sát rằng cả thư mục và "fie" đều có thể được thực thi / tìm kiếm bởi người dùng, nhưng không phải bởi người khác.
Bây giờ chúng tôi thực hiện chmod a-x,a+X *
. Mệnh đề đầu tiên sẽ loại bỏ bit thực thi / tìm kiếm khỏi tất cả người dùng cho tất cả các tệp, nhưng mệnh đề thứ hai sẽ thêm lại cho cả "phí" và "fie". "Phí" vì đó là một thư mục và "fie" vì nó có ít nhất một bit thực thi để bắt đầu.
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
Tôi đã có kết quả thực hiện tương tự chmod -x+X
.
Kết luận: Giải pháp của Jak Gibb sẽ hoạt động trên Linux, nhưng đối với BSD, bạn sẽ cần thực hiện hai lần.
Tôi đã không kiểm tra điều này trên SVr4 hoặc các biến thể Unix khác.