Mac यूज़र्स के लिए lsof कमांड की पूरी जानकारी

lsof कमांड में महारत हासिल करें और पता लगाएँ कि आपके Mac पर कौन से प्रोसेस ने फ़ाइलें खोल रखी हैं। डेवलपर और पावर यूज़र्स के लिए एक गाइड।

(Updated )

आपकी external ड्राइव eject नहीं हो रही। macOS आपको झुंझला देने वाला धुंधला सा मैसेज देता है कि “one or more programs may be using it”। कौन से प्रोग्राम? यह नहीं बताएगा। यहीं lsof काम आता है।

इसका नाम “list open files” से बना है, और यह बिल्कुल यही करता है। macOS जैसे Unix-आधारित सिस्टम पर लगभग हर चीज़ को एक फ़ाइल की तरह माना जाता है, जिसमें नेटवर्क कनेक्शन, डिवाइस, और disk वॉल्यूम शामिल हैं। जब आप कोई ड्राइव eject नहीं कर पाते, तो lsof आपको ठीक-ठीक बताता है कि कौन सा प्रोसेस उसे बंधक बनाए हुए है।

बुनियादी सिंटैक्स

ejection समस्याओं के लिए lsof इस्तेमाल करने का सबसे आसान तरीका है:

lsof /Volumes/YourDriveName

“YourDriveName” को अपनी ड्राइव के असली नाम से बदलें। अगर नाम में स्पेस हैं, तो पूरे पाथ को कोट्स में लपेट दें:

lsof "/Volumes/My Backup Drive"

यह हर उस प्रोसेस की लिस्ट देता है जिसने उस वॉल्यूम पर कोई file handle खोल रखा है। हर लाइन प्रोसेस का नाम, उसका ID (PID), उसे चलाने वाला यूज़र, और एक्सेस की जा रही ख़ास फ़ाइल की जानकारी दिखाती है।

आउटपुट पढ़ना

एक सामान्य lsof आउटपुट कुछ ऐसा दिखता है:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...
Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External

सबसे ज़रूरी कॉलम हैं COMMAND (प्रोसेस का नाम), PID (प्रोसेस ID जिससे आप उसे kill करेंगे), और NAME (जिस फ़ाइल को एक्सेस किया जा रहा है उसका असली पाथ)।

FD बताता है कि फ़ाइल किस मोड में खोली गई थी: r पढ़ने के लिए, w लिखने के लिए और u दोनों के लिए। यह मौजूदा गतिविधि नहीं बताता और वॉल्यूम पर कोई लंबित लिखना न होने का प्रमाण नहीं है।

पता लगाएँ कि आपकी ड्राइव को क्या ब्लॉक कर रहा है

ख़ास तौर पर ejection समस्याओं के लिए, आपको आमतौर पर बस यह जानना होता है कि कौन से प्रोसेस नाम दिख रहे हैं। आम गुनहगारों में शामिल हैं mds और mds_stores (Spotlight indexing), Finder, QuickLookUIService (थंबनेल जेनरेशन), और fsevents (फ़ाइलसिस्टम वॉचर)।

अगर आपको बहुत सारा आउटपुट दिखे और आप उसे छोटा करना चाहें, तो आप grep इस्तेमाल कर सकते हैं:

lsof /Volumes/YourDriveName | grep -v "^COMMAND"

यह हेडर लाइन हटा देता है ताकि आपको सिर्फ़ असली प्रोसेस दिखें। अगर आप सिर्फ़ अलग-अलग प्रोसेस नाम चाहते हैं:

lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u

काम के फ़्लैग

-c फ़्लैग कमांड के नाम से फ़िल्टर करता है। अगर आपको शक है कि Spotlight समस्या है:

lsof -a -c mds /Volumes/YourDriveName

यह सिर्फ़ वे प्रोसेस दिखाता है जिनके नाम “mds” से शुरू होते हैं।

+D फ़्लैग किसी डायरेक्टरी की सभी खुली फ़ाइलें रिकर्सिव तरीके से लिस्ट करता है:

lsof +D /Volumes/YourDriveName

यह बुनियादी सिंटैक्स से ज़्यादा गहन है पर बहुत सारी फ़ाइलों वाली बड़ी ड्राइव पर धीमा हो सकता है।

यह देखने के लिए कि किसी ख़ास यूज़र ने ड्राइव पर कौन से प्रोसेस खोल रखे हैं:

lsof -a -u yourusername /Volumes/YourDriveName

sudo के बिना lsof इस्तेमाल करना

डिफ़ॉल्ट रूप से, lsof सिर्फ़ आपके यूज़र अकाउंट के मालिकाना वाले प्रोसेस दिखाता है। root द्वारा चलाए जाने वाले सिस्टम प्रोसेस (जैसे Spotlight का mds) तब तक नहीं दिखेंगे जब तक आप lsof को sudo के साथ न चलाएँ:

sudo lsof /Volumes/YourDriveName

आपको अपना पासवर्ड डालना होगा। ejection समस्याओं को सुलझाने के लिए, sudo इस्तेमाल करना लगभग हमेशा ज़रूरी होता है क्योंकि अक्सर ब्लॉकर सिस्टम प्रोसेस ही होते हैं।

ब्लॉक करने वाले प्रोसेस को kill करना

काम सहेजें, कॉपी और बैकअप पूरा करें और ऐप्स को सामान्य तरीके से बंद करके फिर इजेक्ट करें। फ़ोर्स क्विट या फ़ोर्स इजेक्ट से डेटा खो सकता है; Ejecta लिखने की सुरक्षा प्रमाणित नहीं करता।

kill 1234

1234 को असली PID से बदलें। अगर वह काम न करे, तो आप इसे ज़बरदस्ती बंद कर सकते हैं:

kill -9 1234

Spotlight के प्रक्रिया नाम केवल पढ़ने का प्रमाण नहीं हैं। ड्राइव मुक्त करने के लिए mds या mds_stores को फ़ोर्स क्विट न करें। प्रतीक्षा करें, ऐप्स बंद करें और सामान्य तरीके से इजेक्ट करें। Ejecta इन प्रक्रियाओं को पहचानता है, लेकिन सिस्टम प्रक्रियाओं के लिए सामान्य क्विट नहीं देता। ड्राइव फिर भी अटकी हो तो सब कुछ सहेजें और Mac को पूरी तरह बंद करने के बाद ही ड्राइव निकालें।

अपनी मालिकाना ऐप्लिकेशन के लिए (जैसे ड्राइव की डायरेक्टरी में बैठे शेल वाली कोई Terminal विंडो), eject करने की कोशिश से पहले ऐप्लिकेशन को सामान्य तरीके से बंद कर देना या ड्राइव से कहीं और चले जाना ज़्यादा साफ़-सुथरा तरीका है।

आम परिस्थितियाँ

Terminal की मौजूदा डायरेक्टरी ड्राइव पर हो: अगर आपने अपनी external ड्राइव के किसी फ़ोल्डर में cd कर रखा है, तो वह शेल प्रोसेस ड्राइव को खुला रखेगा। या तो कहीं और cd करें (cd ~) या उस Terminal विंडो को बंद करें।

Finder विंडो: अगर Finder की कोई विंडो ड्राइव पर खुली है, या साइडबार में ड्राइव सिलेक्ट भी है, तो यह ejection रोक सकता है। ड्राइव का कंटेंट दिखाने वाली कोई भी Finder विंडो बंद करें।

Spotlight के प्रक्रिया नाम केवल पढ़ने का प्रमाण नहीं हैं। ड्राइव मुक्त करने के लिए mds या mds_stores को फ़ोर्स क्विट न करें। प्रतीक्षा करें, ऐप्स बंद करें और सामान्य तरीके से इजेक्ट करें। Ejecta इन प्रक्रियाओं को पहचानता है, लेकिन सिस्टम प्रक्रियाओं के लिए सामान्य क्विट नहीं देता। ड्राइव फिर भी अटकी हो तो सब कुछ सहेजें और Mac को पूरी तरह बंद करने के बाद ही ड्राइव निकालें।

फ़ाइलें खुली रखने वाले बैकग्राउंड ऐप्स: कुछ ऐप्लिकेशन डॉक्यूमेंट बंद करने के बाद भी हाल की फ़ाइलों का रेफ़रेंस बनाए रखते हैं। Photoshop या वीडियो एडिटर जैसी क्रिएटिव ऐप्लिकेशन आम गुनहगार हैं। ऐप को पूरी तरह quit करने से आमतौर पर फ़ाइलें रिलीज़ हो जाती हैं।

कमांड लाइन से आगे

अगर आप Terminal के साथ सहज नहीं हैं या हर बार ड्राइव अनप्लग करने के लिए lsof आउटपुट से जूझना नहीं चाहते, तो ग्राफ़िकल विकल्प मौजूद हैं।

Activity Monitor आपको किसी ख़ास प्रोसेस की खुली फ़ाइलें दिखा सकता है, पर इसके लिए आपको पहले से पता होना चाहिए कि किस प्रोसेस को जाँचना है। यह “इस ड्राइव को क्या इस्तेमाल कर रहा है?” का जवाब आसानी से नहीं देता।

Ejecta: Ejecta बिना समय-सीमित ट्रायल के मुफ़्त ड्राइव निदान देता है। भुगतान वाला लाइसेंस समर्थित ऐप्स के क्विट व इजेक्ट, सभी ड्राइव इजेक्ट करने और Time Machine नियंत्रण को खोलता है। सिस्टम प्रक्रियाओं में प्रतीक्षा, अनुमति या Mac बंद करना ज़रूरी हो सकता है। पहले काम सहेजें और ट्रांसफ़र पूरे करें।

कमांड लाइन उन लोगों के लिए ताक़तवर है जो इसे पसंद करते हैं, पर ड्राइव अनप्लग करने जैसे आसान काम के लिए यह अनिवार्य नहीं होनी चाहिए।

Ejecta बिना समय-सीमित ट्रायल के मुफ़्त ड्राइव निदान देता है। भुगतान वाला लाइसेंस समर्थित ऐप्स के क्विट व इजेक्ट, सभी ड्राइव इजेक्ट करने और Time Machine नियंत्रण को खोलता है। सिस्टम प्रक्रियाओं में प्रतीक्षा, अनुमति या Mac बंद करना ज़रूरी हो सकता है। पहले काम सहेजें और ट्रांसफ़र पूरे करें।

अभी खरीदें - $29 $9.99