Skip to content

Les flags FSEvents expliqués : chaque bit décodé

Chaque bit de flag FSEvents sur disque, sa valeur, ses noms selon FSEventsParser et mac_apt, et comment lire Created, Renamed, ItemCloned ou EndOfTransaction.

Publié le 5 min de lecture

En bref. Le champ des flags est un ensemble de bits sur 32 bits en little-endian. Lu ainsi, Created vaut 0x00000001, Removed 0x00000002, Renamed 0x00000008, Modified 0x00000010, et le type d'élément se trouve dans les bits de poids fort (File 0x00800000, Folder 0x01000000). FSEventsParser lit ces quatre mêmes octets en big-endian : ses constantes ont donc les octets inversés (Created = 0x01000000), avec les mêmes noms. Aucune de ces valeurs ne correspond aux valeurs kFSEventStreamEventFlag* de l'API d'Apple.

La table

Les valeurs sont celles du u32 lu en little-endian (la convention de mac_apt). La colonne FSEventsParser montre le même bit selon sa convention big-endian.

Bit (LE)FSEventsParser (BE)Nom (FSEventsParser / mac_apt)Signification
0x000000010x01000000CreatedÉlément créé
0x000000020x02000000RemovedÉlément supprimé
0x000000040x04000000InodeMetaModMétadonnées d'inode modifiées (mode, horodatages…)
0x000000080x08000000Renamed / RenamedOrMovedRenommé ou déplacé
0x000000100x10000000ModifiedContenu modifié
0x000000200x20000000ExchangeÉchangé avec un autre élément (enregistrement atomique)
0x000000400x40000000FinderInfoModInformations Finder modifiées
0x000000800x80000000FolderCreatedDossier créé
0x000001000x00010000PermissionChangePermissions ou propriétaire modifiés
0x000002000x00020000ExtendedAttrModified / XAttrModifiedAttribut étendu défini ou modifié
0x000004000x00040000ExtendedAttrRemoved / XAttrRemovedAttribut étendu supprimé
0x000010000x00100000DocumentRevisioning / DocumentRevisionImplique le stockage des versions de documents
0x000040000x00400000ItemClonedClone APFS (copie en copy-on-write), High Sierra et versions ultérieures
0x000800000x00000800LastHardLinkRemovedDernier lien physique vers un inode supprimé
0x001000000x00001000HardLinkL'élément est un lien physique
0x004000000x00004000SymbolicLinkL'élément est un lien symbolique
0x008000000x00008000FileEvent / FileL'élément est un fichier
0x010000000x00000001FolderEvent / FolderL'élément est un dossier
0x020000000x00000002MountUn volume a été monté sur ce chemin
0x040000000x00000004UnmountUn volume a été démonté de ce chemin
0x200000000x00000020EndOfTransactionMarque la fin d'un groupe de modifications liées

Les autres bits n'ont pas de signification documentée. Le FSEvents Parser les affiche en hexadécimal plutôt que de deviner, et FSEventsParser les étiquette NOT_USED ; les voir apparaître dans des données carvées indique que l'enregistrement est probablement endommagé.

Lire les combinaisons

Un enregistrement porte toutes les modifications que fseventsd a fusionnées pour ce chemin (voir fusion d'événements) :

  • Created;Modified;FileEvent : un fichier a été écrit. C'est la forme habituelle d'un nouveau document ou d'un téléchargement.
  • Created;Modified;Removed;FileEvent : un fichier éphémère (fichiers temporaires, données de travail d'un installeur, fichier créé puis supprimé entre deux écritures du journal). L'ordre au sein de l'enregistrement n'est pas conservé.
  • Renamed;FileEvent deux fois, même node ID : un renommage ou un déplacement ; l'identifiant d'événement le plus bas correspond généralement à l'ancien chemin. En 1SLD, il n'y a pas de node ID et l'appariement repose sur des identifiants consécutifs.
  • ExtendedAttrModified sur un nouveau téléchargement : typiquement la pose des attributs de quarantaine et de provenance (where-from).
  • ExtendedAttrRemoved sur des éléments extraits ou téléchargés : un attribut a été retiré. Supprimer com.apple.quarantine en est une raison possible, voir attribut de quarantaine ; de nombreuses applications retirent des attributs en routine.
  • InodeMetaMod seul : un chmod, un touch ou un changement de propriétaire ; rendre exécutable un utilitaire téléchargé ressemble souvent à cela.
  • Mount;FolderEvent sur Volumes/NAME : un volume a été attaché à ce point de montage. Le propre .fseventsd du volume journalise ensuite ce qui y est écrit.
  • ItemCloned : un clone APFS, par exemple une duplication dans le Finder ou un cp -c. Le clone et sa source partagent les mêmes blocs de données.

Les constantes de l'API sont différentes

Les FSEventStreamEventFlags documentés par Apple (kFSEventStreamEventFlagItemCreated = 0x100, …ItemIsFile = 0x10000, etc.) décrivent ce qu'une application en cours d'exécution reçoit de l'API FSEvents. Ils ne correspondent pas aux bits écrits dans .fseventsd, comme l'ont relevé les recherches de Nicole Ibrahim et le code source de mac_apt. Un parseur qui applique la table de l'API aux fichiers journaux produit des noms erronés.

Comment le parseur affiche les flags

Le FSEvents Parser affiche les flags de modification sous forme de pastilles étiquetées, le type d'élément dans sa propre colonne, ainsi que la valeur brute (par exemple 0x00800011) et les noms à la manière de FSEventsParser dans le détail de l'enregistrement et dans les exports CSV. Le filtre de modifications regroupe les bits en Création, Suppression, Renommage, Modification/clonage, métadonnées/attributs et montage/démontage.

FAQ

Les flags des journaux FSEvents sont-ils les mêmes que ceux de l'API FSEventStream ?

Non. Les bits stockés dans les journaux .fseventsd diffèrent des constantes publiques kFSEventStreamEventFlag d'Apple. Utilisez une table conçue pour le format sur disque.

Que signifie ExtendedAttrRemoved ?

Un attribut étendu a été retiré de l'élément. FSEvents ne précise pas lequel ; le retrait de com.apple.quarantine n'est qu'une possibilité parmi d'autres.

Articles liés