Chỉ để mở rộng và cải thiện một số câu trả lời ở trên:
Đầu tiên, tôi sẽ kiểm tra trang mkdir man cho GNU Coreutils 8.26 - nó cung cấp cho chúng tôi thông tin này về tùy chọn '-m' và '-p' (cũng có thể được cung cấp dưới dạng --mode = MODE và - parent, tương ứng ):
... đặt [s] chế độ tệp (như trong chmod), không phải a = rwx - umask
... không có lỗi nếu hiện có, hãy tạo thư mục mẹ nếu cần
Theo quan điểm của tôi, các tuyên bố là mơ hồ và không rõ ràng. Nhưng về cơ bản, nó nói rằng bạn có thể tạo thư mục với các quyền được chỉ định bởi "ký hiệu số chmod" (số bát phân) hoặc bạn có thể đi "theo cách khác" và sử dụng a / umask của bạn.
Lưu ý phụ: Tôi nói "theo cách khác" vì giá trị umask thực sự giống như âm thanh của nó - một mặt nạ , ẩn / xóa các quyền chứ không phải "cấp" chúng như với ký hiệu bát phân số của chmod.
Bạn có thể thực hiện lệnh shell-nội trang umask
để xem umask 3 chữ số của bạn là gì; đối với tôi, nó 022
. Điều này có nghĩa là khi tôi thực thi mkdir yodirectory
trong một thư mục nhất định (giả sử, mahome) và stat
nó, tôi sẽ nhận được một số đầu ra giống như sau:
755 richard:richard /mahome/yodirectory
# permissions user:group what I just made (yodirectory),
# (owner,group,others--in that order) where I made it (i.e. in mahome)
#
Bây giờ, chỉ cần thêm một chút nữa về các quyền bát phân đó. Khi bạn tạo một thư mục, "hệ thống của bạn" lấy perms thư mục mặc định của bạn '[áp dụng cho các thư mục mới (giá trị của nó phải là 777)] và đóng vào mặt nạ yo (u), ẩn một số perms' một cách hiệu quả. Umask của tôi là 022 - bây giờ nếu chúng tôi "trừ" 022 khỏi 777 (phép trừ về mặt kỹ thuật là một phép nhân quá mức và không phải lúc nào cũng chính xác - chúng tôi thực sự đang tắt perms hoặc mask trong chúng) ... chúng tôi nhận được 755 như đã nêu (hoặc "statted" ) sớm hơn.
Chúng tôi có thể bỏ qua số '0' trước các bát phân có 3 chữ số (vì vậy chúng không phải là 4 chữ số) vì trong trường hợp của chúng tôi, chúng tôi không muốn (hoặc đúng hơn là không đề cập đến) bất kỳ chất dính, setuids hoặc setgids nào (bạn có thể muốn xem xét những thứ đó, btw, chúng có thể hữu ích vì bạn đang sử dụng 777). Vì vậy, nói cách khác, 0777 ngụ ý (hoặc tương đương với) 777 (nhưng 777 không nhất thiết phải tương đương với 0777 - vì 777 chỉ xác định các quyền, không phải setuids, setgids, v.v.)
Bây giờ, để áp dụng điều này cho câu hỏi của bạn theo nghĩa rộng hơn - bạn đã (đã) có một vài lựa chọn. Tất cả các câu trả lời ở trên đều hoạt động (ít nhất là theo coreutils của tôi). Nhưng bạn có thể (hoặc rất có khả năng) gặp sự cố với các giải pháp trên khi bạn muốn tạo các thư mục con (thư mục lồng nhau) với 777 quyền cùng một lúc. Cụ thể, nếu tôi làm như sau trong mahome với umask là 022:
mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff
Tôi sẽ nhận được perms 755
cho cả hai yodirectory
và yostuff
, chỉ với 777
perms cho mastuffinyostuff
. Vì vậy, có vẻ như umask
là tất cả những gì đã xảy ra yodirectory
và yostuff
... để giải quyết vấn đề này, chúng ta có thể sử dụng một vỏ con:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
và đó là nó. 777 perms cho yostuff, mastuffinyostuff và yodirectory.
mkdir temp; chmod 777 temp
là một dòng. Bạn có thể đặt 'temp' một biến và lưu nó dưới dạng lệnh bash. Đây có phải là những gì bạn đang muốn làm?