Biri silinmiş ancak hala bir uygulamada açık olan büyük dosyaları nasıl bulur? Bir süreç açılmış olsa bile böyle bir dosyayı nasıl kaldırabilirim?
Durum, bir günlük dosyasını müthiş bir oranda dolduran bir işlem yürütüyor olmamızdır. Sebebini biliyorum ve düzeltebilirim. O zamana kadar, süreci kapatmadan günlük dosyasını rm ya da boşaltmak istiyorum.
Basitçe yapmak rm output.log
yalnızca dosyaya yapılan referansları kaldırır, ancak işlem sonlandırılıncaya kadar diskte yer kaplamaya devam eder. Daha da kötüsü: rm
ing sonra şimdi dosyanın nerede olduğunu veya ne kadar büyük olduğunu bulmak için hiçbir yolu yok! Dosyayı bulmanın ve başka bir işlemde hala açık olsa bile, muhtemelen boşaltmasının bir yolu var mı?
Özellikle Debian veya RHEL gibi Linux tabanlı işletim sistemlerine atıfta bulunuyorum.
rm
hala açık olan tüm ed dosyalarının PID'lerini nasıl alabilir ?
lsof | grep "(deleted)"
. Silinen bir dosyayı açık tutan başka işlem olmadığında, çekirdek inode ve disk bloklarını serbest bırakır. İşlemlerde, açık, esasen kilitli bir dosyanın diskten çıkarıldığı bildirilebilecekleri "işleyiciler" yoktur.
lsof | grep '(deleted)'
Linux üzerinde de çalışır. Linux'ta, inotify mekanizmasıyla (IN_DELETE_SELF olayı) dosya silme durumundan (artık / proc / some-pid / fd dışında herhangi bir dizinde zaten bir girişi olmayan dosyalar bile) haberdar olun
somefile
VIM'de yarattım ve açtım, sonra rm
başka bir bash işleminde edindim. Sonra çalıştırın lsof | grep somefile
ve dosya VIM'de açık olsa bile, orada değil.
lsof -p <pid>
açık dosyalarını ve boyutlarını listelemek için kullanabilirsiniz . Silinen dosya(deleted)
yanında olacaktır. Silinen dosya/proc/<pid>/fd/1
muhtemelen bağlanacaktır . Bir işlemi durdurmadan dosya tanımlayıcısına yazma işlemini nasıl durduracağımı bilmiyorum. Bunun sürece bağlı olacağını düşünüyorum.