Cara Mendapatkan Ukuran Fail atau Direktori di Linux
Apabila anda menggunakan du
perintah 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 hexdump
perintah, 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, echo
memulakan 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 du
perintah 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 du
untuk 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 du
berhenti diperiksa. Sekiranya tidak ditetapkan, du
lalai dengan ukuran blok 1.024 bait. Kecuali, iaitu, pemboleh ubah persekitaran yang disebut POSIXLY_CORRECT
ditetapkan. Sekiranya demikian, du
lalai 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 tune2fs
program 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
, ls
dan tune2fs
, boleh mempunyai tanggapan yang berbeza tentang apa yang "blok" ertinya. Yang tune2fs
permohonan laporan saiz blok sistem fail benar, sementara ls
dan du
boleh 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 du
dan tune2fs
menyampaikan makna yang sama. The tune2fs
keputusan adalah satu blok 4,096 bait, dan du
hasil empat blok 1,024 bait.
Menggunakan du
Tanpa parameter atau pilihan baris perintah, du
senaraikan 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 du
pada 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 du
pada 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 du
laporan 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 du
untuk 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 block
pilihan 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-size
pilihan:
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-size
pilihan:
du - ukuran -saiz
Memaparkan Masa Pengubahsuaian
Untuk melihat masa dan tarikh pembuatan atau pengubahsuaian terakhir, gunakan --time
pilihan:
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 --block
pilihan di du
.