जवाबों:
यह कमांड उस ट्रंकेशन की फाइलों को प्रिंट करेगा ।lsof
(यह वास्तव में किसी भी फाइल को हटा या छोटा नहीं करता है)।
lsof खुली हुई फ़ाइलों (फ़ाइल डिस्क्रिप्टर) की एक सूची लौटाएगा, जो कि इस तरह से प्रोसेस करने वाले awk में पाई जाती है।
gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
उपर्युक्त अभिव्यक्ति में एक अर्ध उपनिवेश द्वारा अलग किए गए दो नियमित भाव हैं ;
पहले भाग पर विचार करें gawk '$4~/txt/{next};
यहां, यदि 4 वें क्षेत्र में है, txtतो पाठ की अगली पंक्ति पढ़ी जाएगी, जो स्क्रिप्ट फिर से शुरू से प्रसंस्करण शुरू करेगी।
nextबयान बलों तुरंत मौजूदा रिकॉर्ड की प्रोसेसिंग रोक और अगले रिकॉर्ड करने के लिए पर जाने के लिए awk। इसका मतलब है कि वर्तमान रिकॉर्ड के लिए कोई और नियम निष्पादित नहीं किए गए हैं, और वर्तमान नियम की बाकी कार्रवाई निष्पादित नहीं की गई है।
अब स्क्रिप्ट के दूसरे भाग पर विचार करते हैं /REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
यहां यदि रेखा नियमित अभिव्यक्ति /REG.*\(deleted\)$( $मतलब कि (deleted)लाइन पर अंतिम शब्द होना चाहिए) से मेल खाती है , तो यह सिर्फ प्रिंट करता है >/proc/%s/fd/%d\n", $2,$4।
Lsof आदेश में $4फ़ाइल वर्णनकर्ता संख्या है (उदाहरण के लिए 53w, wसाधन filer लिखने के लिए खोल दिया गया है) या फ़ाइलप्रकार, फ़ाइल पर निर्भर करता है। %dमें printfसुनिश्चित होगा कि केवल संख्या प्रिंट किया जाएगा, (जैसे किसी भी पाठ वर्ण निकाल दें w)। $2प्रक्रिया की प्रक्रिया आईडी को प्रिंट करता है जो फ़ाइल का उपयोग करता है इसलिए यह कुछ ऐसा प्रिंट करेगा >/proc/3989/fd/53और इसी तरह यह उन सभी फाइलों को प्रिंट करेगा जो हटा दी गई हैं लेकिन जिनकी फाइल डिस्क्रिप्टर खुली रहती है, दूसरे शब्दों में, फाइल डिस्क्रिप्टर जो सुरक्षित रूप से काटे जा सकते हैं।
यह कमांड डिलीट हुई फाइल्स को lsof से छोटा कर देगा।
यह पहली बार खुली फाइलों को सूचीबद्ध करेगाlsof
फिर लाइनों के लिए खोज करें एक के बाद एक और {next}जिसमें '$4~/txt/{next};/REG.*\(deleted\)$/चौथे पैरामीटर के रूप में आरईजी होता है फिर इस लाइन के सापेक्ष यह प्रक्रिया हटा दी जाएगी
और फिर सभी परिणामों को प्रिंट करें जिसमें REG शामिल है और हटाए गए के रूप में चिह्नित है।{printf ">/proc/%s/fd/%d\n", $2,$4}'
shऔर इसके अलावा दो नियमित अभिव्यक्तियाँ हैं, जो आपके स्पष्टीकरण में एक नहीं हैं