ทำไมถึงใช้ `chmod 644` แทนที่จะเป็น 'chmod u = rw, go = r, …`?


38

ฉันได้ทำงานกับ * ระวังเมื่อสองสามปีที่ผ่านมาและสิ่งหนึ่งที่ฉันไม่สามารถใช้งานได้คือการอนุญาตเลขฐานแปดในรหัส มีเหตุผลอื่นนอกเหนือจากความยาวบรรทัดที่จะชอบchmod 644 ...มากกว่าchmod u=rw,go=r ...หรือไม่

PS: ฉันไม่ได้มองหาคำอธิบายของการอนุญาตแปดด้าน ฉันรู้ว่ามันทำงานอย่างไรและอธิบายได้ดีในคู่มือ ฉันถามว่าทำไมเลขฐานแปดถึงเป็นที่ต้องการมากกว่าแบบที่มนุษย์อ่านได้มากกว่า

คำตอบ:


40

การใช้รหัสฐานแปดมีข้อดีสองประการที่ฉันสามารถนึกได้

  1. สั้นกว่าพิมพ์ง่ายกว่า
  2. บางสิ่งที่เข้าใจพวกเขาเท่านั้นและหากคุณใช้เป็นประจำคุณจะไม่เกาหัว (หรือเรียกใช้เอกสาร) เมื่อคุณพบเจอ เช่นคุณต้องใช้เลขฐานแปดสำหรับchmodใน Perl หรือ C

บางครั้งยูทิลิตี้ที่เรียบง่ายจริงๆจะไม่จัดการเวอร์ชัน "เป็นมิตร" โดยเฉพาะอย่างยิ่งใน userlands ที่ไม่ใช่ของ GNU

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

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


1
การกล่าวว่าchmodใน Perl หรือ C จำเป็นต้องใช้การแสดงฐานแปดไม่ใช่ข้อได้เปรียบอย่างแท้จริงเนื่องจากมีตัวแทนอยู่แล้วตั้งแต่แรก
n0pe

@ MaxMackie: มันเป็นข้อได้เปรียบที่คุณใช้ ฉันจะชี้แจง
Derobert

18

เดาฉันใช้ octal มานานเกินไปแล้ว

7 คือ rwx (ทำทุกอย่างกับมัน) 5 คือ rx (ต้องอ่านเพื่อเรียกใช้งาน), 6 คือ wr (ไฟล์ข้อมูลใด ๆ ที่คุณต้องแก้ไข), 4 คือ r (เราจะให้คุณดู) 0 คือ - (ขออภัยไม่มีอะไรให้ดูที่นี่) และลำดับคือฉันเราทุกคน เหล่านี้คือชุดค่าผสมพื้นฐาน

# 755 ฉันสามารถเปลี่ยนและใช้งานได้ทุกคนสามารถเรียกใช้ได้

644 ฉันสามารถเปลี่ยนได้ทุกคนสามารถอ่านได้

444 อ่านอย่างเดียวสำหรับทุกคนพวกเราผ่านที่นี่

500 ฉันสามารถดำเนินการได้ไม่ต้องการให้มันเปลี่ยนไป

สำหรับฉันมันสั้นไปยังจุดที่ 9 ตัวอักษรและสเป็คไฟล์และย้ายไป


ดีฐานแปด (ฐาน -8) ไม่ใช่ฐานสิบหก (ฐาน -16)
derobert

ใช่ครึ่งหนึ่งเป็นเลขฐานสิบหก <grin>
Fiasco Labs

เหมือนกันที่นี่ฉันพบว่าเลขฐานแปดอ่านง่ายกว่ารุ่นข้อความ ...
Brian Knoblauch

13

ฉันไม่เคยสนุกกับการเป็นตัวแทนแปดครั้งฉันมักจะrwxr-xr-xสังเกตุตรงๆเพราะมันง่ายกว่าสำหรับฉัน อย่างไรก็ตามจากสิ่งที่ฉันรวบรวมการแทนฐานแปดมีอยู่เพื่อทำให้เราจำได้ง่ายขึ้น (ฉันไม่เห็นวิธีการทำงาน)

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

น่าเสียดายที่ฉันจำตารางนี้ได้แล้ว:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1

8
ฉันเรียนรู้ว่าการใช้เลขฐานสองสำหรับแต่ละชุด 3 ดังนั้น rw ------- จะเป็น (110) (000) (000), ซึ่งคือ (6) (0) (0) rwxr-xr-x จะเป็น (111) (101) (101) ดังนั้น (7) (5) (5)
Rob

4
หลักเหตุผลที่เป็นตัวแทนฐานแปดมีอยู่เพราะเห็นว่าเป็นวิธีเดิมระบบได้รับอนุญาตยูนิกซ์เป็นโปรแกรมจากซี 4 หลักเลขฐานแปด (จำคนพิเศษเช่น 1777 สำหรับ/tmpรวมทั้ง bit เหนียว) ใช้เวลา 12 บิตขนาดที่สะดวกบนปิดด้วยชั้น, โดยเฉพาะ PDP-8 หากพวกเขาไปด้วยเลขฐานสิบหกการทำแผนที่ตามธรรมชาติของชุดสิทธิ์หนึ่งชุดต่อหนึ่งฐานสิบหกจะต้องใช้เครื่องคำ 16 บิตซึ่งไม่ใช่ PDP ทั้งหมด มันจะต้องสูญเสีย 3 บิตหรือต้องการให้พวกเขาคิดค้นการใช้งานสำหรับบิตเหล่านั้นซึ่งอาจจะมีความซับซ้อน Unix perms ที่ไม่มีประโยชน์จริง
Warren Young

⁺¹ไปที่ @Rob btw แน่นอนหลังจากนั้นการคำนวณจำนวนจริงจากการเป็นตัวแทนไบนารีเป็น combinatorics ขั้นพื้นฐานและคุณไม่จำเป็นต้องจำเกี่ยวกับการมี "octal" เพราะจำนวนสูงสุด(เช่น 111b)จะไม่เกิน 7
Hi-Angel

ตารางนี้ทำให้ชัดเจนมาก เยี่ยมมาก !!!
Little Roys

6

ฉันคิดว่าเหตุผลเป็นอีกครั้ง - ประวัติศาสตร์ ตอนแรกค่าฐานแปดเป็นเพียงค่าเดียว คนที่เป็นสัญลักษณ์มาในภายหลัง

ฉันชอบสัญลักษณ์ที่ดีกว่า โดยเฉพาะถ้าคุณต้องการเปลี่ยนค่าที่มีอยู่โดยไม่ต้องแตะส่วนอื่น ๆ

เช่นเดียวกับที่chmod -R u=rwx,g-w+X,o=-ทำในฐานแปด ...


3

โปรดทราบว่าโหมดฐานแปดอาจลบบิต setuid และ setgid ในบางระบบ

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2ถูกเก็บรักษาไว้)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

( 2กลายเป็น0)

หากคุณต้องการที่จะเปลี่ยนไฟล์หรือไดเรกทอรีสิทธิ์ของมันสามารถจะดีกว่าที่จะเพียงแค่ระบุบิตที่คุณต้องการเปลี่ยนแปลง (เช่นchmod o= dirหรือchmod o-rwx dirในตัวอย่างข้างต้น)


2

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

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

ทำไมทุกคนตั้งxบิตแบบนั้น เพราะมันยากที่จะทำไม่ได้จนกว่าคุณจะใช้รูปแบบช่วยในการจำสำหรับโหมด พิจารณาว่าคุณต้องการรีเซ็ตการอนุญาต/var/wwwและคุณไม่ได้เรียกใช้ CGI แบบเก่าดังนั้นxควรลบบิต อย่างไรก็ตามxบิตมีจุดประสงค์อื่นในไดเรกทอรี ดังนั้นคุณต้องทำอะไรบางอย่าง (ตามroot) เช่น:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

อย่างไรก็ตามหากคุณใช้แบบฟอร์มช่วยในการจำคุณสามารถให้ "สูตร":

chmod -R a=rwX /var/www

ซึ่งเป็นรูปแบบสั้น ๆchmod -R ugo=rwX /var/www(บรรลุเดียวกัน แต่เส้นทางที่แตกต่างกันchmod -R a-x,a+rwX /var/www)

แต่มีอีกสิ่งหนึ่งที่น่าสนใจมากกว่าซึ่งไม่สามารถทำได้ด้วยโหมดเลขฐานแปด คุณไม่สามารถปรับuserหรือgroupหรือotherปิดบังทีละรายการด้วยฟอร์มฐานแปด

ในระยะสั้น: มันเหมือนกับการเปรียบเทียบมีดผ่าตัด (ช่วยในการจำ) และมีดทำครัวที่คมชัด (ฐานแปด) ... แต่คุณยังต้องรู้บิตของโหมดฐานแปดด้วยเหตุผลอื่น :)

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


0

เมื่อคุณต้องแก้ไขการอนุญาตของไฟล์ตลอดเวลาคุณจะต้องขอบคุณ 3 ตัวอักษร บ่อยครั้งที่ฉันใช้+หรือ-เวอร์ชันเพื่อเปลี่ยนการอนุญาต

ตัวอย่างเช่นฉันสร้าง PHP, Python หรือสคริปต์อื่นในโฟลเดอร์ apache ของฉัน chmod a+xคือทั้งหมดที่ฉันทำดังนั้นจึงสามารถเรียกใช้ ฉันอ่านมันว่า "all plus execute" ตอนนี้ฉันรู้แล้วว่ามันใช้งานได้และฉันต้องการเพียง 3 ตัวอักษรเท่านั้น

บางครั้งฉันก็ใช้ 644 และ 755 โดยอัตโนมัติ ฉันแค่คิดว่ามัน644หมายถึงไฟล์755หมายถึงสคริปต์


0

มันเหมาะอย่างยิ่งกับการตั้งค่า umask ซึ่งมักจะได้รับในการเขียนเลขฐานแปด (ในpamหรือfstab)


0

ฉันขอแนะนำว่าเหตุผลสำคัญอย่างหนึ่งก็คือการเป็นตัวแทนฐานแปดตรงกับสิ่งที่คุณเห็นอย่างใกล้ชิดls -l(หรือค่อนข้างจะทำเมื่อคุณเปลี่ยนใจระหว่างเลขฐานแปดกับฐานสอง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.