Benutzer-Werkzeuge

Webseiten-Werkzeuge


k6:k6.7:start

6.7 Instruktionen CHOWN, CHMOD und CHGRP

Mit ausgewählten Eigenschaften der Klasse Stat können Sie Informationen zum Eigentümer, zur Gruppe oder zu den Rechten einer bestimmten Datei oder eines Verzeichnisses auslesen:

Dim sFilePath As String = User.Home &/ "nwm.xml"

Print "User  = " & Stat(sFilePath).User
Print "Group = " & Stat(sFilePath).Group
Print "Permissions = " & Stat(sFilePath).Auth 

Ergebnisse:

User  = hans
Group = hans
Permissions = rwSrw-r--

Seit Gambas 3.1 stehen Ihnen die drei Instruktionen CHOWN, CHGRP und CHMOD zur Verfügung, um den Eigentümer, die Gruppe oder die Rechte einer Datei zu ändern. Das gelingt aber nur dann, wenn Sie als Benutzer über die entsprechenden Rechte verfügen.

6.7.1 CHOWN

Die Instruktion CHOWN (change owner) ändert den Eigentümer einer Datei oder eines Verzeichnisses:

CHOWN Path TO User 
  • Path ist der Datei- oder Verzeichnis-Pfad,
  • User ist der Name des neuen Eigentümers.

6.7.1.1 CHGRP

Die Instruktion CHGRP (change group) ändert die Gruppenzugehörigkeit einer Datei oder eines Verzeichnisses:

CHGRP Path TO Group 
  • Path ist der Datei- oder Verzeichnis-Pfad,
  • Group ist der Name der neuen Gruppe.

6.7.1.2 CHMOD

Beachten Sie, dass die Instruktion CHMOD bis zur (stabilen) Gambas-Version 3.11.3 beim Setzen des Sticky-Bits teilweise fehlerhaft ist. Eine Korrekturmöglichkeit wird im vorgestellten Projekt angegeben. Der Fehler wurde mit Commit d44b4bd7f in der Entwicklerversion beseitigt.

Die Instruktion CHMOD (change mode) ändert die Berechtigungen (Mode) einer Datei oder eines Verzeichnisses:

CHMOD Path TO Mode 
  • Path ist der Datei- oder Verzeichnis-Pfad,
  • Mode ist ein String (Rechte-String), der den neuen Modus beschreibt.

Unter http://gambaswiki.org/wiki/cat/mode oder https://wiki.ubuntuusers.de/Rechte können Sie die Mode-Syntax nachlesen. Darüber hinaus wird jedes weggelassene oder unbekannte Zeichen – wie zum Beispiel ein Punkt im folgenden 2. Fall – im Mode-String ignoriert.

Auf diese Weise können Sie ausgewählte Datei-Berechtigungen ändern. Im ersten Fall werden alle Rechte neu gesetzt. Im zweiten Fall wird nur das Recht „Ausführen“ für den Benutzer gesetzt, alle anderen bleiben erhalten:

CHMOD sScriptPath To "r-x------"		' 1. Fall
CHMOD sScriptPath To "..x......"		' 2. Fall

6.7.1.3 Syntax Datei-Rechte

Die Dateimodi werden durch einen neunstelligen (Rechte-)String beschrieben, der dem gleichen Schema folgt wie beim Shell-Befehl 'ls':

PositionZeichenBeschreibung
1-Der Dateibesitzer kann sie nicht lesen.
1rDer Dateibesitzer kann sie lesen.
2-Der Dateibesitzer kann sie nicht schreiben.
2wDer Dateibesitzer kann sie schreiben.
3-Der Dateibesitzer kann sie nicht ausführen.
3xDer Dateibesitzer kann sie ausführen.
3SDer Dateibesitzer kann sie nicht ausführen und das Bit 'setuid' ist gesetzt.
3sDer Dateibesitzer kann sie ausführen und das Bit' setuid' ist gesetzt.
4-Die Dateigruppe kann sie nicht lesen.
4rDie Dateigruppe kann sie lesen.
5-Die Dateigruppe kann sie nicht schreiben.
5wDie Dateigruppe kann sie schreiben.
6-Die Dateigruppe kann sie nicht ausführen.
6xDie Dateigruppe kann sie ausführen.
6SDie Dateigruppe kann sie nicht ausführen und das Bit 'setgid' ist gesetzt.
6sDie Dateigruppe kann sie ausführen und das Bit 'setgid' ist gesetzt.
7-Andere Benutzer können die Datei nicht lesen.
7rAndere Benutzer können die Datei lesen.
8-Andere Benutzer können nicht in die Datei schreiben.
8wAndere Benutzer können in die Datei schreiben.
9-Andere Benutzer können die Datei nicht ausführen.
9xAndere Benutzer können die Datei ausführen.
9TAndere Benutzer können die Datei nicht ausführen und das 'Sticky'-Bit ist gesetzt.
9tAndere Benutzer können die Datei ausführen und das 'Sticky'-Bit ist gesetzt.

Tabelle 6.7.1.3.1 : Syntax Datei-Rechte

6.7.2 Exkurs: Zeitangaben für Dateien

Das Auslesen von Zeitangaben (alle Zeiten in UTC) einer Datei gelingt über die Eigenschaften Stat.LastAccess (atime) oder Stat.Change (ctime) oder Stat.Modified (mtime, Synonym: Stat.Time).

Eine Änderung des Zeitstempels einer Datei ist offensichtlich in Gambas gegenwärtig nicht vorgesehen. Das gelingt aber recht einfach mit einer Exec-Instruktion:

' Gambas class file
 
Public sFilePath As String = Temp("date_time")
 
Public Sub _new()  
  File.Save(sFilePath, "Empty ...")  
End
 
Public Sub btnSetTime_Click()
 
  Dim aExecCommand As String[]
  Dim sDateTimeTZ, sDate, sTime, sTimeZone As String
 
  sDate = "2018-07-31"
  sTime = "18:17:34"
  sTimeZone = "+0000" ' UTC: "+0200" for Germany
  sDateTimeTZ = sDate & " " & sTime & " " & sTimeZone
 
  aExecCommand = ["touch", "-d", sDateTimeTZ, sFilePath]  
  Exec aExecCommand
 
End
 
Public Sub btnGetTime_Click()
 
  txbDateTime.Text = Subst("FileDateTime = &1 &2", Stat(sFilePath).Time, "(UTC)")
  Print Stat(sFilePath).LastModified
 
End

B1

Abbildung 6.7.2.1: Änderung Zeitstempel einer Datei

6.7.3 Zeitangabe CreationTime (crtime)

Ein Problem stellt das Auslesen der Zeit dar, welche die Zeit repräsentiert, zu der die Datei erzeugt wurde (CreationTime oder crtime). Das hat mehrere Gründe:

  • Die Zeit crtime wird nur bei Ext4-Systemen gespeichert.
  • Die Zeit crtime ist genau genommen der Zeitstempel des Inodes im Dateisystem und nicht der Datei.
  • Mit sudo tune2fs -l $(df . –output=source | grep ^/) | grep „Inode size:“ kann der Wert 'Inode size' bestimmt werden und muss größer als 256 sein, weil sonst die zusätzlichen Informationen zu crtime nicht in der Datei gespeichert werden können.
  • Viele Editoren legen geänderte Dateien stets als neue Datei ab und überschreiben die originale CreationTime (crtime). Erfreuliche Ausnahme ist in diesem Zusammenhang OpenLibre.
  • Beim Kopieren einer Datei erhält die Kopie als Erzeugungszeit crtime die Zeit beim Kopieren.

Unter https://tecadmin.net/file-creation-time-linux/ finden Sie weitere Informationen und die Angabe von zwei Befehlszeilen, um in einer Konsole den Wert für die CreationTime einer Datei zu ermitteln.

Hier das Ergebnis nach der Eingabe der zwei o.a. Befehlszeilen für eine Datei nach einem Kopieren von einer BackUp-Festplatte:

Inode: 3672254   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 1948083613    Version: 0x00000000:00000001
User:  1000   Group:  1000   Size: 72674
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 144
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5a9fd64f:454b4df4 -- Wed Mar  7 13:08:47 2018
 atime: 0x5b618f64:831a72b8 -- Wed Aug  1 12:45:56 2018
 mtime: 0x599b1a34:5ea40700 -- Mon Aug 21 19:36:52 2017
crtime: 0x5a9fd64f:454b4df4 -- Wed Mar  7 13:08:47 2018 
Size of extra inode fields: 32
EXTENTS:
(0-17):14719769-14719786

Welchen Wert die Kenntnis der Zeitangabe CreationTime (crtime) für Sie hat, müssen Sie selbst entscheiden, da die ModifyTime (mtime) in o.a. Fall weit vor der CreationTime liegt!

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k6/k6.7/start.txt · Zuletzt geändert: 15.10.2018 (Externe Bearbeitung)

Seiten-Werkzeuge