Apa perbedaan antara du -h dan ls -lh?

31

Saya mengalami kesulitan memahami apa cara yang benar untuk membaca ukuran file karena setiap perintah memberi Anda hasil yang berbeda-beda. Saya juga menemukan posting di http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html yang menyatakan sebagai berikut;

du memberi Anda ukuran file saat berada di sistem file. (IE akan selalu memberi Anda hasil yang dapat dibagi oleh 1024).

ls akan memberi Anda ukuran file yang sebenarnya.

Apa yang Anda lihat adalah perbedaan antara ukuran aktual file dan jumlah ruang pada disk yang dibutuhkan. (juga disebut efisiensi sistem file).

Apa perbedaan antara ia berada pada sistem file dan ukuran aktual dari file tersebut

Kacang Kacang Tanah
sumber

Jawaban:

48

Ini disebut ruang kendur :

Setiap lapisan abstraksi di atas bit dan byte individu menghasilkan ruang yang terbuang ketika datafile lebih kecil dari unit data terkecil yang dapat dilacak oleh sistem file. Ruang terbuang ini dalam suatu sektor, cluster, atau blok biasanya disebut ruang kendur, dan biasanya tidak dapat digunakan untuk penyimpanan data tambahan. Untuk masing-masing sektor 256-byte, ruang terbuang maksimum adalah 255 byte. Untuk kluster 64 kilobyte, ruang terbuang maksimum adalah 65.535 byte.

Jadi, jika sistem file Anda mengalokasikan ruang dalam unit 64 KB, dan Anda menyimpan file 3 KB, maka:

  • ukuran sebenarnya file adalah 3 KB.
  • ukuran penduduk file adalah 64 KB, karena 61 KB yang tersisa di unit itu tidak dapat dialokasikan ke file lain dan karenanya hilang.

Catatan : Beberapa sistem file mendukung sublokasi blok , yang membantu mengurangi masalah ini dengan menetapkan beberapa file kecil (atau ujung file besar) ke dalam blok yang sama.

Handyman5
sumber
1
Itu salah satu penjelasan yang bagus.
SpacemanSpiff
1
@ Handyman5 - Terima kasih Handyman5. Jadi ketika saya melihat ukuran file atau folder menggunakan ls itu mengembalikan ukuran sebenarnya sementara du mengembalikan ukuran penduduk? Apakah itu benar? Jadi ketika melihat ukuran file, mana yang paling akurat yaitu ukuran residen atau ukuran file atau apakah itu pertanyaan sewenang-wenang?
PeanutsMonkey
8
@PeanutsMonkey, akurasi ada di mata yang melihatnya. ;-) Pada dasarnya, jika Anda khawatir tentang berapa banyak ruang file akan memakan tempat lain (seperti menyalin melalui jaringan, menambah file zip, cadangan ke drive eksternal, dll), maka ukuran sebenarnya adalah apa kamu peduli. Jika Anda khawatir dengan jumlah ruang yang tersisa di drive tempat file tinggal sekarang, maka Anda peduli dengan ukuran penduduk. Karena dumenunjukkan kepada Anda disk ubijak, itu melihat ruang yang diambil pada drive saat ini, dan dengan demikian itu menunjukkan kepada Anda ukuran penduduk.
Handyman5
1
@ Handyman5 - Sudah hampir setahun setelah posting tetapi saya penasaran bagaimana jawaban di atas berbeda ketika menggunakan df -h?
PeanutsMonkey
1
dfmelaporkan jumlah blok yang tersisa * ukuran blok sistem file. Dalam hal ini akan lebih seperti du, karena bahkan blok yang digunakan sebagian dianggap sepenuhnya dialokasikan. dfpada dasarnya menerjemahkan statvfs , sehingga Anda bisa melihat panggilan sistem untuk mendapatkan ide yang lebih baik tentang apa yang terjadi.
Handyman5
19

Ada opsi lain di sini, yang belum dicakup - file jarang . Dalam hal ini, duakan menunjukkan ukuran yang lebih kecil daripada yang sederhana ls -l, karena lsmelaporkan "ukuran" file sebagai ukuran nyata (jumlah byte yang bisa Anda baca, jika Anda ingin banyak sekali nol), sementara duakan terus menggunakan jumlah sebenarnya blok disk yang digunakan.

Trik menyenangkan: Buat banyak file jarang yang besar, lalu buat teman-teman Anda terkesan dengan berapa banyak ruang disk yang Anda miliki ("lihat, saya menyimpan file 1TB trilyun-trilyun di hard drive saya!"). OKE, mungkin tidak begitu menyenangkan.

womble
sumber
6

Sistem file terdiri dari blok. File tidak harus rapi masuk ke blok. Jika sebuah file berukuran 1024 byte, ukurannya adalah ls dan du akan menjadi 1024. Jika ukuran file adalah 1025 ukurannya akan menjadi 1025 di ls dan 2048 di du.

Perhatikan contoh di atas mengasumsikan ukuran blok 1024. Ukuran blok yang lebih besar adalah norma hari ini e, g,

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred
Iain
sumber
0

Masih ada satu alasan lagi mengapa mereka berbeda. du -h tahu kapan ia melihat file yang sama dengan nama lain (hard link, sebagai lawan symlinks) dan akan melaporkan setiap file untuk ukurannya, tetapi hanya menambahkan ukuran satu kali ke direktori induk umum.

Clifford Heath
sumber