Linux के बारे में अच्छी बात यह है कि आप बूट प्रक्रिया से लेकर सॉफ़्टवेयर पैकेज की इंस्टॉलेशन तक सब कुछ आसानी से देख और मैनेज कर सकते हैं। यहां हम चर्चा करते हैं कि आप Linux में lsof कमांड का उपयोग खुली फ़ाइलों और उनका उपयोग करने वाली प्रक्रियाओं को देखने के लिए कैसे कर सकते हैं। यह जानना कि इसे कैसे देखना है, आपको यह समझने में मदद कर सकता है कि सिस्टम कैसे काम करता है और यहां तक कि विशिष्ट प्रक्रियाओं के लिए आवश्यक कार्रवाई भी कर सकता है।
Lsof कमांड
खुली फ़ाइलों और उनके लिए जिम्मेदार यूज़र्स या प्रक्रियाओं को देखने के लिए, हम lsof यूटिलिटी का उपयोग करते हैं। डिफ़ॉल्ट रूप से, lsof अधिकांश वितरणों में प्री-इंस्टॉल्ड आता है।
हालांकि, यदि आपके पास यह इंस्टॉल नहीं है, तो आप इसे अपने सिस्टम पर इंस्टॉल करने के लिए पैकेज मैनेजर का उपयोग कर सकते हैं।
Debian/Ubuntu
Debian पर, कमांड चलाएं:
sudo apt-get install lsof
Arch/Manjaro
Manjaro और अन्य Arch-आधारित वितरणों पर, pacman का उपयोग करके कमांड चलाएं:
sudo pacman -S lsof
CentOS/REHL/Fedora
CentOS और REHL परिवार के लिए, आप dnf का उपयोग कर सकते हैं:
sudo dnf install lsof
Linux प्रक्रिया के लिए खुली फ़ाइलों को सूचीबद्ध करने के लिए lsof कमांड का उपयोग करें
अधिकांश Linux कमांड्स की तरह, lsof यूटिलिटी उपयोग करने के लिए अविश्वसनीय रूप से सरल है। lsof कमांड टाइप करके शुरू करें:
sudo lsof
एक बार जब आप उपरोक्त कमांड चलाते हैं, तो lsof को सिस्टम में खुली फ़ाइलों के बारे में जानकारी वापस करनी चाहिए।
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096 2 / init 1 root rtd DIR 8,48 4096 2 / init 1 root txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
नोट: यदि आपके पास sudo विशेषाधिकार हैं, तो "permission denied" त्रुटियों से बचने के लिए विशिष्ट फ़ाइलों पर कमांड को sudo के साथ चलाएं।
ऊपर दिखाए गए आउटपुट के अनुसार, lsof आउटपुट में निम्न कॉलम हैं:
| कॉलम | प्रतिनिधित्व |
|---|---|
| Command | लक्ष्य फ़ाइल का उपयोग करने वाली प्रक्रिया का नाम दिखाता है। |
| PID | फ़ाइल का उपयोग करने वाली प्रक्रिया के लिए अद्वितीय पहचानकर्ता। |
| TID | कॉलम थ्रेड पहचानकर्ता दिखाता है। |
| TASKCMD | टास्क कमांड का नाम। |
| USER | प्रक्रिया चलाने वाले यूज़र का यूज़रनेम या UID। |
| FD | फ़ाइल डिस्क्रिप्टर और मोड्स। |
| TYPE | लक्ष्य फ़ाइल से जुड़ा नोड। |
| DEVICE | कॉमा से अलग डिवाइस नंबर। |
| SIZE/OFF | बाइट्स में फ़ाइल साइज़ या फ़ाइल ऑफसेट साइज़ |
| NODE | लोकल फ़ाइल का इनोड मान। आप फ़ाइल के लिए inode जानकारी दिखाने के लिए stat कमांड का उपयोग कर सकते हैं। |
| NAME | फ़ाइल का माउंट पॉइंट। |
अब जब आप समझते हैं कि lsof कमांड प्रिंटआउट की सामग्री क्या दर्शाती है, तो आइए विशिष्ट जानकारी के लिए फ़िल्टर करने के लिए कमांड का उपयोग करें।
विशिष्ट प्रक्रिया के लिए फ़िल्टर कैसे करें
केवल विशिष्ट प्रक्रिया द्वारा खोली गई विशिष्ट फ़ाइलों को फ़िल्टर करने के लिए, हम या तो प्रक्रिया नाम या PID मान का उपयोग कर सकते हैं।
उदाहरण के लिए, firefox प्रक्रिया द्वारा उपयोग की जाने वाली फ़ाइलों को दिखाने के लिए, हम कमांड का उपयोग कर सकते हैं:
sudo lsof -c firefox
कमांड firefox प्रक्रिया द्वारा खोली गई सभी फ़ाइलों को दिखाएगा।
प्रोसेस ID द्वारा फ़िल्टर करने के लिए, हम -p विकल्प का उपयोग कर सकते हैं और प्रोसेस ID पास कर सकते हैं। आप लक्ष्य प्रक्रिया की प्रोसेस ID प्राप्त करने के लिए top कमांड का उपयोग कर सकते हैं।
उदाहरण के लिए, firefox प्रक्रिया की PID प्राप्त करने के लिए, हम कमांड का उपयोग कर सकते हैं:
sudo ps aux | grep firefox
एक बार जब आपके पास लक्ष्य प्रक्रिया की PID हो, तो खुली फ़ाइलों को दिखाने के लिए lsof का उपयोग करें:
sudo lsof -p 2121
उपरोक्त कमांड निर्दिष्ट PID वाली प्रक्रिया द्वारा खोली गई फ़ाइलों को प्रिंट करेगा।
विशिष्ट यूज़र के लिए फ़िल्टर कैसे करें
केवल किसी विशिष्ट यूज़र द्वारा खोली गई फ़ाइलों को देखने के लिए, हम -u फ्लैग का उपयोग कर सकते हैं। उदाहरण के लिए, debian यूज़र के लिए फ़िल्टर करने के लिए, कमांड का उपयोग करें:
sudo lsof -u debian
विशिष्ट फ़ाइल के लिए फ़िल्टर कैसे करें
मान लीजिए आप केवल उस प्रक्रिया और यूज़र को जानना चाहते हैं जिसने एक विशिष्ट फ़ाइल खोली है। ऐसा करने के लिए, फ़ाइल का नाम lsof को पास करें:
sudo lsof /bin/sleep
उपरोक्त केवल विशिष्ट फ़ाइल के लिए फ़िल्टर करेगा और यूज़र, प्रोसेस ID, और अधिक सहित संबंधित जानकारी वापस करेगा।
निष्कर्ष
इस सरल ट्यूटोरियल में, हमने चर्चा की कि Linux में lsof कमांड का उपयोग करके सिस्टम से खुली फ़ाइलों के बारे में जानकारी कैसे क्वेरी करें। यहां टर्मिनल में डायरेक्टरी की सामग्री को सूचीबद्ध करने के लिए कुछ अतिरिक्त कमांड हैं।