ओपन फाइल डिस्क्रिप्टर को कैसे प्रदर्शित करें लेकिन lsof कमांड का उपयोग नहीं करें


48

नमस्ते मैंने यहाँ पढ़ा है कि lsof वर्तमान में खुले हुए फ़ाइल डिस्क्रिप्टर्स की संख्या प्राप्त करने का एक सटीक तरीका नहीं है। उन्होंने इसके बजाय इस आदेश का उपयोग करने की सिफारिश की

 cat /proc/sys/fs/file-nr

जबकि यह कमांड FD की संख्या को प्रदर्शित करता है, आप खुले फ़ाइल डिस्क्रिप्टर की सूची कैसे प्रदर्शित करते हैं जो कि ऊपर दी गई कमांड को गिना जाता है?


4
आप शायद यह जानना चाहते हैं कि क्या आपका अल्मीट पार हो गया है, है ना? मैंने linuxintro.org/wiki/Is_my_ulimit_exceeded के तहत इसके बारे में ब्लॉग किया ; सबसे महत्वपूर्ण बात यह है कि, ulimit एक प्रति-प्रक्रिया प्रतिबंध है जिसे आप / proc / PID / सीमा के अंतर्गत पा सकते हैं और lsof के बजाय मैं इस प्रक्रिया के फ़ाइल डिस्क्रिप्टर को सूचीबद्ध करने के लिए ls / proc / PID / fd का उपयोग करूंगा।
थोरस्टेन स्टैकर

जवाबों:


60

lsof | wc -lफ़ाइल डिस्क्रिप्टर की गिनती नहीं करने के दो कारण हैं । एक यह है कि यह उन चीजों को सूचीबद्ध करता है जो फाइलें नहीं खोलती हैं, जैसे कि गतिशील रूप से जुड़े पुस्तकालयों और वर्तमान कार्यशील निर्देशिकाओं को लोड किया गया है; आपको उन्हें फ़िल्टर करने की आवश्यकता है। एक और यह है कि lsofइसे चलाने के लिए कुछ समय लगता है, इसलिए फाइल को खो सकते हैं जो इसे चालू करते समय खोला या बंद किया जाता है; इसलिए सूचीबद्ध खुली फ़ाइलों की संख्या अनुमानित है। देखने से /proc/sys/fs/file-nrआपको एक विशेष समय में एक सटीक मूल्य मिलता है।

cat /proc/sys/fs/file-nrकेवल तभी उपयोगी होता है जब आपको सटीक आंकड़े की आवश्यकता होती है, मुख्य रूप से संसाधन थकावट की जांच करने के लिए। यदि आप खुली फ़ाइलों को सूचीबद्ध करना चाहते हैं, तो आपको कॉल करने की आवश्यकता है lsofया /proc/*/fdमैन्युअल रूप से ट्रॉलिंग जैसी कुछ समकक्ष विधि का उपयोग करना चाहिए।


1
हाय एक अच्छी व्याख्या देने के लिए धन्यवाद गिल्स। मैंने ls / proc / * / fd की कोशिश की और उस समय सभी खुली हुई fd मिली। इसका उत्पादन कुछ रंग कोडिंग के साथ होता है, मुझे बस मैनुअल देखना होगा।
डिमास

@dimas /proc/*/fdनिर्देशिका में खुली फ़ाइलों के प्रतीकात्मक लिंक होते हैं। दृश्य निरीक्षण के लिए, का उपयोग करें ls -l। स्वचालित उपचार के लिए, readlinkलिंक लक्ष्य को निकालने के लिए उपयोग करें।
गिलेस एसओ- बुराई को रोकना '

बस एलएस-एल का उपयोग करें, लेकिन मैं रीडिंक के साथ प्रयोग करूंगा। मैंने अन्य / प्रोक / पीआईडी ​​/ मैप्स और अन्य विकल्पों के रूप में यहाँ kern.org/doc/man-pages/online/pages/man5/proc.5.html निर्दिष्ट करने का प्रयास किया । अतिरिक्त जानकारी के लिए फिर से धन्यवाद।
डिमास

1
/ proc / sys / fs / file-nr मुझे 3872 (और दो अन्य नंबर) देता है। अगर मेरे पास ulimit -n मुझे 1024 दिखाता है तो यह मेरे द्वारा खोली गई फाइलों की गिनती कैसे हो सकती है?
थोरस्टेन स्टैक

1
@ThorstenStaerk setrlimit(सिस्टम ulimitकमांड शेल कमांड को अंतर्निहित ) की सभी सेटिंग्स प्रति-प्रक्रिया हैं। वे केवल उस प्रक्रिया को प्रभावित करते हैं जो कॉल करती है (और अप्रत्यक्ष रूप से उन प्रक्रियाओं को जो इसे बाद में कांटे बनाती है)।
गिल्स एसओ- बुराई को रोकें '19

25

प्रक्रिया की जानकारी को डाइरेक्टरी में सिस्टम द्वारा अंडर / प्रूफ़ में रखा जाता है। उदाहरण के लिए PID 1234 के साथ प्रक्रिया में एक निर्देशिका होगी जिसे / proc / 1234 कहा जाता है।

वहाँ जानकारी का एक सा है, लेकिन अभी आप / proc / 1234 / fd उपनिर्देशिका में रुचि रखते हैं ।

नोट: आपको उन प्रक्रियाओं के लिए फ़ाइलों को देखने या खोलने के लिए रूट अनुमतियों की आवश्यकता है जो आपके पास नहीं हैं, साथ ही साथ SetUID प्रक्रियाओं के लिए भी।

उदाहरण:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

इसके अलावा बाकी फाइलों पर एक नजर डालें / खरीद के ... सिस्टम से बहुत उपयोगी जानकारी यहां रहती है।

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