Los atributos extendidos se almacenan por separado en el sistema de archivos (como APFS o HFS+).
Esto significa que los atributos extendidos no se almacenan dentro de los datos del archivo principal, por lo que no se produce ninguna modificación del archivo al añadir, eliminar o editar atributos extendidos. De hecho, puede añadir atributos extendidos a otros objetos del sistema de ficheros además de a ficheros, por ejemplo, directorios y enlaces simbólicos.
En MacOS puede manipular los atributos extendidos desde el Terminal utilizando el comando xattr
mando. A continuación demostraré de forma sencilla que los atributos extendidos no se almacenan dentro de los datos del archivo:
Primero encenderemos Terminal.app
y ejecute los siguientes comandos para crear un archivo de datos de muestra llamado test
que sólo contenga la palabra "TEST" y calcular una suma de comprobación MD5 de su contenido:
echo "TEST" > test
md5 test
Obtendrás el siguiente resultado:
MD5 (test) = 2debfdcf79f03e4a65a667d21ef9de14
Ahora bien, si cambias el contenido del archivo de (casi) cualquier forma, obtendrás un valor de suma de comprobación MD5 diferente.
Ahora añadiremos un atributo extendido llamado "test.attribute" con el valor "value" al archivo:
xattr -w test.attribute value test
Podemos confirmar que el atributo extendido se almacena en el sistema de archivos de esta manera:
xattr -l test
Esto leerá que el archivo "test" tiene un atributo llamado test.attribute con el valor "value".
Volver a ejecutar md5
para obtener la suma de comprobación del contenido del archivo:
md5 test
Verás que obtienes exactamente la misma suma de comprobación MD5 que antes.
Históricamente, los atributos extendidos se añadieron originalmente a MacOS como una característica del sistema de archivos en HFS+ con el lanzamiento de Mac OS X 10.4 Tiger en 2005. Incluso mucho antes, Mac OS X ya disponía de funciones similares que permitían almacenar datos adicionales junto a los archivos, por ejemplo en los denominados "Named Forks" y "Resource Forks". Estas funciones se remontan a los años ochenta.
En los MacOS actuales, APFS soporta de forma nativa los atributos extendidos. Si nos fijamos en el documentación de referencia para APFS encontrarás que especifica un tipo de objeto APFS_TYPE_XATTR
con un j_xattr_key
que contiene básicamente el nombre del atributo (por ejemplo, "com.apple.quarantine"), y una estructura j_xattr_val
que contiene básicamente el valor del atributo.
Además del valor del atributo, el atributo j_xattr_val
también especifica exactamente dónde se almacenan realmente los datos de atributos en el sistema de archivos. Puede almacenarse en un flujo de datos (en extensiones para atributos grandes), incrustarse directamente en el registro del sistema de ficheros (para atributos pequeños), o ser gestionado directamente por el sistema de ficheros (es decir, un atributo específico que tiene una estructura dedicada para él en el sistema de ficheros - más prominentemente utilizado para enlaces simbólicos y firmes).