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


53

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


2
Programmatisch oder müssen Sie nur übersetzen können?
Mattdm

Ich bin faul zu übersetzen :) stat ist für einen Moment in Ordnung für mich.
CND

9
Was meinst du mit "gleich setzen"? Haben Sie bereits eine Datei mit der Berechtigung -rw-r - r-- und möchten eine andere Datei mit denselben Berechtigungen festlegen? Dann prüfen Sie, ob Ihre chmodUnterstützung --referenceFolgendes beinhaltet: "--reference = RFILE benutze RFILEs Modus anstelle von MODE-Werten" - man chmod.
Manatwork


Welches Unix benutzt du?
Kusalananda

Antworten:


53

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: -

11
stat -c %a /path/to/fileist der Zaubertrick, den Sie brauchen.
fromnaboo

und die Antwort ist oben im Zugriffsblock. Die Datei, die er im Beispiel verwendet hat, hat einen anderen Zugriff als die fragliche. derjenige in der Frage hätte gezeigt, Access: (0644 / -rw-r - r--)
Nycynik

65
r=4
w=2
x=1

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


26

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.


10

Dies könnte einfach sein

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

3

Berechtigungen sind nur die Zeichenfolgendarstellung einer Binärzahl.
Das 0wird meistens durch dargestellt -, der Rest sind Buchstaben.

Basic

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))"

0

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

-2

Für alle gleichzeitigen Dateien in einem Verzeichnis

-bash-4.1$ chmod -R 640 *

Für alle Dateien

-bash-4.1$ chmod 640 *
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.