मेरे बैश इतिहास को अप्रत्याशित रूप से साफ़ करने का क्या कारण हो सकता है?


16

आज मैंने देखा कि मेरा बैश इतिहास पूरी तरह से साफ हो गया है। मैंने फ़ाइल को न तो निष्पादित किया है history -cऔर न ही हटाया है .bash_history.bash_historyफ़ाइल को हटाने के अलावा और history -c, इतिहास को कैसे मिटाया जा सकता है?


2
यह उदाहरण के तौर पर हो सकता है >.bash_history। हो सकता है कि कोई आपके खाते में था और उसने अपने पगडंडियों को छिपाने की कोशिश की। असामान्य लॉग इन समय की जाँच करें last, खोज के माध्यम से /var/log/auth.log(आपके सिस्टम पर निर्भर करता है)।
ott--

जवाबों:


17

एक ही समय में कई बैश इंस्टेंसेस को बंद करते समय, एक ज्ञात दौड़ की स्थिति होती है जिससे इतिहास साफ़ हो सकता है। यह तब होता है क्योंकि बैश इतिहास फ़ाइल लिखे जाने पर लॉकिंग का उपयोग नहीं किया जाता है।

चेत रमी (वर्तमान बैश मेंटेनर) ने इस मुद्दे की स्थितियों का अच्छा सारांश दिया :

वर्तमान (bash-4.3-devel) कोड कुछ इस तरह से काम करता है, कोई त्रुटि नहीं मानती है (lib / readline / histfile.c: history_do_write ()):

  • नाम बदलें (हिस्टफ़ाइल, हिस्टफ़ाइल ~)
  • O_CREAT | O_TRUNC के साथ खुली फ़ाइल
  • सभी इतिहास डेटा को रखने के लिए मॉलोक बफर काफी बड़ा है
  • एक (2) कॉल में सभी इतिहास प्रविष्टियों को लिखें
  • फ़ाइल बंद करें
  • अनलिंक (हिस्टीफाइल ~)

बैश-4.2 कोड उसी तरह काम करता है, सिवाय इसके कि यह इतिहास की फाइल का बैकअप नहीं लेता है। प्रत्येक शेल एक ही काम करता है जब वह बाहर निकलता है, यह मानते हुए कि आपके कॉन्फ़िगरेशन में हिस्टैपेंड सेट नहीं है।

ऐसे कुछ तरीके हैं जिनसे इतिहास की फ़ाइल शून्य-लंबाई तक समाप्त हो सकती है: मॉलॉक विफल हो सकता है, या लेखन विफल हो सकता है। बैश-4.2 में, उस बिंदु पर छंटनी की गई इतिहास फ़ाइल के बारे में कुछ भी करने के लिए बहुत देर हो चुकी है। Bash-4.3 में, पिछली इतिहास फ़ाइल को पुनर्स्थापित किया जाएगा।

बग-बैश के इस मेलिंग लिस्ट थ्रेड में समस्याओं, संभावित समाधानों और इसके आस-पास की चिंताओं की एक सभ्य चर्चा है।

कुछ अन्य संभावनाएँ भी हैं:

  • कुछ बिंदु पर, आपका HISTSIZEया HISTFILESIZE0 पर सेट किया गया था
  • कुछ बिंदु पर, आपकी रीडलाइन history-size0 पर सेट की गई थी
  • किसी ने, चाहे जानबूझकर या अनजाने में, बैश इतिहास मिटा दिया ( > "$HISTFILE"या इसी तरह)

बाद के मामले में, आप यह जांचना चाह सकते हैं कि कोई व्यक्ति आपके खाते तक नहीं पहुंच रहा है और अपने ट्रैक को अनूठे तरीके से छिपाने की कोशिश कर रहा है। पर एक नजर डालें last, /var/log/auth(या /var/log/secureCentOS / RHEL पर), और आप इसे किया है, किसी भी प्रक्रिया लेखांकन और / या ऑडिटिंग सॉफ़्टवेयर आपके द्वारा इंस्टॉल किया।


1

कैसे मैंने गलती से अपना बैश इतिहास मिटा दिया:

मैं पहले सिद्धांतों से अपनी वैकल्पिक टर्मिनल रीडलाइन स्क्रिप्ट को रोल कर रहा था: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

और फिर एक टर्मिनल में इसका परीक्षण किया। उस GNU रीडलाइन में एक इतिहास आकार और इतिहास संरक्षण निर्देश हैं, जो कि हिस्ट साइज़ को डिफॉल्ट किया जा सकता है, और इस तरह आपका सारा इतिहास उड़ जाता है।

स्मृति में छोड़ दिया तो इतिहास की वसूली:

यदि आप इसे रिबूट से पहले पकड़ लेते हैं, या यदि एक टर्मिनल स्पष्ट से पहले खुला छोड़ दिया गया था, तो आप अपने इतिहास को स्मृति में ढूंढने में सक्षम हो सकते हैं। भागो history | cut -c 8- > histback_user1.txtसभी टर्मिनलों पर खुला और प्रत्येक उपयोगकर्ता के लिए छोड़ दिया है। यदि वह आपके विस्तारित इतिहास के साथ एक फ़ाइल का उत्पादन करता है, तो आप के ~/.bash_historyसाथ बदल सकते हैं histback_user1.txt। हाल ही में सिस्टम में लॉग किए गए सभी उपयोगकर्ताओं के इतिहास के साथ-साथ रूट के इतिहास को भी देखें। कई परिस्थितियों में बैश इतिहास को गलती से साफ़ करना आसान है, इसलिए यदि आप इतिहास को कोई नुकसान नहीं पहुंचाना चाहते हैं, तो आपको दैनिक बैकअप स्क्रिप्ट की आवश्यकता है।


आपका धन्यवाद । मुझे नहीं पता कि नरक क्या हुआ था, लेकिन मेरा इतिहास कल फिर से स्थापित हो गया और यह अब तक नहीं था कि मैंने इसे देखा। लेकिन, मेरे लिए भाग्यशाली है, मेरे पास एक टर्मिनल विंडो नहीं खुली थी, लेकिन 10 (!)। अभी सब ठीक है।
Marc.2377
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.