Lsof क्या करता है। मतलब


9

मैं कुछ लेख पढ़ रहा हूँ और मैंने यह आदेश देखा है:

lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

क्या कुछ शरीर इसे समझने में मेरी मदद कर सकता है


+1 और पसंदीदा क्योंकि यह एक दिलचस्प सवाल है। :-)
लोरेंजो एंकोरा

जवाबों:


7

यह कमांड उस ट्रंकेशन की फाइलों को प्रिंट करेगा 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और इसी तरह यह उन सभी फाइलों को प्रिंट करेगा जो हटा दी गई हैं लेकिन जिनकी फाइल डिस्क्रिप्टर खुली रहती है, दूसरे शब्दों में, फाइल डिस्क्रिप्टर जो सुरक्षित रूप से काटे जा सकते हैं।


2

यह कमांड डिलीट हुई फाइल्स को lsof से छोटा कर देगा।

यह पहली बार खुली फाइलों को सूचीबद्ध करेगाlsof

फिर लाइनों के लिए खोज करें एक के बाद एक और {next}जिसमें '$4~/txt/{next};/REG.*\(deleted\)$/चौथे पैरामीटर के रूप में आरईजी होता है फिर इस लाइन के सापेक्ष यह प्रक्रिया हटा दी जाएगी

और फिर सभी परिणामों को प्रिंट करें जिसमें REG शामिल है और हटाए गए के रूप में चिह्नित है।{printf ">/proc/%s/fd/%d\n", $2,$4}'


मुझे लगता है कि आपको कमांड के विभिन्न हिस्सों (कम से कम मेरे उत्थान के लिए) को समझाना चाहिए।
don.joey

मेरे अपडेट की जाँच करें

1
जब रेगेक्स के साथ एक अजीब बयान हुआ और एक प्रिंट स्टैमेमेंट ने वास्तविक सामग्री को छंटनी शुरू कर दी। आपको वास्तविक ट्रंकेशन के लिए इस कमांड को पास करने की आवश्यकता है shऔर इसके अलावा दो नियमित अभिव्यक्तियाँ हैं, जो आपके स्पष्टीकरण में एक नहीं हैं
स्टॉर्मिरक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.