เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
เหตุใด chmod จึงใช้ฐานแปด: base-8 ชวเลขและที่มาของมัน
· พื้นหลัง
chmod ยูนิกซ์ การควบคุมการเข้าถึง
ฐานแปดจะดูไม่แน่นอนจนกว่าคุณจะสังเกตเห็นว่าตัวเลขหนึ่งหลักมีสามบิตพอดี โพสต์นี้อธิบายความพอดีระหว่างฐาน 8 และ rwx พฤติกรรมยุค DEC ที่ทำให้ฐานแปดเป็นไปตามธรรมชาติ และรูปแบบการนำหน้าเป็นศูนย์
ทำไม 755 และไม่ใช่ 493 — โหมดเดียวกันในรูปแบบทศนิยมไม่มีความหมายต่อใครเลย และมีเหตุผลที่ทำให้ชนะฐานแปด
ค่าทศนิยม 493 และฐานแปด 755 สามารถแทนจำนวนเต็มเดียวกันได้ แต่ 755 เปิดเผยการจัดกลุ่มสิทธิ์โดยตรง แต่ละหลักที่แสดงจะสอดคล้องกับหนึ่งคลาส และแต่ละคลาสมีตัวเลือกไบนารีสามตัวเท่านั้น เครื่องคิดเลขทำงานจากเลขคณิตที่พอดี ไม่จำเป็นต้องมีเรื่องราวทางประวัติศาสตร์เพื่อแสดงให้เห็นว่าเหตุใดจึงสามารถอ่านเลขฐานแปดได้สำหรับโหมด rwx
ป้อน 755 และเอาต์พุตจะกลายเป็น rwxr-xr-x เจ้าของได้รับ 7 กลุ่ม 5 และ 5 อื่นๆ การแปลงจำนวนเต็มเดียวกันให้เป็นป้ายกำกับทศนิยมที่ไม่ได้จัดกลุ่มจะซ่อนขอบเขตของคลาสเหล่านั้น สิ่งนี้จะอธิบายประโยชน์ของสัญกรณ์ภายในโมเดลที่นำไปใช้งาน โดยไม่อ้างว่าเหตุใดทุกคำสั่งหรือแพลตฟอร์มภายนอกจึงนำมาใช้
สามบิตต่อหลัก - วิธีที่ฐาน 8 จัดกลุ่มไบนารีออกเป็นสามเท่าซึ่งเรียงกันทุกประการกับ r, w และ x
ตัวเลขฐานแปดหลักครอบคลุมค่าศูนย์ถึงเจ็ด ซึ่งเป็นผลรวมทั้งหมดที่มีอยู่จากสามบิตอิสระที่ถ่วงน้ำหนัก 4, 2 และ 1 การแมปชุดค่าผสมอย่างชัดเจน: 0 คือ ---, 1 คือ --x, 2 คือ -w-, 3 คือ -wx, 4 คือ r--, 5 คือ r-x, 6 คือ rw- และ 7 คือ rwx
เลขธรรมดาสามหลักจึงสอดคล้องกับเจ้าของ กลุ่ม และอื่นๆ สำหรับ 640 ไบนารีสามเท่าคือ 110, 100 และ 000 ให้ผล rw-r----- เมทริกซ์ช่องทำเครื่องหมายทำให้มองเห็นการจัดกลุ่มเดียวกันได้โดยไม่ต้องใช้สัญกรณ์ไบนารี การเปลี่ยนสิทธิ์หนึ่งรายการจะเปลี่ยนเฉพาะผลรวมของคลาสที่เกี่ยวข้องและตำแหน่งสัญลักษณ์ที่เกี่ยวข้องเท่านั้น
พฤติกรรมด้านฮาร์ดแวร์ — เครื่อง DEC ที่ใช้ระบบปฏิบัติการ Unix รุ่นแรกๆ ได้รับการบันทึกไว้ในรูปแบบฐานแปด ดังนั้นโปรแกรมเมอร์จึงคิดไว้แล้ว
แหล่งที่มาของพื้นที่เก็บข้อมูลไม่ได้สร้างสายเลือดฮาร์ดแวร์สำหรับสัญลักษณ์ฐานแปด ประกอบด้วยมาสก์บิต JavaScript กฎพาร์เซอร์ การทดสอบ และการควบคุมอินเทอร์เฟซผู้ใช้ ไม่ใช่เอกสารประกอบสำหรับโปรเซสเซอร์รุ่นก่อนหน้าหรือสภาพแวดล้อมการพัฒนา การกล่าวอ้างใดๆ ที่ว่าวัฒนธรรมเครื่องจักรเฉพาะทำให้เกิดการนำไปใช้จะต้องมีหลักฐานทางประวัติศาสตร์นอกเหนือจากไฟล์ที่ได้รับอนุญาตสำหรับบทความนี้
คำอธิบายที่ได้รับการสนับสนุนจากแหล่งที่มานั้นเป็นเลขคณิตแทน สามบิตมีแปดชุดที่เป็นไปได้ ดังนั้นหนึ่งฐานแปดหลักจับหนึ่ง rwx สามเท่าโดยไม่ข้ามขอบเขตคลาส ความสัมพันธ์นั้นสามารถแสดงให้เห็นได้ในผลลัพธ์ของเครื่องคิดเลขทุกตัว มันยังคงมีผลอยู่หรือไม่ว่าในที่สุดแล้วเรื่องราวในอดีตที่กว้างขึ้นจะถูกจัดหาจากแหล่งข้อมูลหลักหรือไม่
ประวัติฮาร์ดแวร์ไม่ได้ถูกกำหนดโดยแหล่งเก็บข้อมูล
parser ยอมรับตัวเลขฐานแปดหนึ่งถึงสี่หลัก และตัดคำนำหน้า 0o เผื่อเลือก ดังนั้น 644, 0644 และ 0o644 ทั้งหมดจึงได้ค่าเดียวกัน ตัวเลข 8 และ 9 ถูกปฏิเสธโดยมีคำอธิบายเฉพาะ เนื่องจากตัวเลขทั้งสองไม่ใช่เลขฐานแปด และข้อความที่มีรูปแบบไม่ถูกต้องจะไม่ถูกเดาในโหมดที่ถูกต้อง
เลขนัยสำคัญนำหน้าจะมีบิตพิเศษมากกว่าคลาสสามัญอื่น น้ำหนัก 4, 2 และ 1 แสดงถึง setuid, setgid และ Sticky ในขณะที่ตัวเลขต่อท้ายยังคงรักษาเจ้าของ กลุ่ม และอื่นๆ ฟอร์แมตเตอร์จะแสดงตัวเลขสามหลักเมื่อไม่ได้ตั้งค่าบิตพิเศษ และสี่หลักเมื่อจำเป็นต้องใช้ เว้นแต่จะมีการร้องขอเอาต์พุตสี่หลักอย่างชัดเจน
ยอมรับแบบฟอร์มนำหน้าและตัวเลขบิตพิเศษในตัวแยกวิเคราะห์นี้
การแปลง 0644 ด้วยสามเท่าจะได้ 6, 4 และ 4 ในไบนารี่ ได้แก่ 110, 100 และ 100 ดังนั้นผลลัพธ์เชิงสัญลักษณ์จึงเป็น rw-r--r-- เจ้าของอ่านและเขียน ในขณะที่กลุ่มและคนอื่นๆ อ่านอย่างเดียว ทุกข้อมูลพร็อพเพอร์ตี้ได้มาจากจำนวนเต็มเดียวกัน ทำให้สามารถตรวจสอบความสอดคล้องได้โดยตรง
การย้อนกลับกระบวนการให้ผลลัพธ์เดียวกัน เริ่มต้นด้วย rw-r--r-- เพิ่ม 4 และ 2 สำหรับเจ้าของ รับ 4 สำหรับกลุ่ม และรับ 4 สำหรับผู้อื่น ตัวเลขคือ 644 ศูนย์นำหน้าเผื่อเลือกที่ parser ยอมรับจะไม่เพิ่มบิตพิเศษ มันทำให้ค่าตัวเลขไม่เปลี่ยนแปลง
เหตุใดเลขฐานสิบหกจึงไม่เคยเข้ามาแทนที่ - เลขฐานสิบหกสองหลักไม่ได้แบ่งออกเป็นสามคลาสอย่างหมดจด
เลขฐานสิบหกสามารถเข้ารหัสจำนวนเต็มได้ แต่ขอบเขตหลักสี่บิตไม่สอดคล้องกับคลาสสิทธิ์แบบสามบิต นั่นคือการเปรียบเทียบทางคณิตศาสตร์ ไม่ใช่หลักฐานว่าสัญกรณ์ใดที่ผู้คนนิยมใช้ในอดีต เครื่องคิดเลขไม่ยอมรับอินพุตที่เป็นเลขฐานสิบหก และเอาต์พุตได้รับการออกแบบโดยใช้ตัวเลขฐานแปด ตำแหน่งสัญลักษณ์ และชื่อตัวควบคุมแบบบูลีน
ตัวอย่างเช่น สิทธิ์ทั่วไปใช้พื้นที่เก้าบิต โดยธรรมชาติจะมองเห็นเป็นกลุ่มฐานแปดสามกลุ่ม การจัดกลุ่มบิตเดียวกันออกเป็นชิ้นสี่บิตจะแบ่งคลาส rwx ข้ามขอบเขตหลัก ซึ่งทำให้เลขฐานสิบหกมีความโปร่งใสน้อยลงสำหรับจุดประสงค์ในการแสดงนี้ แต่ไม่มีการอ้างสิทธิ์เกี่ยวกับการนำไปใช้ มาตรฐาน หรือประวัติบรรทัดคำสั่งที่ตามมาจากการสังเกตเพียงอย่างเดียว
การเปรียบเทียบเลขฐานสิบหกถือเป็นเลขคณิต ไม่ใช่หลักฐานของการยอมรับในอดีต
ค่าคงที่ที่ตั้งชื่อจากภาษาอื่นหรืออินเทอร์เฟซระบบอยู่นอกการใช้งาน JavaScript นี้ พื้นที่เก็บข้อมูลใช้คุณสมบัติเชิงอธิบายของตัวเอง เช่น OwnerRead, groupWrite, otherExecute, setuid, setgid และ Sticky ชื่อเหล่านี้ทำให้เลขคณิตภายในสามารถอ่านได้โดยไม่ต้องยืนยันความเท่าเทียมกับส่วนหัวภายนอกหรือ API
อยู่ภายในสิ่งที่เครื่องมือสามารถตรวจสอบได้: ค่าตัวเลขของโหมดที่ให้มา คลาสบูลีน การแสดงสัญลักษณ์ คำอธิบาย และข้อความคำสั่งที่สร้างขึ้น หน้าเบราว์เซอร์ไม่ได้ตรวจสอบแพลตฟอร์มเป้าหมายหรือคอมไพล์ค่าคงที่ดั้งเดิม ใครก็ตามที่แปลผลลัพธ์เป็นอินเทอร์เฟซการเขียนโปรแกรมอื่นควรศึกษาเอกสารประกอบที่เชื่อถือได้ของอินเทอร์เฟซนั้นแยกต่างหาก
ค่าคงที่ที่มีชื่อ C อยู่นอกการใช้งาน JavaScript นี้
ฐานแปดเหมาะกับเครื่องคิดเลขนี้ เนื่องจากแต่ละคลาสสิทธิ์มีปริมาณสามบิต และแต่ละหลักฐานแปดมีสามบิตพอดี การโต้ตอบสามารถมองเห็นได้ ย้อนกลับได้ และทดสอบได้ง่าย บิตพิเศษใช้ตัวเลขที่สี่ซึ่งมีรูปแบบ 4, 2 และ 1 เหมือนกัน ในขณะที่สัญลักษณ์ s, S, t และ T จะรักษารายละเอียดตำแหน่งการดำเนินการไว้
ใช้สัญกรณ์เป็นตัวช่วยทบทวนมากกว่าคาถา แบ่งค่าออกเป็นเจ้าของ กลุ่ม อื่นๆ และคำนำหน้าพิเศษใดๆ ตรวจสอบตัวอักษรและกล่อง แล้วตัดสินใจความเหมาะสมจากกรรมสิทธิ์จริงและหลักฐานภาระงาน เลขคณิตอธิบายการจัดกลุ่มอย่างสมบูรณ์โดยไม่มีการอ้างสิทธิ์ที่ไม่ได้รับการสนับสนุนเกี่ยวกับประวัติฮาร์ดแวร์ มาตรฐาน หรือนโยบายสากล