Che cosa significa dimensione di una directory nell'output del comando 'ls -l'?


Risposte:


45

Questa è la dimensione dello spazio sul disco utilizzato per memorizzare le meta informazioni per la directory (ovvero la tabella dei file che appartengono a questa directory). Se è cioè 1024 significa che vengono utilizzati 1024 byte sul disco (alloca sempre blocchi completi) per questo scopo.


3
e quando una directory contiene migliaia di file, la dimensione della directory stessa può essere facilmente> 10
KB

1
@txwikinger Penso che le directory contengano elenchi di inode, non nomi di file effettivi.
Ярослав Рахматуллин,

6
@ ЯрославРахматуллин Una voce della directory è composta da un numero di inode e da un nome file.
200_successo

2
Quindi la "dimensione" di una directory è correlata solo al numero di file all'interno, non alla dimensione dei file?
Lee,

1
@Lee: Sì, esatto.
cat

14

La "dimensione di una directory" stampata ls -lè (come con qualsiasi tipo di file) il valore riportato dalla stat()chiamata in statbuf.st_size.

Cosa st_sizesignifica questo per le directory dipende completamente dal tipo di file system. Se non conosci il tipo di filesystem e non ne comprendi i concetti, non puoi dedurre nulla dal valore in st_size.

  • Nello storico filesystem UNIX attualmente di solito denominato v7-fs, le directory venivano ripetute voci a 16 byte che contenevano un numero di inode a 16 bit e 14 byte di nome file. La "dimensione" di una directory era significativa rispetto read(2)all'operazione e cresceva o rimaneva sempre così com'è. Le voci .e ..vengono create collegandole manualmente a livello corrente e directory a un livello superiore. Il conteggio dei collegamenti per una directory inaugurale vuota sana è 2.

  • Nel filesystem BSD-4.2 che dal 1989 (SVr4) viene chiamato ufs, le directory sono una serie di record a lunghezza variabile che utilizzano un formato a cui non viene concesso di essere stabile, quindi ai comandi dello spazio utente non è consentito leggere questo formato. La "dimensione" riportata è la dimensione in byte come in v7-fs, la dimensione di solito aumenta o rimane così com'è, ma le versioni più recenti del filesystem possono ridurre la dimensione in alcune condizioni - ma non sempre quando ci si può aspettare. Il conteggio dei collegamenti riportato per una directory vuota è 2 come con v7-fs.

  • Nel WOFSfilesystem che ho progettato e implementato tra l'estate 1988 e maggio 1991, le directory riportano sempre la "dimensione" 0 e non hanno mai un tipo di contenuto che può essere letto usando la read(2)chiamata. Questo perché WOFSè il primo filesystem Copy-on-Write e perché nei WOFSfile riporta la directory in cui si trovano invece di essere elencati nella directory. Se leggi una WOFSdirectory utilizzando readdir(), otterrai solo i dati per le voci previste, ma mai per .e ... Il conteggio dei collegamenti di una directory vuota su WOFSè 1 e l'intero comportamento è completamente conforme a POSIX.

  • In ZFS, questo è stato implementato dopo aver letto i WOFSgiornali. ZFSè un filesystem copy-on-write e i suoi autori non negano di aver copiato i concetti WOFS. Le directory su ZFS riportano number of directory entriesin st_size, quindi la "dimensione" riportata non ha alcun significato reale rispetto allo spazio su disco occupato dai dati della directory. Non ci sono .e ..voci in una directory ZFS, ma se chiamate readdir(), queste voci sono false e restituite per le prime due operazioni. ZFS è l'unico FS nell'elenco che non supporta le directory hard-link ma il conteggio dei collegamenti riportati per le directory è sempre 2. Queste due irregolarità in ZFS sono implementate per ridurre la confusione nei programmi storici non POSIX.

  • Simile a ZFS, WAFL copia alcune ma non tutte le idee da WOFS. Netapp è WAFLstato scritto 3 anni dopo la WOFSpubblicazione del documento, WAFL è copia su scrittura, ma WAFL sembra riportare valori di "dimensione" che possono essere le "dimensioni della directory reale" presupponendo che la directory abbia dei contenuti.


13

Una directory riserva 4096 byte (almeno) per i metadati su se stessa e il suo contenuto.

Inoltre, 4096 byte è l'unità di allocazione predefinita (blocco) per il filesystem ext2 / ext3 / ext4 e pertanto una directory non può essere più piccola.

Su diversi file system è possibile trovare directory con dimensioni predefinite diverse, a causa della dimensione del blocco predefinita del file system.

Le dimensioni della directory possono anche aumentare dinamicamente man mano che vengono riempite, ma una volta riempito lo spazio riservato ai metadati non può essere riassegnato senza la rimozione della directory.


1
A quali meta-dati ti riferisci?
Stéphane Chazelas,

1
i dettagli dipendono dal filesystem ma generalmente includono metadati come nome file, numero di inode, tipo di file (file, dir, fifo, socket, nodo dispositivo, symlink, ecc.), proprietario, gruppo, permessi, attributi, ACL, target symlink.
Cas

6
@CraigSanders, la directory contiene nome dell'oggetto e inode corrispondente solo . L'inode contiene il tipo di oggetto, il proprietario / il gruppo, le autorizzazioni, il riferimento al punto in cui vengono conservati gli ACL e gli attributi estesi, ... Qualsiasi altra cosa causerà una grave rottura della semantica del filesystem POSIX.
vonbrand

Il mio UFS riserva solo 512 byte per i propri metadati per directory.
FUZxxl,

4

Una directory è solo una directory, come una rubrica del telefono. È solo un file con un elenco di numeri e un nome accanto a loro. Ogni numero fa riferimento a un file nel file system (un numero di inode) e il nome è il nome del file.

È necessario spazio su disco per salvare tali dati, come vengono allocati, cresciuti e ridotti in base al filesystem.


potresti includere i dettagli effettivi di quali metadati vengono conservati e le considerazioni sull'allocazione dei blocchi relative all'aumento delle dimensioni. farebbe una risposta più esatta completa della già allegata bella allegoria. :)
n611x007,

3
@naxa, dipende dal filesystem e persino all'interno di un filesystem (come ext4), dipende dalle opzioni che abiliti, quindi preferirei lasciarlo come "dipende dal filesystem", piuttosto che cercare di essere esaustivo che non sarebbe molto rilevante per questa domanda.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.