स्ट्रिंग द्वारा अनुमति संख्या कैसे प्राप्त करें: -rw-r - r--


53

मुझे एक ही chmod सेट करने की आवश्यकता है, कैसे आरआर-आर - आर-- के लिए नंबर प्राप्त करें ?


2
प्रोग्रामेटिकली या क्या आपको सिर्फ अनुवाद करने की आवश्यकता है?
mattdm

मैं अनुवाद करने के लिए आलसी हूँ :) मेरे लिए पल एक पल के लिए ठीक है।
CND

9
क्या आप "एक ही सेट" से क्या मतलब है? क्या आपके पास पहले से ही एक फ़ाइल है -rw-r - r-- अनुमति और उसी अनुमतियों के साथ कोई अन्य फ़ाइल सेट करना चाहते हैं? फिर देखें कि क्या आपका chmodसमर्थन करता है --reference: "- संदर्भ = शख्स मोडे मानों के बजाय रिस्तेर्स मोड का उपयोग करता है" - मैन चामोद।
मैनेटवर्क


यूनिक्स आप क्या उपयोग कर रहे हैं?
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--


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 को अंत में रखना ताकि आउटपुट को एक्सेल में आसान बनाया जा सके।

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

एक डार में सभी समवर्ती फ़ाइलों के लिए

-bash-4.1$ chmod -R 640 *

सभी फाइलों के लिए

-bash-4.1$ chmod 640 *
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.