ฉันพยายามที่จะเข้าใจการอนุญาตที่ดีขึ้นดังนั้นฉันจึงทำ "แบบฝึกหัด" นี่คือลำดับของคำสั่งที่ฉันใช้กับเอาต์พุตที่เกี่ยวข้อง:
$ 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--
(กลุ่มและอื่น ๆ ไม่ได้รับอนุญาตให้ดำเนินการ)