Trong các hệ điều hành giống Unix, chmod là một lệnh của trình bao Unix và là lời gọi hệ thống, dùng để thay đổi quyền truy cập tập tin của các đối tượng tập tin (bao gồm cả tập tinthư mục, hay đặt các cờ đặc biệt lên đối tượng tập tin.[1] Chmod là viết tắt của change mode.

Lịch sử

sửa

Lệnh chmod xuất hiện lần đầu trong phiên bản 1 của AT&T Unix.

Cú pháp lệnh

sửa
chmod [options] mode[,mode] file1 [file2...]

[2]

Các tùy chọn thường sử dụng:

  • -R đệ quy, lệnh có tác dụng cả với các đối tượng trong thư mục con
  • -f bắt buộc, tiếp tục thực hiện với tất cả các đối tượng dù xảy ra lỗi
  • -v hiển thị tiến trình làm việc với các đối tượng

Nếu đối số của lệnh là một liên kết tượng trưng, lệnh sẽ ảnh hưởng tới đối tượng đích của liên kết. Chế độ truy cập gán trên liên kết thường không được sử dụng.

Để xem chế độ truy cập của tập tin, ta dùng lệnh ls hay stat:

$ ls -l phoneNumbers
-rwxr-xr--  1 dgerman  staff  823 Dec 16 15:03 phoneNumbers
$ stat -c %a phoneNumbers
754

Các chế độ r, w, và x xác định quyền đọc (read), ghi (write) và thực thi (execute) trên tập tin. Tập tin phoneNumbers có thể được đọc, ghi, thực thi bởi chủ sở hữu dgerman, các người dùng trong nhóm staff có thể đọc và thực thi, tất cả các người dùng khác có quyền đọc.

Chế độ bát phân

sửa

Định dạng số của chmod cung cấp một cách biểu diễn và gán chế độ truy cập bằng 4 ký số bát phân. 3 ký số bên phải là quyền truy cập của chủ sở hữu, nhóm và các người dùng khác, ký số thứ tư từ phải sang trái biểu diễn các cờ đặc biệt setuid, setgid và sticky.

Quyền truy cập biểu diễn dạng số

# quyền rwx
7 toàn quyền 111
6 đọc và ghi 110
5 đọc và thực thi 101
4 chỉ đọc 100
3 ghi và thực thi 011
2 chỉ ghi 010
1 chỉ thực thi 001
0 không có quyền 000

Ví dụ

sửa

Cho phép người dùng trong nhóm programmers có thể cập nhật tập tin:

$ ls -l sharedFile
-rw-r--r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile
$ chmod 664 sharedFile
$ ls -l sharedFile
-rw-rw-r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile

Do các cờ setuid, setgidsticky không được đặt, lệnh trên tương đương với:

$ chmod 0664 sharedFile

Chế độ tượng trưng

sửa

Lệnh chmod cũng cho phép sử dụng các ký hiệu tượng trưng để điều chỉnh một chế độ cụ thể mà không ảnh hưởng tới các chế độ khác. Chế độ tượng trưng gồm 3 thành phần, kết hợp lại thành một chuỗi:

$ chmod [tham chiếu][toán tử][chế độ] file...

Tham chiếu (hay lớp) dùng để xác định những người dùng nào sẽ được điều chỉnh quyền truy cập. Tham chiếu mặc định sử dụng là "all" cho tất cả các nhóm nếu không có tham chiếu được chỉ định. Tuy nhiên việc thay đổi các quyền truy cập còn phụ thuộc vào thiết lập umask. Tham chiếu được biểu diễn bởi các ký tự sau:

Tham chiếu Nhóm Mô tả
u người dùng chủ sở hữu tập tin
g nhóm các người dùng thuộc nhóm của tập tin
o khác các người dùng không thuộc nhóm cũng không phải chủ sở hữu
a tất cả tất cả ba lớp trên, tương đương với ugo

Chương trình chmod sử dụng một toán tử để quy định cách thay đổi chế độ của tập tin:

Toán tử Mô tả
+ Thêm chế độ sau đó vào tập tin
- Xóa chế độ theo sau trong tập tin (nếu có)
= quy định chính xác chế độ cho tập tin

Một ký tự sẽ biểu diễn chế độ được thêm/xóa trên tập tin. Có ba chế độ cơ bản như sau:

Chế độ Tên Mô tả
r read đọc tập tin/ liệt kê các tập tin trong một thư mục
w write ghi vào tập tin/ tạo tập tin mới trong thư mục
x execute thực thi tập tin/xem đệ quy một cây thư mục
X special execute không hẳn là một quyền truy cập nhưng có thể sử dụng thay cho x. X đặt quyền thực thi cho thư mục bất chấp các quyền hiện có và đặt quyền thực thi có tập tin đã có ít nhất 1 quyền thực thi đã thiết lập (chủ sở hữu, nhóm, khác). Lệnh chỉ hữu dụng khi sử dụng kèm với toán tử '+' và thường sử dụng cùng với tùy chọn -R để đặt quyền truy cập cho nhóm hay "người dùng khác" trên một thư mục lớn mà không cần thiết lập quyền thực thi trên các tập tin thông thường (ví dụ tập tin văn bản), ví dụ khi dùng lệnh "chmod -R a+rx.", tất cả tập tin trong cây thư mục (cả tập văn bản) đều được gắn cờ x trong khi lệnh "chmod -R a+rX." chỉ gắn cờ cho các file execute.
s setuid/gid xem Chế độ đặc biệt
t sticky xem Chế độ đặc biệt

Dùng dấu phẩy để cách các chế độ tượng trưng nếu muốn thực hiện nhiều thay đổi trong một lệnh.

Ví dụ sử dụng chế độ tượng trưng

sửa

Các chế độ đặc biệt

sửa

Ví dụ bằng dòng lệnh

sửa

Lời gọi hệ thống

sửa

Đọc thêm

sửa

Tham khảo

sửa

Liên kết ngoài

sửa