Ich muss das gleiche chmod setzen, wie bekomme ich die Nummer für -rw-r - r-- ?
chmod
Unterstützung --reference
Folgendes beinhaltet: "--reference = RFILE benutze RFILEs Modus anstelle von MODE-Werten" - man chmod.
Ich muss das gleiche chmod setzen, wie bekomme ich die Nummer für -rw-r - r-- ?
chmod
Unterstützung --reference
Folgendes beinhaltet: "--reference = RFILE benutze RFILEs Modus anstelle von MODE-Werten" - man chmod.
Antworten:
Bitte überprüfen Sie die stat
Ausgabe:
# 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
ist der Zaubertrick, den Sie brauchen.
Die Nummer für den Vollzugriffsmodus ist eine 4-stellige Oktalzahl. Meistens verwenden Sie jedoch nur die 3 niedrigstwertigen Ziffern. 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
Manchmal sieht man einen seltsamen Modestring wie diesen:
-rwsr-xr-T
Die vierte Ziffer ist auf die x
Bits im Modestring überladen. Wenn Sie einen anderen Buchstaben als x
dort sehen, bedeutet dies, dass eines dieser "speziellen" Bits mit der vierten Ziffer gesetzt ist, und wenn der Buchstabe in Kleinbuchstaben geschrieben ist, x
wird auch für diese Position gesetzt. Die Übersetzung für dieses ist 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 standardmäßige UNIX-Methode, um zu zeigen, dass eine Zahl oktal ist, besteht darin, sie mit einer Null zu beginnen. GNU chmod
geht davon aus, dass der von Ihnen angegebene Modus ohnehin oktal ist, aber es ist am sichersten, der Null voran zu stellen.
Wenn Sie +
am Ende des Modestrings ein sehen:
-rwxr-xr-x+
Das bedeutet dann, dass die Datei erweiterte Berechtigungen hat und Sie mehr als benötigen chmod
. Schauen Sie in die setfacl
und getfacl
Befehle, für den Anfang.
Berechtigungen sind nur die Zeichenfolgendarstellung einer Binärzahl.
Das 0
wird meistens durch dargestellt -
, der Rest sind Buchstaben.
Für grundlegende Berechtigungen:
Rechne alle -
und Caps S
oder To T
um 0
, der Rest sollte das darstellen 1
.
Die resultierende so konstruierte 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
Fehlerkorrektur und Erkennung der anderen 3 Bits 1000
, 2000
oder 4000
benötigen Sie etwas mehr Code:
#!/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))"
Ruft die Liste der Dateien mit ihren String- und Hex-Berechtigungswerten ab. Setzen Sie% N am Ende, um die Ausgabe in Excel zu vereinfachen.
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 hexadezimalen Berechtigung gefunden.
find /tmp1 -user root -perm 644