Anda dapat menemukan definisi baris tersebut di ls
dokumentasi untuk platform Anda. Untuk coreutils
ls
(yang ditemukan di banyak sistem Linux), informasinya dapat ditemukan melalui info coreutils ls
:
Untuk setiap direktori yang terdaftar, awali file dengan baris`total BLOCKS', dengan BLOCKS adalah total alokasi disk untuk semua file dalam direktori tersebut.
Rumusnya:Apa itu nomor?
total int =Jumlah dari (physical_blocks_in_use) * physical_block_size/ls_block_size) untuk setiap file.
Di mana:
ls_block_size
adalah variabel lingkungan arbitrer (biasanya 512 atau 1024 byte) yang bebas dimodifikasi dengan--block-size=<int>
bendera padals
,POSIXLY_CORRECT=1
variabel lingkungan GNU (untuk mendapatkan unit 512-byte), atau-k
tandai untuk memaksa satuan 1kB.physical_block_size
adalah nilai yang bergantung pada OS dari antarmuka blok internal, yang mungkin terhubung atau tidak ke perangkat keras yang mendasarinya. Nilai ini biasanya 512b atau 1k, tetapi sepenuhnya bergantung pada OS. Itu dapat diungkapkan melalui%B
nilai padastat
ataufstat
. Perhatikan bahwa nilai ini (hampir selalu) tidak terkait dengan jumlah blok fisik pada modern perangkat penyimpanan.
Mengapa begitu membingungkan?
Angka ini cukup terlepas dari metrik fisik atau bermakna apa pun. Banyak pemrogram junior belum memiliki pengalaman dengan lubang file atau tautan keras/sym. Selain itu, dokumentasi yang tersedia untuk topik khusus ini hampir tidak ada.
Keterpisahan dan ambiguitas istilah "ukuran blok" telah menjadi hasil dari banyak ukuran berbeda yang mudah dibingungkan, dan tingkat abstraksi yang relatif dalam seputar akses disk.
Contoh informasi yang bertentangan:du
(atau ls -s
) vs stat
Menjalankan du *
dalam folder proyek menghasilkan yang berikut:(Catatan:ls -s
mengembalikan hasil yang sama.)
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
Total :2+2+1+3+3+5+26+4+2+14 =62 Blok
Namun ketika seseorang menjalankan stat
kita melihat seperangkat nilai yang berbeda. Menjalankan stat
dalam direktori yang sama menghasilkan:
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
Total: 3+3+1+5+6+10+51+8+3+28 =118 Blok
Catatan: Anda dapat menggunakan perintah
stat * --printf="%b\t(%B)\t%n: %s bytes\n"
> untuk menampilkan (dalam urutan) jumlah blok, (dalam tanda kurung) ukuran blok tersebut, nama file, dan ukuran dalam byte, seperti yang ditampilkan di atas.
Ada dua hal penting yang bisa diambil:
stat
melaporkan keduaphysical_blocks_in_use
danphysical_block_size
seperti yang digunakan pada rumus di atas. Perhatikan bahwa ini adalah nilai berdasarkan antarmuka OS.du
memberikan apa yang diterima secara umum sebagai perkiraan yang cukup akurat pemanfaatan disk fisik.
Sebagai referensi, berikut adalah ls -l
direktori di atas:
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
Itu adalah jumlah total blok sistem file, termasuk blok tidak langsung, yang digunakan oleh file yang terdaftar. Jika Anda menjalankan ls -s
pada file yang sama dan jumlahkan angka yang dilaporkan, Anda akan mendapatkan angka yang sama.