Apa arti ukuran direktori dalam output perintah 'ls-l'?


Jawaban:


45

Ini adalah ukuran ruang pada disk yang digunakan untuk menyimpan informasi meta untuk direktori (yaitu tabel file yang termasuk direktori ini). Jika 1024 yaitu ini berarti bahwa 1024 byte pada disk digunakan (selalu mengalokasikan blok penuh) untuk tujuan ini.


3
dan ketika sebuah direktori berisi ribuan file, ukuran direktori itu sendiri dapat dengan mudah> 10KB
glenn jackman

1
@ txwikinger Saya pikir direktori berisi daftar inode, bukan nama file sebenarnya.
Ярослав Рахматуллин

6
@ ЯрославРахматуллин Entri direktori terdiri dari nomor inode dan nama file.
200_sukses

2
Jadi "ukuran" sebuah dir hanya terkait dengan jumlah file di dalamnya, bukan ukuran file?
Lee

1
@ Lee: Ya, itu benar.
kucing

14

"Ukuran direktori" yang dicetak dengan ls -ladalah (seperti halnya jenis file apa pun) nilai yang dilaporkan oleh stat()panggilan masuk statbuf.st_size.

Apa st_sizeartinya ini untuk direktori, sepenuhnya tergantung pada jenis sistem file. Kecuali Anda tahu tipe sistem file dan memahami konsepnya, Anda tidak dapat menyimpulkan apa pun dari nilainya st_size.

  • Dalam sistem berkas bersejarah UNIX yang saat ini biasa dinamai v7-fs, direktori diulangi entri 16 byte yang berisi nomor inode 16 bit dan 14 byte nama file. "Ukuran" suatu direktori sangat berarti sehubungan dengan read(2)operasi dan memang selalu tumbuh atau tetap apa adanya. The .dan ..entri yang dibuat secara manual keras menghubungkan mereka melawan arus dan direktori tingkat atas. Jumlah tautan untuk direktori kosong gadis waras adalah 2.

  • Dalam sistem file BSD-4.2 yang sejak 1989 (SVr4) dipanggil ufs, direktori adalah serangkaian catatan panjang variabel yang menggunakan format yang tidak diberikan untuk menjadi stabil, sehingga perintah ruang pengguna tidak diizinkan untuk membaca format ini. "Ukuran" yang dilaporkan adalah ukuran dalam byte seperti pada v7-fs, ukurannya biasanya tumbuh atau tetap apa adanya, tetapi versi sistem file yang lebih baru dapat mengecilkan ukuran dalam beberapa kondisi - tetapi tidak selalu ketika Anda mengharapkan ini. Jumlah tautan yang dilaporkan untuk direktori kosong adalah 2 sama dengan v7-fs.

  • Dalam WOFS, filesystem saya dirancang dan dilaksanakan antara musim panas 1988 dan Mei 1991, direktori selalu melaporkan "ukuran" 0 dan tidak pernah memiliki jenis konten yang dapat dibaca menggunakan read(2)panggilan. Ini karena WOFSini adalah sistem file Copy-on-Write pertama dan karena dalam WOFSfile melaporkan direktori mereka bukannya terdaftar dalam direktori. Jika Anda membaca WOFSdirektori menggunakan readdir(), Anda hanya mendapatkan data untuk entri yang dimaksud, tetapi tidak pernah untuk .dan ... Hitungan tautan dari direktori kosong WOFSadalah 1 dan seluruh perilaku benar-benar memenuhi syarat POSIX.

  • Dalam ZFS, itu dilaksanakan setelah membaca WOFSkoran. ZFSadalah sistem file copy-on-write dan penulisnya tidak menyangkal bahwa mereka menyalin konsep dari WOFS. Direktori pada ZFS melaporkan number of directory entriesdalam st_size, jadi "ukuran" yang dilaporkan tidak memiliki arti nyata sehubungan dengan ruang disk yang digunakan dari data direktori. Tidak ada .dan ..entri dalam direktori ZFS, tetapi jika Anda menelepon readdir(), entri ini dipalsukan dan dikembalikan untuk dua operasi pertama. ZFS adalah satu-satunya FS dalam daftar yang tidak mendukung direktori-direktori hard-link tetapi jumlah tautan yang dilaporkan untuk direktori selalu 2. Kedua penyimpangan dalam ZFS ini diterapkan untuk mengurangi kebingungan dalam program historis non-POSIX.

  • Mirip dengan ZFS, WAFL menyalin beberapa tetapi tidak semua ide dari WOFS. Netapp WAFLditulis 3 tahun setelah WOFSmakalah ini diterbitkan, WAFL adalah copy-on-write, tetapi WAFL tampaknya melaporkan nilai "ukuran" yang mungkin menjadi "ukuran direktori nyata" dengan asumsi bahwa direktori tersebut memiliki konten.


13

Direktori menyimpan 4096 byte (minimal) untuk meta-data tentang dirinya dan isinya.

Juga, 4096 byte adalah unit alokasi default (blok) untuk sistem file ext2 / ext3 / ext4 dan karenanya direktori tidak boleh lebih kecil.

Pada sistem file yang berbeda, Anda mungkin menemukan direktori dengan ukuran standar yang berbeda, yang disebabkan oleh ukuran blok default sistem file.

Ukuran direktori juga dapat tumbuh secara dinamis ketika mereka diisi, tetapi begitu mengisi ruang yang disediakan untuk meta-data tidak dapat dialokasikan kembali tanpa menghapus direktori.


1
Apa meta-data yang Anda maksud?
Stéphane Chazelas

1
rincian tergantung pada sistem file tetapi umumnya mencakup meta-data seperti nama file, nomor inode, tipe file (file, dir, fifo, socket, node perangkat, symlink, dll), pemilik, grup, izin, atribut, ACL, target symlink.
cas

6
@CraigSanders, direktori berisi nama objek dan nomor inode yang sesuai saja . Inode berisi jenis objek, pemilik / grup, izin, referensi ke mana pun ACL dan atribut diperluas disimpan, ... Apa pun yang lain akan menyebabkan kerusakan parah semantik sistem file POSIX.
vonbrand

UFS saya cadangan hanya 512 byte untuk meta data per direktori.
FUZxxl

4

Direktori adalah hanya direktori, seperti direktori telepon. Itu hanya file dengan daftar angka dan nama di sebelahnya. Setiap nomor merujuk file dalam sistem file (nomor inode) dan namanya adalah nama file.

Anda memerlukan ruang disk untuk menyimpan data itu, bagaimana itu dialokasikan dan tumbuh dan menyusut tergantung pada filesystem.


Anda bisa memasukkan detail aktual dari apa yang disimpan meta-data dan pertimbangan alokasi blok mengenai pertumbuhan ukuran. itu akan membuat jawaban yang lebih tepat lengkap dengan alegori yang sudah diberikan bagus. :)
n611x007

3
@naxa, itu bergantung pada filesystem, dan bahkan di dalam filesystem (seperti ext4), itu tergantung pada opsi mana yang Anda aktifkan, jadi saya lebih suka membiarkannya sebagai "itu tergantung pada filesystem", daripada mencoba dan menjadi lengkap yang tidak akan terlalu relevan untuk pertanyaan ini.
Stéphane Chazelas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.