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.logyalnı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ü: rming 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.
rmhala 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
somefileVIM'de yarattım ve açtım, sonra rmbaşka bir bash işleminde edindim. Sonra çalıştırın lsof | grep somefileve 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/1muhtemelen 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.