FSEvents-Flags erklärt: Jedes Bit dekodiert
Jedes FSEvents-Flag-Bit auf der Platte mit Wert, den Namen in FSEventsParser und mac_apt und wie man Created, Renamed, ItemCloned oder EndOfTransaction liest.
Kurzfassung. Das Flag-Feld ist ein 32-Bit-Bitsatz in Little-Endian. So gelesen ist Created gleich 0x00000001, Removed 0x00000002, Renamed 0x00000008, Modified 0x00000010, und der Objekttyp steht in den hohen Bits (File 0x00800000, Folder 0x01000000). FSEventsParser liest dieselben vier Bytes als Big-Endian, daher sind seine Konstanten byteweise vertauscht (Created = 0x01000000), bei gleichen Namen. Keiner dieser Werte entspricht Apples API-Werten kFSEventStreamEventFlag*.
Die Tabelle
Die Werte sind der als Little-Endian gelesene u32 (Konvention von mac_apt). Die Spalte FSEventsParser zeigt dasselbe Bit in dessen Big-Endian-Konvention.
| Bit (LE) | FSEventsParser (BE) | Name (FSEventsParser / mac_apt) | Bedeutung |
|---|---|---|---|
0x00000001 | 0x01000000 | Created | Objekt erstellt |
0x00000002 | 0x02000000 | Removed | Objekt entfernt |
0x00000004 | 0x04000000 | InodeMetaMod | Inode-Metadaten geändert (z. B. Modus, Zeitstempel) |
0x00000008 | 0x08000000 | Renamed / RenamedOrMoved | Umbenannt oder verschoben |
0x00000010 | 0x10000000 | Modified | Inhalt geändert |
0x00000020 | 0x20000000 | Exchange | Mit einem anderen Objekt getauscht (atomares Speichern) |
0x00000040 | 0x40000000 | FinderInfoMod | Finder-Info geändert |
0x00000080 | 0x80000000 | FolderCreated | Ordner erstellt |
0x00000100 | 0x00010000 | PermissionChange | Rechte oder Eigentümer geändert |
0x00000200 | 0x00020000 | ExtendedAttrModified / XAttrModified | Erweitertes Attribut gesetzt oder geändert |
0x00000400 | 0x00040000 | ExtendedAttrRemoved / XAttrRemoved | Erweitertes Attribut entfernt |
0x00001000 | 0x00100000 | DocumentRevisioning / DocumentRevision | Versionsspeicher für Dokumente beteiligt |
0x00004000 | 0x00400000 | ItemCloned | APFS-Klon (Copy-on-Write-Kopie), ab High Sierra |
0x00080000 | 0x00000800 | LastHardLinkRemoved | Letzter Hardlink auf einen Inode entfernt |
0x00100000 | 0x00001000 | HardLink | Objekt ist ein Hardlink |
0x00400000 | 0x00004000 | SymbolicLink | Objekt ist ein symbolischer Link |
0x00800000 | 0x00008000 | FileEvent / File | Objekt ist eine Datei |
0x01000000 | 0x00000001 | FolderEvent / Folder | Objekt ist ein Ordner |
0x02000000 | 0x00000002 | Mount | An diesem Pfad wurde ein Volume eingehängt |
0x04000000 | 0x00000004 | Unmount | Von diesem Pfad wurde ein Volume ausgehängt |
0x20000000 | 0x00000020 | EndOfTransaction | Markiert das Ende einer Gruppe zusammengehöriger Änderungen |
Andere Bits haben keine dokumentierte Bedeutung. Der FSEvents Parser zeigt sie hexadezimal an, statt zu raten, und FSEventsParser kennzeichnet sie als NOT_USED; tauchen sie in gecarvten Daten auf, deutet das auf einen beschädigten Datensatz hin.
Kombinationen lesen
Ein Datensatz trägt jede Änderung, die fseventsd für diesen Pfad zusammengeführt hat (siehe Zusammenfassung):
Created;Modified;FileEvent: Eine Datei wurde geschrieben. Das übliche Bild eines neuen Dokuments oder Downloads.Created;Modified;Removed;FileEvent: eine kurzlebige Datei (temporäre Dateien, Arbeitsdaten eines Installers, eine Datei, die innerhalb desselben Schreibvorgangs erstellt und wieder gelöscht wurde). Die Reihenfolge innerhalb des Datensatzes wird nicht erfasst.- Zweimal
Renamed;FileEvent, gleiche Node-ID: eine Umbenennung oder Verschiebung; die niedrigere Event-ID ist meist der alte Pfad. Bei 1SLD gibt es keine Node-ID, und die Paarung stützt sich auf aufeinanderfolgende IDs. ExtendedAttrModifiedbei einem neuen Download: typischerweise das Setzen der Quarantäne- und Herkunftsattribute (where-from).ExtendedAttrRemovedbei entpackten oder heruntergeladenen Objekten: Ein Attribut wurde entfernt. Das Entfernen voncom.apple.quarantineist ein möglicher Grund, siehe Quarantäne-Attribut; viele Apps entfernen Attribute routinemäßig.InodeMetaModallein: einchmod,touchoder Eigentümerwechsel; ein heruntergeladenes Hilfsprogramm ausführbar zu machen, sieht oft so aus.Mount;FolderEventaufVolumes/NAME: An diesem Einhängepunkt wurde ein Volume angeschlossen. Der eigene.fseventsd-Ordner des Volumes protokolliert dann, was darauf geschrieben wurde.ItemCloned: ein APFS-Klon, z. B. ein Duplikat im Finder odercp -c. Klon und Quelle teilen sich Datenblöcke.
Die API-Konstanten sind andere
Apples dokumentierte FSEventStreamEventFlags (kFSEventStreamEventFlagItemCreated = 0x100, …ItemIsFile = 0x10000 usw.) beschreiben, was eine laufende App von der FSEvents-API erhält. Sie stimmen nicht mit den Bits überein, die in .fseventsd geschrieben werden, wie die Forschung von Nicole Ibrahim und der Quellcode von mac_apt festhalten. Ein Parser, der die API-Tabelle auf Logdateien anwendet, liefert falsche Namen.
Wie der Parser Flags darstellt
Der FSEvents Parser zeigt Änderungs-Flags als beschriftete Chips, den Objekttyp in einer eigenen Spalte sowie den Rohwert (z. B. 0x00800011) und die Namen im Stil von FSEventsParser in der Datensatzansicht und in CSV-Exporten. Der Änderungsfilter gruppiert die Bits in Erstellt, Entfernt, Umbenannt, Geändert/geklont, Metadaten/Attribute und Ein-/Aushängen.
FAQ
Sind die Flags der FSEvents-Logs dieselben wie die Flags der FSEventStream-API?
Nein. Die in .fseventsd-Logs gespeicherten Bits unterscheiden sich von Apples öffentlichen kFSEventStreamEventFlag-Konstanten. Verwenden Sie eine Tabelle, die für das On-Disk-Format erstellt wurde.
Was bedeutet ExtendedAttrRemoved?
Vom Objekt wurde ein erweitertes Attribut entfernt. FSEvents sagt nicht, welches; das Entfernen von com.apple.quarantine ist eine Möglichkeit unter vielen.