कभी-कभी इतिहास कमांड को .bash_history में संग्रहीत नहीं किया जाता है


20

मैंने अपने CentOS 7. में कल कई कमांड जारी किए थे, लेकिन जब मैंने आज इन कमांड को पुनः प्राप्त करना चाहा, तो मैंने पाया कि कोई रिकॉर्ड नहीं था। जब मैंने फ़ाइल खोली .bash_history, तो मैं अभी भी मेरे द्वारा कल जारी किए गए आदेशों को नहीं पा सका था लेकिन मुझे कुछ दिन पहले कई पुरानी कमांड मिलीं। हाल के आदेशों को संग्रहीत क्यों नहीं किया गया? मैं इतिहास की क्षमता कैसे बढ़ा सकता हूं?


कभी-कभी जब टर्मिनल असामान्य रूप से बंद कर दिया है, इतिहास नहीं सहेजा जाता है, यह रूप में अच्छी तरह मुझे क्या हुआ, लेकिन मैं परिस्थितियों के इस व्यवहार का कारण बन रहे पता नहीं है
mazs

जवाबों:


11

इतिहास की वस्तुओं को न दिखाने का सबसे संभावित कारण HISTFILEकुछ भी नहीं या HISTSIZEशून्य पर सेट करना नहीं है, यह एक ही मशीन में दो बार लॉग इन करने और दूसरे बैश उदाहरण (जिसमें आपने बहुत कम या कुछ भी नहीं किया था) के साथ बाहर निकलने के बाद होता है आपने बहुत कुछ किया। डिफ़ॉल्ट रूप से बैश इतिहास को मर्ज नहीं करता है और दूसरा बैश-एग्जिट ओवरराइट करता है .bash_historyजो कि पहले बैश-एग्जिट द्वारा बहुत अच्छी तरह से अपडेट किया गया था।

इसे होने से रोकने के लिए आप ओवरराइट करने के बजाय इतिहास फ़ाइल में संलग्न कर सकते हैं, आप histappendशेल विकल्प का उपयोग कर सकते हैं :

यदि हिस्टैपेंड शेल विकल्प सक्षम किया गया है (नीचे शेल बिल्डिंग्स के तहत शॉप्ट का विवरण देखें), लाइनें इतिहास फ़ाइल में संलग्न हैं, अन्यथा इतिहास फ़ाइल ओवरराइट की गई है।

इस उत्तर में अधिक विवरण, कैसे उपयोग करें HISTSIZE, HISTFILESIZEऔर HISTCONTROLआकार, डुप्लिकेट आदि को नियंत्रित करने के लिए।


3

इतिहास के आकार को संशोधित करने के लिए दो BASH चर का उपयोग करें HISTSIZE, HISTFILESIZE(आमतौर पर सेट .bashrc)।

BASH मैन पेज से विवरण:

HISTSIZE कमांड इतिहास में याद रखने के लिए कमांड की संख्या (नीचे देखें इतिहास)। यदि मान 0 है, तो कमांड इतिहास सूची में सहेजे नहीं जाते हैं। इतिहास सूची में सहेजे जाने वाले हर आदेश में शून्य मान शून्य से कम है (इसकी कोई सीमा नहीं है)। शेल किसी भी स्टार्टअप फ़ाइलों को पढ़ने के बाद डिफ़ॉल्ट मान को 500 पर सेट करता है।

HISTFILESIZE लाइनों की अधिकतम संख्या इतिहास फ़ाइल में निहित। जब इस चर को एक मान सौंपा जाता है, तो इतिहास फ़ाइल को सबसे पुरानी प्रविष्टियों को हटाकर, उस संख्या से अधिक संख्याओं को शामिल करने के लिए, यदि आवश्यक हो, trunated उद्धृत किया जाता है। एक शेल से बाहर निकलने के बाद इसे लिखने के बाद इतिहास फ़ाइल को इस आकार में काट दिया जाता है। यदि मान 0 है, तो इतिहास फ़ाइल को शून्य आकार में छोटा कर दिया जाता है। गैर-संख्यात्मक मान और संख्यात्मक मान शून्य से कम ट्रंकेशन को रोकते हैं। शेल किसी भी स्टार्टअप फ़ाइलों को पढ़ने के बाद HISTSIZE के मान के लिए डिफ़ॉल्ट मान सेट करता है।

एक उदाहरण के रूप में मेरी .bashrcफाइल में निम्नलिखित सेटअप है :

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

1

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

यहां छवि विवरण दर्ज करें

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


5
इतिहास विकल्पों में से एक को एक स्थान से शुरू करने वाली लाइनों को अनदेखा (सहेजना नहीं) करना है। यह आमतौर पर डिफॉल्ट होता है। इसे आपके .bashrc में बदला जा सकता है।
स्टूडॉग

1

Verifiy कि आपका HISTCONTROLपर्यावरण चर ignorespaceया नहीं पर सेट है ignoreboth

$ echo $HISTCONTROL
ignoredups  #this is ok

आप इसे अपनी ~/.bash_profileया अपनी ~/.profileफ़ाइल में मान सेट करके संशोधित कर सकते हैं :

HISTCONTROL=ignoredups

से bashआदमी पेज:

HISTCONTROL

इतिहास सूची में आदेशों को सहेजने के तरीके को नियंत्रित करने वाले मूल्यों की एक बृहदान्त्र-पृथक सूची।

यदि मानों की सूची में शामिल हैं ignorespace, तो जो लाइनें अंतरिक्ष चरित्र से शुरू होती हैं, वे इतिहास सूची में सहेजे नहीं जाते हैं।

ignoredupsसहेजे नहीं जाने के लिए पिछले इतिहास प्रविष्टि से मेल खाती लाइनों का कारण बनता है।

मान ignorebothके लिए आशुलिपि है ignorespaceऔर ignoredups

erasedupsउस लाइन को सहेजे जाने से पहले इतिहास की सूची से हटाए जाने वाली वर्तमान लाइन से मेल खाते सभी पिछली लाइनों के कारणों का एक मूल्य ।

उपरोक्त सूची में किसी भी मूल्य को अनदेखा नहीं किया गया है।

यदि HISTCONTROL कोई परेशान है, या एक वैध मूल्य शामिल नहीं है, तो शेल पार्सर द्वारा पढ़ी गई सभी लाइनें इतिहास सूची में सहेज ली जाती हैं, जिसके मूल्य के अधीन है HISTIGNORE। मल्टी-लाइन कंपाउंड कमांड की दूसरी और बाद की लाइनों का परीक्षण नहीं किया जाता है, और मूल्य के बिना इतिहास में जोड़ा जाता है HISTCONTROL

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