Setelah menggali ke dalam kode sumber dan standar POSIX, saya akan mengatakan jawaban oleh @ antje-m dan @Gilles sebagian besar benar.
Layak untuk mengutip komentar dari POSIX.1-2008 , sebagai ringkasan:
Penggunaan unit 512-byte adalah praktik historis dan memelihara kompatibilitas dengan ls dan utilitas lain dalam volume POSIX.1-2008 ini. Ini tidak mengamanatkan bahwa sistem file itu sendiri didasarkan pada blok 512-byte. Opsi -k ditambahkan sebagai ukuran kompromi. Disetujui oleh pengembang standar bahwa 512 byte adalah unit default terbaik karena konsistensi historis lengkapnya pada Sistem V (versus penggunaan campuran 512/1024-byte pada sistem BSD), dan bahwa opsi -k untuk beralih ke 1024- unit byte adalah kompromi yang baik. Pengguna yang lebih suka kuantitas 1024-byte yang lebih logis dapat dengan mudah alias df ke df -k tanpa melanggar banyak skrip historis yang mengandalkan unit 512-byte.
Untuk ukuran blok di ls -s
:
POSIX mengatakan bahwa ukuran blok default ditentukan oleh implementasi, kecuali jika -k
opsi diberikan.
Ukuran blok default yang diterapkan GNU coreutils
ls
adalah didefinisikan dalam GNU gnulib
:
gnulib/lib/human.c
/* The default block size used for output. This number may change in
the future as disks get larger. */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif
yang berasal dari komit lama:
commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering <[email protected]>
Date: Mon Jun 29 15:23:04 1998 +0000
Pesan komit itu sendiri tidak mengatakan apa-apa tentang nomor 1024.
Dan perhatikan bahwa ukuran blok yang digunakan du
dan df
juga 1024, ls
hanya memilih untuk mengikutinya. Meskipun untuk du
dan df
itu adalah konflik dengan standar POSIX (jadi di sini variabel lingkungan POSIXLY_CORRECT
datang). Ini sepertinya keputusan tim GNU, lihat halaman wikipedia POSIX tentang kontroversi ini.
Untuk perintah stat
.
Ini bukan bagian dari standar POSIX, tetapi panggilan sistem . Namun unit untuk ukuran blok tidak terstandarisasi ( sys_stat.h ):stat
Unit untuk anggota st_blocks dari struktur stat tidak didefinisikan dalam POSIX.1-2008.
The stat
perintah hanya menampilkan informasi yang diberikan oleh stat
system call, dan menggunakan 512 ukuran blok dengan beberapa pengecualian (mereka non-Linux, misalnya HP-UX, IBM AIX dll melihat makro didefinisikan dalam gnulib/lib/stat-size.h
).
Jadi angka 512 lebih merupakan pilihan historis dan konvensi Linux.
The GNU coreutils
(maka ls
perintah) bukan merupakan bagian dari kernel Linux (maka stat
panggilan), mereka menargetkan aspek sistem yang berbeda, GNU coreutils
lebih untuk manusia (mudah dibaca), dan kernel Linux untuk hardware abstrak (maka lebih dekat ke hardware).
Sunting: ukuran blok 4096 adalah ukuran "IO blok", ukuran blok fisik nyata kemungkinan masih 512 Byte seperti yang dijelaskan dalam pertanyaan ini .