Perintah du Linux: memeriksa penggunaan disk file dan direktori

Perintah du menghitung ruang yang digunakan file dan direktori pada sistem berkas. Gunakan du -h --max-depth=1 . untuk melihat total direktori saat ini dan subdirektori langsungnya, atau du -sh . untuk melihat total saja.

du -h --max-depth=1 .
du -sh .

Secara default, du menggunakan blok yang dilaporkan teralokasi oleh sistem berkas, bukan ukuran tampak isi file. Hasil dapat berbeda pada file sparse (file dengan bagian kosong yang tidak harus dialokasikan), sistem berkas terkompresi, hard link, dan lingkungan copy-on-write (CoW, blok disalin saat diubah).

Apa yang dihitung oleh perintah du?

du berarti penggunaan disk, dan ia menelusuri pohon file dan direktori untuk menjumlahkan penggunaan disk. Karena dipengaruhi tidak hanya oleh isi file tetapi juga oleh metode alokasi blok sistem berkas, hal ini tidak selalu sesuai dengan ukuran file yang ditunjukkan oleh ls -l.

Opsi dan keterbatasan perhitungan dijelaskan dalam manual du GNU Coreutils di Debian.

Perintah dasar yang paling sering digunakan

Periksa ukuran total dari direktori saat ini

du -sh .

-s hanya menampilkan total, sedangkan -h menampilkan dalam satuan yang mudah dibaca seperti KiB, MiB, GiB. File tersembunyi dan direktori tersembunyi juga termasuk dalam total direktori saat ini.

Periksa ukuran subdirektori langsung

du -h --max-depth=1 .

--max-depth=1 menampilkan total titik awal dan setiap subdirektori langsung, bukan setiap file individual tanpa -a. Meskipun keluaran dibatasi, du tetap menelusuri isi yang lebih dalam untuk menghitung total. GNU du juga menerima -d 1; dukungan pada varian Unix lain dapat berbeda.

Temukan item besar dengan menyortir

du -h --max-depth=1 /var | sort -h

sort -h mengurutkan angka dengan satuan yang mudah dibaca. Untuk menampilkan nilai terbesar di atas, gunakan sort -hr. Total /var mencakup subdirektorinya, sehingga baris-baris ini saling tumpang tindih dan tidak boleh dijumlahkan lagi.

du -h --max-depth=1 /var | sort -hr

Direktori tanpa izin mungkin menghasilkan kesalahan, dan totalnya bisa tidak lengkap. Jalankan dengan izin yang sesuai hanya untuk ruang lingkup yang diperlukan, dan jangan hanya menyembunyikan kesalahan serta menganggap hasilnya sebagai nilai lengkap.

Ringkasan opsi utama

Opsi Fungsi Contoh penggunaan
-h Tampilkan dalam satuan yang mudah dibaca manusia du -h /var/log
-s Tampilkan hanya total dari setiap argumen du -sh /var/log
-a Tampilkan tidak hanya direktori tetapi juga file du -ah ./data
-c Tambahkan total keseluruhan di akhir du -ch file1 file2
-d N Tentukan kedalaman direktori maksimum yang akan ditampilkan du -h -d 2 .
-x Jangan menyeberang ke sistem berkas lain du -xhd1 /
--exclude Kecualikan jalur yang cocok dengan pola du -sh --exclude='*.log' .
--apparent-size Tampilkan ukuran tampak alih-alih ruang yang dialokasikan du -sh --apparent-size file

Cari file dan direktori secara detail

Tampilkan semua file

du -ah ./data | sort -hr | head -n 20

Ini berguna untuk mencari item terbesar dalam direktori kecil. Direktori dan isinya dapat sama-sama muncul sehingga nilainya saling tumpang tindih. Pada sistem berkas besar, penelusuran dan pengurutan seluruh jalur dapat menggunakan banyak I/O dan memori.

Tampilkan item yang mencapai ukuran minimum

du -h --threshold=1G ./data

Opsi GNU --threshold menampilkan item yang ukurannya sama dengan atau lebih besar daripada ambang positif yang ditentukan. Opsi ini dapat berbeda atau tidak tersedia pada implementasi Unix lain; periksa du --help bila portabilitas diperlukan.

Kecualikan file atau direktori tertentu

du -sh --exclude='*.log' --exclude='cache' .

Letakkan pola --exclude dalam tanda kutip tunggal agar shell tidak memperluasnya terlebih dahulu. Untuk banyak aturan, buat file du-exclude.txt pada direktori kerja dengan satu pola per baris, misalnya *.log dan cache pada baris terpisah, lalu jalankan:

du -sh --exclude-from=du-exclude.txt .

Perbedaan antara penggunaan sebenarnya dan ukuran tampak

Penggunaan disk teralokasi

Secara default, du menjumlahkan blok yang dilaporkan teralokasi untuk file. File kecil dapat memakai lebih banyak ruang daripada panjang isinya karena satuan alokasi; metadata dan struktur internal sistem berkas mungkin tidak seluruhnya tercermin dalam hasil.

Ukuran tampak

--apparent-size menunjukkan nilai yang mendekati panjang logis dari konten untuk file reguler.

du -h sample.img
du -h --apparent-size sample.img

File sparse dapat memiliki ukuran logis yang sangat besar tetapi hampir tidak menggunakan blok nyata. Sebaliknya, dalam lingkungan dengan kompresi sistem berkas, deduplikasi, snapshot, atau blok bersama Copy-on-Write, du dasar juga dapat berbeda dari konsumsi aktual pada perangkat fisik.

Hard link

Hard link adalah beberapa nama untuk inode yang sama. Secara default GNU du menghitung ruang file itu sekali; urutan argumen dapat memengaruhi jalur mana yang menerima hitungan. Opsi -l menghitung setiap hard link dan dapat menghasilkan total lebih besar daripada blok unik sebenarnya.

Membatasi penelusuran sistem berkas

Melewati sistem berkas lain

Saat memeriksa sistem berkas root, -x atau --one-file-system mencegah penelusuran melintasi batas ke sistem berkas lain.

du -xhd1 /

Opsi ini mengurangi kemungkinan secara tidak sengaja menelusuri sistem berkas jaringan, volume data terpisah, atau sistem berkas virtual. Namun, penggunaan titik mount terpisah dikecualikan dari hasil, jadi pastikan sesuai dengan tujuan penyelidikan Anda.

Menangani symbolic link

Secara default GNU du tidak mengikuti target symbolic link, baik yang diberikan sebagai argumen maupun yang ditemukan di dalam direktori. -D mengikuti link yang diberikan sebagai argumen, sedangkan -L mengikuti semua symbolic link. Periksa struktur target dan batas sistem berkas sebelum menggunakannya karena cakupan penelusuran dapat meluas.

Mengapa hasil du dan df berbeda?

Target perhitungan berbeda

du merangkum file-file dalam direktori yang bisa diakses, sedangkan df melaporkan penggunaan untuk seluruh sistem berkas. Perbedaan dapat terjadi karena metadata sistem berkas, blok yang dicadangkan, snapshot, atau jalur yang tidak dapat dibaca karena izin.

File terhapus tetapi masih terbuka

Jika nama terakhir sebuah file dihapus saat proses masih membukanya, du tidak lagi menemukannya melalui pohon direktori. Bloknya tetap dipakai sampai referensi terbuka dilepas, sehingga masih tercermin pada df. Periksa file terbuka yang jumlah link-nya kurang dari satu dengan:

lsof +L1

Jangan langsung menghentikan proses secara paksa. Periksa prosedur restart layanan atau pembukaan ulang log yang normal. Mengubah deskriptor file yang terhapus secara sembarangan dapat menyebabkan kehilangan data atau gangguan layanan.

Cara menggunakan du dengan aman dan akurat

  • Pertama, periksa seluruh sistem berkas dengan df -h, kemudian jalankan du dalam titik mount masing-masing.
  • Saat menyelidiki dari root, tentukan apakah akan mengecualikan sistem berkas lain menggunakan -x.
  • Untuk direktori besar, lakukan pemeriksaan pada waktu beban rendah. Membatasi kedalaman keluaran tidak menghentikan penelusuran isi yang lebih dalam.
  • Jika terjadi kesalahan izin, catat fakta bahwa hasilnya tidak lengkap dan gunakan hanya izin minimum yang diperlukan.
  • Sebelum menghapus file, periksa proses yang memilikinya, cadangan, kebijakan retensi, dan apakah pemulihan memungkinkan.
  • Nama file mungkin mengandung karakter khusus seperti pemecah baris, jadi pertimbangkan menggunakan kombinasi alat yang mendukung pemisahan NUL dalam otomatisasi.

Pertanyaan umum

Apakah file tersembunyi termasuk dalam hasil du?

Jika Anda menentukan direktori itu sendiri, seperti du -sh ., file tersembunyi termasuk dalam total. Namun, * default shell tidak mencocokkan item tersembunyi, sehingga hasil du -sh * mungkin mengecualikannya.

Bagaimana saya bisa dengan cepat menemukan direktori terbesar?

Gunakan du -h --max-depth=1 target | sort -hr untuk melihat ringkasan subdirektori lalu periksa cabang yang besar. Keluaran lebih sedikit daripada daftar semua file, tetapi perhitungan tetap menelusuri isi yang lebih dalam.

Mengapa ukuran berbeda antara du -sh dan ls -lh?

ls -lh terutama menampilkan panjang logis file, sementara default du menampilkan blok sistem berkas yang dialokasikan. Perbedaan dapat terjadi karena file sparse, file kecil, dan ukuran blok.

Apakah boleh menyembunyikan kesalahan 'Permission denied'?

Meskipun dapat membuat layar lebih bersih, fakta bahwa hasilnya tidak lengkap juga hilang. Dalam penyelidikan kapasitas, lebih aman untuk terlebih dahulu memeriksa jalur tempat terjadi kesalahan dan meninjau alasan serta cakupan izin yang diperlukan.

Ringkasan

du -sh path menunjukkan total, sedangkan du -h --max-depth=1 path menampilkan total direktori awal dan subdirektori langsungnya. Gabungkan dengan sort -hr untuk mengurutkan nilai, atau gunakan -x untuk membatasi penelusuran ke satu sistem berkas.

Nilai du adalah perkiraan yang dipengaruhi oleh struktur sistem berkas dan metode alokasinya. Jika ada perbedaan dengan df, Anda perlu memeriksa file terbuka yang dihapus, blok yang dicadangkan, snapshot, dan masalah izin.