ฉันพยายามที่จะเข้าใจการอนุญาตที่ดีขึ้นดังนั้นฉันจึงทำ "แบบฝึกหัด" นี่คือลำดับของคำสั่งที่ฉันใช้กับเอาต์พุตที่เกี่ยวข้อง:
$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1
นั่นสมเหตุสมผลเพราะเรารู้ว่าการอนุญาตไฟล์เริ่มต้นคือ666( rw-rw-rw-) และสิทธิ์เริ่มต้นไดเรกทอรีคือ777( rwxrwxrwx) ถ้าฉันลบค่า umask จากสิทธิ์เริ่มต้นเหล่านี้ฉันมี
666-022=644, rw-r--r--สำหรับfile1ดังนั้นมันเชื่อมโยงกันกับการส่งออกก่อนหน้า;
777-022=755, rwx-r-x-r-xสำหรับdir1, ยังสอดคล้องกัน
แต่ถ้าผมเปลี่ยน umask จาก022ไป021มันไม่ได้เป็นอะไรมากไป
นี่คือตัวอย่างสำหรับไฟล์:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-เป็นแต่มันควรจะเป็น646 666-021=645ดังนั้นจึงไม่ทำงานตามการคำนวณก่อนหน้า
นี่คือตัวอย่างสำหรับไดเรกทอรี:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-คือ756, 777-021=756. ดังนั้นในกรณีนี้ผลลัพธ์จะสอดคล้องกับการคำนวณก่อนหน้า
ฉันอ่านผู้ชาย แต่ฉันไม่พบอะไรเกี่ยวกับพฤติกรรมนี้
มีใครอธิบายได้ไหม
คำอธิบาย
ตามที่ระบุไว้ในคำตอบ: umaskค่าของมันไม่ได้ถูกลบออกทางคณิตศาสตร์จากไดเรกทอรีเริ่มต้นและการอนุญาตของไฟล์
การดำเนินการที่เกี่ยวข้องอย่างมีประสิทธิภาพเป็นการรวมกันของตัวดำเนินการบูลีน AND (&) และ NOT (!) ได้รับ:
R = การอนุญาตที่ได้รับ
D = การอนุญาตเริ่มต้น
U = umask ปัจจุบัน
R = D &! U
ตัวอย่างเช่น:
666 &! 0053 = 110 110 110 &
! 000 101 011
110 110 110 &
111 010 100
= 110 010 100 = 624 = rw - wr--
777 &! 0022 = 111 111 111 &
! 000 010 010
111 111 111 &
111 101 101
= 111 101 101 = 755 = rwxr - xr-x
เคล็ดลับ
วิธีง่ายๆในการรู้สิทธิ์ที่ได้อย่างรวดเร็ว (อย่างน้อยก็ช่วยฉันด้วย) คือคิดว่าเราสามารถใช้ค่าทศนิยม 3 ค่า:
r = 100 = 4
w = 010 = 2
x = 001 = 1
การอนุญาตจะเป็นการรวมกันของ 3 ค่าเหล่านี้
" "ใช้เพื่อระบุว่าไม่อนุญาตการให้สิทธิ์แบบสัมพัทธ์
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
ดังนั้นหาก umask ปัจจุบันของฉันคือ0053ฉันรู้ว่าฉันลบ(4+1) สิทธิ์การอ่านและการดำเนินการจากกลุ่มและการเขียนและการดำเนินการ(2+1)จากผลอื่น ๆ
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(กลุ่มและอื่น ๆ ไม่ได้รับอนุญาตให้ดำเนินการ)