เพียงเพื่อขยายและปรับปรุงคำตอบข้างต้นบางส่วน:
ก่อนอื่นฉันจะตรวจสอบหน้า mkdir man สำหรับ GNU Coreutils 8.26 ซึ่งจะให้ข้อมูลเกี่ยวกับตัวเลือก '-m' และ '-p' (สามารถกำหนดเป็น --mode = MODE และ --parents ได้ตามลำดับ ):
... ตั้งค่าโหมดไฟล์ [s] (เช่นเดียวกับใน chmod) ไม่ใช่ a = rwx - umask
... ไม่มีข้อผิดพลาดหากมีอยู่ให้สร้างไดเรกทอรีหลักตามต้องการ
ข้อความนั้นคลุมเครือและไม่ชัดเจนในความคิดของฉัน แต่โดยพื้นฐานแล้วมันบอกว่าคุณสามารถสร้างไดเร็กทอรีด้วยสิทธิ์ที่ระบุโดย "chmod numeric notation" (ฐานแปด) หรือคุณสามารถไป "ทางอื่น" และใช้ a / your umask
หมายเหตุด้านข้าง: ฉันพูดว่า "อีกทางหนึ่ง" เนื่องจากค่า umask เป็นสิ่งที่ดูเหมือน - หน้ากากซ่อน / ลบสิทธิ์แทนที่จะ "ให้" เช่นเดียวกับสัญกรณ์เลขฐานแปดของ chmod
คุณสามารถรันคำสั่ง shell-builtin umask
เพื่อดูว่า umask 3 หลักของคุณคืออะไร 022
สำหรับฉันมันเป็น ซึ่งหมายความว่าเมื่อฉันดำเนินการmkdir yodirectory
ในโฟลเดอร์ที่กำหนด (พูดว่า mahome) และstat
มันฉันจะได้ผลลัพธ์ที่คล้ายกับสิ่งนี้:
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)
#
ตอนนี้เพื่อเพิ่มอีกเล็กน้อยเกี่ยวกับสิทธิ์ฐานแปดเหล่านั้น เมื่อคุณสร้างไดเร็กทอรี "ระบบของคุณ" จะใช้ค่า perms ของไดเร็กทอรีเริ่มต้นของคุณ [ซึ่งใช้กับไดเร็กทอรีใหม่ (ค่าควร 777)] และตบที่ yo (u) มาสก์ซึ่งจะซ่อนบางส่วนของ perms ได้อย่างมีประสิทธิภาพ umask ของฉันคือ 022 - ตอนนี้ถ้าเรา "ลบ" 022 จาก 777 (การลบในทางเทคนิคเป็นการเพิ่มความซับซ้อนและไม่ถูกต้องเสมอไป - เรากำลังปิด perms หรือmask ing) ... เราจะได้ 755 ตามที่ระบุไว้ (หรือ "statted" ) ก่อนหน้านี้
เราสามารถละ '0' ไว้หน้าฐานแปด 3 หลักได้ (ดังนั้นพวกมันจึงไม่จำเป็นต้องเป็น 4 หลัก) เนื่องจากในกรณีของเราเราไม่ต้องการ (หรือไม่ได้กล่าวถึง) เหนียวบิตตัวกำหนดหรือ setgids ใด ๆ (คุณอาจต้องการตรวจสอบสิ่งเหล่านั้น btw พวกเขาอาจมีประโยชน์เนื่องจากคุณกำลังจะไป 777) กล่าวอีกนัยหนึ่ง 0777 แสดงนัย (หรือเทียบเท่ากับ) 777 (แต่ 777 ไม่จำเป็นต้องเทียบเท่ากับ 0777 เนื่องจาก 777 ระบุเฉพาะสิทธิ์เท่านั้นไม่ใช่ setuids setgids ฯลฯ )
ตอนนี้เพื่อนำสิ่งนี้ไปใช้กับคำถามของคุณในแง่ที่กว้างขึ้น - คุณมี (แล้ว) มีตัวเลือกไม่กี่ตัว คำตอบทั้งหมดข้างต้นใช้ได้ผล (อย่างน้อยก็เป็นไปตามหลักของฉัน) แต่คุณอาจ (หรือมีแนวโน้มที่จะ) ประสบปัญหากับวิธีแก้ไขปัญหาข้างต้นเมื่อคุณต้องการสร้างไดเรกทอรีย่อย (ไดเรกทอรีที่ซ้อนกัน) ที่มีสิทธิ์ 777 ทั้งหมดพร้อมกัน โดยเฉพาะอย่างยิ่งถ้าฉันทำสิ่งต่อไปนี้ใน mahome ด้วย umask ของ 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
ฉันจะได้รับ perms 755
สำหรับทั้งสองyodirectory
และyostuff
มีเพียง777
perms mastuffinyostuff
สำหรับ ดังนั้นดูเหมือนว่านั่นumask
คือทั้งหมดที่ตบyodirectory
และyostuff
... เพื่อหลีกเลี่ยงสิ่งนี้เราสามารถใช้ subshell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
และนั่นแหล่ะ 777 perms สำหรับ yostuff, mastuffinyostuff และ yodirectory
mkdir temp; chmod 777 temp
คือหนึ่งบรรทัด คุณสามารถทำให้ 'temp' เป็นตัวแปรและบันทึกเป็นคำสั่ง bash นี่คือสิ่งที่คุณต้องการทำหรือไม่?