एक बनाने strace
के tail -f
लिए, यह सब कुछ बताते हैं। दिलचस्प हिस्सा:
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 fstatfs(3, {...}) = 0
13791 inotify_init() = 4
13791 inotify_add_watch(4, "/path/to/file", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 read(4, 0xd981c0, 26) = -1 EINTR (Interrupted system call)
यह क्या करता है? यह inotify
फ़ाइल के लिए एक हैंडलर सेट करता है , और तब तक प्रतीक्षा करता है जब तक कि इस फ़ाइल के साथ कुछ नहीं होता है। यदि कर्नेल tail
इस इनॉटिफ़ाइड हैंडलर के माध्यम से कहता है , कि फ़ाइल बदल गई (सामान्य रूप से, जोड़ दी गई), तो tail
1) 2 चाहता है) परिवर्तनों को पढ़ता है 3) उन्हें स्क्रीन पर लिखता है।
/proc/3844/fd/1
आपके सिस्टम पर एक प्रतीकात्मक लिंक है /dev/pts/14
, जो एक चरित्र उपकरण है। कुछ "मेमोरी मैप" जैसी कोई चीज नहीं है, जिसे उस तक पहुँचा जा सकता है। इस प्रकार, कुछ भी नहीं है जिसके परिवर्तनों को इनोटाइज़ में हस्ताक्षरित किया जा सकता है, क्योंकि कोई डिस्क या मेमोरी क्षेत्र नहीं है जो उस तक पहुँचा जा सकता है।
यह कैरेक्टर डिवाइस एक वर्चुअल टर्मिनल है, जो व्यावहारिक रूप से इस तरह काम करता है जैसे कि यह एक नेटवर्क सॉकेट हो। इस वर्चुअल टर्मिनल पर चलने वाले प्रोग्राम इस डिवाइस से कनेक्ट हो रहे हैं (जैसे कि अगर आप टेलनेट-टेड को tcp पोर्ट में रखते हैं), और वे जो लिखना चाहते हैं उसे लिख रहे हैं। साथ ही जटिल चीजें भी हैं, उदाहरण के लिए स्क्रीन लॉक करना, टर्मिनल नियंत्रण अनुक्रम और इस तरह, ये सामान्य रूप से ioctl()
कॉल द्वारा नियंत्रित होते हैं।
मुझे लगता है, आप किसी तरह वर्चुअल टर्मिनल देखना चाहते हैं। यह लिनक्स पर किया जा सकता है, लेकिन यह इतना सरल नहीं है, इसके लिए कुछ नेटवर्क प्रॉक्सी जैसी कार्यक्षमता की आवश्यकता है, और इन ioctl()
कॉलों का थोड़ा मुश्किल उपयोग । लेकिन ऐसे उपकरण हैं जो ऐसा कर सकते हैं।
वर्तमान में मुझे याद नहीं आ रहा है कि किस डेबियन पैकेज में इस लक्ष्य के लिए उपकरण है, लेकिन थोड़ी सी गुगली के साथ आप पा सकते हैं कि शायद आसानी से।
विस्तार: जैसा @ जजेश ने यहां उल्लेख किया है (उन्हें +1 करें यदि आपने मुझे दिया है), उपकरण का नाम है watch
।
विस्तार # 2: @kelnos उल्लेख किया है, एक सरल cat /dev/pts/14
भी पर्याप्त थे। मैंने कोशिश की, और हाँ, यह काम किया, लेकिन सही ढंग से नहीं। मुझे लगता है कि के साथ एक बहुत प्रयोग नहीं किया है, लेकिन यह करता है, तो एक आउटपुट कि आभासी चला टर्मिनल में जाने के रूप में मुझे लगता है या तो करने के लिए cat
आदेश, या उसके मूल स्थान पर है, और दोनों के लिए कभी नहीं। लेकिन यह निश्चित नहीं है।