Cara Mendapatkan Ukuran Fail atau Direktori di Linux

Apabila anda menggunakan duperintah Linux , anda memperoleh penggunaan cakera sebenar dan ukuran sebenar fail atau direktori. Kami akan menerangkan mengapa nilai-nilai ini tidak sama.

Penggunaan Cakera Sebenar dan Ukuran Sebenar

Saiz fail dan ruang yang terdapat pada cakera keras anda jarang sama. Ruang cakera diperuntukkan dalam blok. Sekiranya fail lebih kecil daripada blok, keseluruhan blok masih diperuntukkan kerana sistem fail tidak mempunyai unit harta tanah yang lebih kecil untuk digunakan.

Kecuali ukuran fail adalah bilangan blok yang tepat, ruang yang digunakannya pada cakera keras mesti selalu dibundarkan ke seluruh blok berikutnya. Sebagai contoh, jika fail lebih besar daripada dua blok tetapi lebih kecil daripada tiga, ia masih memerlukan tiga blok ruang untuk menyimpannya.

Dua ukuran digunakan berkaitan dengan ukuran fail. Yang pertama adalah ukuran sebenar fail, iaitu jumlah isi bait yang membentuk fail. Yang kedua adalah ukuran fail yang berkesan pada cakera keras. Ini adalah bilangan blok sistem fail yang diperlukan untuk menyimpan fail tersebut.

Satu contoh

Mari lihat contoh yang mudah. Kami akan mengalihkan satu watak ke dalam fail untuk membuat fail kecil:

gema "1"> geek.txt

Sekarang, kami akan menggunakan senarai format panjang  ls, untuk melihat panjang fail:

ls -l geek.txt

Panjangnya adalah nilai berangka yang mengikuti dave dave  entri, iaitu dua bait. Mengapa dua bait ketika kita hanya menghantar satu watak ke fail? Mari lihat apa yang berlaku di dalam fail.

Kami akan menggunakan hexdumpperintah, yang akan memberi kami jumlah bait yang tepat dan membolehkan kami "melihat" watak yang tidak dicetak sebagai nilai heksadesimal. Kami juga akan menggunakan pilihan -C(kanonik) untuk memaksa output untuk menunjukkan nilai heksadesimal dalam badan output, serta setara aksara alfanumeriknya:

hexdump -C geek.txt

Output menunjukkan kepada kita bahawa, bermula dari mengimbangi 00000000 dalam fail, terdapat bait yang mengandungi nilai heksadesimal 31, dan satu yang mengandungi nilai heksadesimal 0A. Bahagian kanan output menggambarkan nilai-nilai ini sebagai watak alfanumerik, sedapat mungkin.

Nilai heksadesimal 31 digunakan untuk mewakili digit satu. Nilai heksadesimal 0A digunakan untuk mewakili watak Jalur Umpan, yang tidak dapat ditunjukkan sebagai aksara alfanumerik, jadi ia ditunjukkan sebagai titik (.) Sebagai gantinya. Watak Line Line ditambahkan oleh echo. Secara lalai,  echomemulakan baris baru setelah memaparkan teks yang perlu ditulisnya ke tetingkap terminal.

Itu sesuai dengan output dari  ls dan setuju dengan panjang fail dua bait.

BERKAITAN: Cara Menggunakan Perintah ls untuk Menyenaraikan Fail dan Direktori di Linux

Sekarang, kami akan menggunakan duperintah untuk melihat ukuran fail:

du geek.txt

Ia mengatakan ukurannya empat, tetapi empat dari apa?

Terdapat Blok, dan Kemudian Ada Blok

Apabila du melaporkan ukuran fail dalam blok, ukuran yang digunakan bergantung pada beberapa faktor. Anda boleh menentukan ukuran blok mana yang harus digunakan pada baris perintah. Sekiranya anda tidak memaksa duuntuk menggunakan ukuran blok tertentu, ia mengikuti sekumpulan peraturan untuk memutuskan mana yang akan digunakan.

Pertama, ia memeriksa pemboleh ubah persekitaran berikut:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOKKSIZE

Sekiranya ada, ukuran blok ditetapkan, dan duberhenti diperiksa. Sekiranya tidak ditetapkan,  dulalai dengan ukuran blok 1.024 bait. Kecuali, iaitu, pemboleh ubah persekitaran yang disebut POSIXLY_CORRECTditetapkan. Sekiranya demikian, dulalai dengan ukuran blok 512 bait.

Jadi, bagaimana kita mengetahui yang mana yang digunakan? Anda boleh memeriksa setiap pemboleh ubah persekitaran untuk menyelesaikannya, tetapi ada cara yang lebih cepat. Mari bandingkan hasilnya dengan ukuran blok yang digunakan oleh sistem fail.

Untuk mengetahui saiz blok yang digunakan sistem fail, kami akan menggunakan tune2fsprogram ini. Kami kemudian akan menggunakan pilihan -l(daftar superblok), menyalurkan output grep, dan kemudian mencetak garis yang mengandungi kata "Blok".

Dalam contoh ini, kita akan melihat sistem fail pada partisi pertama cakera keras pertama sda1, dan kita perlu menggunakan sudo:

sudo tune2fs -l / dev / sda1 | sekatan grep

Saiz blok sistem fail ialah 4,096 bait. Sekiranya kita membahagikannya dengan hasil yang kita dapat dari du (empat), ini menunjukkan  du ukuran blok lalai adalah 1.024 bait. Kami kini mengetahui beberapa perkara penting.

Pertama, kita mengetahui jumlah harta tanah sistem fail terkecil yang boleh dikhaskan untuk menyimpan fail ialah 4,096 bait. Ini bererti walaupun fail dua byte kecil kami mengambil ruang cakera keras 4 KB.

Perkara kedua yang perlu diingat adalah aplikasi khusus untuk melaporkan statistik memandu dan sistem fail keras, seperti du, lsdan  tune2fs, boleh mempunyai tanggapan yang berbeza tentang apa yang "blok" ertinya. Yang tune2fspermohonan laporan saiz blok sistem fail benar, sementara  lsdan duboleh dikonfigurasi atau terpaksa menggunakan saiz blok lain. Ukuran blok tersebut tidak dimaksudkan untuk berkaitan dengan ukuran blok sistem fail; mereka hanya "potongan" perintah yang digunakan dalam outputnya.

Akhirnya, selain menggunakan ukuran blok yang berbeza, jawapan dari dudan tune2fs menyampaikan makna yang sama. The tune2fskeputusan adalah satu blok 4,096 bait, dan duhasil empat blok 1,024 bait.

Menggunakan du

Tanpa parameter atau pilihan baris perintah, dusenaraikan jumlah ruang cakera direktori semasa dan semua subdirektori yang digunakan.

Mari kita lihat contohnya:

du

Ukurannya dilaporkan dalam ukuran blok lalai 1.024 bait per blok. Seluruh pokok subdirektori dilalui.

Menggunakan dupada Direktori yang berbeza

Sekiranya anda ingin  du melaporkan pada direktori yang berbeza daripada yang sekarang, anda boleh meneruskan jalan ke direktori pada baris perintah:

du ~ / .cach / evolusi /

Menggunakan dupada Fail Khusus

Sekiranya anda ingin  du melaporkan fail tertentu, lulus jalan ke fail tersebut pada baris perintah. Anda juga dapat meneruskan corak cengkerang untuk memilih sekumpulan fail, seperti *.txt:

du ~ / .bash_aliases

Melaporkan Fail di Direktori

Untuk mempunyai dulaporan mengenai fail di direktori dan subdirektori terkini, gunakan pilihan -a(semua fail):

du -a

Untuk setiap direktori, ukuran setiap file dilaporkan, serta jumlah untuk setiap direktori.

Mengehadkan Kedalaman Pokok Direktori

Anda boleh memberitahu duuntuk menyenaraikan pokok direktori hingga kedalaman tertentu. Untuk melakukannya, gunakan pilihan -d(kedalaman maksimum) dan berikan nilai kedalaman sebagai parameter. Perhatikan bahawa semua subdirektori diimbas dan digunakan untuk mengira jumlah yang dilaporkan, tetapi semuanya tidak disenaraikan. Untuk menetapkan kedalaman direktori maksimum satu tahap, gunakan perintah ini:

du -d 1

Keluaran menyenaraikan jumlah ukuran subdirektori itu dalam direktori semasa dan juga memberikan jumlah untuk setiap satu.

Untuk menyenaraikan direktori satu tahap lebih dalam, gunakan arahan ini:

du -d 2

Menetapkan Ukuran Blok

Anda boleh menggunakan blockpilihan untuk menetapkan ukuran blok untuk du operasi semasa. Untuk menggunakan ukuran blok satu bait, gunakan perintah berikut untuk mendapatkan ukuran direktori dan fail yang tepat:

du - blok = 1

Sekiranya anda ingin menggunakan ukuran blok satu megabait, anda boleh menggunakan pilihan -m(megabait), yang sama dengan --block=1M:

du -m

Sekiranya anda mahukan ukuran yang dilaporkan dalam ukuran blok yang paling sesuai mengikut ruang cakera yang digunakan oleh direktori dan fail, gunakan pilihan -h(boleh dibaca manusia)

du -h

Untuk melihat ukuran fail yang jelas daripada jumlah ruang cakera keras yang digunakan untuk menyimpan fail, gunakan --apparent-sizepilihan:

du - ukuran yang jelas

Anda boleh menggabungkannya dengan pilihan -a(semua) untuk melihat ukuran jelas setiap fail:

du - saiz yang nyata -a

Setiap fail disenaraikan, beserta ukurannya yang jelas.

Hanya Memaparkan Jumlah

Sekiranya anda ingin  du melaporkan jumlah keseluruhan direktori, gunakan pilihan -s(ringkaskan). Anda juga boleh menggabungkannya dengan pilihan lain, seperti pilihan -h(boleh dibaca manusia)

du -h -s

Di sini, kami akan menggunakannya dengan --apparent-sizepilihan:

du - ukuran -saiz

Memaparkan Masa Pengubahsuaian

Untuk melihat masa dan tarikh pembuatan atau pengubahsuaian terakhir, gunakan --timepilihan:

du - waktu -d 2

Hasil Pelik?

Sekiranya anda melihat hasil yang pelik du, terutama ketika anda membuat ukuran rujukan silang ke output dari perintah lain, ini biasanya disebabkan oleh ukuran blok yang berbeza yang boleh ditetapkan perintah yang berlainan atau perintah yang menjadi default. Ini juga mungkin disebabkan oleh perbezaan antara ukuran fail sebenar dan ruang cakera yang diperlukan untuk menyimpannya.

Sekiranya anda perlu memadankan output perintah lain, bereksperimen dengan --blockpilihan di du.