Los atributos de archivo extendidos son características del sistema de archivos que permiten a los usuarios asociar archivos de computadora con metadatos no interpretados por el sistema de archivos, mientras que los atributos regulares tienen un propósito estrictamente definido por el sistema de archivos (como permisos o registros de tiempos de creación y modificación). A diferencia de los forks , que generalmente pueden ser tan grandes como el tamaño máximo del archivo, los atributos extendidos generalmente están limitados en tamaño a un valor significativamente menor que el tamaño máximo del archivo. Los usos típicos incluyen almacenar el autor de un documento, la codificación de caracteres de un documento de texto sin formato o una suma de comprobación , un hash criptográfico o un certificado digital y la información de control de acceso discrecional .
En sistemas tipo Unix , los atributos extendidos suelen abreviarse como xattr . [1]
En AIX , el sistema de archivos JFS2 v2 admite atributos extendidos, a los que se puede acceder mediante el comando getea . [2] Las API getea , [3] setea , [4] listea , [5] statea , [6] y removeea [7] admiten la obtención, configuración, listado, obtención de información sobre y eliminación de atributos extendidos.
En el ahora extinto BeOS y sus sucesores como Haiku , los atributos de archivo extendidos se usan ampliamente en programas base y de terceros. El sistema de archivos Be permite la indexación y consulta de atributos, esencialmente dando al sistema de archivos características similares a las de una base de datos . Los usos de los atributos extendidos en sistemas similares a Be son variados: por ejemplo, Tracker y OpenTracker , los administradores de archivos de BeOS y Haiku respectivamente, ambos almacenan las ubicaciones de los íconos de archivos en atributos, [8] el servicio "Mail" de Haiku almacena todo el contenido de los mensajes y los metadatos en atributos de archivo extendidos, [9] y los tipos MIME de los archivos se almacenan en sus atributos. Los atributos de archivo extendidos se pueden ver y editar en la GUI de los sistemas similares a Be a través del administrador de archivos, a menudo Tracker o derivados del mismo.
En FreeBSD 5.0 y versiones posteriores, los sistemas de archivos UFS1 , UFS2 y ZFS admiten atributos extendidos, utilizando la familia de llamadas al sistema extattr_ [10] . Cualquier archivo normal puede tener una lista de atributos extendidos. Cada atributo consta de un nombre y los datos asociados. El nombre debe ser una cadena terminada en nulo y existe en un espacio de nombres identificado por un identificador de espacio de nombres de entero pequeño. Actualmente, existen dos espacios de nombres: usuario y sistema. El espacio de nombres usuario no tiene restricciones con respecto a la denominación o el contenido. El espacio de nombres sistema lo utiliza principalmente el núcleo para listas de control de acceso y control de acceso obligatorio .
En Linux , los sistemas de archivos ext2 , ext3 , ext4 , JFS , Squashfs , UBIFS , Yaffs2 , ReiserFS , Reiser4 , XFS , Btrfs , OrangeFS , Lustre , OCFS2 1.6 , ZFS y F2FS [11] admiten atributos extendidos (abreviados xattr ) cuando se habilitan en la configuración del núcleo. Cualquier archivo o directorio normal puede tener atributos extendidos que consisten en un nombre y datos asociados. El nombre debe ser una cadena terminada en nulo prefijada por un identificador de espacio de nombres y un carácter de punto. Actualmente, existen cuatro espacios de nombres: usuario, confiable, seguridad y sistema. El espacio de nombres de usuario no tiene restricciones con respecto a la denominación o el contenido. El espacio de nombres del sistema lo utiliza principalmente el núcleo para listas de control de acceso . El espacio de nombres de seguridad lo utiliza SELinux , por ejemplo.
El soporte para el concepto de atributo extendido de un borrador POSIX.1e [ cita requerida ] que había sido retirado [12] en 1997 se agregó a Linux alrededor de 2002. [13] [14] A partir de 2016, todavía no se utilizan ampliamente en los programas Linux del espacio de usuario, pero se utilizan en Beagle , OpenStack Swift , Dropbox , el marco de metadatos semánticos de KDE (Baloo), Chromium , Wget y cURL .
El núcleo de Linux permite que los atributos extendidos tengan nombres de hasta 255 bytes y valores de hasta 64 KiB, [15] al igual que XFS y ReiserFS , pero ext2 / 3 / 4 y btrfs imponen límites mucho más pequeños, requiriendo que todos los atributos (nombres y valores) de un archivo quepan en un "bloque de sistema de archivos" (generalmente 4 KiB). Según POSIX.1e, [ cita requerida ] los nombres deben comenzar con uno de los siguientes: security , system , trusted y user más un punto. Esto define los cuatro espacios de nombres de los atributos extendidos. [16]
Se puede acceder a los atributos extendidos y modificarlos utilizando los comandos getfattr
y setfattr
del attr
paquete en la mayoría de las distribuciones. [17] Las API se denominan getxattr
y setxattr
.
Mac OS X 10.4 y versiones posteriores admiten atributos extendidos mediante el uso de la función de árbol B* del sistema de archivos HFS+ Attributes File , que permite bifurcaciones con nombre. Aunque las bifurcaciones con nombre en HFS+ admiten cantidades arbitrarias de datos a través de extensiones, la compatibilidad del sistema operativo con atributos extendidos solo admite atributos en línea, lo que limita su tamaño a lo que cabe en un solo nodo de árbol B*. [ cita requerida ] Cualquier archivo normal puede tener una lista de atributos extendidos. HFS+ admite una cantidad arbitraria de bifurcaciones con nombre y se desconoce si macOS impone algún límite en la cantidad de atributos extendidos.
Cada atributo consta de un nombre y los datos asociados. El nombre es una cadena Unicode terminada en cero . No existen restricciones de espacio de nombres (lo que lo convierte en un sistema xattr abierto ) y la convención es utilizar una cadena DNS inversa (similar a los identificadores de tipo uniforme ) como nombre del atributo.
macOS permite enumerar, [18] obtener, [19] configurar, [20] y eliminar [21] atributos extendidos de archivos o directorios mediante una API similar a Linux. Desde la línea de comandos, estas capacidades se exponen a través de la utilidad xattr . [22]
Desde macOS 10.5, los archivos que se originan en la web se marcan con com.apple.quarantine
atributos de archivo extendidos. [23] En algunas versiones anteriores de macOS (como Mac OS X 10.6 ), los atributos extendidos del espacio de usuario no se conservaban al guardar en aplicaciones Cocoa comunes (TextEdit, Preview, etc.). [ cita requerida ]
El soporte para atributos de archivo extendidos se eliminó del código fuente de OpenBSD en 2005 debido a la falta de interés en las listas de control de acceso . [24]
En OS/2 versión 1.2 y posteriores, el sistema de archivos de alto rendimiento se diseñó teniendo en mente los atributos extendidos, pero el soporte para ellos también se incorporó en el sistema de archivos FAT de DOS. Para compatibilidad con otros sistemas operativos que utilizan una partición FAT, los atributos de OS/2 se almacenan dentro de un único archivo " EA DATA. SF
" ubicado en el directorio raíz. Este archivo normalmente es inaccesible cuando un sistema operativo que admite atributos extendidos administra el disco, pero se puede manipular libremente en, por ejemplo, DOS. Los archivos y directorios que tienen atributos extendidos utilizan uno o más clústeres dentro de este archivo. El número de clúster lógico del primer clúster utilizado se almacena dentro de la entrada de directorio del archivo o directorio propietario . [25] Estos dos bytes se utilizan para otros fines en el sistema de archivos FAT32 y, por lo tanto, los atributos extendidos de OS/2 no se pueden almacenar en este sistema de archivos.
Algunas partes de OS/2 versión 2.0 y posteriores, como Workplace Shell, utilizan varios atributos extendidos estandarizados (también llamados EA ) para fines como identificar el tipo de archivo, comentarios, íconos de computadora y palabras clave sobre el archivo. Los programas escritos en el lenguaje interpretado Rexx almacenan una versión ya analizada del código como un atributo extendido, para permitir una ejecución más rápida.
La versión 9 de Solaris y posteriores permiten que los archivos tengan "atributos extendidos", que en realidad son bifurcaciones ; el tamaño máximo de un "atributo extendido" es el mismo que el tamaño máximo de un archivo, y se leen y escriben de la misma manera que los archivos. Internamente, en realidad se almacenan y se accede a ellos como archivos normales, por lo que sus nombres no pueden contener caracteres "/" [26] y su propiedad y permisos pueden diferir de los del archivo principal.
La versión 4 del Sistema de archivos de red admite atributos extendidos de forma muy similar a Solaris.
En Windows NT , los atributos extendidos de longitud limitada son compatibles con FAT , [25] HPFS y NTFS . Esto se implementó como parte del subsistema OS/2 . Se utilizan en particular en el servidor NFS del subsistema Interix POSIX para implementar permisos similares a Unix. El subsistema de Windows para Linux agregado en la actualización de aniversario de Windows 10 los utiliza para fines similares, almacenando el modo de archivo de Linux, el propietario, el ID del dispositivo (si corresponde) y los tiempos de archivo en los atributos extendidos. [27]
Además, NTFS puede almacenar atributos extendidos de longitud arbitraria en forma de flujos de datos alternativos (ADS), un tipo de bifurcación de recursos . Los complementos para el administrador de archivos Total Commander , como NTFS Descriptions y QuickSearch eXtended, admiten el filtrado de la lista de archivos o la búsqueda de metadatos contenidos en ADS. [28] [29] NTFS-3G admite la asignación de ADS a atributos extendidos en FUSE ; también asigna atributos de archivos de esa manera. [30]
La funcionalidad EA (atributos extendidos) y ACL (listas de control de acceso) ahora está disponible para los sistemas de archivos ext3. Además, la funcionalidad ACL está disponible para NFS.