Perintah truncate Linux: ukuran file, satuan, dan area sparse
truncate mengubah ukuran logis file: mengecilkan membuang bagian akhir, sedangkan memperbesar menambahkan bagian yang dibaca sebagai byte nol dan dapat berupa area sparse. Gunakan salinan untuk latihan, tentukan ukuran beserta satuannya, lalu periksa panjang file dan penggunaan disk secara terpisah.
Contoh menggunakan GNU Coreutils. Periksa truncate --help, man truncate, dan versi distribusi untuk dukungan opsi. Siapkan direktori latihan baru dengan mkdir -- truncate-lab && cd -- truncate-lab; jika pembuatan gagal, hentikan dan periksa penyebabnya. Gunakan nama file latihan yang belum dipakai, bukan log layanan, citra disk penting, atau jalur perangkat. Perintah berikut mengubah file langsung tanpa dialog konfirmasi.
Apa itu perintah truncate?
Ukuran logis adalah jumlah byte dari awal hingga akhir file, bukan jumlah ruang disk yang sudah dialokasikan. Area sparse (hole) adalah rentang yang dibaca sebagai nol tanpa perlu memiliki blok data untuk setiap byte. File yang belum ada dibuat secara default; -c mencegah pembuatan itu. Induk direktori tetap harus tersedia.
Sintaks dasar
truncate [OPSI]... FILE...
Kutip jalur yang mengandung spasi. Gunakan -- sebelum nama file yang diawali tanda hubung. Pengutipan mencegah pemecahan argumen dan ekspansi wildcard, tetapi tidak memastikan bahwa jalur menunjuk ke file yang benar. Periksa direktori kerja dan target terlebih dahulu.
Penggunaan dasar truncate
Mengurangi file menjadi nol byte
Perintah berikut mempertahankan file dengan panjang nol. Pada Linux, ukuran yang berubah memperbarui waktu modifikasi dan perubahan status; bit set-user-ID/set-group-ID (eksekusi dengan identitas pemilik atau grup file) juga dapat dibersihkan. Jadi, jangan menganggap seluruh atribut tetap sama. Jika application.log belum ada, perintah ini justru membuatnya; gunakan hanya file latihan.
truncate -s 0 application.log
Buat file dengan ukuran logis tertentu
Satuan tanpa akhiran berarti byte. Pada GNU, M dan MiB berarti 1.048.576 byte, sedangkan MB berarti 1.000.000 byte; G dan GiB berarti 1.073.741.824 byte. Contoh meminta panjang 104.857.600 dan 1.073.741.824 byte. Keduanya bukan jaminan ruang fisik sudah disediakan.
truncate -s 100M test.img
truncate -s 1GiB sparse.img
Perbesar atau perkecil relatif terhadap ukuran saat ini
Tanda + menambah panjang saat ini; - menguranginya. Dalam direktori latihan, data.bin yang belum ada diperlakukan mulai dari panjang nol: perintah pertama menghasilkan 10.485.760 byte, lalu perintah kedua menghasilkan 9.961.472 byte. Jika file sudah ada, hasilnya bergantung pada ukuran awal. Mengulang pasangan ini terus mengubah ukuran, sehingga tidak cocok sebagai penetapan ukuran tetap.
truncate -s +10M data.bin
truncate -s -512K data.bin
Memeriksa ukuran setelah mengosongkan file
truncate biasanya tidak mencetak pesan saat berhasil; pesan kosong saja bukan bukti keberhasilan. Contoh lengkap berikut membuat data uji, mengosongkannya, lalu menampilkan panjang hanya jika langkah sebelumnya berhasil. Nama demo.txt harus belum digunakan dalam direktori latihan.
printf '%s' 'abc' > demo.txt &&
truncate -s 0 -- demo.txt &&
stat -c '%s %n' -- demo.txt
Keluaran yang diharapkan adalah 0 demo.txt. && menghentikan rangkaian jika ada langkah gagal; periksa status keluar dan pesan kesalahan bila hasil berbeda. Memperbesar file kembali tidak mengembalikan byte yang sudah dipotong. Pemulihan memerlukan cadangan atau salinan lain, dan keberhasilannya tidak dijamin.
Opsi utama
| Opsi | Tujuan |
|---|---|
-s SIZE |
Atur atau sesuaikan ukurannya. |
-c |
Jangan buat file yang belum ada. |
-r FILE |
Gunakan ukuran file referensi. |
-o |
Interpretasikan ukuran dalam blok I/O file daripada byte. |
Bentuk panjangnya adalah --size=SIZE, --no-create, --reference=FILE, dan --io-blocks. -c dapat melewati file yang belum ada tanpa membuatnya dan tetap berhasil: status nol tidak membuktikan file itu tersedia. Opsi -o memakai ukuran blok masukan/keluaran (I/O) file, bukan satuan tetap 512 byte; periksa nilai yang dilaporkan stat -c %o FILE. Pastikan opsi GNU didukung sebelum memindahkan skrip ke sistem lain.
Contoh praktis
Cocokkan ukuran file referensi
-r memakai panjang file referensi tanpa menyalin isinya. Contoh lengkap ini menulis dua file latihan baru: referensi 8 byte dan target 3 byte. Keluaran akhirnya adalah 8 reference.img dan 8 target.img; 3 byte awal target dipertahankan dan sisanya dibaca sebagai nol. Jika target lebih panjang dari referensi, bagian akhirnya justru dipotong.
printf '%s' 'REF-DATA' > reference.img &&
printf '%s' 'abc' > target.img &&
truncate -r reference.img -- target.img &&
stat -c '%s %n' -- reference.img target.img
Terapkan ukuran maksimum atau minimum
Awalan < membatasi ukuran maksimum: file 120 MiB menjadi 100 MiB, tetapi file 80 MiB tetap 80 MiB. Awalan > menetapkan minimum: file kosong menjadi 1 MiB, sedangkan file 2 MiB tetap. Tanda kutip diperlukan agar shell tidak membaca < atau > sebagai pengalihan. Ketiadaan file tetap mengikuti aturan pembuatan default.
truncate -s '<100M' cache.bin
truncate -s '>1M' placeholder.bin
Bandingkan ukuran logis dan ruang yang dialokasikan
Jalankan pada sparse.img latihan. Nilai size yang diharapkan adalah 1.073.741.824 byte. Pada GNU stat, %b adalah jumlah blok yang dialokasikan. Periksa ukuran unitnya dengan stat -c %B sparse.img; pada Linux nilainya 512 byte. Sementara itu, du -h menampilkan penggunaan dengan satuan yang dibulatkan. Nilai blok dan du bergantung pada sistem berkas, alokasi, kompresi, dan fitur penyimpanan; jangan menjanjikan angka nol atau angka tertentu. Memperbesar file yang sudah berisi data tidak membuat blok lamanya hilang.
truncate -s 1G sparse.img
stat -c 'size=%s blocks=%b' sparse.img
du -h sparse.img
Perbandingan dengan perintah lain
Jika perlu memilih cara kerja lain sebelum mengubah file, referensi perintah Linux berdasarkan tugas (bahasa Inggris) membantu membedakan pengelolaan metadata, isi, dan ruang disk.
| Perintah atau metode | Peran utama | Cocok untuk |
|---|---|---|
truncate |
Mengubah batas akhir dan ukuran logis file | Mengatur panjang atau membuat file sparse |
touch |
Membuat file kosong atau mengubah cap waktu | Membuat file kosong bila belum ada atau memperbarui waktu tanpa memotong isi |
dd |
Menulis atau menyalin blok data aktual | Mengisi konten atau membuat citra perangkat |
| Alat rotasi log | Mengarsipkan, mengompres, dan mengoordinasikan pembukaan kembali log | Log layanan produksi |
Untuk log aktif, ikuti mekanisme rotasi dan pembukaan ulang file yang didukung layanan. Pada Linux, pemotongan tidak mengubah offset deskriptor yang sudah terbuka; penulis tanpa mode append dapat menulis lagi pada posisi lama. Manual resmi logrotate juga menjelaskan bahwa copytruncate memiliki jeda antara penyalinan dan pemotongan yang dapat kehilangan data log. Memasang alat rotasi saja tidak menghilangkan kebutuhan memeriksa konfigurasi layanan.
Hal yang perlu diperhatikan
Mengecilkan menghancurkan data
Pemotongan tidak menyediakan tombol urungkan. Memperbesar kembali menghasilkan byte nol di bagian baru, bukan data lama. Buat dan periksa cadangan sebelum mengubah data penting. Sebaliknya, panjang nol juga bukan bukti sanitasi media: salinan, snapshot, dan data pada lapisan penyimpanan lain dapat tetap ada.
Memperbesar tidak memperbaiki format internal
Memperbesar panjang file citra atau kontainer sistem berkas tidak otomatis memperluas partisi maupun struktur sistem berkas di dalamnya. Gunakan prosedur dan alat khusus format tersebut; jangan menganggap file berukuran besar otomatis merupakan citra yang valid.
File sparse dapat membesar saat menyalin
Alat salin atau sistem berkas tujuan yang tidak mempertahankan area sparse dapat mengalokasikan ruang mendekati ukuran logis penuh. Periksa kapasitas tujuan, dukungan sparse pada alat salin, serta ukuran dan isi setelah penyalinan; file sparse bukan cadangan kapasitas fisik untuk penulisan di masa depan.
FAQ
Apakah truncate -s 0 menghapus file?
Tidak. File tetap ada, tetapi panjangnya menjadi nol. Waktu file dan sebagian bit mode dapat berubah; ini bukan jaminan penghapusan fisik data.
Apakah memperbesar file langsung memakai seluruh ruang disk?
Tidak selalu. Area baru dapat bersifat sparse; bandingkan ukuran logis dari stat dengan penggunaan yang dilaporkan du.
Bagaimana mencegah pembuatan file yang belum ada?
Gunakan truncate -c -s SIZE FILE. File yang belum ada dilewati, sehingga keberhasilan perintah bukan bukti keberadaan file.
Apakah -r menyalin isi referensi?
Tidak. Opsi ini hanya menggunakan panjang referensi; isi awal target dipertahankan sejauh masih berada dalam panjang baru.




