Ada alat yang dibuat untuk tujuan itu:
truncate -s 0 filename
Ini akan menghapus isinya tetapi masih berupa file yang sama ( inode tetap sama).
Ini penting karena beberapa program memegang pegangan pada file "by inode". Misalkan Anda "mengosongkan" file menggunakan metode naif menghapus dan membuat ulang file. Beberapa program mungkin masih menangani file lama (dengan konten lama) meskipun tidak lagi terlihat seperti biasa ls.
Beberapa tautan ke detail lebih lanjut di akhir jawaban ini.
Cara lain, mungkin lebih mudah diingat:
echo -n > filename
Ini juga menyimpan inode yang sama.
Perhatikan bahwa keduanya truncatedan echo -ntidak didefinisikan oleh POSIX .
Untuk penggunaan kepatuhan POSIX cat /dev/null:
cat /dev/null > filename
Namun cara lain, lebih tidak jelas dan mungkin tidak shell agnostik:
> filename
Jika file yang terpotong membutuhkan root untuk menulis maka baris berikut tidak akan berfungsi seperti yang diharapkan:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
Ini karena pengalihan dilakukan oleh shell bahkan sebelum sudo dieksekusi. Itu berarti bahwa akses tulis ke file dilakukan menggunakan hak istimewa pengguna yang menjalankan shell, bukan hak istimewa yang akan diberikan oleh sudo.
Solusinya adalah untuk menunda pengalihan ke shell yang dieksekusi menggunakan hak akses sudo seperti ini:
sudo sh -c "echo -n > filename"
Menggunakan truncateAnda tidak perlu solusi seperti itu karena akses tulis tidak dilakukan oleh shell tetapi oleh truncateyang dijalankan oleh sudo menggunakan hak sudo.
sudo truncate -s 0 filename
Untuk beberapa detail berdarah tentang program yang menahan file terbuka walaupun file telah dihapus, Anda dapat membaca yang berikut:
tail -n +1000 file.txt > file.txtharus menghapus 1000 baris dan menyimpan baris terbaru dalam file (Anda tidak pernah tahu kapan Anda mungkin memerlukan beberapa catatan terbaru untuk melacak sesuatu).