Tidak ada masalah ketidakakuratan atau keandalan di sini, Anda hanya membandingkan dua angka berbeda:ukuran logis vs ukuran fisik.
Berikut ilustrasi Wikipedia untuk file jarang:
ls
menunjukkan area abu-abu+hijau, panjang logis dari file. du
(tanpa --apparent-size
) hanya menampilkan area hijau, karena area tersebut yang menempati ruang.
Anda dapat membuat file renggang dengan dd count=0 bs=1M seek=100 of=myfile
.
ls
menunjukkan 100MiB karena itulah panjang file:
$ ls -lh myfile
-rw-r----- 1 me me 100M Jul 15 10:57 myfile
du
menunjukkan 0, karena itulah jumlah data yang dialokasikan:
$ du myfile
0 myfile
ls -l --block-size=M
akan memberi Anda daftar format panjang (diperlukan untuk benar-benar melihat ukuran file) dan membulatkan ukuran file hingga MiB
terdekat .
Jika Anda ingin MB
(10^6 byte) daripada MiB
(2^20 byte) unit, gunakan --block-size=MB
sebagai gantinya.
Jika Anda tidak menginginkan M
akhiran yang dilampirkan pada ukuran file, Anda dapat menggunakan sesuatu seperti --block-size=1M
. Terima kasih Stéphane Chazelas karena menyarankan ini.
Ini dijelaskan di halaman manual untuk ls
; man ls
dan cari SIZE
. Itu memungkinkan untuk unit selain MB/MiB
juga, dan dari tampilannya (saya tidak mencobanya) ukuran blok arbitrer juga (sehingga Anda dapat melihat ukuran file sebagai jumlah blok 412 byte, jika Anda mau).
Perhatikan bahwa --block-size
parameter adalah ekstensi GNU di atas ls
Grup Terbuka , jadi ini mungkin tidak berfungsi jika Anda tidak memiliki userland GNU (yang dimiliki sebagian besar instalasi Linux). ls dari GNU coreutils 8.5 mendukung --block-size
seperti dijelaskan di atas.
Ada beberapa pengertian tentang ukuran file, seperti yang dijelaskan dalam jawaban guiy lain itu dan gambar halaman wiki pada file jarang.
Namun, Anda mungkin ingin menggunakan perintah ls(1) &stat(1).
Jika membuat kode dalam C, pertimbangkan untuk menggunakan syscall stat(2) &lseek(2).
Lihat juga referensi dalam jawaban ini.