UMASK
Posted in:
$mkdir share
เพื่อสร้างไดเร็คทอรีปุ๊บ ไอ้ไดเร็คทอรีที่เราสร้างก็มี permision เป็น 755 ปั๊บประมาณนั้นน่ะครับ ซึ่งถ้าเป็น ubuntu ที่เราใช้งานกันอยู่ ค่า umask จะถูกเซ็ตให้มีค่าเป็น 022 ดังนั้นไดเรดทอรีในระบบที่เราสร้างขึ้นจะมีค่าเป็น 755 โดย default ส่วนไฟล์ก็จะมีค่าเป็น 644 แต่ถ้าเราไม่ต้องการให้ค่าโดย default เป็น 755 และ 644 ก็สามารถแก้ไขค่า umask เป็นค่าใหม่ได้ง่ายๆครับ
* ค่า default ของ permission ของระบบกรณีเป็นไฟล์ คือ 666
** ค่า default ของ permission ของระบบกรณีเป็นไดเรคทอรี คือ 777

step 2: แล้วก็นำค่า permission ที่ต้องการมากรอกตรงคำตอบ

step 3: หาค่าที่มา exclusive-or กับ 777 แล้วได้คำตอบเป็น 770
ปัจจุบัน

ค่าที่มา exclusive-or กับ 777 แล้วได้คำตอบเป็น 770 คือ

สรุปเลยครับ : ค่า umask ที่ได้ คือ 007
* exclusive-or บางคนอาจจะลืมว่าทำยังไง เอาตารางนี้ไปดูครับ

ส่วนของจริง ถ้าตามตัวอย่างข้างบนก็จะได้ดังนี้ครับ
exclusive-or คือ บิตเหมือนกันจะ ex-or กันได้ค่าเป็น 0 ส่วนบิตต่างกันจะ ex-or กันได้ค่าเป็น 1
หลังจากได้ค่า umask เรียบร้อยแล้ว ทีนี้ก็มาลองหาดูว่าค่า umask ที่ได้จะทำให้ไฟล์ที่ถูกสร้างมีค่า permission เป็นเท่าไร
step 1: เริ่มต้นด้วยการเอา 666 ซึ่งเป็นค่าเริ่มต้นของไฟล์ permission มาตั้ง

step 2: นำค่า umask ที่หามาได้แล้วจากตอนคำนวณหา umask ให้ไดเรคทอรีมาใส่ลงไป

step 3: ทีนี้ก็คำนวณหาค่า permission ซะ

จากการคำนวณจะได้ค่า permission ของไฟล์เป็น 6 6 1 แต่ เนื่องจากในระบบ linux มันจะไม่ยอมให้ permission ของไฟล์สามารถ execute ได้โดย default ต้องให้ user ทำการ chmod เองถึงจะ execute ได้ ดังนั้นจากผลลัพธ์ที่ควรจะเป็น 661 ก็จะถูกตัดในส่วน execute ทิ้งไป ก็เลยส่งผลให้ permission จาก 661 ถูกปรับเป็น 660 โดยอัตโนมัติ
*สรุปก็คือ เมื่อเราแก้ไขค่า umask จากเดิม 022 เป็น 007 ค่า permission ของไดเรคทอรีที่สร้างใหม่จะมีค่าเป็น 770 ส่วนไฟล์จะต้องมีค่าเป็น 660(จริงๆต้องเป็น 661 แต่ระบบมันไม่ยอม)
step 1: $sudo gedit /etc/profile --> เปิดไฟล์ที่เก็บค่า umask ขึ้นมาแก้ไข
step 2: ไปดูที่บรรทัดล่างสุดจะเจอคำว่า umask 022 ให้แก้ค่าเป็น umask ที่ต้องการใช้ ซึ่งจากตัวอย่างก็ คือ 007
step 3: save ซะ แล้วก็จัดการ log out ออกจากระบบ
step 4: หลังจาก log in เข้ามาใหม่ค่า umask ที่แก้ไว้ก็เป็นอันใช้ได้ครับ
ถ้าต้องการ test ดูว่าค่า umask ที่จะเปลี่ยนใหม่ให้ผลดังที่ต้องการได้จริงมั๊ย ก็สามารถทำได้ดังนี้
ให้เราเปิด terminal แล้วพิมพ์ลงไปว่า umask แล้วตามด้วยค่า permission ที่ต้องการ ซึ่งในที่นี้ คือ 007
$ umask 007
แล้วก็ enter หลังจาก enter ค่า umask ของระบบก็จะกลายเป็น 007 ครับ แต่ได้ผลแค่ชั่วคราวนะครับ ถ้า log out หรือ restart ค่า umask ของระบบจะกลับไปเป็นค่าที่ตั้งไว้ในไฟล์ /etc/profile คือ 022


อยากได้วิธีเปลี่ยนทั้งไดเร็คทอรี่ สับไดเร็คทอรี่ และไฟล์ครับ
มีคำสั่งที่สามารถเปลี่ยน permission ไดเร็คทอรี่ สับไดเร็คทอรี่ที่อยู่ข้างใน และไฟล์ต่างๆ ในนั้นไหมครับ
เช่นมี โฟลเดอร์ data ในนั้นก็มีโฟล์เดอร์ต่างๆ และไฟล์ต่างๆ อยากเปลี่ยนให้เป็น ทั้งอ่านและเขียนได้ทุกคน ทุกคนไฟล์ รวมทั้งไฟล์ต่างๆ ที่อยู่ในนั้น จะใช้คำสั่งอะไรครับ
ลองคำสั่งนี้ครับ
# chmod 777 -R [directory ที่ต้องการ]
คำเตือน ห้ามใช้คำสั่งนี้กับ /home เด็ดขาด (อ้างอิงประสบการณ์ตรง : http://noistuff.wordpress.com/2005/09/11/)
Post new comment