ความแตกต่างระหว่างchmod u+x
และเพียงchmod +x
คืออะไร? ฉันได้เห็นแบบฝึกหัดมากมายที่บอกว่าใช้u+x
เพื่อทำให้สคริปต์ทำงานได้ อย่างไรก็ตามการละเว้นสิ่งu
นั้นดูเหมือนจะไม่มีผลใด ๆ
ความแตกต่างระหว่างchmod u+x
และเพียงchmod +x
คืออะไร? ฉันได้เห็นแบบฝึกหัดมากมายที่บอกว่าใช้u+x
เพื่อทำให้สคริปต์ทำงานได้ อย่างไรก็ตามการละเว้นสิ่งu
นั้นดูเหมือนจะไม่มีผลใด ๆ
คำตอบ:
หน้าคนของchmod
ปกที่
วิธีการที่chmod u+x somefile
จะให้เฉพาะเจ้าของสิทธิ์ดำเนินการไฟล์ในขณะที่เป็นเช่นเดียวกับchmod +x somefile
chmod 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+x
chmod 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