इतिहास आकार को नियंत्रित करने वाले दो चर हैं:
इतिहास फ़ाइल में समाहित लाइनों की अधिकतम संख्या। जब इस चर को एक मान दिया जाता है, तो इतिहास फ़ाइल को सबसे पुरानी प्रविष्टियों को हटाकर, उस संख्या से अधिक संख्याओं को शामिल करने के लिए, यदि आवश्यक हो, काट दिया जाता है। एक शेल से बाहर निकलने के बाद इसे लिखने के बाद इतिहास फ़ाइल को इस आकार में काट दिया जाता है। यदि मान 0 है, तो इतिहास फ़ाइल को शून्य आकार में छोटा कर दिया जाता है। गैर-संख्यात्मक मान और संख्यात्मक मान शून्य से कम ट्रंकेशन को रोकते हैं। शेल किसी भी स्टार्टअप फ़ाइलों को पढ़ने के बाद HISTSIZE के मान के लिए डिफ़ॉल्ट मान सेट करता है।
तथा
HISTSIZE कमांड इतिहास में याद रखने के लिए कमांड की संख्या (नीचे देखें इतिहास)। यदि मान 0 है, तो इतिहास सूची में आदेश सहेजे नहीं जाते हैं। इतिहास सूची में सहेजे जाने वाले हर आदेश में शून्य मान शून्य से कम है (इसकी कोई सीमा नहीं है)। शेल किसी भी स्टार्टअप फ़ाइलों को पढ़ने के बाद डिफ़ॉल्ट मान को 500 पर सेट करता है।
ये दो चर आपको अपने इतिहास के व्यवहार को नियंत्रित करने की अनुमति देते हैं। मूल रूप से, HISTSIZEआपके वर्तमान सत्र के दौरान सहेजे गए आदेशों की संख्या है और उन आदेशों HISTFILESIZEकी संख्या है जिन्हें सत्रों में याद किया जाएगा। इसलिए, उदाहरण के लिए:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
ऊपर दिए गए उदाहरण में, क्योंकि HISTSIZE10 पर सेट है, history10 कमांड की सूची देता है। हालाँकि, यदि आप लॉग आउट करते हैं और फिर वापस लॉग इन करते हैं, historyतो केवल 5 कमांड वापस आएंगे क्योंकि 5 HISTFILESIZEपर सेट किया गया है। ऐसा इसलिए है, क्योंकि जब आप अपना सत्र समाप्त कर लेते हैं, तो HISTFILESIZEआपके इतिहास की आपकी पंक्तियाँ आपकी इतिहास फ़ाइल ( ~/.bash_historyडिफ़ॉल्ट रूप से लेकिन नियंत्रित) द्वारा बच जाती हैं HISTFILE)। दूसरे शब्दों में, कमांड्स को HISTFILEतब तक जोड़ा जाता है जब तक कि वह $HISTFILESIZEकिस बिंदु पर लाइनों तक नहीं पहुंच जाता है, प्रत्येक बाद की लाइन जोड़ी जाने का मतलब है कि फ़ाइल का पहला कमांड हटा दिया जाएगा।
आप इन चरों के मानों को अपने ~/.profile(या ~/.bash_profileयदि वह फ़ाइल मौजूद है) सेट कर सकते हैं । उन्हें अपने ~/.bashrcपहले में सेट न करें क्योंकि उनका कोई व्यवसाय वहां सेट नहीं किया जा रहा है और दूसरी बात यह है कि इससे आपको लॉगिन बनाम गैर-लॉगिन गोले में अलग-अलग व्यवहार करना पड़ेगा, जिससे अन्य समस्याएं हो सकती हैं ।
अन्य उपयोगी चर जो आपको अपने इतिहास के व्यवहार को ठीक करने की अनुमति देते हैं:
HISTIGNORE: यह आपको कुछ सामान्य आदेशों की अनदेखी करने की अनुमति देता है जो कि शायद ही कभी रुचि के हों। उदाहरण के लिए, आप सेट कर सकते हैं:
export HISTIGNORE="pwd:df:du"
यही कारण है कि किसी भी आदेश के साथ शुरू कारण होगा pwd, dfया duनजरअंदाज कर दिया और अपने इतिहास में सहेजा नहीं।
HISTCONTROL: यह आपको यह चुनने देता है कि इतिहास कैसे काम करता है। व्यक्तिगत रूप से, मैं इसे HISTCONTROL=ignoredupsकेवल एक बार डुप्लिकेटेड कमांड को बचाने के लिए इसे सेट करता हूं । अन्य विकल्प ignorespaceव्हॉट्सएप से शुरू होने वाली कमांड्स को नजरअंदाज करना है, और erasedupsइससे पिछली सभी लाइनें जो वर्तमान लाइन से मेल खाती हैं, उस लाइन को सहेजने से पहले इतिहास सूची से हटा दिया जाता है। ignorebothइग्नोरस्पेस और इग्नोरडअप के लिए आशुलिपि है।
HISTTIMEFORMAT: यह आपको इतिहास फ़ाइल का समय प्रारूप सेट करने की अनुमति देता है। पांड्या का जवाब देखें या man bashविवरण के लिए पढ़ें ।
आगे की अच्छी ट्यूनिंग के लिए, आपके पास:
histappendबैश विकल्प। इसे shopt -s histappendउस कमांड को चलाकर या अपने द्वारा जोड़कर सेट किया जा सकता है ~/.bashrc। यदि यह विकल्प सेट है
इतिहास सूची फ़ाइल में अधिलेखित होने के बजाए, जब शेल बाहर निकलता है, तो HISTFILE चर के मान द्वारा नामित फ़ाइल में जोड़ा जाता है।
यह बहुत उपयोगी है क्योंकि यह आपको विभिन्न सत्रों के इतिहास को संयोजित करने की अनुमति देता है (उदाहरण के लिए विभिन्न टर्मिनलों पर विचार करें)।
historyआदेश दो उपयोगी विकल्प हैं:
उदाहरण के लिए, आप इन दोनों आदेशों को अपने साथ जोड़ सकते हैं PROMPT_COMMAND(जो हर बार आपके शेल को निष्पादित करने के लिए संकेत देता है, इसलिए जब भी आप एक नया शेल शुरू करते हैं और प्रत्येक कमांड के बाद आप इसमें चलते हैं):
export PROMPT_COMMAND='history -a;history -r;'
संयुक्त, वे यह सुनिश्चित करते हैं कि आपके द्वारा खोला गया कोई भी नया टर्मिनल तुरंत किसी अन्य शेल सत्र के इतिहास को आयात करेगा। परिणाम सभी टर्मिनलों / शेल सत्रों में एक सामान्य इतिहास है।