Ich muss das gleiche chmod setzen, wie bekomme ich die Nummer für -rw-r - r-- ?
chmodUnterstützung --referenceFolgendes 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-- ?
chmodUnterstützung --referenceFolgendes beinhaltet: "--reference = RFILE benutze RFILEs Modus anstelle von MODE-Werten" - man chmod.
Antworten:
Bitte überprüfen Sie die statAusgabe:
# 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/fileist 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 xBits im Modestring überladen. Wenn Sie einen anderen Buchstaben als xdort sehen, bedeutet dies, dass eines dieser "speziellen" Bits mit der vierten Ziffer gesetzt ist, und wenn der Buchstabe in Kleinbuchstaben geschrieben ist, xwird 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 chmodgeht 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 setfaclund getfaclBefehle, für den Anfang.
Berechtigungen sind nur die Zeichenfolgendarstellung einer Binärzahl.
Das 0wird meistens durch dargestellt -, der Rest sind Buchstaben.
Für grundlegende Berechtigungen:
Rechne alle -und Caps Soder To Tum 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, 2000oder 4000benö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