मेरे वर्तमान बैश सत्र में ओपन फाइल डिस्क्रिप्टर (और वे जिन फाइलों को संदर्भित करते हैं) को कैसे सूचीबद्ध करें


23

मैं एक इंटरैक्टिव बैश सत्र में चल रहा हूं। मैंने निष्पादन का उपयोग करते हुए कुछ फ़ाइल डिस्क्रिप्टर बनाए हैं, और मैं यह सूचीबद्ध करना चाहूंगा कि मेरे बैश सत्र की वर्तमान स्थिति क्या है।

क्या वर्तमान में खुले फ़ाइल डिस्क्रिप्टर को सूचीबद्ध करने का कोई तरीका है?



@ कामराज धन्यवाद तो मारपीट करने के लिए कोई अंतर्निहित नहीं है? मुझे लिनक्स-विशिष्ट सुविधाओं का उपयोग करने की आवश्यकता है?
डेंजरसफास्ट

bashकर्नेल का हिस्सा नहीं है, इसलिए यह नहीं जान सकता है कि अन्य प्रक्रियाएं क्या कर रही हैं, यहां तक ​​कि यह भी कि यह शुरू हुआ।
जूली पेलेटियर

@JuliePelletier: लेकिन चाइल्ड प्रोसेस पैरेंट प्रोसेस के फाइल डिस्क्रिप्टर को नहीं बदलते हैं, क्या वे करते हैं?
डंगऑनफ़ास्ट

जवाबों:


27

हां, यह सभी खुले फ़ाइल विवरणों की सूची देगा:

$ ls -la /proc/$$/fd
total 0
dr-x------ 2 sorontar sorontar  0 Dec 28 00:56 .
dr-xr-xr-x 9 sorontar sorontar  0 Dec 28 00:56 ..
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 sorontar sorontar 64 Dec 28 00:56 4 -> /home/sorontar/testfile.txt

बेशक, हमेशा की तरह: 0 स्टडआउट है, 1 स्टडआउट है और 2 स्टडर है।
4 वें इस मामले में एक खुली फ़ाइल (लिखने के लिए) है।


यह सिर्फ वर्तमान प्रक्रिया को सूचीबद्ध करता है, न कि इसके बच्चों या माता-पिता को।
जूली पेलेटियर

@JuliePelletier प्रश्न शीर्षक 'मेरा वर्तमान बैश सत्र' कहता है। क्या मैं उस गलत को समझ रहा हूँ?
सोरोन्टर

@JuliePelletier: मेरे वर्तमान क्रैश सत्र के बच्चों या अभिभावकों द्वारा उपयोग किए जाने वाले फ़ाइल डिस्क्रिप्टर में मेरी दिलचस्पी क्यों होगी? मुझे केवल अपने वर्तमान बैश सत्र द्वारा उपयोग किए जा रहे फ़ाइल डिस्क्रिप्टर में दिलचस्पी है।
डंगऑनफ़ास्ट

@delavnog: तब अच्छा। यदि यह आपके प्रश्न का उत्तर देता है, तो आपको इसे इस तरह चिह्नित करना चाहिए।
जूली पेलेटियर

4

यह मानते हुए कि आप किसी भी टर्मिनल से जुड़ी फाइल डिस्क्रिप्टर को सूचीबद्ध करना चाहते हैं, आप इसका उपयोग कर सकते हैं lsof/ fuserजैसे:

$ lsof -p $$ 2>/dev/null | awk '$NF ~ /\/pts\//'
bash    32406 foobar    0u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    1u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    2u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    3u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar  255u   CHR 136,31      0t0      34 /dev/pts/31

ये उपकरण मूल रूप से पार्स करते हैं /proc, इसलिए आप बस पहुंच /proc/$$/fd/भी सकते हैं जैसे:

ls /proc/$$/fd/*

2
\/pts\/खुली फाइलों को अस्वीकार करने का विकल्प जैसेexec 4>testfile.txt
सोरोंटर

@sorontar Yep, जैसे मैंने कहा कि यह केवल किसी भी टर्मिनल से जुड़े लोगों को सूचीबद्ध करने के लिए है।
heemayl

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