เมื่อมันมาถึงการทำปฏิบัติการไฟล์สิ่งที่เป็นความแตกต่างระหว่างchmod 755
และchmod +x
และเมื่อผมจะใช้ที่? ฉันใช้ไปchmod +x
แล้วและเพิ่งอ่านบางสิ่งและมันใช้chmod 755
แล้วและฉันไม่สามารถบอกได้ว่าดีกว่าที่จะใช้chmod 755
หรือchmod +x
ไม่
เมื่อมันมาถึงการทำปฏิบัติการไฟล์สิ่งที่เป็นความแตกต่างระหว่างchmod 755
และchmod +x
และเมื่อผมจะใช้ที่? ฉันใช้ไปchmod +x
แล้วและเพิ่งอ่านบางสิ่งและมันใช้chmod 755
แล้วและฉันไม่สามารถบอกได้ว่าดีกว่าที่จะใช้chmod 755
หรือchmod +x
ไม่
คำตอบ:
เพื่อให้สามารถเปรียบเทียบได้เราควรดูจากมุมมองเดียวกันดังนั้น:
chmod +x
เท่ากับchmod ugo+x
(ขึ้นอยู่กับumask
มูลค่า)chmod 755
เท่ากับ chmod u=rwx,go=rx
ประการแรกคุณควรรู้ว่า:
+
หมายถึงเพิ่มการอนุญาตนี้ไปยังการอนุญาตอื่น ๆ ที่ไฟล์มีอยู่แล้ว=
หมายถึงเพิกเฉยต่อการอนุญาตทั้งหมดตั้งค่าอย่างถูกต้องตามที่ฉันให้ไว้
read = 4, write = 2, execute = 1
นี่คือตรรกะไบนารีข้างหลัง (ถ้าคุณสนใจ):
Symbolic: r-- -w- --x | 421
Binary: 100 010 001 | -------
Decimal: 4 2 1 | 000 = 0
| 001 = 1
Symbolic: rwx r-x r-x | 010 = 2
Binary: 111 101 101 | 011 = 3
Decimal: 7 5 5 | 100 = 4
/ / / | 101 = 5
Owner ---/ / / | 110 = 6
Group ------/ / | 111 = 7
Others ---------/ | Binary to Octal chart
การใช้งาน+x
คุณกำลังบอกให้เพิ่ม ( +
) บิตเรียกทำงาน ( x
) ให้กับเจ้าของกลุ่มและอื่น ๆ
ugo+x
หรือu+x,g+x,o+x
x
มันจะพิจารณาพวกเขาทั้งหมด และตามที่ @Rinzwind ชี้ให้เห็นมันขึ้นอยู่กับumask
มูลค่าเพิ่มบิตให้กับสิ่งที่umask
อนุญาต จำไว้ว่าถ้าคุณระบุเป้าหมายเช่นo+r
นั้นumask
จะไม่มีผลกระทบใด ๆ อีกต่อไปu+x
เพื่อเพิ่มบิตที่สามารถเรียกใช้งานได้ให้กับเจ้าของเท่านั้นการใช้งาน755
คุณกำลังระบุ:
u=rwx
(4 + 2 + 1 สำหรับเจ้าของ)g=rx
(4 + 1 สำหรับกลุ่ม)o=rx
(4 + 1 สำหรับคนอื่น ๆ )ดังนั้นchmod 755
เป็นเหมือน: หรือchmod u=rwx,g=rx,o=rx
chmod u=rwx,go=rx
chmod 755
คุณตั้งค่าบิตเหล่านั้นและคุณยังล้างบิตsuid / sgid / sticky ทั้งหมด (ที่อาจมีอยู่) (สำหรับตัวอย่าง: ไม่เคยchmod 755 /tmp
) 755 ควรถูกคิดเป็น 0755 เช่นชุด octal ชุดแรกของบิตนั้นตั้งเป็น 0
chmod +x
เพิ่มสิทธิ์ดำเนินการสำหรับผู้ใช้ทั้งหมดในสิทธิ์ที่มีอยู่
chmod 755
กำหนด755
สิทธิ์สำหรับไฟล์
755
หมายถึงสิทธิ์แบบเต็มสำหรับเจ้าของและอ่านและดำเนินการอนุญาตสำหรับผู้อื่น
อีกวิธีหนึ่งที่จะมองมัน (ซึ่งผมพบว่าง่ายต่อการเข้าใจ) คือว่าchmod +x
คือการตั้งค่าสิทธิ์ที่ค่อนข้างในขณะที่chmod 755
มีการตั้งค่าพวกเขาอย่างแน่นอน
หลังจากที่chmod 755
มีวิ่งบนไฟล์สิทธิ์ของมันจะเป็น 755 rwxr-xr-x
หรือ
chmod +x
จะใช้สิทธิ์ที่มีอยู่และเพิ่มสิทธิ์ดำเนินการไปยังไฟล์
ฉันแนะนำให้อ่านหน้าคนchmodสำหรับรายละเอียด คุณเพิ่งเห็นโหมดการทำงานที่แตกต่างกันสองโหมดที่พร้อมใช้งานด้วยคำสั่ง chmod เพื่อทำงานที่เหมือนกันของการเปลี่ยนแปลงการอนุญาต
โหมด Octal ใช้ตัวเลขและตั้งค่าการอนุญาตทั้งหมดของไฟล์ โหมดตัวละครกำลังใช้ตัวอักษรและโดยทั่วไปจะใช้เพียงแค่ปรับเปลี่ยนการอนุญาตที่มีอยู่
chmod 755
ตั้งค่าrwxr-xr-x
ในขณะที่
chmod +x
ปรับสิทธิ์เพื่อให้เจ้าของกลุ่มและโลกทั้งหมดมีสิทธิ์เพิ่มที่สามารถเรียกใช้งานได้ สมมติว่าสิทธิ์ในแฟ้มเริ่มต้นของrwxr--r--
มันจะปรับให้สิทธิ์เดียวกันเป็น 755 rwxr-xr-x
ของ
ความแตกต่างคือสิ่งที่สิทธิ์ได้รับการตั้งค่าและโหมดที่คุณใช้ในการตั้งค่าพวกเขา
เมื่อchmod +x
คุณตั้งค่าบิตที่สามารถใช้งานได้สำหรับทุกคน - เจ้าของกลุ่มเจ้าของและผู้ใช้รายอื่น สิ่งนี้เรียกว่าโหมดสัญลักษณ์ อ้างถึงman chmod
:
ตัวดำเนินการ + ทำให้บิตโหมดไฟล์ที่เลือกถูกเพิ่มลงในบิตโหมดไฟล์ที่มีอยู่ของแต่ละไฟล์ - ทำให้พวกเขาถูกลบออก; และ = ทำให้มีการเพิ่มและทำให้บิตที่ไม่ได้กล่าวถึงถูกลบยกเว้นว่าผู้ใช้ชุดและ ID กลุ่มที่ไม่ได้กล่าวถึงของไดเรกทอรีจะไม่ได้รับผลกระทบ
เมื่อchmod 755
คุณใช้เลขฐานแปดการแทนค่าแบบไบนารี่จะใช้เพื่อกำหนดบิตของการอนุญาตที่เฉพาะเจาะจง แรก (ซ้าย) 3 บิตสอดคล้องกับสิทธิ์ของเจ้าของ, 3 ตรงกลางกับสิทธิ์ของกลุ่มและสุดท้าย (ขวาสุด) สอดคล้องกับสิทธิ์ของผู้ใช้อื่น ๆ ทั้งหมด ลำดับของบิตจะเหมือนกันเสมอread,write,execute
หรือrwx
ดังนั้นเนื่องจากลำดับนั้นเหมือนกันหมายเลขแต่ละรายการเมื่อถูกแปลงเป็นการแสดงแบบไบนารี่จะตั้งค่าบิตการอนุญาตสำหรับบิตตำแหน่งที่สอดคล้องกันในจำนวนคือ 1 และไม่ได้ตั้งค่าที่ 0 . โดยเฉพาะ:
7
คือ 111 ในไบนารี่ดังนั้นคุณสามารถตั้งค่าทั้งหมดอ่านเขียนและดำเนินการบิตสำหรับเจ้าของ rwx
ชุด5
คือ 101 ในไบนารีดังนั้นคุณจึงตั้งค่าการอ่านและดำเนินการ แต่ปิดการใช้งานบิตการเขียนและเนื่องจากเป็น 5 สำหรับกลุ่มและผู้ใช้อื่น ๆ สองหมวดหมู่เหล่านี้จะมีสิทธิ์เหมือนกัน ดังนั้นจึงr-x
มีการตั้งค่านี่คือตัวอย่างเล็ก ๆ :
bash-4.3$ touch file1 file2
bash-4.3$ chmod +x file1
bash-4.3$ chmod 755 file2
bash-4.3$ ls -l file1 file2
-rwxrwxr-x 1 xieerqi xieerqi 0 7月 6 13:54 file1
-rwxr-xr-x 1 xieerqi xieerqi 0 7月 6 13:54 file2
ความแตกต่างที่สำคัญอย่างหนึ่งคือchmod + นั้นอยู่ภายใต้ข้อ จำกัด umask และ chmod <octal> นั้นไม่ใช่
ลองพิจารณาตัวอย่างต่อไปนี้:
$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul 7 16:40 bar
---------- 1 gowenfawr users 0 Jul 7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul 7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul 7 16:39 foo
$
ดังนั้นหากคุณต้องการเปลี่ยนแปลงการอนุญาตในรูปแบบที่เหมาะสมกับการตั้งค่า umask ให้ใช้ไวยากรณ์ '+' แต่ถ้าคุณต้องการตั้งค่าอย่างแน่นอนโดยไม่คำนึงถึง umask ให้ใช้รูปแบบ <octal> และตระหนักว่าคุณต้องระบุบิตทั้งหมดไม่ใช่แค่เดลต้า
นอกจากคำตอบที่สวยงามเหล่านี้ฉันต้องการพูดถึงความแตกต่างเล็กน้อย แต่อาจสำคัญ คำสั่งเทียบเท่ากับchmod 755 file
chmod 0755 file
หากเรารันคำสั่งนี้บนไฟล์ที่มีชุด SETUID-bit หรือ SETGID-bit มันจะลบ SETUID / SETGID-bit chmod +x file
จะปล่อยให้ SETUID / SETGID-bit ไม่ถูกแตะต้อง เราสามารถเห็นสิ่งนี้ในตัวอย่างต่อไปนี้:
~ $ ทดสอบสัมผัส ~ $ chmod u + s การทดสอบ ~ $ จะทดสอบ -rwSrw-r-- 1 มุก mook 0 ก.ย. 14 00:49 น ~ $ chmod + x ทดสอบ ~ $ จะทดสอบ -rwsrwxr-x 1 mook mook 0 ก.ย. 14 00:49 น ~ $ chmod ทดสอบ 755 ~ $ จะทดสอบ -rwxr-xr-x 1 mook mook 0 ก.ย. 14 00:49 น
chmod +x
ตั้งค่าการปฏิบัติธงทั้งหมดโดยไม่ต้องเปลี่ยนสิทธิ์อื่น ๆchmod 755
กำหนด rwxr-xr-x