ฉันเห็นการเปลี่ยนแปลงรหัสในที่ทำงานซึ่งค่าโหมดถูกเปลี่ยนจาก 777 เป็น 0777 เพื่อให้ nfs setattr ทำงาน ความแตกต่างใน 2 ค่าคืออะไร?
mkdir()
ที่เกี่ยวข้องเช่น 0777 เทียบกับ 777
ฉันเห็นการเปลี่ยนแปลงรหัสในที่ทำงานซึ่งค่าโหมดถูกเปลี่ยนจาก 777 เป็น 0777 เพื่อให้ nfs setattr ทำงาน ความแตกต่างใน 2 ค่าคืออะไร?
mkdir()
ที่เกี่ยวข้องเช่น 0777 เทียบกับ 777
คำตอบ:
หากคุณกำลังส่งพวกเขาไปที่chmod
(โปรแกรมบรรทัดคำสั่ง) จะไม่มีความแตกต่าง แต่ในโปรแกรม C หรือคล้ายกัน0777
คือ octal (สามชุดสามบิต 1 ซึ่งเป็นสิ่งที่คุณตั้งใจ) ในขณะที่777
เป็นทศนิยมและมันเป็นรูปแบบบิตที่แตกต่างกันมาก ( chmod
จะตีความอาร์กิวเมนต์ตัวเลขใด ๆ เป็นฐานแปดจึงไม่จำเป็นต้องมีศูนย์นำหน้า)
0777 (ฐานแปด) == ไบนารี0b 111 111 111
== สิทธิ์rwxrwxrwx
(== ทศนิยม511
)
777 (ฐานสิบ) == ไบนารี0b 1 100 001 001
== การอนุญาตsr----x--x
(== ฐานแปด1411
)
chmod
คำสั่งจะถูกตีความว่าเป็นเลขฐานแปดเสมอ การใช้chmod 888
จะทำให้เกิดข้อผิดพลาด
chmod
ตีความอาร์กิวเมนต์ตัวเลขเป็นฐานแปดโดยไม่คำนึงถึงคำนำหน้า (แต่จริงๆแล้วตัวเลขนั้นไม่มีฟังก์ชั่นเพียงแค่ตัวเลขหรือมากกว่าบิต)
1777
คุณต้องเขียน01777
?
1777
เขียนเป็น01777
C (หรือคุณสามารถเขียน1023
ซึ่งเป็นตัวเลขเดียวกันในทศนิยม แต่อย่า :-)
บิตแรกใช้สำหรับบิตที่เหนียวhttp://en.wikipedia.org/wiki/Sticky_bit
หากคุณตั้งค่าการอนุญาตโดยใช้ 4 หลักตัวแรกจะตั้งค่าหรือลบบิตนี้
คำตอบที่น่าสนใจคือ:
0700
และ700
ตามที่อธิบายไว้ในคำตอบอื่น ๆ00700
และ0700
(ไดเรกทอรี)อย่างน้อยในกรณีของ GNU coreutils รุ่น chmod ซึ่งเป็นค่าเริ่มต้นบน Linux
ดูตัวอย่างนี้:
$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul 8 09:27 mydir
นี่คือเพื่อหลีกเลี่ยงการลบโดยไม่ตั้งใจของ setuid / setgid บิตสำหรับไดเรกทอรี สำหรับรายละเอียดโปรดดูเอกสารchmod
ในระบบ Linux มีการอนุญาตให้ใช้ได้สองประเภท:
ในการอนุญาตไฟล์เรากำหนดสิทธิ์สำหรับไฟล์และโฟลเดอร์:
สิทธิ์คือ:
ในขณะที่อยู่ในการอนุญาตพิเศษสามประเภทคือ:
ในคำถามของคุณคุณถามว่าอะไรคือความแตกต่างดังนั้นจึงไม่มีความแตกต่างใด ๆchmod 777 and 0777
เนื่องจากมีno any octal value
ค่าที่แสดงเป็นศูนย์ (0)