ความแตกต่างระหว่างchmod u+xและเพียงchmod +xคืออะไร? ฉันได้เห็นแบบฝึกหัดมากมายที่บอกว่าใช้u+xเพื่อทำให้สคริปต์ทำงานได้ อย่างไรก็ตามการละเว้นสิ่งuนั้นดูเหมือนจะไม่มีผลใด ๆ
ความแตกต่างระหว่างchmod u+xและเพียงchmod +xคืออะไร? ฉันได้เห็นแบบฝึกหัดมากมายที่บอกว่าใช้u+xเพื่อทำให้สคริปต์ทำงานได้ อย่างไรก็ตามการละเว้นสิ่งuนั้นดูเหมือนจะไม่มีผลใด ๆ
คำตอบ:
หน้าคนของchmodปกที่
วิธีการที่chmod u+x somefileจะให้เฉพาะเจ้าของสิทธิ์ดำเนินการไฟล์ในขณะที่เป็นเช่นเดียวกับchmod +x somefilechmod a+x somefile
[ugoa...][[+-=][rwxXstugo...]...][,...]รูปแบบของโหมดสัญลักษณ์เป็น การดำเนินการหลายสัญลักษณ์สามารถกำหนดได้โดยคั่นด้วยเครื่องหมายจุลภาคการรวมกันของตัวอักษร 'ugoa' จะควบคุมการเข้าถึงไฟล์ของผู้ใช้: ผู้ใช้ที่เป็นเจ้าของ (u), ผู้ใช้อื่น ๆ ในกลุ่มของไฟล์ (g), ผู้ใช้อื่นที่ไม่อยู่ในกลุ่มของไฟล์ (o), หรือผู้ใช้ทั้งหมด (a) หากไม่ได้รับสิ่งเหล่านี้ผลจะเหมือนกับว่า 'a' ได้รับ แต่บิตที่ตั้งค่าใน umask จะไม่ได้รับผลกระทบ
chmod +x fileแตกต่างจากchmod a+x file- ดูคำตอบของ Ravexina สำหรับรายละเอียด
เพียงแค่ทำ+xมันจะใช้กับธงทั้งหมด: [u] ser, [g] roup, [o] thers
พิมพ์man chmodเพื่อรับข้อมูลเพิ่มเติม
ก่อนอื่นผมขอแนะนำให้คุณอ่านคำถามเหล่านี้และคำตอบที่ลิงก์ด้านล่าง
ช่วยให้คุณเข้าใจทุกส่วนที่จำเป็นที่คุณต้องรู้
chmod +xเท่ากับchmod ugo+x(ขึ้นอยู่กับumaskมูลค่า)chmod a+xเท่ากับchmod ugo+x(โดยไม่พิจารณาumaskมูลค่า)ผลลัพธ์ที่ได้chmod a+xคือการตั้งค่าบิตที่ใช้งานได้สำหรับทุกคน (เจ้าของกลุ่มอื่น ๆ ) ง่ายใช่ไหม?
อย่างไรก็ตามด้วยchmod +xความยุ่งยากเล็กน้อยมันบอกว่าใช้umaskมูลค่าและตามค่านั้นเพิ่มxให้กับทุกคนที่ได้รับอนุญาต
ดังนั้นหากumaskสภาพแวดล้อมของฉันคือ0002:
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
มันจะเพิ่มxให้กับผู้ใช้ (เจ้าของ) กลุ่มและอื่น ๆ ในสถานการณ์นี้ (ซึ่งเป็นสถานการณ์เริ่มต้นสำหรับระบบส่วนใหญ่) มันเป็นเหมือนchmod ugo+xหรือเหมือนกับchmod a+xหรือในรูปแบบ verbose:
chmod u+x,g+x,o+x
คุณสามารถมองเห็นการเชื่อมต่อระหว่างchmod u+x,g+x,o+xและเอาท์พุทของumask -S?
ตอนนี้ขอเปลี่ยนumaskเชลล์ปัจจุบันเป็น0003:
$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
อย่างที่คุณเห็นตอนนี้มีเพียงเจ้าของและกลุ่มเท่านั้นที่จะได้รับบิตเรียกใช้งานไม่ใช่ผู้อื่น มันหมายถึงการchmod +xอยู่ในขณะนี้เท่ากับหรือchmod u+x,g+xchmod ug+x
จะเกิดอะไรขึ้นถ้าฉันเรียกใช้chmod +wไฟล์หลังจากตั้งค่าumaskเป็น0003?
เช่นเดียวกับก่อนมันจะมีผลต่อuserและgroupของไฟล์เพราะ 3 ยังเอาสิทธิ์ในการเขียน (2)
มันมีผลเช่นเดียวกันเมื่อคุณลบบิตเช่นchmod -w:
$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx
chmod u+x จะทำให้ไฟล์นั้นสามารถเรียกใช้งานได้สำหรับผู้ใช้ของคุณ (มันจะเพิ่มเฉพาะไฟล์สำหรับผู้ใช้ของคุณแม้ว่าเจ้าของไฟล์นั้นจะสามารถเรียกใช้งานได้หรือ "อื่น ๆ ")
chmod +xหรือchmod a+x('บิตทั้งหมดที่เรียกใช้งานได้บวก') ทำให้ทุกคนสามารถเรียกใช้ไฟล์ได้
ถ้าคุณทำสิ่งนี้กับไดเรกทอรีมันทำให้ไดเรกทอรีนั้นค้นหาได้ นั่นคือคุณสามารถแสดงรายการเนื้อหาของไดเรกทอรีที่คุณได้รับอนุญาต + x
chmod u+x fileหมายถึงการเพิ่มบิตที่ปฏิบัติการให้กับเจ้าของไฟล์ในขณะที่ไม่สนใจumask(mod ของคุณจะถูกตั้งค่าไม่มีคำถาม)
chmod +x fileหมายถึงการเพิ่มบิตที่ใช้งานได้ให้กับเจ้าของกลุ่มและอื่น ๆ ในขณะที่พิจารณาumask(การตรวจสอบครั้งแรกด้วยumaskแล้วใช้ mods มันอาจมีผลกระทบที่แตกต่างกันขึ้นอยู่กับค่าของ umask)
มาสร้างสองไฟล์กันเถอะ:
$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:45 file2
ตอนนี้ผมตั้งumaskที่ "111" umask 111เพื่อลบบิตปฏิบัติการ:
$ chmod u+x file1
$ chmod +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug 5 01:47 file2
ตามที่คุณเห็นการchmodละเว้นumaskและ file1 มีบิตที่สามารถเรียกใช้งานได้สำหรับเจ้าของ แต่อันที่สองไม่ได้ทำอะไรเพราะมันกำลังพิจารณาคุณค่าของ umask