# Attributi estesi

In informatica, nell'ambito dei file system, gli attributi estesi (EA - Extended Attributes) sono una serie di informazioni aggiuntive che possono essere associate a un file. A differenza dei normali attributi dei file, gli EA possono essere di qualsiasi tipo e possono fornire informazioni aggiuntive ad una applicazione, al sistema operativo, al file system o all'utente. Un utente, ad es., può associare ad un file una descrizione, delle brevi note o delle immagini.
Gli attributi estesi non sono parte del file a cui vengono associati ma vengono salvati separatamente e gestiti dal file system. In particolare ogni attributo esteso viene identificato da una coppia (nome, valore) per permettere il reperimento delle informazioni salvate.

## Implementazioni
### AIX

In AIX, il filesystem JFS2 v2 supporta gli attributi estesi, che sono accessibili con il comando getea. Le API dei comandi getea, setea, listea, statea, e removeea permettono di impostare, elencare, recuperare, leggere e rimuovere gli attributi estesi.

### FreeBSD

In FreeBSD 5.0 e successivi i filesystem UFS1 e UFS2 li supportano, usando la famiglia di chiamate di sistema extattr_. Ogni file può avere una lista di attributi estesi. Ogni attributo consiste di un nome e i dati a esso associati. Il nome deve essere una stringa terminata da zero, ed esistere in un namespace identificato da un numero intero. Al momento esistono due namespace: 'user' e 'system'. Il namespace 'user' non ha restrizioni su nomi e contenuti, mentre il namespace 'system' è usato soprattutto dal kernel per le access control list e il mandatory access control. Da FreeBSD 8.0 in poi, gli attributi estesi sono supportasti anche nel filesystem ZFS.

### Linux

Nel kernel Linux, i filesystem che supportano attributi estesi (abbreviati in xattr) sono ext2, ext3, ext4, JFS, Squashfs, ReiserFS, XFS, Btrfs, Lustre e OCFS2 1.6 ma il supporto deve essere abilitato nella configurazione del kernel. Qualsiasi file o directory può avere attributi estesi, consistenti in un nome e in dati associati; il nome dev'essere una stringa terminata da zero prefissata da un identificatore di namespace e un carattere punto. Al momento (2014), esistono quattro namespace: 'user', 'trusted', 'security' and 'system'. Il namespace 'user' non ha restrizioni su nomi e contenuti, mentre il namespace 'system' è usato dal kernel per le access control list. Il namespace 'security' è usato nella distribuzione SELinux.
Gli attributi estesi sono poco usati nei programmi utente in Linux, sebbene siano supportati dalla versione 2.6 in poi del kernel. Beagle e Dropbox li usano, e freedesktop.org ha pubblicato raccomandazioni per il loro uso corretto.
Per ext2/3/4 e btrfs, ogni attributo esteso è limitato a un solo blocco di filesystem (p.e. 4 KiB), e in ext2/3/4 nomi e valori devono essere contenuti tutti in un singolo blocco. ReiserFS invece permette attributi di dimensione arbitraria. In XFS i nomi possono essere lunghi al massimo 256 byte e terminati dal primo byte pari a zero, mentre i valori possono essere binari e lunghi fino a 64KB.
Nella maggior parte delle distribuzioni, gli attributi estesi possono essere letti e modificati con il comando attr.

### OS X

Mac OS X 10.4 usano il filesystem HFS+, che supporta gli attributi estesi tramite un B*-tree, permettendo i named fork. Anche se i named fork in HFS+ possono supportare quantità arbitrarie di dati usando le estensioni, il SO permette solo attributi inline, il che limita la loro dimensione a quella di un singolo nodo B*-tree. Ogni file può avere una lista di attributi estesi. HFS+ supporta un numero arbitrario di named fork e non è noto se OS X impone limiti sul numero di attributi estesi ammissibili. Ogni attributo consiste di un nome e dei dati associati. Il nome è una stringa Unicode terminata da zero. Le API di macOS permettono di elencare, leggere, scrivere, e rimuovere attributi estesi da file e directory; da Terminal si può usare l'utility xattr. Da OS X Snow Leopard in poi, gli attributi estesi in spazio utente non sono conservati nei salvataggi nelle comuni applicazioni Cocoa (TextEdit, Preview etc.).

### OS/2

In OS/2 1.2 e successivi, lo HPFS fu creato prevedendo espressamente gli attributi estesi, ma il loro supporto venne implementato anche nel filesystem FAT del DOS. Per compatibilità verso altri sistemi operativi che usavano partizioni FAT, gli attributi OS/2 vengono salvati in un file di nome "EA DATA. SF" posto nella root directory. Questo file è inaccessible sotto un SO che gestisce gli attributi estesi, ma modificabile sotto DOS o windows. File e directory con attributi estesi usano uno o più cluster in questo file. Il numero logico di cluster del primo cluster usato è registrato nella directory entry del file o directory proprietari. Questi due byte sono usati per altri scopi nel filesystem FAT32, per cui gli attributi estesi OS/2 non possono essere memorizzati su quel tipo di partizioni.
Parti di OS/2 2.0 e successori, come la Workplace Shell, usano molti attributi estesi standard (detti anche EAs) per identificare il tipo di file, commenti, icone e parole chiave associate al file. I programmi scritti in Rexx memorizzano una versione precompilata del codice come attributo esteso, per accelerare l'esecuzione.

### Solaris

Su Solaris dalla versione 9 in poi, i file possono avere degli attributi estesi che sono in realtà dei fork; la loro dimensione massima è la stessa di un file, e vengono letti e scritti proprio come normali file. Internamente vengono implementati come dei normali file e come tali acceduti, perciò i loro nomi non possono contenere caratteri "/" e i loro permessi e proprietario possono essere diversi da quelli del file a cui si riferiscono.
La versione 4 di NFS supporta gli attributi estesi nello stesso modo di Solaris.

### Windows

Da Windows NT in poi, i tre filesystem FAT, HPFS e NTFS supportano tutti degli attributi estesi di lunghezza limitata, implementati come parte del sottosistema OS/2. Vengono usati dai server NFS del sottosistema POSIX della Interix per implementare un sistema di permessi stile Unix. Oltre a questi, NTFS supporta attributi estesi di lunghezza infinita attraverso gli Alternate Data Streams (ADS), un tipo di fork.