Tôi đang thực hiện tập lệnh bash shell và tôi muốn thay đổi nhóm mặc định mà các tệp mới được tạo dưới dạng. Tôi biết bạn sử dụng umask
để thay đổi quyền. Có gì cho nhóm không?Bash Scripting - Làm thế nào để thiết lập nhóm các tập tin mới sẽ được tạo ra?
Trả lời
newgrp
(1)
Có một vài cách để làm điều này:
Bạn có thể thay đổi nhóm mặc định cho tất cả các file được tạo ra trong một thư mục cụ thể bằng cách thiết lập cờ setgid trên thư mục (
chmod g+s _dir_
). Các tệp mới trong thư mục sau đó sẽ được tạo bằng nhóm của thư mục (được đặt bằngchgrp <group> <dir>
). Điều này áp dụng cho bất kỳ chương trình nào tạo tệp trong thư mục.Lưu ý rằng đây là Automagically kế thừa cho các thư mục con mới (tính Linux 3.10), tuy nhiên, nếu thư mục con đều đã có mặt, sự thay đổi này sẽ không được áp dụng đối với họ (sử dụng cờ
-R
cho điều đó).Nếu cờ setgid không được đặt, thì nhóm mặc định sẽ được đặt thành id nhóm hiện tại của quá trình tạo. Mặc dù điều này có thể được đặt bằng cách sử dụng lệnh
newgrp
, điều này tạo ra một trình bao mới khó sử dụng trong một tập lệnh shell . Nếu bạn muốn thực hiện một lệnh cụ thể (hoặc tập lệnh) với nhóm đã thay đổi, hãy sử dụng lệnhsg <group> <command>
.sg
không phải là lệnh chuẩn POSIX nhưng có sẵn trên Linux.
Chỉ là một lưu ý nhỏ. Nếu bạn cố gắng chạy 'chmod g + s _dir_' trên một thư mục có nhóm y, và bạn đang chạy lệnh dưới người dùng x, và người dùng x không phải là thành viên của nhóm y nó sẽ không hoạt động. Bạn sẽ phải chạy nó như là người chủ. – LEDfan
Tôi là thành viên của nhóm, vậy tại sao tôi yêu cầu mật khẩu? Nó không thích mật khẩu của tôi! – Michael
cũng vậy, nếu tôi chạy "newgrp" làm gốc (ví dụ: chạy tập lệnh với newgrp trong đó bằng sudo), nó sẽ đưa tôi vào trình bao gốc. –
Michael
Đây không phải là những gì newgrp nên được sử dụng cho. Điều gì sẽ xảy ra nếu bạn quên sử dụng newgrp bên ngoài kịch bản? Kịch bản sẽ xử lý shell mới mà newgrp tạo ra như thế nào. Câu trả lời của @ mark40 là tốt hơn. – noel