Trong Linux, có thể có những lúc bạn muốn thay đổi thông tin liên quan đến chủ sở hữu và nhóm cho một tệp hoặc thư mục. Nếu bạn là người mới sử dụng dòng lệnh và muốn biết cách thực hiện những thay đổi như vậy thông qua dòng lệnh, bạn sẽ rất vui khi biết rằng có một lệnh - được gọi là chown - cho phép bạn thực hiện việc này.
Trước khi bắt đầu với hướng dẫn về lệnh chown, cần lưu ý rằng tất cả các ví dụ và hướng dẫn được đề cập ở đây đều đã được thử nghiệm trên Ubuntu 22.04 LTS và Debian 11.
Đây là nội dung trang hướng dẫn của công cụ nói về nó:
Các ví dụ dạng Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách lệnh chown hoạt động:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22471%22%20height=%2235%22%3E%3C/svg%3E
Ở đây, chủ sở hữu của tệp là 'himanshu' và nhóm mà tệp này thuộc về cũng là 'himanshu'. Bây giờ, để thay đổi chủ sở hữu thành, chẳng hạn như 'root', hãy sử dụng lệnh sau:
Ảnh chụp màn hình sau đây xác nhận rằng chủ sở hữu hiện đã được thay đổi thành 'root'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22434%22%20height=%2236%22%3E%3C/svg%3E
Vì vậy, giả sử yêu cầu là thay đổi nhóm 'file1' thành 'root'. Sau đó lệnh sẽ là:
Ảnh chụp màn hình sau đây cho thấy nhóm đã được thay đổi thành công từ 'himanshu' thành 'root'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22443%22%20height=%2287%22%3E%3C/svg%3E
Lưu ý: Trong trường hợp bạn thắc mắc tại sao lệnh 'sudo' được sử dụng hoặc trong trường hợp bạn mới sử dụng 'sudo', trước tiên bạn nên xem qua hướng dẫn của chúng tôi về công cụ này.
Vì vậy, trong trường hợp của chúng tôi, để thay đổi chủ sở hữu và nhóm hiện tại từ 'root' thành 'himanshu', chúng tôi sẽ sử dụng lệnh sau:
ảnh chụp màn hình sau đây cho thấy lệnh trên đang hoạt động:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2279%22%3E%3C/svg%3E
Ví dụ:
Lệnh trên sẽ kiểm tra xem chủ sở hữu hiện tại có phải là 'root' và nhóm có phải là 'himanshu' không. Nếu có, thì chủ sở hữu sẽ được đổi thành 'himanshu' và nhóm sẽ trở thành 'root'.
Ví dụ:
Vì vậy, lệnh trên sẽ sao chép thông tin chủ sở hữu và nhóm từ file2 sang file1.
Đối với những ai chưa biết, đệ quy có nghĩa là thao tác sẽ được thực hiện cho tất cả các tệp trong thư mục đã cho, cũng như cho các tệp và thư mục trong tất cả các thư mục con.
cho ra lỗi sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2226%22%3E%3C/svg%3E
Bây giờ giả sử yêu cầu là công cụ không được hiển thị những lỗi như vậy. Sau đó, điều này có thể thực hiện được bằng cách sử dụng tùy chọn dòng lệnh -f.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2237%22%3E%3C/svg%3E
Ảnh chụp màn hình đã đề cập ở trên xác nhận rằng tùy chọn dòng lệnh -f sẽ loại bỏ lỗi/cảnh báo.
Sẽ đảm bảo quyền sở hữu được trao cho 'himanshu' và nhóm được đổi thành nhóm đăng nhập là 'himanshu'. Lưu ý rằng điều này khác với trường hợp không sử dụng dấu hai chấm
), vì trong trường hợp đó (đã giải thích trong Câu hỏi 1 ở trên), nhóm vẫn không thay đổi.
Một điều khác đáng đề cập ở đây là nếu bạn chỉ sử dụng dấu hai chấm
) mà không chỉ định chủ sở hữu hoặc nhóm, thì sẽ không có thay đổi nào diễn ra. Ví dụ:
Lệnh này sẽ không ảnh hưởng đến quyền sở hữu của người dùng hoặc nhóm đối với tệp.
Ví dụ, ảnh chụp màn hình bên dưới cho thấy tôi đã tạo một liên kết tượng trưng 'link1' có quyền sở hữu của người dùng và nhóm được đặt thành 'himanshu'. Sau đó, tôi thực hiện lệnh chown để thay đổi người dùng và nhóm thành 'root'. Nhưng lệnh này không có tác dụng gì đối với tệp liên kết tượng trưng - thay vào đó, quyền sở hữu của người dùng và nhóm đối với 'file1' (liên kết tượng trưng trỏ đến) đã thay đổi.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22164%22%3E%3C/svg%3E
Tuy nhiên, nếu muốn, bạn có thể ghi đè hành vi mặc định này bằng tùy chọn -h.
Lưu ý rằng bạn có thể xác minh chéo sự thay đổi của chủ sở hữu và nhóm đối với một thư mục bằng lệnh stat - các trường UID và GID trong đầu ra hiển thị tên người dùng và nhóm.
Ví dụ trong trường hợp của tôi, đầu ra hiển thị rõ ràng quyền sở hữu nhóm người dùng đã thay đổi.
Lưu ý rằng nếu bạn đang thực hiện các thay đổi đệ quy (tham khảo phần Hỏi & Đáp thảo luận về tùy chọn -R) và đang xử lý các liên kết tượng trưng, bạn có các tùy chọn sau để sử dụng:
Ví dụ:
Lệnh trên sẽ thay đổi quyền sở hữu của người dùng và nhóm thành người dùng có UID 1000 và nhóm có GID 1000.
Ví dụ, lệnh này:
tạo ra kết quả sau đầu ra:
Bây giờ, có một tùy chọn khác -c cũng hoạt động giống như -v, chỉ là nó không hiển thị bất kỳ chi tiết nào khi không có gì thay đổi.
Trước khi bắt đầu với hướng dẫn về lệnh chown, cần lưu ý rằng tất cả các ví dụ và hướng dẫn được đề cập ở đây đều đã được thử nghiệm trên Ubuntu 22.04 LTS và Debian 11.
Giải thích về lệnh chown trên Linux
Như đã đề cập ở phần đầu, lệnh chown cho phép bạn thay đổi chủ sở hữu và nhóm tệp thông qua dòng lệnh. Sau đây là cú pháp chung của lệnh:
Mã:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
Mã:
If only an owner (a user name or numeric user ID) is given, that user is made the owner of each
given file, and the files' group is not changed. If the owner is followed by a colon and a
group name (or numeric group ID), with no spaces between them, the group ownership of the files is
changed as well. If a colon but no group name follows the user name, that user is made the owner
of the files and the group of the files is changed to that user's login group. If the colon
and group are given, but the owner is omitted, only the group of the files is changed; in this case,
chown performs the same function as chgrp. If only a colon is given, or if the entire operand is
empty, neither the owner nor the group is changed.
Câu hỏi 1. Làm thế nào để thay đổi chủ sở hữu của một tệp?
Hãy xem xét ví dụ sau:data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22471%22%20height=%2235%22%3E%3C/svg%3E
Ở đây, chủ sở hữu của tệp là 'himanshu' và nhóm mà tệp này thuộc về cũng là 'himanshu'. Bây giờ, để thay đổi chủ sở hữu thành, chẳng hạn như 'root', hãy sử dụng lệnh sau:
Mã:
chown root file1
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22434%22%20height=%2236%22%3E%3C/svg%3E
Câu hỏi 2. Làm thế nào để thay đổi nhóm của một tệp?
Thay đổi nhóm cũng tương tự như thay đổi chủ sở hữu. Điểm khác biệt duy nhất nằm ở cú pháp của lệnh, như sau:
Mã:
chown :[group-name] [file-name]
Mã:
chown :root file1
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22443%22%20height=%2287%22%3E%3C/svg%3E
Lưu ý: Trong trường hợp bạn thắc mắc tại sao lệnh 'sudo' được sử dụng hoặc trong trường hợp bạn mới sử dụng 'sudo', trước tiên bạn nên xem qua hướng dẫn của chúng tôi về công cụ này.
Câu hỏi 3. Làm thế nào để thay đổi cả chủ sở hữu và nhóm của một tệp?
Để thay đổi cả chủ sở hữu và nhóm của tệp, hãy sử dụng cú pháp sau:
Mã:
chown [new-owner]:[new-group] [file-name]
Mã:
chown himanshu:himanshu file1
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2279%22%3E%3C/svg%3E
Câu hỏi 4. Làm thế nào để thay đổi chủ sở hữu hoặc nhóm (hoặc cả hai) sau khi kiểm tra chủ sở hữu/nhóm hiện tại?
Có thể có những trường hợp mà trước tiên bạn muốn kiểm tra chéo chủ sở hữu/nhóm hiện tại của tệp trước khi thực hiện bất kỳ thay đổi nào. Vì vậy, đối với những trường hợp đó, bạn có thể sử dụng tùy chọn dòng lệnh --from. Tùy chọn này yêu cầu bạn phải đề cập đến tên chủ sở hữu/nhóm mà bạn muốn xác minh.
Mã:
chown --from=[curr-own]:[curr-group] [new-owner]:[new-group] [filename]
Mã:
chown --from=root:himanshu himanshu:root file1
Câu hỏi 5. Làm thế nào để chọn thông tin chủ sở hữu/nhóm từ tệp tham chiếu?
Cũng có thể có những trường hợp mà bạn muốn chown chọn thông tin liên quan đến chủ sở hữu và nhóm từ tệp, thay vì nhập thủ công thông tin đó trên dòng lệnh. Đối với những trường hợp đó, bạn có thể sử dụng tùy chọn dòng lệnh --reference. Tùy chọn này yêu cầu bạn nhập tên tệp tham chiếu.
Mã:
chown --reference=[ref-file-name] [filename]
Mã:
chown --reference=file2 file1
Câu 6. Làm thế nào để lệnh chown hoạt động đệ quy trên các tệp và thư mục?
Để lệnh chown hoạt động đệ quy trên các tệp và thư mục, hãy sử dụng tùy chọn dòng lệnh -R.
Mã:
chown -R [new-owner]:[new-group] [directory-name-or-path]
Câu hỏi 7. Làm thế nào để lệnh chownsuppress thông báo lỗi?
Có thể có lúc lệnh chown bạn chạy sẽ báo lỗi. Ví dụ, lệnh sau khi được thực thi trên hệ thống của tôi:
Mã:
chown --from=himanshu:himanshu himanshu:root file4
Mã:
chown: cannot access 'file4': No such file or directory
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2226%22%3E%3C/svg%3E
Bây giờ giả sử yêu cầu là công cụ không được hiển thị những lỗi như vậy. Sau đó, điều này có thể thực hiện được bằng cách sử dụng tùy chọn dòng lệnh -f.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%2237%22%3E%3C/svg%3E
Ảnh chụp màn hình đã đề cập ở trên xác nhận rằng tùy chọn dòng lệnh -f sẽ loại bỏ lỗi/cảnh báo.
Câu hỏi 8. Làm thế nào để thay đổi quyền sở hữu nhóm thành nhóm đăng nhập của người dùng đã chỉ định?
Có thể thực hiện việc này bằng cách sử dụng cú pháp [user/owner]:. Ví dụ, lệnh sau:
Mã:
chown himanshu: file1
Một điều khác đáng đề cập ở đây là nếu bạn chỉ sử dụng dấu hai chấm
Mã:
chown : file1
Câu hỏi 9. Chown hoạt động như thế nào với các liên kết tượng trưng?
Theo mặc định, nếu bạn thử thay đổi quyền sở hữu của người dùng và nhóm đối với một liên kết tượng trưng, sẽ không có thay đổi nào. Thay vào đó, tệp mà liên kết đó liên kết đến sẽ nhận được những thay đổi này.Ví dụ, ảnh chụp màn hình bên dưới cho thấy tôi đã tạo một liên kết tượng trưng 'link1' có quyền sở hữu của người dùng và nhóm được đặt thành 'himanshu'. Sau đó, tôi thực hiện lệnh chown để thay đổi người dùng và nhóm thành 'root'. Nhưng lệnh này không có tác dụng gì đối với tệp liên kết tượng trưng - thay vào đó, quyền sở hữu của người dùng và nhóm đối với 'file1' (liên kết tượng trưng trỏ đến) đã thay đổi.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22164%22%3E%3C/svg%3E
Tuy nhiên, nếu muốn, bạn có thể ghi đè hành vi mặc định này bằng tùy chọn -h.
Câu hỏi 10. Làm thế nào để thay đổi chủ sở hữu và nhóm đối với một thư mục?
Giống như cách bạn làm đối với các tệp. Sau đây là một ví dụ:
Mã:
chown root:root ./test-dir/
Ví dụ trong trường hợp của tôi, đầu ra hiển thị rõ ràng quyền sở hữu nhóm người dùng đã thay đổi.
Mã:
File: test-dir
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 11928001 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ [B]root[/b]) Gid: ( 0/ [B]root[/b])
Access: 2018-08-07 10:31:04.867467573 +0530
Modify: 2018-08-07 10:30:53.651807123 +0530
Change: 2018-08-07 10:32:49.644427930 +0530
Birth: -
Mã:
The following options modify how a hierarchy is traversed when the -R
option is also specified. If more than one is specified, only the
final one takes effect.
-H if a command line argument is a symbolic link to a directory,
traverse it
-L traverse every symbolic link to a directory encountered
-P do not traverse any symbolic links (default)
Câu hỏi 11. Có thể sử dụng UID và GID thay cho tên người dùng và tên nhóm không?
Có, bạn có thể sử dụng ID người dùng và ID nhóm thay cho tên. Tuy nhiên, cú pháp của lệnh vẫn giữ nguyên.Ví dụ:
Mã:
chown 1000:1000 file1
Câu 12. Làm thế nào để lệnh chown hiển thị chi tiết về thao tác trong đầu ra?
Nếu bạn muốn lệnh chown hiển thị chi tiết về thao tác mà nó thực hiện, hãy sử dụng tùy chọn dòng lệnh -v.Ví dụ, lệnh này:
Mã:
sudo chown howtoforge:howtoforge link1 -v
Mã:
changed ownership of 'link1' from root:root to howtoforge:howtoforge