Wie kann ich die Berechtigungen einer Datei im Oktalformat erhalten?

Wie kann ich die Berechtigungen einer Datei im Oktalformat erhalten?

... und wie kann ich sie einstellen? Funktioniert das für Verzeichnisse genauso? Was passiert mit Sticky Bit und diesem "exotischeren" Zeug?

Antwort1

Wie vorgeschlagen von@Gustave, das statProgramm (das Teil ist vonGNU-Kerndienstprogrammeund im Wesentlichen ein "Linux"-Programm aus diesem Grund, obwohl Sie vielleicht eineHafenoderPaketin BSD-Systemen) kann dies tun. Der Befehl

stat -c "%a %n"Datei

erzeugt eine formatierte Liste mit nur dem Oktalmodus (einschließlich der codierten Setuid-, Setgid- und Sticky-Bits) und dem Dateinamen. Laut der Dokumentation

  • %aist die "Zugriffsrechte in Oktal"
  • %nist der "Dateiname"

Nehmen wir zum Beispiel dieses Skript:

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

Sie erhalten möglicherweise eine Ausgabe wie diese myscript /usr/bin /usr/bin/X /usr/bin/bsd-write:

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

Sie erhalten 3 oder 4 Oktalziffern für dieZugangsrechte, je nachdem, ob die Setuid usw. gesetzt sind. Die führende (vierte) Ziffer kombiniert

  • 4 (Setuid)
  • 2 (Gruppenkennung festlegen)
  • 1 (klebrig)

DerZugangsrechtezurückgegeben ohne die zusätzlichen Bits, die vom Systemaufruf zurückgegeben werdenstatdie angeben, ob der Name ein Verzeichnis ( S_IFDIR) oder eine Datei ( S_IFREG) ist. Alle diese Bits passen übrigens in einen 16-Bit-Wert, da es in den 1970er und frühen 1980er Jahren Unix-Implementierungen gab – undStandardwerte. Weil dasZugangsrechteden Dateityp ausschließen, können Sie diesen Wert unverändert im chmodBefehl verwenden (und auch diechmodFunktion), weil es oktal ist, und diechmodBefehl erwartet das. Sogar die setuid usw. funktionieren mit Oktal, obwohl Dinge wie

chmod u+s /usr/bin/whatever

sind besser lesbar.

Zum Weiterlesen

Antwort2

stat -c "%a %n" <file>

scheint zu funktionieren - aber mehr weiß ich nicht.

Antwort3

Bekommen: wie Gustave geantwortet hat.

Einstellung:

chmod 0755 myfile

Dasselbe gilt für Verzeichnisse. Beim Sticky Bit sollte die erste Ziffer 1 sein. Zum Sticky Bit:https://askubuntu.com/a/432703

verwandte Informationen