lsof: चेतावनी: स्टेट नहीं कर सकता () fuse.gvfsd-fuse फाइल सिस्टम


25

यहाँ वास्तव में क्या हो रहा है?

root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec  4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

क्या आपको यह चेतावनी तब मिल रही है जब आप केवल lsof( |और grep के बिना ) जारी करते हैं?
श्री

इसी तरह की चेतावनी या तो होती है, लेकिन सिर्फ lsofखुली फाइलों की एक बड़ी सूची का उत्पादन करती है। मुझे लगता है कि यह एक पक्ष है। मुझे लगा कि शायद फ़ाइल को एक प्रक्रिया द्वारा खुला रखा गया था और यही कारण हो सकता है कि रूट फ़ाइल को स्थानांतरित करने में असमर्थ था, लेकिन ऐसा प्रतीत नहीं होता है। इसलिए भ्रम।
jmunsch 19

1
हाँ, ऐसा लगता है जैसे can't stat...एक और मुद्दा है। मुझे लगता है कि असली समस्या वह No such file or directoryत्रुटि है जो आपको मिल रही है। यह मूर्खतापूर्ण लग सकता है, लेकिन क्या स्थान / घर / बॉब / डेस्कटॉप मौजूद है?
श्री

जवाबों:


30

FUSE और उसके उपयोग के अधिकार

lsofडिफ़ॉल्ट रूप से उन सभी माउंटेड फाइल सिस्टमों की जांच करता है जिनमें FUSE - फाइल सिस्टम यूजर स्पेस में लागू होते हैं, जिनके लिनक्स में विशेष एक्सेस अधिकार हैं।

जैसा कि आप उबंटू से माउंट जीवीएफएस फाइल सिस्टम (FUSE का विशेष मामला) पर इस उत्तर में देख सकते हैं, यह केवल उस उपयोगकर्ता के लिए ही सुलभ है जिसने इसे (स्वामी के gvfsd-fuse) माउंट किया था । यहां तक ​​कि rootइसे एक्सेस नहीं किया जा सकता। इस प्रतिबंध को ओवरराइड करने के लिए माउंट विकल्पों का उपयोग करना संभव है allow_rootऔर allow_other। विकल्प को FUSE डेमॉन में भी सक्षम किया जाना चाहिए, जो इस उत्तर में उदाहरण के लिए वर्णित है ... लेकिन आपके मामले में आपको एक्सेस अधिकारों को बदलने (और नहीं करना चाहिए) की आवश्यकता नहीं है।

Lsof से फ़ाइल सिस्टम को छोड़कर

आपके मामले lsofमें जीवीएफएस फाइल सिस्टम को जांचने की जरूरत नहीं है, इसलिए आप विकल्प stat()का उपयोग करके उन पर कॉल को बाहर कर सकते हैं -e(या आप सिर्फ चेतावनी को अनदेखा कर सकते हैं):

lsof -e /run/user/1000/gvfs

Lsof द्वारा कुछ फाइलों की जाँच करना

आप lsofअपने सिस्टम पर चल रही सभी प्रक्रियाओं के बारे में जानकारी प्राप्त करने के लिए उपयोग कर रहे हैं और उसके बाद ही आप पूर्ण आउटपुट का उपयोग करके फ़िल्टर करते हैं grep। यदि आप केवल कुछ फ़ाइलों की जाँच करना चाहते हैं और संबंधित प्रक्रियाएँ -fबिना किसी मान के सीधे विकल्प का उपयोग करती हैं, तो "विकल्पों के अंत" विभाजक के बाद फ़ाइलों की सूची निर्दिष्ट करें --। यह काफी तेज होगा।

lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv

सामान्य समाधान

उन सभी माउंटेड फ़ाइल सिस्टम को बाहर करने के लिए, जिन पर stat()आप विफल रहते हैं, आप कुछ इस तरह से चला सकते हैं bash:

x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv

या उपयोग करने के लिए सुनिश्चित करें stat()( test -eएक अलग तरीके से लागू किया जा सकता है):

x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done

11

lsofहमेशा सभी फाइल सिस्टम के बारे में कुछ बुनियादी जानकारी प्राप्त करने की कोशिश करता है, भले ही तर्क यह हो कि कोई विशेष फाइल सिस्टम से कोई परिणाम नहीं आएगा। यदि यह फाइलसिस्टम तक पहुंचने में असमर्थ है (विशेष रूप से, statइसके आरोह बिंदु पर कॉल करने के लिए , जैसा कि संदेश कहता है), यह शिकायत करता है।

जड़ के रूप में, आपको सामान्य रूप से फाइल सिस्टम तक पहुंचने की अनुमति होगी। हालाँकि, FUSE के आंतरिक कामकाज के कारण , रूट में FUSE फाइल सिस्टम पर सभी शक्तियां स्वचालित रूप से नहीं होती हैं। यह एक सुरक्षा विशेषता नहीं है (रूट उपयोगकर्ता बन सकता है जो फ़ाइल सिस्टम का मालिक है और उस तरह से एक्सेस प्राप्त कर सकता है), यह एक तकनीकी सीमा है।

GVFS-फ्यूज करने के लिए एक फ्यूज इंटरफेस है GVFS है, जो एक तंत्र है कि ग्नोम प्लगइन्स द्वारा कार्यान्वित पहुँच आभासी फ़ाइल सिस्टम को Gnome अनुप्रयोगों की अनुमति देता है: GVFS नियमित फाइल सिस्टम इंटरफ़ेस के माध्यम से इन आभासी फ़ाइल सिस्टम को गैर Gnome अनुप्रयोगों पहुंच देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.