Bu amaçla oluşturulmuş bir araç var:
truncate -s 0 filename
Bu içeriği temizler, ancak yine de aynı dosya olur ( inode aynı kalır).
Bu önemlidir, çünkü bazı programlar "inode" dosyasına bir tanıtıcı sahiptir. Diyelim ki dosyayı silmek ve yeniden oluşturmak için naif yöntemini kullanarak bir dosyayı "boşalttığınızı" varsayalım. Bazı programlar, normal dosya gibi artık görünür olmasa bile, eski dosyaya (eski içeriğe sahip) sahip olabilir ls.
Bu cevabın sonunda daha fazla ayrıntıya bazı bağlantılar.
Başka bir yol, hatırlanması belki daha kolay:
echo -n > filename
Bu aynı inode tutar.
Her iki Not truncateve echo -ntanımlanmamış POSIX'deki .
POSIX uyumluluğu için cat /dev/null:
cat /dev/null > filename
Yine başka bir yol, daha belirsiz ve muhtemelen kabuk agnostik değil:
> filename
Kesilecek dosyanın yazmak için kök ayrıcalıklara ihtiyacı varsa, aşağıdaki satırlar beklendiği gibi çalışmaz:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
Bunun nedeni, yönlendirme sudo yürütülmeden önce bile kabuk tarafından yapılır. Bu, dosyaya yazma erişiminin, sudo tarafından verilen ayrıcalıklar değil, kabuğu çalıştıran kullanıcının ayrıcalıkları kullanılarak yapıldığı anlamına gelir.
Geçici çözüm, şunun gibi sudo ayrıcalıkları kullanılarak yürütülen bir kabuğa yönlendirmeyi ertelemektir:
sudo sh -c "echo -n > filename"
Kullanılması truncateyazma erişim kabuk tarafından yapılmazsa, çünkü böyle bir çözüm gerekmez ama tarafından truncatehangi sudo ayrıcalıkları kullanarak sudo tarafından yürütülür.
sudo truncate -s 0 filename
Dosya silinmiş olsa bile dosyayı açık tutan programlarla ilgili bazı ayrıntılar için aşağıdakileri okuyabilirsiniz:
tail -n +1000 file.txt > file.txt1000 satırı kaldırmalı ve dosyadaki en yeni satırları saklamalıdır (bir şeyi izlemek için son kayıtlardan bazılarına ne zaman ihtiyacınız olabileceğini asla bilemezsiniz).