อะไรคือความแตกต่างระหว่าง“ chmod + x” และ“ chmod 755”?


61

เมื่อมันมาถึงการทำปฏิบัติการไฟล์สิ่งที่เป็นความแตกต่างระหว่างchmod 755และchmod +xและเมื่อผมจะใช้ที่? ฉันใช้ไปchmod +xแล้วและเพิ่งอ่านบางสิ่งและมันใช้chmod 755แล้วและฉันไม่สามารถบอกได้ว่าดีกว่าที่จะใช้chmod 755หรือchmod +xไม่


9
chmod +xตั้งค่าการปฏิบัติธงทั้งหมดโดยไม่ต้องเปลี่ยนสิทธิ์อื่น ๆ chmod 755กำหนด rwxr-xr-x
ravery


5
@ravery: สวัสดี! คุณพบส่วนความคิดเห็นซึ่งเป็นพื้นที่ที่อุทิศให้กับการวิจารณ์และขอคำชี้แจง เพื่อให้คำตอบ / คำตอบคุณควรใช้ส่วน "คำตอบ" ด้านล่าง (มองหาปุ่ม "โพสต์คำตอบของคุณ" สีแดงขนาดใหญ่) หวังว่าจะช่วย!
Lightness Races ที่ Orbit

คำตอบ:


144

เวอร์ชั่นสั้น:

เพื่อให้สามารถเปรียบเทียบได้เราควรดูจากมุมมองเดียวกันดังนั้น:

  • chmod +xเท่ากับchmod ugo+x(ขึ้นอยู่กับumaskมูลค่า)
  • chmod 755 เท่ากับ chmod u=rwx,go=rx

คำอธิบาย:

ประการแรกคุณควรรู้ว่า:

  1. + หมายถึงเพิ่มการอนุญาตนี้ไปยังการอนุญาตอื่น ๆ ที่ไฟล์มีอยู่แล้ว
  2. = หมายถึงเพิกเฉยต่อการอนุญาตทั้งหมดตั้งค่าอย่างถูกต้องตามที่ฉันให้ไว้

    • ดังนั้นทั้งหมด "อ่านเขียนดำเนินการบิตเหนียว suid และ guid" จะถูกละเว้นและเฉพาะคนที่ให้ไว้จะถูกตั้งค่า
  3. 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จะไม่มีผลกระทบใด ๆ อีกต่อไป
  • มันไม่ได้สัมผัส mods อื่น ๆ (สิทธิ์)
  • คุณสามารถใช้u+xเพื่อเพิ่มบิตที่สามารถเรียกใช้งานได้ให้กับเจ้าของเท่านั้น

การใช้งาน755คุณกำลังระบุ:

  • 7 -> u=rwx(4 + 2 + 1 สำหรับเจ้าของ)
  • 5 -> g=rx(4 + 1 สำหรับกลุ่ม)
  • 5 -> o=rx(4 + 1 สำหรับคนอื่น ๆ )

ดังนั้นchmod 755เป็นเหมือน: หรือchmod u=rwx,g=rx,o=rxchmod u=rwx,go=rx

ป้อนคำอธิบายรูปภาพที่นี่


15
การเพิ่มที่สำคัญมาก: เมื่อใช้chmod 755คุณตั้งค่าบิตเหล่านั้นและคุณยังล้างบิตsuid / sgid / sticky ทั้งหมด (ที่อาจมีอยู่) (สำหรับตัวอย่าง: ไม่เคยchmod 755 /tmp) 755 ควรถูกคิดเป็น 0755 เช่นชุด octal ชุดแรกของบิตนั้นตั้งเป็น 0
Olivier Dulac

1
เกือบจะสมบูรณ์แบบดังนั้นก่อนวัยอันควร +1 (คุณได้รับตรานั้นจากฉัน
:)

@OlivierDulac ขอบคุณฉันไม่ต้องการรับรายละเอียดมากเกินไป แต่ฉันจะอัปเดตคำตอบ ...
Ravexina

1
ฉันคิดว่าฉันเพิ่งเข้าใจว่าสิทธิ์ทำงานอย่างไรขอบคุณ!
Fabich


37

chmod +x เพิ่มสิทธิ์ดำเนินการสำหรับผู้ใช้ทั้งหมดในสิทธิ์ที่มีอยู่

chmod 755กำหนด755สิทธิ์สำหรับไฟล์

755 หมายถึงสิทธิ์แบบเต็มสำหรับเจ้าของและอ่านและดำเนินการอนุญาตสำหรับผู้อื่น


7

อีกวิธีหนึ่งที่จะมองมัน (ซึ่งผมพบว่าง่ายต่อการเข้าใจ) คือว่าchmod +xคือการตั้งค่าสิทธิ์ที่ค่อนข้างในขณะที่chmod 755มีการตั้งค่าพวกเขาอย่างแน่นอน

หลังจากที่chmod 755มีวิ่งบนไฟล์สิทธิ์ของมันจะเป็น 755 rwxr-xr-xหรือ

chmod +xจะใช้สิทธิ์ที่มีอยู่และเพิ่มสิทธิ์ดำเนินการไปยังไฟล์


6

ฉันแนะนำให้อ่านหน้าคนchmodสำหรับรายละเอียด คุณเพิ่งเห็นโหมดการทำงานที่แตกต่างกันสองโหมดที่พร้อมใช้งานด้วยคำสั่ง chmod เพื่อทำงานที่เหมือนกันของการเปลี่ยนแปลงการอนุญาต

โหมด Octal ใช้ตัวเลขและตั้งค่าการอนุญาตทั้งหมดของไฟล์ โหมดตัวละครกำลังใช้ตัวอักษรและโดยทั่วไปจะใช้เพียงแค่ปรับเปลี่ยนการอนุญาตที่มีอยู่

chmod 755ตั้งค่าrwxr-xr-xในขณะที่ chmod +xปรับสิทธิ์เพื่อให้เจ้าของกลุ่มและโลกทั้งหมดมีสิทธิ์เพิ่มที่สามารถเรียกใช้งานได้ สมมติว่าสิทธิ์ในแฟ้มเริ่มต้นของrwxr--r--มันจะปรับให้สิทธิ์เดียวกันเป็น 755 rwxr-xr-xของ


5

ความแตกต่างคือสิ่งที่สิทธิ์ได้รับการตั้งค่าและโหมดที่คุณใช้ในการตั้งค่าพวกเขา

เมื่อ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

3

ความแตกต่างที่สำคัญอย่างหนึ่งคือ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> และตระหนักว่าคุณต้องระบุบิตทั้งหมดไม่ใช่แค่เดลต้า


1

นอกจากคำตอบที่สวยงามเหล่านี้ฉันต้องการพูดถึงความแตกต่างเล็กน้อย แต่อาจสำคัญ คำสั่งเทียบเท่ากับ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 น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.