Jika Anda menjalankan ls-l pada file yang berisi satu huruf, ukurannya akan terdaftar sebagai 2B. Jika sistem file Anda dalam blok 4k, saya pikir itu membulatkan file hingga ukuran blok? Apakah karena ls-l sebenarnya membaca jumlah byte dari inode? Dalam keadaan apa Anda dibulatkan untuk memblokir jawaban vs jawaban jumlah byte aktual dalam Linux 2.6 Kernel GNU utils?
linux
filesystems
ls
ext3
Gregg Leventhal
sumber
sumber
Jawaban:
Saya kira Anda memasukkan satu huruf ke dalam file dengan
echo a > file
atauvim file
, yang berarti, Anda akan memiliki huruf itu dan baris baru tambahan di dalamnya (dua karakter, jadi dua byte).ls -l
menunjukkan ukuran file dalam byte, bukan blok (lebih spesifik: panjang file ):(catatan yang
cat -A
menampilkan baris baru sebagai$
karakter)Berbeda dengan
ls -l
,du
akan menunjukkan ukuran sebenarnya yang ditempati pada disk:(sebenarnya,
du
menunjukkan ukuran dalam unit 1kiB, jadi di sini ukurannya 4 × 1024 byte = 4096 byte = 4 kiB, yang merupakan ukuran blok pada sistem file ini)Untuk
ls
menunjukkan ini, Anda harus menggunakan-s
opsi alih-alih / selain-l
:Kolom pertama adalah ukuran yang dialokasikan, lagi dalam satuan 1kiB. Terakhir dapat diubah dengan menentukan
--block-size
, missumber
Saya pikir jawabannya adalah sebagai berikut:
Seperti jawaban lain menunjukkan, pada prinsipnya file yang dibuat dengan dua byte memiliki panjang dua byte (show by
ls -l
) dan menempati 4 KiB (show bydu
atauls -ls
).Lihat:
Ok,
test
memiliki panjang 1 dan ukuran (pada disk) 4 KiB. Tapi:(perintah pertama menambahkan 8191 byte nol ke
test
), sekarang tes memiliki panjang 8192 tetapi masih menempati 4 KiB pada disk (memiliki "lubang") di dalamnya (1).Beberapa sistem file juga dapat memadatkan file pendek sehingga mereka menghabiskan lebih sedikit ruang dengan berbagi blok (lihat misalnya pengemasan ekor ) dan yang lain seperti btrf yang menyalin pada penulisan , sehingga hubungan antara file, panjang logisnya, dan berapa banyak ruang yang ditempati pada disk adalah disk yang kompleks.
Catatan kaki:
(1) Ini sebenarnya bukan lubang , itu pada akhirnya ... tapi tetap, itu bekerja sampai akhir contoh.
sumber
ls -l
hanya format panjang.ls -ls
digunakan untuk menampilkan ukuran blok.Pengujian
Seperti yang bisa kita lihat ukuran file tersebut terdaftar sebagai 2B. Namun, jika Anda perlu memeriksa ukuran blok, Anda harus menjalankan perintah di bawah ini.
4 di atas menampilkan ukuran blok yang digunakan. Kami juga dapat memverifikasi yang sama menggunakan
stat
perintah.Sekarang muncul pertanyaan mengapa
ls -ls
daftar ukuran blok sebagai 4 sementarastat
menampilkan ukuran blok sebagai 8. Alasan perilaku ini dijelaskan dengan jelas dalam jawaban di sini .sumber