"Lsof" कमांड के लिए विकल्प?


20

कई मामलों में "lsof" उन मशीनों पर स्थापित नहीं है, जिनके साथ मुझे काम करना है, लेकिन lsof के "फ़ंक्शन" की बहुत आवश्यकता होगी (जैसे AIX पर)। : \

क्या गैर-विंडोज़ दुनिया में अनुप्रयोगों की तरह कोई "lsof" है?

अद्यतन: पूर्व के लिए: मुझे यह जानने की आवश्यकता है कि कौन सी प्रक्रियाएं "/ घर / उपयोगकर्ता नाम" निर्देशिका का उपयोग करती हैं?


1
क्या आप अधिक विशिष्ट हो सकते हैं, कृपया? AIX के अलावा क्या सिस्टम (जो निश्चित रूप से lsof द्वारा समर्थित है) क्या आपके मन में है? या क्या आपके मन में केवल एक विशिष्ट प्रकार के lsof का उपयोग है? आम तौर पर: क्यों नहीं lsof?
rozcietrzewiacz

मैं लिनक्स 2.6.18-92.el5 GNU का उपयोग कर रहा हूं, और मेरे पास lsof नहीं है, और न ही मेरे पास lsof का उपयोग करने की क्षमता है :(
SSH यह

जवाबों:


20

मुझे पता है fuser, देखें कि क्या आपके सिस्टम पर उपलब्ध है।


एक सिस्टम पर सभी खुली फाइलों को सूचीबद्ध करने के लिए मुझे फ़्यूज़र को पैरामीटर के रूप में क्या देना होगा? : ओ तेरी!
लांसबेंस

2
कमांड sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lessउन सभी प्रक्रियाओं को दिखा सकता है जिनमें फाइल सिस्टम पर खुली फाइलें हैं /। विशिष्ट सहायता के लिए मैन पेज देखें।
enzotib 12:00

स्व-परीक्षा! यह इस तरह से आउटपुट देता है: pastebin.com/raw.php?i=2z19g6Rk - मैं इसके लिए googled हूं, लेकिन मुझे आउटपुट के लिए कोई रास्ता नहीं मिल रहा है। मैं इसे विस्तृत कमांड नामों के साथ कैसे आउटपुट कर सकता हूं? : O
लांसबैन्स

यह उसी आउटपुट देता है: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

कुछ इस तरह:sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

यूनिक्स रोसेटा स्टोन सवाल इस तरह के लिए एक अच्छा स्रोत है। इसमें lsof के लिए कुछ विकल्पों का उल्लेख है (नीचे देखें)। हालांकि ध्यान दें कि lsof यह क्या करता है के लिए वास्तविक मानक अनुप्रयोग है।

यदि आप सभी चाहते हैं कि प्रक्रिया आईडी (एस) मिल जाए जिसमें एक विशेष फ़ाइल खुली है, तो आप fuserकिसी भी POSIX-compliant सिस्टम पर उपयोग कर सकते हैं ।

एक /procनिर्देशिका के साथ ऑपरेटिंग सिस्टम पर , आप एक प्रक्रिया द्वारा खुली हुई फाइलों को क्वेरी कर सकते हैं ( lsofऑपरेशन के सबसे सामान्य मोड से रिवर्स ) जानकारी के माध्यम से /proc। कुछ ऑपरेटिंग सिस्टम में इसके लिए कमांड हैं:


8

यदि आप सोलारिस चलाते हैं, तो एक विकल्प lsof, जो डिफ़ॉल्ट रूप से स्थापित नहीं है और जेडएफएस पर चोक हो सकता है, है pfiles

उदाहरण के लिए:

pfiles /proc/*


2

मेरा संस्करण, केवल कम उपयोगिताओं के चलने के साथ:

for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
    ls -l ${proc_pid}/fd 2>/dev/null \
    | grep -q "$search_term" \
    && echo "${proc_pid#/proc/}"; \
done

बेशक, यह सभी कोने के मामलों को संभाल नहीं सकता है, लेकिन मेरे उपयोग-मामले में काम कर रहा है।


0

यह काम कर जाना चाहिए। यह उन सभी फ़ाइल डिस्क्रिप्टर मैपिंग को छोड़कर देगा, जिन्हें:

  • आपके पास देखने की अनुमति नहीं है, या
  • उन फाइलों के लिए हैं जिनमें स्ट्रिंग "अनुमति अस्वीकृत" है
( find /proc -mindepth 1 -maxdepth 1 \
  | grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
  | xargs ls -l \
  | grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less

यदि आप पहले से ही जानते हैं कि आप केवल कुछ कार्यक्रमों के लिए मैपिंग के बारे में परवाह करते हैं, तो आप इसके बजाय कुछ और का उपयोग कर सकते हैं:

exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less

-2

कभी-कभी अंदर lsofस्थापित होता है/usr/sbin

यदि आप /usr/sbinका हिस्सा नहीं है $PATH, तो आप कमांड को स्थापित करने से भी चूक सकते हैं।

इसके साथ जांच करें

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

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