อธิบายคำสั่ง chmod บน Linux
chmod เป็นคำสั่งบน Linux ที่ใช้สำหรับกำหนดสิทธิ์ read, write หรือ execute ให้กับ file หรือ directory ว่าจะให้มีสิทธิ์ใช้งานแบบไหน และใช้งานโดยใครได้บ้าง
หลายๆ ท่านอาจจะเคยเจอคำสั่ง chmod 644, chmod 755 หรือ chmod 777 อะไรทำนองนี้ วันนี้เรามาดูกันครับ ว่ามันมีความหมายอย่างไร
TL;DR (สรุปสั้นๆ)
คำสั่ง chmod ตามด้วยเลข 3 หลัก แต่ละหลักมีความหมายดังนี้
หลักที่1 คือสิทธิ์ของ owner (เจ้าของ), หลักที่2 คือสิทธิ์ของ group (คนที่อยู่กลุ่ม), หลักที่3 คือสิทธิ์ของ other (คนอื่นๆ ที่ไม่ใช่เจ้าของ และไม่อยู่ในกลุ่ม)
สิทธิ์ที่ว่ามี 3 แบบ คือ read (อ่าน), write (เขียน), execute (รันโปรแกรม) โดยแต่ละสิทธิ์สามารถเขียนแทนด้วยตัวเลขดังนี้
read=4, write=2, execute=1 ซึ่งแต่เลขแต่ละหลักคือการนำตัวเลขแทนสิทธิ์มาบวกกันนั้นเอง เช่น
read+write=4+2=6 หรือ read+write+execute=7 หรือไม่มีสิทธิ์เลยก็คือ 0 นั่นเอง
เริ่มกันที่คำสั่ง ls -l
ก่อนจะพูดถึงคำสั่งที่ใช้สำหรับกำหนดสิทธิ์ เรามาดูกันที่คำสั่งสำหรับแสดงสิทธิ์กันก่อนครับ โดยคำสั่งที่เราจะใช้คือ คำสั่ง ls -l ที่จะช่วยให้คุณทราบว่า file หรือ directory นั้นใครเป็นเจ้าของ และ file หรือ directory นั้นถูกกำหนดสิทธิ์ไว้อย่างไร โดยผลลัพธ์ของคำสั่ง ls -l จะหน้าตาเป็นแบบนี้ครับ
-rwxrwx— 1 user group 1293 Jun 3 20:34 file_name
drw-rw-rw- 1 user group 4096 Jun 3 20:34 dir_name
ซึ่งผลลัพธ์ที่ว่านี้จะบอกเราว่ารายการไหนเป็น file หรือ directory, มีสิทธิ์ read, write หรือ execute โดย user และ group ไหนบ้าง, file มีขนาดเท่าไหร่, ถูกแก้ไขล่าสุดตอนไหน, file หรือ directory นั้นมีชื่อว่าอะไร ซึ่งผลลัพธ์แต่ละ column มีความหมายดังนี้
column1 บอกว่าเป็น file (-) หรือ directory (d) พร้อมทั้งบอกสิทธิ์การ read, write และ execute
column2 แสดงจำนวน hard link ของไฟล์ หรือ แสดงจำนวน subdirectory
column3 แสดงชื่อ user ที่เป็นเจ้าของ file หรือ directory
column4 แสดงชื่อ group ที่เป็นเจ้าของ file หรือ directory
column5 แสดงขนาดของ file มีหน่วยเป็น byte หรือหากเป็น directory จะแสดงเป็น 4096
column6 แสดงวันที่ และเวลาที่แก้ไขล่าสุด
column7 แสดงชื่อของ file หรือ directory
ซึ่งในบทความนี้เราจะให้ความสนใจไปที่ column 1, 3 และ 4 ครับ
อธิบาย Column1 -rwxrwxrwx
-rwxrwxrwx จะแบ่งออกได้เป็น 4 ส่วนดังนี้
– | rwx | rwx | rwx
ส่วนที่1 บอกกว่าเป็น file หรือ directory โดยจะแสดง – เมื่อเป็น file และจะแสดง d เมื่อเป็น directory
ส่วนที่2 บอกสิทธิ์การ read, write และ execute ของ user ที่เป็นเจ้าของ file/directory
ส่วนที่3 บอกสิทธิ์การ read, write และ execute ของ group ที่เป็นเจ้าของ file/directory
ส่วนที่3 บอกสิทธิ์การ read, write และ execute ของ other หรือ user อื่นๆ ที่ไม่ใช่เจ้าของ file/directory และไม่ได้อยู่ใน group
ตัวอย่าง และความหมาย
-rwx—— แบ่งเป็น -|rwx|—|—
- – = เป็น file
- rwx = user สามารถ read write execute ได้
- — = group ไม่สามารถ read write execute ได้
- — = other ไม่สามารถ read write execute ได้
-rw-rw—- แบ่งเป็น -|rw-|rw-|—
- – = เป็น file
- rw- = user สามารถ read write ได้, แต่ไม่สามารถ execute
- rw- = group สามารถ read write ได้, แต่ไม่สามารถ execute
- — = other ไม่สามารถ read write execute ได้
-rwxrwxr-x แบ่งเป็น -|rwx|rwx|r-x
- – = เป็น file
- rwx = user สามารถ read write execute ได้
- rwx = group สามารถ read write execute ได้
- r-x = other สามารถ read execute ได้, แต่ไม่สามารถ write
drw-rw-r– แบ่งเป็น d|rw-|rw-|r–
- d = เป็น directory
- rw- = user สามารถ read write ได้, แต่ไม่สามารถ execute
- rw- = group สามารถ read write ได้, แต่ไม่สามารถ execute
- r– = other สามารถ read ได้, แต่ไม่สามารถ write และ execute
drwxrwxr-x แบ่งเป็น d|rwx|rwx|r-x
- d = เป็น directory
- rwx = user สามารถ read write execute ได้
- rwx = group สามารถ read write execute ได้
- r-x = other สามารถ read execute ได้, แต่ไม่สามารถ write
ความเกี่ยวข้องของ rwxrwxrwx และ ตัวเลข 644 755 777 ฯลฯ
หลังจากที่เราเข้าใจกันไปแล้วว่า rwxrwxrwx เราสามารถแบ่งได้เป็นสิทธ์ของ user, group และ other ซึ่งนับได้ 3 กลุ่ม ซึ่งเท่ากับจำนวนตัวเลขของเราที่มี 3 ตัวพอดีครับ นั่นคือตัวเลขแต่ละตัว บ่งบอกสิทธิ์ของแต่ละกลุ่มนั่นเอง
วิธีการแปลง rwxrwxrwx เป็นตัวเลข
เราจะแทนค่า rwx ด้วยตัวเลขดังนี้ r=4, w=2, x=1, -=0 เช่น
rwx——
=[rwx][—][—]
=[4+2+1][0+0+0][0+0+0]
=700
-rw-rw—-
=[rw-][rw-][—]
=[4+2+0][4+2+0][0+0+0]
=660
rwxrwxr-x
=[rwx][rwx][r-x]
=[4+2+1][4+2+1][4+0+1]
=775
rw-rw-r–
=[rw-][rw-][r–]
=[4+2+0][4+2+0][4+0+0]
=664
การใช้คำสั่ง chmod
หนึ่งในรูปแบบการใช้คำสั่ง chmod ที่เราคุ้นเคยกัน ได้แก่ การใช้คำสั่ง chmod ที่ตามด้วยตัวเลข 3 ตัว เช่น
chmod <octal_digits> file_or_directory_name
หรือใช้สัญลักษณ์ user, group, other, read, write, execute ดังนี้ก็สะดวกดีครับ
chmod u=rwx,g=rwx,o=rwx file_or_directory_name
ตัวอย่าง
ตัวอย่างที่ 1. กำหนดให้ทุก user สามารถ read, write, execute ได้
chmod 777 file_or_directory_name
หรือ
chmod ugo=rwx file_or_directory_name
ตัวอย่างที่ 2. กำหนดให้ user ที่เป็นเจ้าของ และ user ที่อยู่ใน group สามารถ read, write, execute ได้ ส่วน user อื่นๆ กำหนดให้ไม่มีสิทธิ์ใดๆ
chmod 770 file_or_directory_name
หรือ
chmod ug=rwx,o= file_or_directory_name
ตัวอย่างที่ 3. กำหนดให้ user ที่เป็นเจ้าของสามารถ read, write, execute ได้ ส่วน user ใน group สามารถ read, execute ได้ ส่วน user อื่นๆ กำหนดให้ไม่มีสิทธิ์ใดๆ
chmod 750 file_or_directory_name
หรือ
chmod u=rwx,g=rx,o= file_or_directory_name
ข้อมูลเพิ่มเติม
- command line – What does the second column in the output of ‘ls -n’ mean? – Ask Ubuntu
- chmod – Wikipedia
- Linux chmod command help and examples