วิธีใช้คำสั่ง chmod บน Linux

เผยแพร่แล้ว: 2022-10-25
พร้อมท์เทอร์มินัลที่มีสไตล์บนแล็ปท็อป Linux
Fatmawati Achmad Zaenuri/Shutterstock.com
Chmod รับอาร์กิวเมนต์หลักสามประการ: r, w และ x ซึ่งย่อมาจาก read, write และ execute ตามลำดับ การเพิ่มหรือลบชุดค่าผสมของอาร์กิวเมนต์จะควบคุมสิทธิ์ของไฟล์และโฟลเดอร์ ตัวอย่างเช่น chmod +rwx เพิ่มสิทธิ์ในการอ่าน เขียน และรันสคริปต์ การรัน chmod -wx จะลบความสามารถในการเขียนและดำเนินการ

ควบคุมผู้ที่สามารถเข้าถึงไฟล์ ค้นหาไดเรกทอรี และเรียกใช้สคริปต์โดยใช้คำสั่ง chmod ของ Linux คำสั่งนี้จะแก้ไขการอนุญาตไฟล์ Linux ซึ่งดูซับซ้อนในแวบแรก แต่จริงๆ แล้วค่อนข้างง่ายเมื่อคุณรู้ว่ามันทำงานอย่างไร

chmod แก้ไขการอนุญาตไฟล์

ใน Linux ผู้ที่สามารถทำอะไรกับไฟล์หรือไดเร็กทอรีจะถูกควบคุมผ่านชุดการอนุญาต มีการอนุญาตสามชุด ชุดหนึ่งสำหรับเจ้าของไฟล์ อีกชุดสำหรับสมาชิกของกลุ่มไฟล์ และชุดสุดท้ายสำหรับคนอื่นๆ

10 คำสั่ง Linux พื้นฐานสำหรับผู้เริ่มต้น
คำสั่ง Linux พื้นฐาน 10 คำสั่ง ที่เกี่ยวข้อง สำหรับผู้เริ่มต้น

สิทธิ์จะควบคุมการดำเนินการที่สามารถทำได้บนไฟล์หรือไดเร็กทอรี พวกเขาอนุญาตหรือป้องกันไม่ให้ไฟล์ถูกอ่าน แก้ไข หรือหากเป็นสคริปต์หรือโปรแกรม ให้ดำเนินการ สำหรับไดเร็กทอรี การอนุญาตจะควบคุมว่าใครสามารถ cd ลงในไดเร็กทอรีและใครสามารถสร้างหรือแก้ไขไฟล์ภายในไดเร็กทอรี

คุณใช้คำสั่ง chmod เพื่อตั้งค่าสิทธิ์เหล่านี้แต่ละรายการ หากต้องการดูว่ามีการอนุญาตใดบ้างในไฟล์หรือไดเรกทอรี เราสามารถใช้ ls

การดูและทำความเข้าใจสิทธิ์ของไฟล์

เราสามารถใช้ตัวเลือก -l (รูปแบบยาว) เพื่อให้ ls แสดงรายการสิทธิ์ของไฟล์สำหรับไฟล์และไดเร็กทอรี

 ลส -ล 

ในแต่ละบรรทัด อักขระตัวแรกระบุประเภทของรายการที่กำลังแสดงรายการ หากเป็นเส้นประ ( - ) แสดงว่าเป็นไฟล์ หากเป็นตัวอักษร d แสดงว่าเป็นไดเร็กทอรี

อักขระเก้าตัวถัดไปแสดงถึงการตั้งค่าสำหรับการอนุญาตสามชุด

  • อักขระสามตัวแรกแสดงการอนุญาตสำหรับผู้ใช้ที่เป็นเจ้าของไฟล์ ( สิทธิ์ของผู้ใช้ )
  • อักขระสามตัวตรงกลางแสดงการอนุญาตสำหรับสมาชิกของกลุ่มไฟล์ ( การ อนุญาตกลุ่ม )
  • อักขระสามตัวสุดท้ายแสดงการอนุญาตสำหรับผู้ที่ไม่ได้อยู่ในสองหมวดหมู่แรก (การ อนุญาตอื่น ๆ )

มีอักขระสามตัวในแต่ละชุดของสิทธิ์ อักขระเป็นตัวบ่งชี้ว่ามีหรือไม่มีสิทธิ์อย่างใดอย่างหนึ่ง จะเป็นเครื่องหมายขีดกลาง ( - ) หรือตัวอักษรก็ได้ หากตัวละครเป็นเส้นประ แสดงว่าไม่ได้รับอนุญาต หากตัวละครเป็น r , w หรือ x ได้รับอนุญาตแล้ว

ตัวอักษรแสดงถึง:

  • r : สิทธิ์ในการอ่าน สามารถเปิดไฟล์และดูเนื้อหาได้
  • w : เขียนสิทธิ์ ไฟล์สามารถแก้ไข แก้ไข และลบได้
  • x : ดำเนินการอนุญาต หากไฟล์เป็นสคริปต์หรือโปรแกรม ก็สามารถเรียกใช้ได้ (ดำเนินการ)

ตัวอย่างเช่น:

  • --- หมายถึงไม่มีการอนุญาตใด ๆ เลย
  • rwx หมายความว่าได้รับอนุญาตเต็มรูปแบบแล้ว มีตัวบ่งชี้การอ่าน เขียน และดำเนินการทั้งหมด

ในภาพหน้าจอของเรา บรรทัดแรกเริ่มต้นด้วย d บรรทัดนี้อ้างอิงถึงไดเร็กทอรีที่เรียกว่า "archive" เจ้าของไดเร็กทอรีคือ "dave" และชื่อของกลุ่มที่เป็นของไดเร็กทอรีจะเรียกว่า "dave"

อักขระสามตัวถัดไปคือสิทธิ์ของผู้ใช้สำหรับไดเร็กทอรีนี้ สิ่งเหล่านี้แสดงว่าเจ้าของมีสิทธิ์เต็มที่ อักขระ r , w และ x มีอยู่ทั้งหมด ซึ่งหมายความว่าผู้ใช้ dave มีสิทธิ์ในการอ่าน เขียน และดำเนินการสำหรับไดเร็กทอรีนั้น

ชุดที่สองของอักขระสามตัวคือการอนุญาตกลุ่ม เหล่านี้คือ rx สิ่งเหล่านี้แสดงว่าสมาชิกของกลุ่ม dave ได้อ่านและดำเนินการสิทธิ์สำหรับไดเร็กทอรีนี้ นั่นหมายความว่าพวกเขาสามารถแสดงรายการไฟล์และเนื้อหาในไดเร็กทอรี และพวกเขาสามารถ cd (รัน) ลงในไดเร็กทอรีนั้น ไม่มีสิทธิ์ในการเขียน จึงไม่สามารถสร้าง แก้ไข หรือลบไฟล์ได้

ชุดสุดท้ายของอักขระสามตัวก็เป็น rx ด้วย สิทธิ์เหล่านี้ใช้กับผู้ที่ไม่ได้อยู่ภายใต้การอนุญาตสองชุดแรก บุคคลเหล่านี้ (เรียกว่า "คนอื่น") ได้อ่านและดำเนินการสิทธิ์ในไดเร็กทอรีนี้

ดังนั้น เพื่อสรุป สมาชิกกลุ่มและคนอื่นๆ ได้อ่านและดำเนินการสิทธิ์ เจ้าของซึ่งเป็นผู้ใช้ชื่อเดฟก็มีสิทธิ์ในการเขียนเช่นกัน

สำหรับไฟล์อื่นๆ ทั้งหมด (นอกเหนือจากไฟล์สคริปต์ mh.sh) dave และสมาชิกของกลุ่ม dave มีคุณสมบัติในการอ่านและเขียนในไฟล์ และไฟล์อื่นๆ มีสิทธิ์ในการอ่านเท่านั้น

สำหรับกรณีพิเศษของไฟล์สคริปต์ mh.sh เจ้าของ dave และสมาชิกกลุ่มมีสิทธิ์ในการอ่าน เขียน และดำเนินการ และคนอื่นๆ มีสิทธิ์อ่านและดำเนินการเท่านั้น

การทำความเข้าใจไวยากรณ์การอนุญาต

ในการใช้ chmod เพื่อตั้งค่าการอนุญาต เราต้องบอก:

  • ใคร: เรากำลังตั้งค่าการอนุญาตสำหรับใคร
  • อะไร : เรากำลังเปลี่ยนแปลงอะไร? เรากำลังเพิ่มหรือลบการอนุญาตหรือไม่
  • ใด : เรากำลังตั้งค่าการอนุญาตใด

เราใช้ตัวบ่งชี้เพื่อแสดงค่าเหล่านี้และสร้าง "คำสั่งอนุญาต" สั้น ๆ เช่น u+x โดยที่ "u" หมายถึง " ผู้ใช้" (ใคร) "+" หมายถึงเพิ่ม (อะไร) และ "x" หมายถึงการอนุญาตดำเนินการ (ที่).

ค่า "ใคร" ที่เราสามารถใช้ได้คือ:

  • u : User หมายถึงเจ้าของไฟล์
  • g : Group หมายถึงสมาชิกของกลุ่มที่ไฟล์นั้นเป็นสมาชิกอยู่
  • o : อื่น ๆ หมายถึงผู้ที่ไม่ได้อยู่ภายใต้การอนุญาต u และ g
  • a : All หมายถึงทั้งหมดข้างต้น

หากไม่มีการใช้สิ่งเหล่านี้ chmod จะทำงานเหมือนกับว่ามีการใช้ “ a

ค่า "อะไร" ที่เราสามารถใช้ได้คือ:

  • : เครื่องหมายลบ. ลบการอนุญาต
  • + : เครื่องหมายบวก ให้สิทธิ์. สิทธิ์จะถูกเพิ่มไปยังสิทธิ์ที่มีอยู่ หากคุณต้องการได้รับสิทธิ์นี้และมีเพียงชุดสิทธิ์นี้เท่านั้น ให้ใช้ตัวเลือก = ตามที่อธิบายด้านล่าง
  • = : เครื่องหมายเท่ากับ ตั้งค่าการอนุญาตและลบผู้อื่น

ค่า "ไหน" ที่เราสามารถใช้ได้คือ:

  • r : สิทธิ์ในการอ่าน
  • w : สิทธิ์ในการเขียน
  • x : การอนุญาตดำเนินการ

การตั้งค่าและแก้ไขการอนุญาต

สมมติว่าเรามีไฟล์ที่ทุกคนมีสิทธิ์เต็มที่ในไฟล์นั้น

 ls -l new_ file.txt 

เราต้องการให้ผู้ใช้เดฟมีสิทธิ์อ่านและเขียน และกลุ่มและผู้ใช้รายอื่นมีสิทธิ์ในการอ่านเท่านั้น เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้:

 chmod u=rw,og=r new_file.txt 

การใช้ตัวดำเนินการ “=” หมายความว่าเราจะล้างการอนุญาตที่มีอยู่แล้วตั้งค่าสิทธิ์ที่ระบุ

มาตรวจสอบการอนุญาตใหม่ในไฟล์นี้:

 ls -l new_file.txt 

สิทธิ์ที่มีอยู่ถูกลบออกและตั้งค่าการอนุญาตใหม่ตามที่เราคาดไว้

วิธีการเพิ่มการอนุญาต โดยไม่ต้อง ลบการตั้งค่าการอนุญาตที่มีอยู่? เราก็ทำได้ง่ายๆเช่นกัน

สมมติว่าเรามีไฟล์สคริปต์ที่เราแก้ไขเสร็จแล้ว เราจำเป็นต้องทำให้สามารถเรียกใช้งานได้สำหรับผู้ใช้ทุกคน การอนุญาตปัจจุบันมีลักษณะดังนี้:

 ls -l new_script.sh 

เราสามารถเพิ่มการอนุญาตดำเนินการสำหรับทุกคนด้วยคำสั่งต่อไปนี้:

 chmod a+x new_script.sh 

หากเราดูที่การอนุญาต เราจะเห็นว่าขณะนี้มีการอนุญาตให้ดำเนินการกับทุกคน และการอนุญาตที่มีอยู่ยังคงอยู่

 ls -l new_script.sh 

เราสามารถบรรลุสิ่งเดียวกันได้โดยไม่ต้องมี "a" ในคำสั่ง "a+x" คำสั่งต่อไปนี้ก็ใช้ได้เช่นกัน

 chmod +x new_script.sh

การตั้งค่าการอนุญาตสำหรับหลายไฟล์

เราสามารถใช้การอนุญาตกับหลายไฟล์พร้อมกันได้

นี่คือไฟล์ในไดเร็กทอรีปัจจุบัน:

 ลส -ล 

สมมติว่าเราต้องการลบสิทธิ์ในการอ่านสำหรับผู้ใช้ "คนอื่น" ออกจากไฟล์ที่มีนามสกุล ".page" เราสามารถทำได้ด้วยคำสั่งต่อไปนี้:

 chmod หรือ *.page 

มาดูกันว่ามีผลกระทบอะไรบ้าง:

 ลส -ล 

ดังที่เราเห็น สิทธิ์ในการอ่านถูกลบออกจากไฟล์ ".page" สำหรับหมวดหมู่ "อื่นๆ" ของผู้ใช้แล้ว ไม่มีไฟล์อื่นได้รับผลกระทบ

หากเราต้องการรวมไฟล์ในไดเร็กทอรีย่อย เราสามารถใช้ตัวเลือก -R (เรียกซ้ำ)

 chmod -R หรือ *.page

ชวเลขเชิงตัวเลข

อีกวิธีหนึ่งในการใช้ chmod คือการให้สิทธิ์ที่คุณต้องการมอบให้กับเจ้าของ กลุ่ม และอื่นๆ เป็นตัวเลขสามหลัก ตัวเลขทางซ้ายสุดแสดงถึงการอนุญาตสำหรับเจ้าของ ตัวเลขกลางแสดงถึงการอนุญาตสำหรับสมาชิกกลุ่ม ตัวเลขขวาสุดแสดงถึงการอนุญาตสำหรับผู้อื่น

ตัวเลขที่คุณสามารถใช้ได้และตัวเลขแสดงอยู่ที่นี่:

  • 0: (000) ไม่ได้รับอนุญาต
  • 1: (001) ดำเนินการอนุญาต
  • 2: (010) อนุญาตการเขียน
  • 3: (011) เขียนและดำเนินการสิทธิ์
  • 4: (100) สิทธิ์ในการอ่าน
  • 5: (101) อ่านและดำเนินการสิทธิ์
  • 6: (110) สิทธิ์ในการอ่านและเขียน
  • 7: (111) อ่าน เขียน และดำเนินการสิทธิ์

สิทธิ์ทั้งสามแต่ละรายการจะแสดงด้วยหนึ่งในบิตในเลขฐานสองที่เทียบเท่ากับเลขทศนิยม ดังนั้น 5 ซึ่งเป็นเลขฐานสองคือ 101 หมายถึงอ่านและดำเนินการ 2 ซึ่งเท่ากับ 010 ในไบนารี จะหมายถึงการอนุญาตในการเขียน

ด้วยวิธีนี้ คุณจะตั้งค่าการอนุญาตที่คุณต้องการได้ คุณไม่ได้เพิ่มการอนุญาตเหล่านี้ในการอนุญาตที่มีอยู่ ดังนั้นหากสิทธิ์ในการอ่านและเขียนมีอยู่แล้ว คุณจะต้องใช้ 7 (111) เพื่อเพิ่มสิทธิ์ในการดำเนินการ การใช้ 1 (001) จะเป็นการลบสิทธิ์ในการอ่านและเขียนและเพิ่มสิทธิ์ในการดำเนินการ

มาเพิ่มสิทธิ์ในการอ่านกลับไปที่ไฟล์ “.page” สำหรับผู้ใช้ประเภทอื่นๆ เราต้องตั้งค่าการอนุญาตผู้ใช้และกลุ่มด้วย ดังนั้นเราต้องตั้งค่าให้เป็นแบบที่มีอยู่แล้ว ผู้ใช้เหล่านี้มีสิทธิ์อ่านและเขียนอยู่แล้ว ซึ่งก็คือ 6 (110) เราต้องการให้ "ผู้อื่น" อ่านและการอนุญาต ดังนั้นต้องตั้งค่าเป็น 4 (100)

คำสั่งต่อไปนี้จะทำสิ่งนี้ให้สำเร็จ:

 chmod 664 *.page 

ซึ่งจะกำหนดสิทธิ์ที่เราต้องการสำหรับผู้ใช้ สมาชิกกลุ่ม และอื่นๆ ตามที่เราต้องการ ผู้ใช้และสมาชิกกลุ่มมีสิทธิ์ในการรีเซ็ตเป็นสิ่งที่พวกเขาเป็นอยู่แล้ว และคนอื่นๆ ได้รับสิทธิ์ในการอ่านคืน

 ลส -ล 

ตัวเลือกขั้นสูง

หากคุณอ่าน man page สำหรับ chmod คุณจะเห็นว่ามีตัวเลือกขั้นสูงที่เกี่ยวข้องกับบิต SETUID และ SETGID และการลบแบบจำกัดหรือบิต "เหนียว"

สำหรับ 99% ของเคสที่คุณต้องการ chmod คุณสามารถครอบคลุมตัวเลือกที่อธิบายไว้ในที่นี้

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ