# Directory

Una directory (talvolta per analogia indicata anche cartella), in informatica, è una specifica entità del file system che elenca altre entità, tipicamente file e altre directory, e che permette di organizzarle in una struttura ad albero. Essa è pertanto definibile come un percorso (o indirizzo o path) o locazione del file system in cui sono presenti file o altre directory.

## Caratteristiche
### Terminologia

Il termine della lingua inglese directory ha tra i suoi significati quelli di elenco nominativo, guida e indice e il termine telephone directory indica l'elenco telefonico: analogamente a quanto avviene per un elenco telefonico, che associa dei nomi a dei numeri telefonici, una directory associa dei nomi alle strutture dati nel file system che rappresentano il contenuto dei file e delle altre directory, in modo da potervi fare riferimento per nome; ciò è particolarmente evidente nei sistemi Unix (ove le directory associano dei nomi a degli inode) nel momento in cui si vuole ad esempio modificare il nome di un file, operazione per la quale è necessario disporre dei permessi di scrittura sulla directory che lo elenca piuttosto che sul file stesso.
Una directory elencata in un'altra directory è anche detta subdirectory, mentre quella che la elenca è la sua directory superiore (o directory di livello superiore). Cartella e sottocartella possono, a fini pratici, essere considerati sinonimi di directory e subdirectory. In lingua inglese si utilizza anche il termine folder per indicare un contenitore quindi una cartella e una sottocartella (subfolder).

### Elementi tipici

Un tipico file system può contenere anche miliardi di file: le directory consentono di suddividerli in gruppi più piccoli, tenendoli ordinati e facilitandone l'uso da parte degli utenti e dei programmi. Ogni entità del file system diventa individuabile tramite un pathname, ovvero un nome qualificato dai nomi delle directory che occorre attraversare per accedervi, a partire dalla radice dell'albero oppure dalla directory corrente.
Da un punto di vista implementativo una directory è un file contenente una lista di nomi e di collegamenti fisici ai file. Le directory associano il nome in ASCII e il Collegamento fisico ai file (in alcuni file system, come ad esempio FAT, le directory specificano anche i metadati delle entità a cui fanno riferimento, quali ad esempio la data di ultima modifica e permessi d'accesso); ogni collegamento fisico elencato è caratterizzato da un nome univoco nell'ambito della stessa directory: ciò implica anche che una directory non possa elencare più nomi identici tra di loro, tuttavia directory diverse possono contenere nomi identici.

### Struttura

I sistemi operativi generalmente impediscono di creare più collegamenti fisici alla stessa directory, in modo che ogni directory abbia una e una sola directory superiore, e anche per evitare che si possa includere una parte della gerarchia di directory all'interno di sé stessa, cosa che creerebbe problemi ai programmi che esaminano ricorsivamente il contenuto del file system (come ad esempio i programmi che ricercano file o quelli che effettuano il backup).
Storicamente, e anche in alcune periferiche integrate moderne, i file system non offrivano supporto per le directory ma avevano una struttura piatta, con un solo un gruppo alla radice che elencava tutti i file (come ad esempio nel caso dei sistemi CP/M e dei sistemi MS-DOS precedenti la versione 2.0). I file system con pieno supporto gerarchico, già dettagliati nella progettazione di Multics, divennero popolari con UNIX.

## Rappresentazione
### Interfacce testuali

Nelle interfacce testuali, come ad esempio quella dei sistemi MS-DOS o delle shell testuali dei sistemi Unix e Unix-like, una directory è presentata in forma un elenco di nomi di file e di subdirectory, visualizzato in risposta all'esecuzione di determinati comandi (ad esempio dir o ls).
Tra i nomi elencati ve ne sono tipicamente due particolari: . che rappresenta la directory corrente e .. che rappresenta la directory superiore.

### Interfacce grafiche

La gestione delle directory da parte dei sistemi operativi è tale per cui esse figurano agli utenti come dei contenitori di file e di altre directory, pur specificandone in realtà solo i nomi e i riferimenti a essi. Su questo comportamento si basano anche le metafore usate nelle interfacce grafiche per rappresentare le directory e altri tipi di elenchi di file, che sono ad esempio:
* la cartella per documenti (in inglese folder), usata nei sistemi Mac OS e Microsoft Windows, e anche nei Desktop environment CDE, GNOME, KDE e Xfce
* il cassetto (in inglese drawer), usato ad esempio in AmigaOS.
Queste metafore tuttavia non si limitano a rappresentare directory, benché sia il caso prevalente: a seconda dell'interfaccia grafica in uso vi possono essere anche cartelle virtuali che rappresentano ad esempio il risultato di una ricerca eseguita in tempo reale, o il contenuto di un file di archivio (ad esempio un file ZIP o TAR) o di un'immagine disco, e alle quali non corrisponde una directory nel file system.