Struktur internal direktori tergantung pada sistem file yang digunakan. Jika Anda ingin tahu persis apa yang terjadi, lihat implementasi filesystem.
Pada dasarnya, di sebagian besar sistem file, direktori adalah array asosiatif antara nama file (kunci) dan nomor inode (nilai). Sesuatu seperti ini¹:
1167010 .
1158721 ..
1167626 subdir
132651 barfile
132650 bazfile
Daftar ini dikodekan dalam beberapa cara - lebih atau kurang - efisien di dalam rantai blok (biasanya) 4KB. Perhatikan bahwa konten file biasa disimpan dengan cara yang sama. Dalam kasus direktori, tidak ada gunanya mengetahui ukuran mana yang sebenarnya digunakan di dalam blok ini. Itu sebabnya ukuran direktori yang dilaporkan du
adalah kelipatan 4KB.
Inode ada untuk mengikat blok bersama, membentuk satu entitas, yaitu 'file' dalam arti umum. Mereka diidentifikasi oleh nomor yang merupakan semacam alamat dan masing-masing biasanya disimpan sebagai satu blok khusus.
Manajemen semua ini terjadi dalam mode kernel. Perangkat lunak hanya meminta pembuatan direktori dengan fungsi bernama int mkdir(const char *pathname, mode_t mode);
mengarah ke panggilan sistem, dan semua sisanya dilakukan di belakang layar.
Tentang struktur tautan:
Tautan keras bukan file, itu hanya entri direktori baru (yaitu nama - nomor inode asosiasi ) yang merujuk pada entitas inode yang sudah ada ². Ini berarti inode yang sama dapat diakses dari nama path yang berbeda. Khususnya, karena metadatas (izin, kepemilikan, cap waktu ...) disimpan dalam inode, ini unik dan independen dari pathname yang dipilih untuk mengakses file.
Tautan simbolik adalah file dan berbeda dari targetnya. Ini berarti bahwa ia memiliki inode sendiri. Dulu ditangani seperti file biasa: jalur target disimpan dalam blok data. Tapi sekarang, untuk alasan efisiensi dalam filesystem ext baru-baru ini , jalur yang lebih pendek dari 60 byte disimpan dalam inode itu sendiri (menggunakan bidang yang biasanya digunakan untuk menyimpan pointer ke blok data).
-
1. ini diperoleh dengan menggunakan ls -ai1 testdir
.
2. tipe yang harus berbeda dari 'direktori' saat ini.