Skip to content

Flags de FSEvents explicados: cada bit, decodificado

Todos los bits de flags de FSEvents en disco con su valor, sus nombres en FSEventsParser y mac_apt, y cómo leer Created, Renamed, ItemCloned o EndOfTransaction.

Publicado el 5 min de lectura

En resumen. El campo de flags es un conjunto de bits de 32 bits en little-endian. Leído así, Created es 0x00000001, Removed 0x00000002, Renamed 0x00000008, Modified 0x00000010, y el tipo de elemento se encuentra en los bits altos (File 0x00800000, Folder 0x01000000). FSEventsParser lee esos mismos cuatro bytes en big-endian, por lo que sus constantes tienen los bytes invertidos (Created = 0x01000000), con los mismos nombres. Ninguno de estos valores coincide con los de la API kFSEventStreamEventFlag* de Apple.

La tabla

Los valores corresponden al u32 leído en little-endian (la convención de mac_apt). La columna FSEventsParser muestra el mismo bit en su convención big-endian.

Bit (LE)FSEventsParser (BE)Nombre (FSEventsParser / mac_apt)Significado
0x000000010x01000000CreatedElemento creado
0x000000020x02000000RemovedElemento eliminado
0x000000040x04000000InodeMetaModMetadatos del inodo modificados (p. ej., modo, marcas de tiempo)
0x000000080x08000000Renamed / RenamedOrMovedRenombrado o movido
0x000000100x10000000ModifiedContenido modificado
0x000000200x20000000ExchangeIntercambiado con otro elemento (guardado atómico)
0x000000400x40000000FinderInfoModInformación del Finder modificada
0x000000800x80000000FolderCreatedCarpeta creada
0x000001000x00010000PermissionChangePermisos o propietario modificados
0x000002000x00020000ExtendedAttrModified / XAttrModifiedAtributo extendido establecido o modificado
0x000004000x00040000ExtendedAttrRemoved / XAttrRemovedAtributo extendido eliminado
0x000010000x00100000DocumentRevisioning / DocumentRevisionInterviene el almacén de versiones de documentos
0x000040000x00400000ItemClonedClon APFS (copia copy-on-write), High Sierra y posteriores
0x000800000x00000800LastHardLinkRemovedEliminado el último enlace duro a un inodo
0x001000000x00001000HardLinkEl elemento es un enlace duro
0x004000000x00004000SymbolicLinkEl elemento es un enlace simbólico
0x008000000x00008000FileEvent / FileEl elemento es un archivo
0x010000000x00000001FolderEvent / FolderEl elemento es una carpeta
0x020000000x00000002MountSe montó un volumen en esta ruta
0x040000000x00000004UnmountSe desmontó un volumen de esta ruta
0x200000000x00000020EndOfTransactionMarca el final de un grupo de cambios relacionados

El resto de bits no tiene un significado documentado. El FSEvents Parser los muestra en hexadecimal en lugar de aventurar una interpretación, y FSEventsParser los etiqueta como NOT_USED; encontrarlos en datos recuperados mediante carving es un indicio de que el registro está dañado.

Cómo leer las combinaciones

Un registro recoge todos los cambios que fseventsd fusionó para esa ruta (consulta coalescencia de eventos):

  • Created;Modified;FileEvent: se escribió un archivo. Es el patrón habitual de un documento nuevo o de una descarga.
  • Created;Modified;Removed;FileEvent: un archivo de vida corta (archivos temporales, datos provisionales de un instalador, un archivo creado y eliminado dentro del mismo volcado). El orden dentro del registro no se conserva.
  • Renamed;FileEvent dos veces, con el mismo node ID: un renombrado o un movimiento; el event ID más bajo suele corresponder a la ruta antigua. En 1SLD no hay node ID y el emparejamiento depende de que los IDs sean consecutivos.
  • ExtendedAttrModified en una descarga nueva: normalmente, el establecimiento de los atributos de cuarentena y de origen (where-from).
  • ExtendedAttrRemoved en elementos extraídos o descargados: se eliminó un atributo. Quitar com.apple.quarantine es un posible motivo (consulta atributo de cuarentena), pero muchas aplicaciones eliminan atributos de forma rutinaria.
  • InodeMetaMod en solitario: un chmod, un touch o un cambio de propietario; hacer ejecutable un helper descargado suele tener este aspecto.
  • Mount;FolderEvent en Volumes/NAME: un volumen conectado en ese punto de montaje. El propio .fseventsd del volumen registra después lo que se escribió en él.
  • ItemCloned: un clon APFS, p. ej., un duplicado del Finder o cp -c. El clon y su origen comparten bloques de datos.

Las constantes de la API son distintas

Los FSEventStreamEventFlags documentados por Apple (kFSEventStreamEventFlagItemCreated = 0x100, …ItemIsFile = 0x10000, etc.) describen lo que recibe una aplicación en ejecución a través de la API de FSEvents. No coinciden con los bits que se escriben en .fseventsd, como señalan la investigación de Nicole Ibrahim y el código fuente de mac_apt. Un parser que aplique la tabla de la API a los archivos de log producirá nombres erróneos.

Cómo muestra los flags el parser

El FSEvents Parser muestra los flags de cambio como etiquetas, el tipo de elemento en su propia columna, y el valor bruto (p. ej., 0x00800011) junto con los nombres al estilo de FSEventsParser en el detalle del registro y en las exportaciones CSV. El filtro de cambios agrupa los bits en Created, Removed, Renamed, Modified/cloned, metadatos/atributos y mount/unmount.

Preguntas frecuentes

¿Los flags de los logs de FSEvents son los mismos que los de la API FSEventStream?

No. Los bits almacenados en los logs de .fseventsd difieren de las constantes públicas kFSEventStreamEventFlag de Apple. Utiliza una tabla elaborada para el formato en disco.

¿Qué significa ExtendedAttrRemoved?

Se eliminó un atributo extendido del elemento. FSEvents no indica cuál; la eliminación de com.apple.quarantine es solo una posibilidad entre muchas.

Artículos relacionados