कोई ऐसी बड़ी फ़ाइल कैसे खोजता है जिसे हटा दिया गया है लेकिन अभी भी एक आवेदन में खुला है? कोई ऐसी फ़ाइल कैसे निकाल सकता है, भले ही यह एक प्रक्रिया है?
स्थिति यह है कि हम एक ऐसी प्रक्रिया चला रहे हैं जो एक लॉग फ़ाइल को एक भयानक दर पर भर रही है। मुझे इसका कारण पता है, और मैं इसे ठीक कर सकता हूं। तब तक, मैं प्रक्रिया को बंद किए बिना लॉग फ़ाइल को rm या खाली करना चाहूंगा।
बस कर rm output.log
केवल फ़ाइल के संदर्भों को हटाता है, लेकिन यह डिस्क पर स्थान पर कब्जा करना जारी रखता है जब तक कि प्रक्रिया समाप्त नहीं हो जाती। इससे भी बदतर: rm
आईएनजी के बाद अब मेरे पास यह खोजने का कोई तरीका नहीं है कि फाइल कहाँ है या यह कितना बड़ा है! क्या फ़ाइल खोजने का कोई तरीका है, और संभवतः इसे खाली कर दें, भले ही यह अभी भी किसी अन्य प्रक्रिया में खुला हो?
मैं विशेष रूप से लिनक्स आधारित ऑपरेटिंग सिस्टम जैसे डेबियन या आरएचईएल का उल्लेख करता हूं।
rm
एड फ़ाइलों के PID कैसे प्राप्त हो सकते हैं जो अभी भी खुले हैं?
lsof | grep "(deleted)"
। जब कोई हटाए गए फ़ाइल को खोलने की कोई और प्रक्रिया नहीं होती है, तो कर्नेल इनोड और डिस्क ब्लॉक को मुक्त कर देगा। प्रक्रियाओं में "हैंडलर" नहीं होते हैं, जिसके द्वारा उन्हें सूचित किया जा सकता है कि डिस्क से एक खुली, अनिवार्य रूप से लॉक की गई फ़ाइल को हटा दिया गया है।
lsof | grep '(deleted)'
लिनक्स पर भी काम करता है। लिनक्स पर, आपको फ़ाइल विलोपन के बारे में सूचित किया जा सकता है (यहां तक कि ऐसी फाइलें जो पहले से ही किसी भी निर्देशिका में / proc / /-pid / fd के अलावा अन्य किसी भी प्रविष्टि में नहीं हैं) inotify तंत्र (IN_DELETE_SELF घटना) के साथ
somefile
इसे VIM में बनाया और खोला, फिर rm
इसे किसी अन्य बैश प्रक्रिया में एड करें। मैं तब भागता हूं lsof | grep somefile
और यह वहां नहीं है, भले ही फ़ाइल वीआईएम में खुली हो।
lsof -p <pid>
इसकी खुली फ़ाइलों और उनके आकारों को सूचीबद्ध करने के लिए उपयोग कर सकते हैं। हटाई गई फ़ाइल के पास एक(deleted)
अगला होगा। हटाई गई फ़ाइल/proc/<pid>/fd/1
संभवतः पर लिंक की जाएगी । मैं नहीं जानता कि कैसे एक प्रक्रिया को समाप्त किए बिना इसकी फाइल डिस्क्रिप्टर पर लिखना बंद कर दिया जाए। मुझे लगता है कि यह प्रक्रिया पर निर्भर करेगा।