Wie lautet die Syntax der LoggedFS-Konfigurationsdatei?
Die offizielle Dokumentation enthielt nur Gebrauchsanweisungen für das loggedfs
Befehl und ein Beispiel für eine Konfigurationsdatei. Ok, es ist XML, aber was sind all die möglichen Tags und Attribute und was bedeuten sie?
Akzeptierte Antwort:
Ich habe Config.cpp
durchstöbert , die Datei, die für das Parsen der Konfiguration verantwortlich ist. Die Beispielkonfiguration erfasst die verfügbaren Optionen ziemlich gut – es gibt nicht sehr viele
Wenn ich mich auf „die Beispielausgabe“ unten beziehe, spreche ich von dieser Zeile (zufällig aus der Beispielseite gezogen):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Das Root-Tag ist <loggedFS>
. Es hat zwei optionale Attribute:
- logEnabled ist ein String – „true“ bedeutet, dass eigentlich Protokollinformationen ausgegeben werden sollten; alles andere deaktiviert die gesamte Protokollierung. Standardmäßig „true“, da dies der springende Punkt des Programms ist
- printProcessName ist eine Zeichenfolge – „true“ bedeutet, dass die Protokollausgabe den Prozessnamen enthält, alles andere bedeutet, dass dies nicht der Fall ist. Standardmäßig „true“. In der Beispielausgabe
kded [kdeinit]
ist der Prozessname
Die einzigen untergeordneten Knoten, um die es sich kümmert, sind <include>
und <exclude>
. Im Beispiel gruppieren sie diese unter <includes>
und <excludes>
Blöcke, aber diese werden vom Parser ignoriert (ebenso wie alle anderen Knoten außer <include>
und <exclude>
).
Natürlich <include>
Regeln bewirken, dass die Protokollzeile ausgegeben wird, wenn sie übereinstimmen, während <exclude>
Linien bewirken, dass dies nicht der Fall ist. Im Falle einer Überschneidung <exclude>
überschreibt <include>
. Normalerweise benötigen Sie mindestens einen <include>
Regel für ein zu protokollierendes Ereignis, aber eine Ausnahme ist, wenn 0 <include>
vorhanden sind Regeln — dann werden alle Ereignisse protokolliert, selbst wenn es übereinstimmende <exclude>
gibt Linien .
Sowohl <include>
und <exclude>
Nehmen Sie die gleichen Attribute:
- Erweiterung ist ein regulärer Ausdruck, der mit dem absoluten Pfad der Datei abgeglichen wird, auf die zugegriffen/geändert/was auch immer (
extension
ist ein ziemlich schlechter Name, aber ich denke, das ist die übliche Verwendung). Zum Beispiel, wenn Sietouch /mnt/loggedfs/some/file
berühren , der reguläre Ausdruck inextension
müsste (teilweise) mittouch /mnt/loggedfs/some/file
übereinstimmen - uid ist ein String, der entweder eine ganze Zahl oder
*
enthält . Die Regel stimmt nur dann mit einer bestimmten Operation überein, wenn der Eigentümer des Prozesses, der die Operation verursacht hat, die angegebene Benutzer-ID (*
bedeutet natürlich, dass jede Benutzer-ID übereinstimmt). In der Beispielausgabe1000
ist die uid - Aktion ist die spezifische Art der Operation, die auf dem Dateisystem ausgeführt wird. In der Beispielausgabe
getattr
ist die Aktion. Die möglichen Aktionen sind:- Zugriff
- chmod
- chown
- getattr
- verlinken
- mkdir
- mkfifo
- mknod
- offen
- offen-schreibgeschützt
- open-readwrite
- open-writeonly
- lesen
- readdir
- Leselink
- umbenennen
- rmdir
- Statistiken
- symlink
- kürzen
- Verknüpfung aufheben
- Zeit
- Utimes
- schreiben
- retname ist ein regulärer Ausdruck. Wenn der Rückgabecode der tatsächlichen Dateisystemoperation, die von LoggedFS ausgeführt wird, 0 ist, wird der reguläre Ausdruck mit der Zeichenfolge
SUCCESS
abgeglichen . Ein Rückgabecode ungleich Null bewirkt, dass er mitFAILURE
abgeglichen wird . Dies sind die einzig möglichen Werte, also werden Sie höchstwahrscheinlich entwederSUCCESS
fest codieren ,FAILURE
, oder verwenden Sie.*
wenn du beides willst. In der BeispielausgabeSUCCESS
ist derretname
Anders bei <loggedFS>
Attribute, diese haben keine Standardwerte. Auch wenn der Parser unbekannte Attribute erkennt und Fehler ausgibt, erkennt er keine fehlenden Attribute. Wenn Sie also ein Attribut vergessen, verwendet er nicht initialisierten Speicher.