कैसे पता करें कि कौन सी प्रक्रिया लिनक्स में एक फ़ाइल का उपयोग कर रही है?


92

मैंने उपयोग करके लिनक्स में एक फाइल को हटाने की कोशिश की rm -rf file_name, लेकिन त्रुटि मिली:

rm: file_name not removed.  Text file busy

मैं कैसे पता लगा सकता हूं कि कौन सी प्रक्रिया इस फ़ाइल का उपयोग कर रही है?

जवाबों:


137

आप fuserकमांड का उपयोग कर सकते हैं , जैसे:

fuser file_name

आपको फ़ाइल का उपयोग करके प्रक्रियाओं की एक सूची प्राप्त होगी।

अधिक विस्तृत आउटपुट प्राप्त करने के लिए, आप इसके साथ विभिन्न झंडे का उपयोग कर सकते हैं।

आप fuser के विकिपीडिया लेख में या manपृष्ठों में अधिक जानकारी पा सकते हैं ।


मैंने यह कोशिश की: फ्यूज़र-आई / होम / बिन / लिब। लेकिन यह मिल गया: फ्यूज़र: अवैध विकल्प - i / home / bin / lib: 27674t
khris

1
@ क्रिस, हो सकता है कि सभी fuserकार्यान्वयन समान नहीं हों, या समान तरीके से काम करते हों। यहां तक ​​कि अगर -iपोसिक्स में परिभाषित किया गया है, तो आप जिस विशेष कार्यान्वयन का उपयोग कर रहे हैं, जरूरी नहीं कि वे वही विकल्प हैं जो विकिपीडिया लेख में वर्णित हैं। उदाहरण के लिए, मैं अभी AIX का उपयोग कर रहा हूं, और fuserइस प्रणाली में उपलब्ध -iविकल्प के पास भी नहीं है ।
jimm-सीएल

किसी कारण से, न fuserहै और न ही lsofएक virtualbox अतिथि पर मेरे लिए काम कर रहे थे। इस जवाब ने मुझे बचा लिया।
kael

34

@ jim का जवाब सही है - fuserजो आप चाहते हैं।

इसके अतिरिक्त (या वैकल्पिक रूप से), lsofप्रक्रिया को मारने के लिए आपको (अतिरिक्त आदेश चलाने के बिना) अनुमति की आवश्यकता होने पर, उपयोगकर्ता नाम सहित अधिक जानकारी प्राप्त करने के लिए उपयोग कर सकते हैं । (निश्चित रूप से, अगर प्रक्रिया को मारना है जो आप चाहते हैं, fuserतो वह अपने -kविकल्प से कर सकता है। आप विकल्प के fuserसाथ अन्य संकेतों का उपयोग कर सकते हैं -s- विवरण के लिए मैन पेज की जांच करें।)

उदाहरण के लिए, tail -F /etc/passwdएक विंडो में चलने के साथ :

ghoti@pc:~$ lsof | grep passwd
tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd

ध्यान दें कि आप यह lsofजानने के लिए भी उपयोग कर सकते हैं कि कौन सी प्रक्रियाएं विशेष सॉकेट्स का उपयोग कर रही हैं। आपके शस्त्रागार में एक उत्कृष्ट उपकरण है।


PID किस क्षेत्र में है?
nmz787

@ nmz787 - lsof | head -1सभी हेडर देखने के लिए।
गोटी

@ nmz787 दूसरा क्षेत्र पीआईडी ​​है।
Fort

lsof | grep -E "PID|<your_process_name>"1 पंक्ति और उस प्रक्रिया को दिखाता है जिसे आप क्वेरी करना चाहते हैं।
रॉबिन ह्यू

0
$ lsof | tree MyFold

जैसा कि संलग्न छवि में दिखाया गया है:

यहाँ छवि विवरण दर्ज करें


1
यह कैसे काम करता है? क्या treestdin से कुछ भी पढ़ा है? यदि हाँ, तो यह उस इनपुट के साथ क्या करता है?
DYP

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

मेरा सवाल इसके बारे में है tree, नहीं lsof। जहां तक ​​मैं समझता हूं, treeमानक इनपुट से नहीं पढ़ता है, इसलिए जब आप चलते हैं तो आउटपुट lsofको छोड़ दिया जाता है lsof | tree ...। यदि यह सही है, तो lsof | tree MyFoldवही है tree MyFold, जो केवल सामग्री को प्रदर्शित करता है, लेकिन कुछ प्रक्रियाओं द्वारा नहीं खोला जाता है।
DYP
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.