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
lsof
(|
और grep के बिना ) जारी करते हैं?