क्या टर्मिनल डेटा संग्रहीत करता है?


9

यह कुछ ऐसा है जो मैं वास्तव में लंबे समय से जानना चाहता हूं, लेकिन वास्तव में कभी कोई प्रश्न प्रस्तुत नहीं करता है।

मुझे पता है कि लिनक्स डिस्ट्रोस में प्रदान किए जाने वाले टर्मिनल में, तीर कुंजियों का उपयोग करके कमांड के पूरे इतिहास को देखा जा सकता है (यदि कोई अन्य विधि है, तो मुझे इसके बारे में पता नहीं है), तो यह कैसे होता है?

क्या कोई ऐसा स्थान है जहां टर्मिनल सभी कीस्ट्रोक को लॉग करता है? क्या यह किसी प्रकार का बफर है? लेकिन, फिर, अगर यह एक बफर था, तो इसे थोड़ी देर के बाद बाहर निकाल दिया जाएगा, यह नहीं होगा?

यह प्रणाली कैसे काम करती है?


पहले से इस्तेमाल की जाने वाली सभी कमांड प्राप्त करने के लिए इतिहास लिखें ..
Sukupa91

ओपी historyकमांड के बारे में नहीं पूछ रहा है लेकिन पुराने कमांड को याद रखने की यह पूरी प्रणाली कैसे काम करती है।
तरुण

क्षमा करें, मुझे यह गलत लगा ..
Sukupa91

2
इस अपवाद को ध्यान में रखें: यदि कमांड एक स्थान से शुरू होता है तो कमांड इतिहास में समाप्त नहीं होगा।
रिनविंड

@Rinzwind, यह इतिहास में जुड़ जाता है, अगर एक स्थान के साथ शुरू किया गया हो।
जीसी 13

जवाबों:


10

यह कमांड इतिहास है और यह टर्मिनल की बजाय शेल की एक विशेषता है।

उबंटू पर (और यदि अन्य लिनक्स वितरणों में से अधिकांश नहीं तो बहुत कुछ) इंटरैक्टिव उपयोग के लिए डिफ़ॉल्ट शेल बैश है (/bin/bash ) है। बैश आपका इतिहास रखता है, जो कि अंतिम आदेशों की एक सूची है ~/.bash_history। जब आप एक शेल खोलते हैं (आमतौर पर टर्मिनल खोलकर) तो यह फाइल पढ़ी जाती है और इस शेल के आंतरिक इतिहास में लोड होती है। एक बार जब आप शेल को बंद करते हैं, तो परिवर्तन फ़ाइल में वापस लिखे जाते हैं। डिफ़ॉल्ट रूप से यह अंतिम 500 कमांड तक सीमित है।

कुछ चर और शेल विकल्प हैं जो व्यवहार को बदल सकते हैं कि यह कैसे काम करता है। man bashयदि आप अधिक जानना चाहते हैं, तो बैश मैनपेज पर एक नज़र डालें । बस इतिहास की खोज करें (टाइप करें /^HISTORYऔर पुष्टि करें Enter, अगली खोज के लिए कूदेंn )

इसके अलावा वहाँ काफी एक बहुत अधिक तरीकों बस से इतिहास के आसपास जाने के लिए कर रहे हैं Upऔर Down:

  • उदाहरण के लिए, प्रेस Ctrl+ Rऔर पिछले कमांड का हिस्सा, बैश मैच की कमांड के लिए इतिहास में पीछे की ओर खोजेगा, प्रेसिंग रिपीट Ctrl+ Rअगर पहला मैच वह नहीं है जिसकी आपको तलाश है। ('मैनिपुलेटिंग द हिस्ट्री को मैन ऑफ द हिस्ट्री इन द बैश मैनपेज' देखें)

  • के साथ और उन में लाइनों /etc/inputrcको कॉपी ~/.inputrcऔर अनकम्प्लीट करें। यदि आप एक कमांड के पहले अक्षर टाइप करते हैं और प्रेस करते हैं , तो बैश केवल उसी अक्षरों से शुरू होने वाले इतिहास से कमांड दिखाएगा। (इस परिवर्तन के बाद खोले गए गोले में ही काम करें)history-search-forwardhistory-search-backwardPgUp

  • !!शेल पर एक कमांड के बजाय टाइप करें , यह आखिरी कमांड को दोहराएगा (उस पर अधिक जानकारी के लिए बैश मैनपेज में 'इतिहास का विस्तार' देखें)।


1
और अगर आप नहीं चाहते कि यह एक इतिहास बना रहे, तो unset HISTFILEअपने ~ / .bashrc में डाल दें । तब यह इतिहास को केवल स्मृति में रखेगा, प्रत्येक नए शेल के आह्वान के लिए इसे साफ करेगा।
बजे एक CVn

10

कमांड इतिहास आम तौर पर प्रति-उपयोगकर्ता के आधार पर संग्रहीत किया जाता है .bash_history आपके घर निर्देशिका में फ़ाइल में । मतलब, प्रत्येक उपयोगकर्ता के पास अपने द्वारा निष्पादित कमांड का अपना सेट है।

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

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