अवलोकन
लिनक्स सिस्टम संचालन के दौरान होने वाले ‘पोर्ट टकराव’ या ‘फ़ाइल हटाने के बाद भी डिस्क स्पेस खाली न होने’ जैसी समस्याओं को lsof कमांड से तुरंत हल किया जा सकता है। इस लेख में, हम लिनक्स वातावरण में, जहाँ सब कुछ एक फ़ाइल के रूप में प्रबंधित होता है, व्यावहारिक रूप से lsof लागू करने की मुख्य तकनीकों को देखेंगे। पोर्ट ट्रैकिंग से लेकर फ़ाइल लॉक हटाने तक, सिस्टम इंजीनियरों के लिए आवश्यक ट्रबलशूटिंग प्रक्रिया को चरण-दर-चरण जानेंगे।
lsof बुनियादी जांच और विशिष्ट उपयोगकर्ता/प्रक्रिया की खुली फ़ाइलों की जांच
सिस्टम में lsof कमांड स्थापित है या नहीं, यह जांचने के लिए और यदि स्थापित नहीं है तो पैकेज स्थापित करने के लिए command -v lsof >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y lsof) कमांड निष्पादित करें।

lsof कमांड का स्थापित संस्करण और बिल्ड जानकारी देखने के लिए lsof -v कमांड निष्पादित करें।
⚙️ [मुख्य विकल्प]
-u : किसी विशिष्ट उपयोगकर्ता खाते द्वारा खोली गई फ़ाइलों और प्रक्रियाओं की सूची देखता है।-c : निर्दिष्ट प्रक्रिया नाम से शुरू होने वाली प्रक्रियाओं द्वारा खोली गई फ़ाइलों की सूची को फ़िल्टर करता है।-p : किसी विशिष्ट प्रक्रिया आईडी (PID) द्वारा खोली गई फ़ाइलों की सूची की जांच करता है।-i : नेटवर्क सॉकेट्स और विशिष्ट पोर्ट्स का उपयोग करने वाली प्रक्रियाओं को देखता है।+D : निर्दिष्ट निर्देशिका और उसके उप-पथों में खुली फ़ाइलों की सूची को पुनरावर्ती रूप से (recursively) खोजता है।-t : स्क्रिप्ट एकीकरण के लिए उपयोगी, केवल प्रक्रिया आईडी (PID) को एक-एक पंक्ति में संक्षिप्त रूप से आउटपुट करता है।

lsof अभ्यास के लिए एक परीक्षण निर्देशिका और नमूना फ़ाइल तैयार करने हेतु mkdir -p /tmp/lsof_lab && echo '테스트 파일 내용' > /tmp/lsof_lab/sample.txt कमांड निष्पादित करें।

बनाई गई नमूना फ़ाइल को प्रक्रिया द्वारा खुला रखने के लिए पृष्ठभूमि (background) में ट्रैक करने हेतु tail -f /tmp/lsof_lab/sample.txt & कमांड निष्पादित करें।

lsof -u $(whoami) | head -n 15 कमांड वर्तमान में लॉग-इन उपयोगकर्ता द्वारा चलाई जा रही प्रक्रियाओं द्वारा उपयोग की जा रही फ़ाइलों की सूची की शीर्ष 15 पंक्तियों को प्रदर्शित करता है।
आप बुनियादी सिस्टम लाइब्रेरीज़ और निष्पादन योग्य फ़ाइलों सहित वर्तमान खाते द्वारा खोली गई फ़ाइलों का विवरण देख सकते हैं।

lsof -c tail कमांड उन फ़ाइलों और लाइब्रेरीज़ की सूची खोजकर आउटपुट करता है जिन्हें tail नाम की प्रक्रिया ने खोला हुआ है।
इसके माध्यम से, आप सत्यापित कर सकते हैं कि पृष्ठभूमि में चल रहा tail कमांड किन फ़ाइल डिस्क्रिप्टर्स और साझा लाइब्रेरीज़ को संदर्भित कर रहा है।

अभ्यास पूरा करने के बाद, पृष्ठभूमि में चल रही tail प्रक्रिया को सुरक्षित रूप से समाप्त और साफ़ करने के लिए killall tail 2>/dev/null || true कमांड निष्पादित करें।

नेटवर्क पोर्ट जांच और प्रक्रिया टकराव की ट्रबलशूटिंग
पोर्ट जांच और प्रक्रिया टकराव अभ्यास वातावरण तैयार करने के लिए, सिस्टम में python3 स्थापित है या नहीं इसकी जांच करें और स्थापित न होने पर पैकेज स्थापित करें।

नेटवर्क पोर्ट उपयोग परीक्षण के लिए पृष्ठभूमि में पोर्ट 8080 पर एक सरल वेब सर्वर चलाएं।

पृष्ठभूमि में चलाए गए वेब सर्वर प्रोसेस के पोर्ट 8080 से ठीक से बाइंड होने तक 1 सेकंड प्रतीक्षा करें।

lsof -i :8080 कमांड 8080 पोर्ट का उपयोग कर रही प्रक्रियाओं की जांच करता है।
आउटपुट परिणाम से यह पुष्टि की जा सकती है कि PID 371 वाली python3 प्रक्रिया पोर्ट 8080 पर LISTEN स्थिति में प्रतीक्षा कर रही है।

lsof -i -P -n | head -n 15 कमांड सिस्टम के नेटवर्क सॉकेट्स की सूची को पोर्ट नंबर और IP एड्रेस रूपांतरण के बिना संख्यात्मक रूप में तेज़ी से आउटपुट करता है।
चूँकि यह DNS रिवर्स लुकअप और सर्विस पोर्ट नाम मैपिंग प्रक्रिया को छोड़ देता है, इसलिए बिना किसी देरी के तुरंत पोर्ट उपयोग की स्थिति को समझा जा सकता है।

lsof -i TCP:8080 -sTCP:LISTEN कमांड पोर्ट 8080 में से केवल TCP प्रोटोकॉल और LISTEN स्थिति में मौजूद कनेक्शनों को सटीक रूप से फ़िल्टर करके आउटपुट करता है।
अनावश्यक सत्र कनेक्शनों को छोड़कर वास्तव में उस पोर्ट पर कनेक्शन की प्रतीक्षा कर रहे डेमॉन प्रोसेस की सटीक पहचान करने के लिए यह बहुत उपयोगी है।

अभ्यास पूरा करने के बाद, पोर्ट 8080 TCP को अधिग्रहित करने वाली पृष्ठभूमि वेब सर्वर प्रक्रिया को जबरन समाप्त करके संसाधनों को साफ़ करें।

विशिष्ट निर्देशिका और अनमाउंट को बाधित करने वाली फ़ाइलों (Device Busy) की ट्रैकिंग
निर्देशिका उपयोग और अनमाउंट बाधा की स्थिति को पुनः उत्पन्न करने के लिए, अभ्यास निर्देशिका बनाएं और उस पथ पर जाएं।

प्रक्रिया द्वारा पढ़ी जाने वाली लक्ष्य लॉग फ़ाइल बनाने के लिए echo '작업 중인 파일' > active_work.log कमांड निष्पादित करें।

बनाई गई फ़ाइल को मानक इनपुट के रूप में संदर्भित करके लगातार अधिग्रहित रखने के लिए पृष्ठभूमि में sleep प्रक्रिया चलाएं।

अधिग्रहित निर्देशिका के बाहर से स्थिति की जांच करने के लिए कार्य पथ को होम निर्देशिका में बदलें।

lsof +D /tmp/mount_test कमांड निर्दिष्ट निर्देशिका और उसके उप-पथों में खुली सभी फ़ाइलों और प्रक्रियाओं को पुनरावर्ती रूप से ट्रैक करके आउटपुट करता है।
आउटपुट परिणाम से यह पुष्टि की जा सकती है कि PID 450 की sleep प्रक्रिया उस निर्देशिका को वर्तमान कार्य निर्देशिका (cwd) के रूप में संदर्भित कर रही है, और active_work.log फ़ाइल को रीड मोड (0r) में खोले हुए है, जो अनमाउंट को बाधित करने का मुख्य कारण है।

अभ्यास पूरा करने के बाद, निर्देशिका और फ़ाइल को अधिग्रहित करने वाली पृष्ठभूमि sleep प्रक्रिया को सुरक्षित रूप से समाप्त करें।

अभ्यास में उपयोग की गई अस्थायी परीक्षण निर्देशिका और उप-फ़ाइलों को हटाकर सिस्टम संसाधनों को साफ़ करें।

हटाई गई लेकिन डिस्क पर जगह घेरे हुए घोस्ट फ़ाइलों (deleted) की रिकवरी और सफ़ाई
डिस्क स्पेस लीकेज परीक्षण के लिए अभ्यास निर्देशिका बनाएं और 10MB आकार की एक बड़ी परीक्षण फ़ाइल बनाएं।

प्रक्रिया द्वारा बनाई गई बड़ी फ़ाइल के हैंडल को बनाए रखने के लिए पृष्ठभूमि में ट्रैक करें।

घोस्ट फ़ाइल लीकेज की स्थिति को फिर से बनाने के लिए फ़ाइल सिस्टम से उपयोग में मौजूद बड़ी फ़ाइल को जबरन हटा दें।

lsof | grep '(deleted)' | head -n 5' कमांड उन फ़ाइलों की सूची प्रदर्शित करता है जिन्हें फ़ाइल सिस्टम से हटा दिया गया है लेकिन प्रक्रिया द्वारा अभी भी खुला रखा गया है और वे डिस्क स्पेस घेरे हुए हैं।
इसके माध्यम से, आप उन घोस्ट फ़ाइलों और संबंधित प्रक्रियाओं को तेज़ी से ट्रैक कर सकते हैं जिनकी डिस्क स्पेस rm कमांड से हटाने के बाद भी खाली नहीं हुई है।

lsof -t द्वारा निकाले गए प्रक्रिया आईडी के आधार पर /proc/$TARGET_PID/fd/ निर्देशिका में फ़ाइल डिस्क्रिप्टर सूची देखें।
प्रक्रिया द्वारा संदर्भित फ़ाइल डिस्क्रिप्टर नंबर की सीधे जांच करके, प्रक्रिया को पुनरारंभ किए बिना स्पेस खाली किया जा सकता है या यदि आवश्यक हो तो उस डिस्क्रिप्टर के माध्यम से हटाए गए मूल डेटा को पुनर्प्राप्त (recover) किया जा सकता है।
![TARGET_PID=$(lsof -t /tmp/leak_test/large.img 2>/dev/null | head -n 1) && [ -n “$TARGET_PID” ] && ls -l /proc/$TARGET_PID/fd/ || true](/ubuntu/20261007_150808_104/captures/s04_c05_TARGET_PID___lsof_-t__tmp_leak_test_large_img_2__d.png)
अभ्यास पूरा करने के बाद, घोस्ट फ़ाइल को अधिग्रहित करने वाली पृष्ठभूमि प्रक्रिया को सुरक्षित रूप से समाप्त करें ताकि डिस्क स्थान पूरी तरह से खाली हो जाए।

अभ्यास में उपयोग की गई अस्थायी परीक्षण निर्देशिका को पूरी तरह से हटाकर सिस्टम संसाधनों को साफ़ करें।

अब तक, हमने lsof कमांड का उपयोग करके पोर्ट टकराव को हल करने से लेकर हटाई गई फ़ाइलों की डिस्क क्षमता को खाली करने तक के व्यावहारिक मुख्य सुझावों को संक्षेप में देखा है।
आशा है कि यह संकलित जानकारी वास्तविक सर्वर संचालन और समस्या निवारण (troubleshooting) स्थितियों में समस्याओं को हल करने में काफी मददगार साबित होगी।