बैश इतिहास में टाइम स्टैम्प कैसे देखें?

क्या कोई तरीका है जो मैं देख सकता हूं कि बैश इतिहास से आदेशों को किस समय निष्पादित किया गया था? हम आदेश देख सकते हैं लेकिन क्या कोई तरीका है जिससे मुझे समय भी मिल सके?

निचला-रेखा: बैश इतिहास में निष्पादन समय

प्रेस Ctrl+Alt+T टर्मिनल खोलने के लिए, फिर नीचे दिए गए आदेशों में से एक चलाएं:

HISTTIMEFORMAT="%d/%m/%y %T "  # for e.g. “29/02/99 23:59:59”HISTTIMEFORMAT="%F %T "        # for e.g. “1999-02-29 23:59:59”

वर्तमान उपयोगकर्ता चलाने के लिए परिवर्तन को स्थायी बनाने के लिए:

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc  # or respectivelyecho 'HISTTIMEFORMAT="%F %T "' >> ~/.bashrcsource ~/.bashrc

प्रभाव चलाने का परीक्षण करने के लिए:

history

अधिक जानकारी के लिए देखें मैन बैश या लिनक्स के लिए बैश कमांड लाइन का ए-जेड इंडेक्स.

कमांड के लिए जो चलाए गए थे इससे पहले HISTTIMEFORMAT सेट किया गया था, वर्तमान टाइमस्टैम्प के रूप में समय की बचत होगी । आदेश के बाद चलाते हैं HISTTIMEFORMAT सेट किया गया था उचित टाइमस्टैम्प सहेजा जाएगा ।

ओपन टर्मिनलCtrl+Alt+T और भागो,

HISTTIMEFORMAT="%d/%m/%y %T "

फिर,

history

परिवर्तनों को स्थायी बनाने के लिए नीचे दिए गए चरणों का पालन करें,

gedit ~/.bashrc

आपको नीचे की पंक्ति को इसमें जोड़ना होगा । बीएएसआरसी फ़ाइल और फिर इसे सहेजें,

export HISTTIMEFORMAT="%d/%m/%y %T "

स्रोत के लिए नीचे कमांड चलाएँ ।बीएएसआरसी फाइल,

source ~/.bashrc

उस रन के बाद history कमान।

enter image description here

स्रोत:http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/

हाँ, आप कर सकते हैं: यदि आप सेट करते हैं $HISTTIMEFORMAT, को .bash-history ठीक से टाइमस्टैम्प किया जाएगा । यह मौजूदा के साथ मदद नहीं करता है .bash-history सामग्री, लेकिन भविष्य में मदद मिलेगी ।

आप अगले लॉगिन पर परिवर्तन देखेंगे।

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc

बदल रहा है HISTIMEFORMAT मेरे लिए काम नहीं किया, क्योंकि मैं ज़श का उपयोग कर रहा हूं ।

यदि आप इसे जेडएसएच के साथ काम करना चाहते हैं, तो आपको बस टाइप करना होगा :history -i

मेरा संस्करण जो काम करता है

HISTTIMEFORMAT="%F %T %z " history | grep 'your command'

रेफरी। https://www.linuxuprising.com/2019/07/bash-history-how-to-show-timestamp-when.html

जैसे ।

╭you@your-server:/some/path ╰$ HISTTIMEFORMAT="%F %T %z "; history | grep 'some command' 1947  2019-12-17 15:54:34 +0800 ./some.sh 1948  2019-12-17 15:54:34 +0800 ./my-command

के लिए पूर्ण वाक्यविन्यास देखें HISTTIMEFORMAT यहाँ

सभी उपयोगकर्ताओं के लिए इतिहास टाइमस्टैम्प सक्षम करने के लिए, /आदि/प्रोफ़ाइल में एक स्क्रिप्ट बनाएं । d :

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh

मुझे पता है, मैं इसका उत्तर बहुत देर से दे रहा हूँ, लेकिन सभी उपयोगकर्ताओं के लिए ऐसा करने के लिए, आप कोई भी बना सकते हैं .sh फ़ाइल में /etc/profile.d और इसमें निम्न पंक्ति जोड़ें:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' >> /etc/profile.d/existing-foo-file.sh

यदि आपने लॉग इन नहीं किया है root या सुपरयुसर, आपको इसका उपयोग करना होगा tee ऐसा करने की आज्ञा:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee /etc/profile.d/mytimestamp.sh

यदि आप किसी मौजूदा फ़ाइल में जोड़ना चाहते हैं, तो पास करें -a ध्वज को tee आदेश:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee -a /etc/profile.d/mytimestamp.sh

enter image description here

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

$ awk 'BEGIN{RS="#"; FS="\n"} {if (FNR == 1){ print "\n==>" FILENAME "<=="; tty=substr(FILENAME,15,9) }; if ((ln==0) && ($1 ~/^[0-9]+$/)){Cmd="date -r "$1""; Cmd | getline textDate; close(Cmd);baseD=substr(textDate,1,length(textDate)-5);baseS=$1}; if ($1 ~/^[0-9]+$/){printf "%s %s+%.2fH (%d)%s\n",  tty, baseD, ($1-baseS)/3600, $1, $2; if (ln==0) {ln=20} else {ln--}}} ' .bash_history_ttys003|head==>.bash_history_ttys003<==ttys003 Thu 28 Sep 2017 10:45:48+0.00H (1506591948)cp Qlog tttys003 Thu 28 Sep 2017 10:45:48+6.12H (1506613974)grep \ 755\  Qlogttys003 Thu 28 Sep 2017 10:45:48+6.15H (1506614092)grep \ 769\  Qlogttys003 Thu 28 Sep 2017 10:45:48+6.16H (1506614130)locate akdttys003 Thu 28 Sep 2017 10:45:48+6.17H (1506614159)less /System/Library/LaunchAgents/com.apple.akd.plistttys003 Thu 28 Sep 2017 10:45:48+6.17H (1506614172)mN -K PLISTttys003 Thu 28 Sep 2017 10:45:48+6.18H (1506614179)man -k plistttys003 Thu 28 Sep 2017 10:45:48+6.18H (1506614213)man swapllist

सभी पृष्ठभूमि में नहीं जा सकते क्योंकि जीवन बहुत छोटा है (लिट्स) लेकिन यहां मेरे देव नोट्स हैं क्योंकि मैंने इसे काम किया है । यह मैकोज़ पर है इसलिए कोई विशेष गॉक नहीं है लेकिन मैं दिनांक-आर का उपयोग करता हूं जहां यह आपके लिए भिन्न हो सकता है, दिनांक-डी?. आनंद लें! :

How would I list all .bash_history* lines that grep finds together with the Unix timestamp as string?sample data lines in history (#unix time \n command)head .bash_history_ttys007\#1502956374man top\#1502956600topAs 2 lines looks like an awk task...Can't print FILENAME in begin as there is no current file at that stage :( so use FNR file rec numb check...awk 'BEGIN{RS="#"} {if (FNR == 1){ print FILENAME }; "date -r "$1"" | getline textDate; close(date);print textDate, $0}'awk 'BEGIN{RS="#"} {if (FNR == 1){ print FILENAME }; "date -r "$1"" | getline textDate; close(date);print textDate, $0}' .bash_history_ttys00[67]|headWorks but 3 lines per item as x0a line-returns are in there. WILL HAVE OTHER PROBLEMS TOO (later)...Progress by field sep on new lines and carve up filename for controlling terminalawk 'BEGIN{RS="#"; FS="\n"} {if (FNR == 1){ print "\n==>" FILENAME "<=="; tty=substr(FILENAME,15,9) }; if ($1 ~/^[0-9]+$/){"date -r "$1"" | getline textDate; close(date);print  tty, substr(textDate,1,length(textDate)-1) ,"(" $1")", $2} }' .bash_history_ttys00[67]|head$ awk 'BEGIN{RS="#"; FS="\n"} {if (FNR == 1){ print "\n==>" FILENAME "<=="; tty=substr(FILENAME,15,9) }; if ($1 ~/^[0-9]+$/){"date -r "$1"" | getline textDate; close(date -r "$1");print  tty, substr(textDate,1,length(textDate)-1) ,"(" $1")", $2} }' .bash_history_ttys002Works OK but runs a bit slow: just do dates every once in a while? then if grep-ing will probably miss it...awk 'BEGIN{RS="#"; FS="\n"} {if (FNR == 1){ print "\n==>" FILENAME "<=="; tty=substr(FILENAME,15,9) }; if ($1 ~/^[0-9]+$/){Cmd="date -r "$1""; Cmd | getline textDate; close(Cmd);print  tty, substr(textDate,1,length(textDate)-1) ,"(" $1")", $2} }' .bash_history_ttys002Do occasional date convert and retain string and offset secs? this does run much faster and requires timestamps to avoid # in commands. About 5s for 20,000 commands for me.awk 'BEGIN{RS="#"; FS="\n"} {if (FNR == 1){ print "\n==>" FILENAME "<=="; tty=substr(FILENAME,15,9) }; if ((ln==0) && ($1 ~/^[0-9]+$/)){Cmd="date -r "$1""; Cmd | getline textDate; close(Cmd);baseD=substr(textDate,1,length(textDate)-5);baseS=$1}; if ($1 ~/^[0-9]+$/){printf "%s %s+%.2fH (%d)%s\n",  tty, baseD, ($1-baseS)/3600, $1, $2; if (ln==0) {ln=20} else {ln--}}} ' .bash_history_ttys003

यदि आप जेडएसएच का उपयोग कर रहे हैं ' इतिहास-ई

मुझे आश्चर्य है कि मैनपेज में लिनक्स और बीएसडी दोनों पर यह कितना खराब दस्तावेज है ।

सुनिश्चित नहीं है कि नीचे दिए गए दो उत्तर आपको यह बताने की आवश्यकता क्यों महसूस करते हैं कि टर्मिनल कैसे खोलें । .

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

इस ब्लॉग को देखें - https://sanctum.geek.nz/arabesque/better-bash-history / ।