`du -s .` dan` du -hs .` memberikan hasil yang berbeda (pada OS X)

12

Perbedaannya dengan dan tanpa -hseharusnya hanya unit yang dapat dibaca manusia, kan?

Yah rupanya tidak ...

$ du -s .
74216696    .
$ du -hs .
 35G    .

Atau mungkin saya salah dan hasilnya du -s .tidak di KB?

Berderak
sumber
3
Coba gunakan du --block-size=1024 -s .. Mungkin Anda BLOCK_SIZEdiatur ke512
Echoes_86
6
Dari halaman manual (OSX): "Jika BLOCKSIZE tidak disetel, dan opsi -k tidak ditentukan, jumlah blok akan ditampilkan dalam blok 512-byte"
user4556274
Yang tidak sangat membantu jika sistem file sebenarnya dalam blok 4096-byte.
DopeGhoti
Jadi tidak ada cara untuk memiliki ukuran dalam byte? Saya pikir -hhanya membagi dengan 1024 dan menambahkan beberapa unit
Creak
2
echo "74216696*512" | bcoutput, 37998948352. Dan ya, -hmengkonversi ke bentuk yang dapat dibaca manusia dengan membagi berulang-ulang pada 1024. Apa yang saya dapatkan adalah 35,3887, yang sangat dekat dengan dulaporan apa . Sedangkan untuk ukuran dalam byte, cukup gunakan --block-size=1. Di Linux, ada -bopsi untuk itu, tapi saya tidak terbiasa dengan OS Xdu
Sergiy Kolodyazhnyy

Jawaban:

23

dutanpa specifier format output memberikan penggunaan disk dalam blok 512 byte, bukan kilobyte . Anda dapat menggunakan opsi -kuntuk ditampilkan dalam kilobyte sebagai gantinya. Pada OS X (atau macOS, atau MacOS, atau Macos; mana saja yang Anda suka), Anda dapat menyesuaikan unit default dengan mengatur variabel lingkungan BLOCKSIZE(ini mempengaruhi perintah lain juga).

DopeGhoti
sumber
1
Tidak tahu itu ... Apa minat memiliki jumlah blok? Saya belum pernah melihat satu orang menggunakan blok ketika berbicara tentang ukuran pada disk ...
Creak
2
Blok adalah unit atom sistem file. File apa pun akan menggunakan seluruh jumlah blok pada disk. Blok hanya dapat sebagian diisi dengan data aktual, tetapi seluruh blok dialokasikan ke file. Penggunaan sehari-hari kebanyakan orang tidak peduli tentang blok selain dalam arti persentase-digunakan-versus-bebas. Tetapi utilitas tingkat rendah (misalnya fdisk,, dfdan du) bekerja dalam blok kecuali diarahkan sebaliknya karena itu adalah unit dimana mereka menghitung secara internal.
DopeGhoti
1
@ Berderit Sebenarnya, bagian dari jawaban itu salah. Unit ini bukan ukuran blok dari sistem file. Untuk keperluan perintah Unix klasik seperti du, "blok" berarti 512 byte. Lihat ukuran blok file - perbedaan antara stat dan ls , Perbedaan antara ukuran blok dan ukuran kluster
Gilles 'SO- stop being evil'
3
"File apa pun akan menggunakan seluruh jumlah blok pada disk." Yah, umumnya ya — kecuali sistem file Anda menggunakan pengemasan ekor . Tapi ya, blok adalah unit dasar dari sistem file (walaupun ukuran blok aktual tidak selalu sejajar dengan ukuran blok yang digunakan oleh du.) :)
Wildcard
3

Masalahnya adalah bahwa dumengembalikan ukuran dalam jumlah blok 512 byte.

Untuk memiliki ukuran dalam KB, Anda dapat menggunakan -kopsi yang menggunakan blok 1024-byte sebagai gantinya:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
Berderak
sumber