it-swarm.com.de

So erhalten Sie die Berechtigungsnummer per Zeichenfolge: -rw-r - r--

Ich muss das gleiche chmod einstellen, wie bekomme ich die Nummer für - rw-r - r -?

56
cnd

Bitte überprüfen Sie die Ausgabe von 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: -
54
lik
r=4
w=2
x=1

in jeder Gruppe. Ihr Beispiel ist 6 (r + w = ​​4 + 2) 4 (r = 4) 4 (r = 4).

69
Jan Marek

Die Nummer des Vollberechtigungsmodus ist eine 4-stellige Oktalzahl, obwohl Sie meistens nur die 3 niedrigstwertigen Ziffern verwenden. Addieren Sie jede Gruppe in der Berechtigungszeichenfolge und nehmen Sie r = 4, w = 2, x = 1. Zum Beispiel:

 421421421
-rwxr-xr--
 \_/        -- r+w+x = 4+2+1 = 7
    \_/     -- r+_+x = 4+0+1 = 5
       \_/  -- r+_+_ = 4+0+0 = 4     => 0754

Jetzt sehen Sie manchmal einen seltsamen Bescheidenheitsring wie diesen:

-rwsr-xr-T

Die vierte Ziffer wird auf die x-Bits im Bescheidenring überladen. Wenn Sie dort einen anderen Buchstaben als x sehen, bedeutet dies, dass eines dieser "speziellen" vierstelligen Bits gesetzt ist. Wenn der Buchstabe in Kleinbuchstaben geschrieben ist, ist x für diese Position auch eingestellt. Die Übersetzung für diese lautet also:

   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

Die Standardmethode unter UNIX, um zu zeigen, dass eine Zahl oktal ist, besteht darin, sie mit einer Null zu beginnen. GNU chmod nimmt an, dass der von Ihnen angegebene Modus ohnehin oktal ist, aber es ist am sichersten, die Null voranzustellen.

Wenn Sie am Ende des Bescheidenheitsringes einen + Sehen:

-rwxr-xr-x+

dann bedeutet dies, dass die Datei über erweiterte Berechtigungen verfügt und Sie mehr als chmod benötigen. Schauen Sie sich zunächst die Befehle setfacl und getfacl an.

27
Jander

Dies könnte unkompliziert sein

-bash-3.2$ stat --format=%a sample_file
755
10
Sridhar

Berechtigungen sind nur die Zeichenfolgendarstellung einer Binärzahl.
Der 0 Wird hauptsächlich durch - Dargestellt, der Rest sind Buchstaben.

basic

Für Grundberechtigungen:

Konvertieren Sie alle - Und Caps S oder T in 0, Der Rest sollte 1 Darstellen.
Die so konstruierte resultierende Binärzahl sollte als Oktal gedruckt werden:

$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644

In einer Zeile:

$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644

Die Fehlerkorrektur und das Erkennen der anderen 3 Bits 1000, 2000 Oder 4000 Erfordern etwas mehr Code:

#!/bin/bash

Say     (){ printf '%s\n' "[email protected]"; }
SayError(){ a=$1; shift; printf '%s\n' "[email protected]" >&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))"
3
Isaac

Ruft die Liste der Dateien mit ihren Zeichenfolgen- und Hex-Berechtigungswerten ab. Setzen Sie% N am Ende, damit die Ausgabe einfacher in Excel gestellt werden kann.

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'

Dadurch werden alle Dateien mit einer bestimmten Hex-Berechtigung gefunden.

find /tmp1 -user root -perm 644
0
MacGyver