วิธีรับหมายเลขสิทธิ์ตามสตริง: -rw-r - r--


53

ฉันต้องตั้งค่า chmod เดียวกัน, วิธีรับหมายเลขสำหรับ-rw-r - r-- ?


2
โดยทางโปรแกรมหรือคุณเพียงแค่ต้องรู้วิธีการแปล
mattdm

ฉันขี้เกียจที่จะแปล :) สถิติดีสำหรับฉัน
cnd

9
คุณหมายถึงอะไรโดย“ ตั้งค่าเดียวกัน” คุณมีไฟล์ที่มีสิทธิ์ -rw-r - r-- อยู่แล้วและต้องการตั้งค่าไฟล์อื่นด้วยสิทธิ์เดียวกันหรือไม่? จากนั้นดูว่าการchmodสนับสนุนของคุณ--reference:“ --reference = RFILE ใช้โหมด RFILE แทนค่า MODE” หรือไม่ chmod คน
จัดการ


คุณใช้ Unix อะไร?
Kusalananda

คำตอบ:


53

กรุณาตรวจสอบ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: -

11
stat -c %a /path/to/fileเป็นเคล็ดลับมายากลที่คุณต้องการ
fromnaboo

และคำตอบนั้นอยู่ในบล็อกการเข้าถึงที่นั่นด้านบน ไฟล์ที่เขาใช้ในตัวอย่างมีการตั้งค่าการเข้าถึงที่แตกต่างจากนั้นเป็นหนึ่งในคำถาม หนึ่งในคำถามจะได้แสดงให้เห็นการเข้าถึง: (0644 / -rw-r - r--)
nycynik


26

หมายเลขโหมดการอนุญาตแบบเต็มคือหมายเลขฐานแปด 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คำสั่งสำหรับการเริ่ม



3

สิทธิ์เป็นเพียงการแสดงสตริงของเลขฐานสอง เป็นตัวแทนโดยส่วนใหญ่ที่เหลือเป็นตัวอักษร
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))"

0

รับรายการไฟล์ที่มีค่าสตริงและค่าอนุญาตเป็นเลขฐานสิบหก วาง% 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

-2

สำหรับไฟล์ที่เกิดขึ้นพร้อมกันทั้งหมดใน Dir

-bash-4.1$ chmod -R 640 *

สำหรับไฟล์ทั้งหมด

-bash-4.1$ chmod 640 *
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.