2011-08-25 17 views
5

मैं जिज्ञासा से बाहर सोच रहा था, यदि बैश/एसएसएच सत्र में सभी कमांड चलाने वाले बैश स्क्रिप्ट लॉग को कोड करना संभव है। मुझे पता है कि history सभी आदेशों को चलाने के लिए लगता है लेकिन यह बहुत अविश्वसनीय लगता है!बैश कमांड लॉगर

मैं आज सुबह के बारे में गड़बड़ कर रहा हूं और निम्न बैश स्क्रिप्ट के साथ आया हूं जो लॉग इन करता है जो उपयोगकर्ता टर्मिनल में चलता है लेकिन सभी आदेशों को सही तरीके से नहीं चलाता है।

prompt_read() { 
    echo -n “$(whoami)@$(hostname):$(pwd)~$ “ 
    read userinput 
} 

prompt_read 

while :; do 
    if [[ $userinput != exit ]]; then 
    logger "logit $userinput" 
    bash -c "$userinput" 
    prompt_read 
    else 
    kill -1 $PPID 
    fi 
done 

कुछ भी के बारे में पता किसी को भी कि history

चीयर्स

उत्तर

8

कारण है कि इतिहास आप के लिए अविश्वसनीय लगती है क्योंकि यह केवल एक के अंत में इतिहास के लिए लिखता है की तुलना में मज़बूती से बेहतर और अधिक आदेशों लॉग है बाश सत्र, तो आप आदेश खो सकते हैं।

मैं अपने बैश प्रोफ़ाइल में कुछ चीजें हैं:

HISTFILESIZE=10000 # how many lines of history to store in the history file 

HISTSIZE=10000 # how many lines of history to store in a session (I think) 

HISTCONTROL=ignoredups # ignore duplicate commands 

shopt -s histappend # append history, rather than having sessions obliterate existing history 
PROMPT_COMMAND="history -a;$PROMPT_COMMAND" 

पिछले कुछ महत्वपूर्ण होते हैं, अपने PROMPT_COMMANDhistory -a साथ स्थापित कर इतिहास बना देगा तुरंत संलग्न है, बल्कि बाद के सत्र की तुलना में। और shopt -s histappend सेटिंग मौजूदा इतिहास को ओवरराइट करने के बजाय, बैश सत्र इतिहास फ़ाइल में जोड़ देगा।

कुछ अधिक जानकारी: http://linuxcommando.blogspot.com/2007/11/keeping-command-history-across-multiple.html

साथ ही, यदि यह आपके लिए उपयोगी है, तो आप आप HISTFILE वातावरण चर के साथ एक विशेष बैश सत्र के लिए उपयोग इतिहास फ़ाइल का नाम बदल सकते हैं।

+1

+1, बीटीडब्ल्यू, प्रति इतिहास इतिहास फ़ाइलों को कहने के लिए 'HISTFILE' सेट करना भी संभव है। – Hasturkun

+0

@ हस्तार्कुन - इसका जिक्र करने के लिए धन्यवाद। – birryree

4

चेक बाहर स्क्रिप्ट: http://bashshell.net/commands/using-the-script-command/

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

आप लॉगिन पर सब कुछ रिकॉर्ड करने के लिए इसे उपयोगकर्ता के खोल के रूप में सेट कर सकते हैं।

+0

इसे फिर से चलाने के लिए आपको ['scriptreplay'] की आवश्यकता है (http://manpages.ubuntu.com/manpages/intrepid/man1/scriptreplay.1.html)। – birryree

2

आप एक पैच या एक विशेष निष्पादन योग्य उपकरण का उपयोग किए बिना सभी 'bash' कमांड/बिल्टिन को टेक्स्ट-फ़ाइल या 'syslog' सर्वर में लॉग इन करने के लिए एक स्क्रिप्ट here पा सकते हैं।

आप सीधे लॉगफाइल पर syslog के बिना भी लिख सकते हैं।

तैनाती करना बहुत आसान है, क्योंकि यह एक साधारण शैल स्क्रिप्ट है जिसे 'बैश' के प्रारंभ में एक बार बुलाया जाना चाहिए।

संबंधित मुद्दे