ฉันต้องตั้งค่า chmod เดียวกัน, วิธีรับหมายเลขสำหรับ-rw-r - r-- ?
chmod
สนับสนุนของคุณ--reference
:“ --reference = RFILE ใช้โหมด RFILE แทนค่า MODE” หรือไม่ chmod คน
ฉันต้องตั้งค่า chmod เดียวกัน, วิธีรับหมายเลขสำหรับ-rw-r - r-- ?
chmod
สนับสนุนของคุณ--reference
:“ --reference = RFILE ใช้โหมด RFILE แทนค่า MODE” หรือไม่ chmod คน
คำตอบ:
กรุณาตรวจสอบstat
ผลลัพธ์:
# stat .xsession-errors
File: ‘.xsession-errors’
Size: 839123 Blocks: 1648 IO Block: 4096 regular file
Device: 816h/2070d Inode: 3539028 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ lik) Gid: ( 1000/ lik)
Access: 2012-05-30 23:11:48.053999289 +0300
Modify: 2012-05-31 07:53:26.912690288 +0300
Change: 2012-05-31 07:53:26.912690288 +0300
Birth: -
stat -c %a /path/to/file
เป็นเคล็ดลับมายากลที่คุณต้องการ
r=4
w=2
x=1
ในทุกกลุ่ม ตัวอย่างของคุณคือ 6 (r + w = 4 + 2) 4 (r = 4) 4 (r = 4)
หมายเลขโหมดการอนุญาตแบบเต็มคือหมายเลขฐานแปด 4 หลักแม้ว่าโดยส่วนใหญ่คุณจะใช้เพียงตัวเลข 3 หลักที่สำคัญน้อยที่สุดเท่านั้น เพิ่มแต่ละกลุ่มในสตริงสิทธิ์โดยใช้ r = 4, w = 2, x = 1 ตัวอย่างเช่น:
421421421
-rwxr-xr--
\_/ -- r+w+x = 4+2+1 = 7
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+_ = 4+0+0 = 4 => 0754
ตอนนี้บางครั้งคุณจะเห็นตัวดัดแปลงแบบนี้:
-rwsr-xr-T
หลักที่สี่ถูกโหลดมากเกินไปไปยังx
บิตในการตรวจสอบ หากคุณเห็นตัวอักษรอื่นนอกเหนือx
จากนั้นก็หมายความว่าหนึ่งในสี่หลัก "พิเศษ" เหล่านี้ถูกตั้งค่าและถ้าตัวอักษรเป็นตัวพิมพ์เล็กแล้วx
สำหรับตำแหน่งนั้นก็ถูกตั้งค่า ดังนั้นการแปลสำหรับอันนี้คือ:
4 2 1
421421421
-rwsr-xr-T
+ + + -- s+_+T = 4+0+1 = 5
\_/ -- r+w+s = 4+2+1 = 7 (s is lowercase, so 1)
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+T = 4+0+0 = 4 (T is uppercase, so 0) => 05754
วิธี UNIX มาตรฐานเพื่อแสดงว่าตัวเลขเป็นฐานแปดคือเริ่มต้นด้วยศูนย์ GNU chmod
จะถือว่าโหมดที่คุณให้เป็นฐานแปดอยู่แล้ว แต่ก็ปลอดภัยที่สุดที่จะเติมศูนย์
ในที่สุดหากคุณเห็น+
การสิ้นสุดของการกลั่นกรอง:
-rwxr-xr-x+
นั่นหมายความว่าไฟล์มีสิทธิ์เพิ่มเติมและคุณจะต้องมากกว่าchmod
นั้น มองเข้าไปในsetfacl
และgetfacl
คำสั่งสำหรับการเริ่ม
นี่อาจจะตรงไปตรงมา
-bash-3.2$ stat --format=%a sample_file
755
สิทธิ์เป็นเพียงการแสดงสตริงของเลขฐานสอง เป็นตัวแทนโดยส่วนใหญ่ที่เหลือเป็นตัวอักษร0
-
สำหรับสิทธิ์พื้นฐาน:
แปลง-
และหมวกS
หรือT
ไปส่วนที่เหลือควรจะเป็นตัวแทน0
เลขฐานสองที่เป็นผลลัพธ์ที่สร้างขึ้นดังนั้นควรพิมพ์เป็นเลขฐานแปด:1
$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644
ในหนึ่งบรรทัด:
$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644
แก้ไขข้อผิดพลาดและการตรวจสอบอื่น ๆ 3 บิต1000
, 2000
หรือ4000
ต้องมีรหัสบางอย่างเพิ่มเติม:
#!/bin/bash
Say (){ printf '%s\n' "$@"; }
SayError(){ a=$1; shift; printf '%s\n' "$@" >&2; exit "$a"; }
e1="Permission strings should have 10 characters or less"
e2="Assuming first character is the file type"
e3="Permission strings must have at least 9 characters"
e4="Permission strings could only contain 'rwxsStT-'"
a=$1
((${#a}>10)) && SayError 1 "$e1"
((${#a}==10)) && { Say "$e2"; a=${a#?}; }
((${#a}<9)) && SayError 2 "$e3"
a=${a//[^rwxsStT-]}
((${#a}<9)) && SayError 3 "e4"
b=${a//[ST-]/0}; b=${b//[!0]/1}; c=0
[[ $a =~ [sS]......$ ]] && c=$((c|4))
[[ $a =~ [sS]...$ ]] && c=$((c|2))
[[ $a =~ [tT]$ ]] && c=$((c|1))
printf '%04o\n' "$((2#$b|c<<9))"
รับรายการไฟล์ที่มีค่าสตริงและค่าอนุญาตเป็นเลขฐานสิบหก วาง% N ที่ส่วนท้ายเพื่อให้เอาต์พุตสามารถใส่ลงใน Excel ได้ง่ายขึ้น
stat -c "%A %a %N" *
-rw-r--r-- 644 `file2.txt'
-rw-r--r-- 644 `file3.txt'
-rw-r--r-- 644 `file4.txt'
-rw-r--r-- 644 `file.txt'
drwxr-xr-x 755 `hsperfdata_root'
-rw-r--r-- 644 `junk.txt'
drwx------ 700 `vmware-root'
นี่จะค้นหาไฟล์ทั้งหมดที่มีการอนุญาตเลขฐานสิบหกที่เฉพาะเจาะจง
find /tmp1 -user root -perm 644
สำหรับไฟล์ที่เกิดขึ้นพร้อมกันทั้งหมดใน Dir
-bash-4.1$ chmod -R 640 *
สำหรับไฟล์ทั้งหมด
-bash-4.1$ chmod 640 *