मशीन बनने के बाद से शेल कमांड का इतिहास कैसे पता करें?


23

मैंने कुछ हफ़्ते पहले एक उबंटू वर्चुअलबॉक्स मशीन बनाई थी और तब से इस पर काम कर रहा हूँ।

अब मैं एक हफ्ते पहले टर्मिनल में टाइप किए गए कुछ कमांड्स के सिंटैक्स को खोजना चाहूंगा, लेकिन मैंने टर्मिनल विंडो को खोला और बंद कर दिया है और मशीन को कई बार रीस्टार्ट किया है।

historyमशीन बनाने के बाद मुझे पहले टाइप की गई कमांड पर वापस जाने की आज्ञा कैसे मिल सकती है ?
या फिर एक और जगह है कि सभी कमांड उबंटू में संग्रहीत हैं?


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

जवाबों:


26

सभी आदेश प्राप्त करना संभव है या नहीं। यह निर्भर करता है कि आपने कितने कमांड निष्पादित किए हैं और इतिहास की सीमा कैसे निर्धारित की गई है।

हालाँकि आप देख सकते हैं कि इतिहास सूची यहाँ संग्रहीत है

/home/<YOUR_USERNAME>/.bash_history

संबंधित प्रश्न (कई शेल इतिहास को संभालने के लिए):

क्या .bash_history को तत्काल लिखना संभव है?


3
यह सच नहीं है कि इतिहास केवल एक टर्मिनल / शेल से बचा है। जब आप दौड़ते हैं history, तो यह वर्तमान शेल के इतिहास को सबसे हाल के रूप में दिखाता है, और अन्य सभी गोले (पिछले सत्रों में गोले सहित, शक्ति चक्रों सहित) से पहले का इतिहास दिखाता है। सभी शेल इंस्टेंस उनके इतिहास को .bash_historyबाहर निकलने पर सहेजते हैं । कोई भी उदाहरण इसे स्वचालित रूप से उस बिंदु से पहले नहीं बचाता है।
एलियाह कगन

6

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

यदि आप चाहते हैं कि हर कमांड हमेशा के लिएbash रिकॉर्ड हो जाए , तो आपको इसे स्वयं सेट करना होगा। उदाहरण के लिए, आप ~/.bashrcएक bashशेल में टाइप की गई सभी कमांड को फाइल में लॉग इन करने के लिए अपनी फाइल में निम्नलिखित डाल सकते हैं ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

ऊपर एक जाल सेट करता है DEBUG, जिसे एक साधारण कमांड निष्पादित होने से ठीक पहले निष्पादित किया जाता है। callerनिर्मित परीक्षण है कि क्या आदेश एक इंटरैक्टिव खोल में टाइप किया जा रहा है या की तरह कुछ के माध्यम से चलाने के लिए प्रयोग किया जाता है ~/.bashrc। मान ${BASH_COMMAND}में वर्तमान में निष्पादित की जा रही कमांड है।


मैं यह नोट करना चाहता हूं कि macOS पर, यह तकनीक update_terminal_cwdइतिहास फ़ाइल में भी लॉग करती है, जो कि एक कमांड है जिसे उपयोगकर्ता नहीं चलाता है, लेकिन स्वचालित रूप से चलाया जाता है।
आशीष आहूजा

5

कुछ है कि आप के लिए भी रुचि हो सकती है कि कैसे अपने पिछले कमांड इतिहास के माध्यम से खोज करने के लिए है। आप अपने इतिहास को कमांड लाइन पर दबाकर Ctrl+rऔर फिर उन अक्षरों को टाइप कर सकते हैं जिन्हें आप मिलान करना चाहते हैं। यदि आपके पास एक से अधिक मिलान आदेश हैं, तो Ctrl+rफिर से दबाएँ । रिवर्स खोज को छोड़ने के लिए, दबाएँ Ctrl+g

http://www.ice2o.com/bash_quick_ref.html


4

आप केवल तभी तक वापस जा सकते हैं, जब तक कि आपकी इतिहास सीमा निर्धारित न हो जाए; एक बार यह उस बिंदु पर पहुंच गया है कि इतिहास को फिर से लिखना शुरू कर दिया जाएगा। हालांकि, भविष्य के लिए एक बड़ा इतिहास आकार रखना संभव है। इसे अपने .bashrc में रखें और मान निर्दिष्ट करें (मेरा 1000 पर सेट है):

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