बैश शेल आउटपुट हिस्ट्री फाइल लोकेशन


13

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

चूंकि आउटपुट स्क्रीन पर प्रदर्शित होता है, इसलिए इसे कहीं भी संग्रहीत किया जाना चाहिए। तो मेरा सवाल है: कहां?

जवाबों:


11

बैश केवल आपके द्वारा चलाए गए आदेशों का इतिहास संग्रहीत करता है (जिसे आप टाइप करके प्राप्त कर सकते हैं history)। जब तक आपने पहले से ही स्क्रॉल-बैक को बहुत अधिक संख्या में सेट नहीं किया है, तब तक आउटपुट को देखने का कोई तरीका नहीं है जो स्क्रॉल-बैक के सेट मान से पुराने हैं। इस मान को बहुत अधिक संख्या में सेट करने से आपकी स्क्रॉलिंग सुस्त हो जाएगी क्योंकि मेमोरी में लाइनें जमा हो जाती हैं ।

अपने भविष्य के कमांड और उनके आउटपुट को स्टोर करने के लिए, कुछ विकल्प हैं:

का उपयोग करते हुए screen

दर्ज करके एक स्क्रीन सत्र शुरू करें screen। एक बार जब आप स्क्रीन के अंदर हों , तो Ctrl- a, फिर :, एंटर करें log। सभी I / O screenlogउस डायरेक्टरी की फाइलों में कैद हो जाएंगे जहां आपने screenकमांड शुरू की थी।

का उपयोग करते हुए script

आप टाइप करके शुरू कर सकते हैं script। एक स्क्रिप्ट सत्र शुरू होगा जो सभी I / O नाम की फ़ाइल पर कब्जा कर लेगा typescript। आप scriptसत्र से बाहर निकल सकते हैं Ctrl- d और typescriptफ़ाइल में लॉग देख सकते हैं ।

का उपयोग करते हुए tee

टी एक आसान उपकरण है। आप ऐसा कुछ कर सकते हैं:

$ bash | tee log.txt

यह आपके द्वारा पहले से चलाए जा रहे एक नए बैश शेल को खोलेगा। जब आप इससे exitबाहर निकलते हैं, तो आप फ़ाइल नामक आउटपुट को देख सकते हैंlog.txt

दूसरा तरीका

जैसा कि डस्टिन किर्कलैंड ने इस पोस्ट में सुझाव दिया है , आप बायोबू का भी उपयोग कर सकते हैं । हालाँकि, मैंने कभी उपयोग नहीं किया है, शेलर जैसे टर्मिनल स्क्रेंस्टिंग टूल भी एक विकल्प की तरह लगते हैं।


6

इस एक से संबंधित बहुत सारे प्रश्न हैं, लेकिन वे सभी इस (सही) धारणा से शुरू करते हैं कि आउटपुट लॉग नहीं है।

तो मेरा सवाल है: कहां?

कहीं नहीं: बैश (और किसी भी अन्य शेल के बारे में जो मुझे पता है) आउटपुट लॉग नहीं है।

चूंकि आउटपुट स्क्रीन पर प्रदर्शित होता है, इसलिए इसे कहीं भी संग्रहीत किया जाना चाहिए।

यह है, लेकिन सबसे अधिक संभावना सादे पाठ में नहीं है और डिस्क पर भी नहीं है (हालांकि यह वास्तव में टर्मिनल एमुलेटर पर निर्भर है): सबसे अधिक संभावना है, और कम से कम ज्यादातर मामलों में, टर्मिनल एमुलेटर द्वारा आवंटित मेमोरी सेगमेंट में।

हालाँकि यह सुनिश्चित करने के लिए कि यह किसी फ़ाइल में लॉग इन नहीं है, कम से कम शेल द्वारा नहीं, और मुझे उन टर्मिनल एमुलेटर का पता नहीं है जो डिफ़ॉल्ट रूप से फाइल में आउटपुट लॉग करते हैं।

वास्तव में इसका मतलब यह नहीं है कि टर्मिनल आउटपुट को लॉग इन करना असंभव है: पहले मैं कुछ का उल्लेख करूंगा जो मुझे लगता है कि बहुत से लोग जानते नहीं हैं, क्योंकि मैंने कभी भी किसी को कम से कम यहाँ उबंटू उकसावे में इसका उल्लेख करते नहीं देखा है: कॉनसोल को बचाने की अनुमति देता है किसी फ़ाइल में स्क्रॉलबैक (शायद अन्य टर्मिनल एमुलेटर हैं जो इस तरह की कार्यक्षमता प्रदान करते हैं, कोनो कंसोल सिर्फ एक ही मुझे पता है), हालांकि यह कोनसोल के स्क्रॉलबैक आकार की सीमा द्वारा सीमित है।

यह अक्सर वास्तव में उपयोगी नहीं है, और सबसे अधिक संभावना है कि आप एक फ़ाइल में पूरे सत्र के आउटपुट को लॉग करने के लिए "उचित" समाधानों को देखना चाहेंगे ( मैं टर्मिनल सत्र में सभी इनपुट और आउटपुट कैसे लॉग कर सकता हूं? और रॉन का जवाब )।


1

स्क्रिप्ट के रूप में नाम का एक कमांड है, अगर स्थापित नहीं है तो apt-get install scriptवह करेगा।

फिर टर्मिनल में सिर्फ स्क्रिप्ट टाइप करें।

और जो आप चाहते हैं, उसे करने के बाद, बस बाहर निकलने के लिए टाइप करें और फिर सभी मौजूदा स्टडआउट और स्टड जानकारी के साथ आपकी वर्तमान निर्देशिका में एक फ़ाइल बनाई जाएगी।

आशा है कि यह आपकी मदद करता है।


पैकेज ubuntu 18.04 में NA है
अंकनकर्ता

1

इसका आपके शेल ( bash) के साथ कोई लेना-देना नहीं है , यह आपके द्वारा उपयोग किए जा रहे टर्मिनल एमुलेटर की एक विशेषता है। यह आपके टर्मिनल के "स्क्रॉलबैक बफर" में संग्रहीत है। मुझे कोई स्पष्ट स्पष्टीकरण नहीं मिल पाया है कि वास्तव में यह कहाँ संग्रहीत है, लेकिन व्यक्तिगत अनुभव ने मुझे दिखाया है कि यह कहीं पर संग्रहीत है /tmp

जैसा कि ऊपर दिए गए प्रश्न से जुड़ा हुआ है, यह बताता है कि यह सबसे अधिक संभावना है कि यह एक फ़ाइल में संग्रहीत है। यह देखने के लिए कि मेरा क्या मतलब है, एक पाठ संपादक के साथ एक नई फ़ाइल खोलें:

gedit newfile

फ़ाइल पर पाठ की एक पंक्ति लिखें और इसे सहेजें। अब, जबकि वह फ़ाइल अभी भी खुली है, एक टर्मिनल खोलें और इसे हटा दें:

rm newfile

चूंकि आपके पास अभी भी फाइल खुली है gedit, आप इसे लिखना जारी रख सकते हैं। आप इसमें कई गीगाबाइट डेटा भी लिख सकते हैं, इस तथ्य के बावजूद कि फ़ाइल को हटा दिया गया है। ऐसा इसलिए है क्योंकि किसी फ़ाइल को हटाने से उसके इनोड की ओर इशारा करते हुए लिंक को हटा दिया जाता है । यदि इसकी फ़ाइल डिस्क्रिप्टर को किसी अन्य प्रोग्राम द्वारा खुला रखा जाता है, तो डेटा इसे लिखा जा सकता है, इस तथ्य से घृणा करें कि फ़ाइल सिस्टम पर फ़ाइल डिस्क्रिप्टर के अनुरूप अब कोई वास्तविक लिंक (फ़ाइल) नहीं है।

यह सब कहना है कि आपके टर्मिनल के इतिहास को शायद उस तरह से एक चाल का उपयोग करके बचाया गया है, कहीं एक हटाई गई फ़ाइल में /tmp। क्या आप शायद वास्तव में चाहते हैं कि आप youre टर्मिनल एमुलेटर के स्क्रॉलबैक बफर आकार को बढ़ा सकते हैं ताकि आप बस इसे स्क्रॉल कर सकें और देख सकें। यह कैसे करना है इसका विवरण वह आपके द्वारा उपयोग किए जा रहे टर्मिनल एमुलेटर पर निर्भर करता है। अधिकांश में एक कमांड लाइन स्विच होता है जो आपको यह एट कर देता है और कई में इसे स्थापित करने का GUI तरीका भी होता है। उदाहरण के लिए, gnome-terminal(Ubuntu पर डिफ़ॉल्ट) इसे संपादित करें -> प्राथमिकताएँ -> प्रोफ़ाइल --- अपने प्रोफ़ाइल पर क्लिक करें -> संपादन -> स्क्रॉलिंग -> NNN पर स्क्रॉलबैक सीमित करें:

सूक्ति-टर्मिनल विकल्प स्क्रीन


दिलचस्प अंतर्दृष्टि। टर्मिनल में एक लंबा इतिहास का निरीक्षण करना वह नहीं है जो मैं चाहता हूं, हालांकि: मैं चाहता हूं कि टर्मिनल तक
कॉट की

@ DanielBöckenhoff तो आप संभवतः scriptस्वीकृत उत्तर में वर्णित के रूप में चाहते हैं ।
टेराडन

ज़रूर। मैंने इसे स्वीकार कर लिया :)
डैनियल बोकेनहॉफ़

-2

टर्मिनल सत्र .bash_historyफ़ाइल में संग्रहीत किया जाता है । इसे अपने टर्मिनल में दर्ज करें echo $HISTFILE, इससे आपको .bash_historyफ़ाइल का रास्ता मिल जाएगा ।


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