Bagaimana cara mendapatkan ukuran fisik file di Linux?

12

Saya dapat menggunakan ls -luntuk mendapatkan ukuran logis dari file, tetapi apakah ada cara untuk mendapatkan ukuran fisik file?

pengguna285003
sumber
Tolong, jelaskan apa yang Anda maksud dengan ukuran "fisik".
Jörg W Mittag

Jawaban:

28

ls -lakan memberi Anda ukuran yang jelas dari file tersebut, yang merupakan jumlah byte yang akan dibaca oleh program jika membaca file dari awal hingga selesai. duakan memberi Anda ukuran file "pada disk".

Secara default, dumemberi Anda ukuran file dalam jumlah blok disk, tetapi Anda dapat menggunakan -huntuk mendapatkan unit yang dapat dibaca manusia. Lihat juga manual untuk dudi sistem Anda.

Perhatikan bahwa dengan GNU coreutil du(yang mungkin apa yang Anda miliki di Linux), -buntuk mendapatkan byte berarti --apparent-sizeopsi. Ini bukan apa yang ingin Anda gunakan untuk mendapatkan jumlah byte yang sebenarnya digunakan pada disk. Sebaliknya, gunakan --block-size=1atau -B 1.

Dengan GNU ls, Anda juga dapat melakukannya ls -s --block-size=1pada file. Ini akan memberikan nomor yang sama du -B 1dengan file.


Contoh:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

Ini berarti bahwa ini adalah file 512 MB yang membutuhkan waktu sekitar 24 KB pada disk. Ini adalah file yang jarang (kebanyakan nol yang sebenarnya tidak ditulis ke disk tetapi direpresentasikan sebagai "lubang" logis dalam file). File jarang adalah umum ketika bekerja dengan file besar yang dialokasikan sebelumnya, misalnya gambar disk untuk mesin virtual atau bertukar file dll. Membuat file jarang cepat, sementara mengisinya dengan nol lambat (dan tidak perlu).

Lihat juga manual untuk fallocatedi sistem Linux Anda.

Kusalananda
sumber
dalam hal apa perbedaan ini penting? dapatkah Anda membuat contoh praktis? Terima kasih sebelumnya.
D'Arcy Nader
1
@ D'ArcyNader Lihat jawaban yang diperbarui.
Kusalananda
Perbaiki saya jika saya salah mengerti sesuatu, tetapi tampaknya kalimat pertama adalah sebaliknya: stackoverflow.com/a/31437673/3701431 du akan menunjukkan seberapa banyak data dapat dibaca, sementara lsmenunjukkan sejauh mana sektor disk dialokasikan.
Sergiy Kolodyazhnyy
2
@SergiyKolodyazhnyy (maaf untuk membalas terlambat) Tidak, dumenunjukkan jumlah disk yang sebenarnya digunakan oleh file, sedangkan ukuran yang terlihat (ukuran logis) yang ditunjukkan oleh lsadalah berapa banyak byte yang dapat dibaca oleh suatu program. Jika file jarang, beberapa byte baca akan menjadi nol, tetapi mereka masih akan dikirim ke program yang membacanya (tidak hanya dari disk).
Kusalananda
Ini jawaban yang sangat bagus.
Lizardx
3

Saya mendapatkan ukuran file dalam byte seperti ini:

actualsize=$(du -b "${file}" | cut -f 1)
Woo hoo
sumber