බැෂ් ඉතිහාසයේ කාල මුද්දර දකින්නේ කෙසේද?


285

බැෂ් ඉතිහාසයෙන් විධාන ක්‍රියාත්මක වූයේ කුමන වේලාවකදැයි මට දැකගත හැකි ක්‍රමයක් තිබේද? අපට ඇණවුම දැකිය හැකි නමුත් මට කාලය ලබා ගත හැකි ක්‍රමයක් තිබේද?

බොටම් ලයින්: බෑෂ් ඉතිහාසයේ ක්‍රියාත්මක කිරීමේ කාලය


9
මෑන් පේජ් වල ලිනක්ස් සහ බීඑස්ඩී යන දෙඅංශයේම මෙය කෙතරම් දුර්වල ලෙස ලේඛනගත කර ඇත්දැයි මම පුදුම වෙමි.
ශ්‍රීධර් සර්නොබත්

මෙම බ්ලොගය පරීක්ෂා කරන්න - sanctum.geek.nz/arabesque/better-bash-history .
lightsong

6
ඔබ zsh භාවිතා කරන්නේ නම්:history -E
වහීඩ්

5
ටර්මිනලයක් විවෘත කරන්නේ කෙසේදැයි ඔබට
පැවසීමේ

3
@ Dog0 විසින් සඳහන් කරන ලද බ්ලොග් අඩවියට අනුව, HISTTIMEFORMATවිධාන නිකුත් කරන විට විචල්‍යය සකසා ඇත්නම් මිස කාලරාමුව සුරැකෙන්නේ නැත . වෙනත් වචන වලින් කිවහොත්, ඔබ එය සකසා නොතිබුනේ නම්, දැන් එය සැකසීම කලින් නිකුත් කළ විධාන වල කාලරාමු ලබා ගැනීමට ඔබට උපකාරී නොවේ.
ටොමිස්ලාව් නාකික්-ඇල්ෆිරෙවික්

Answers:


358

ටර්මිනලයක් විවෘත කිරීමට 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 respectively
echo 'HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
source ~/.bashrc

ක්‍රියාත්මක වන බලපෑම් පරීක්ෂා කිරීම සඳහා:

history

වැඩි විස්තර සඳහා ලිනක්ස් සඳහා මෑන් බාෂ් හෝ බාෂ් විධාන රේඛාවේ AZ දර්ශකය බලන්න .

පෙර ධාවනය කළ විධාන සඳහා HISTTIMEFORMAT, වත්මන් කාලය කාලරාමුව ලෙස සුරකිනු ඇත. HISTTIMEFORMATසැකසූ පසු ක්‍රියාත්මක වන විධානයන් නිසි කාලරාමුව සුරකිනු ඇත.


76
මෙම බව සටහන සඳහා වූ වාර්තාව timestamps පමණක් නව ඉතිහාසය භාණ්ඩ , පසු HISTTIMEFORMATවන සැසි සඳහා සකස්, ඔබ අතීතයට බලපාන මෙම භාවිත කල නොහැක සමුදායයි. මෙහි සමහර පිළිතුරු මගින් ඉතිහාස විධානය වහාම කාලරාමු ඇතුළත් කිරීම් පෙන්වයි
ලුවී මැඩොක්ස්

20
Am ජමිල්: අයිඑස්ඕ ප්‍රමිතීන් අනුගමනය කරන පුද්ගලයින් සඳහා, එය දිනය කොටස සඳහා "% y-% m-% d" වේ;)
ගෞතියර්

Zsh භාවිතා කරන්නන් සඳහා සටහනක් - බොහෝ බිල්ඩින් මෙන් නොව එය කඩාවැටෙන්නේ නැත. ඒ වෙනුවට මෙය බලන්න: unix.stackexchange.com/questions/103398/…
ශ්‍රීධර් සර්නොබත්

අවාසනාවකට මිලි තත්පර ප්‍රදර්ශනය කිරීමට ක්‍රමයක් නොමැති බව පෙනෙන strftime හි කාල ආකෘතිය භාවිතා කරයි ... (අවම වශයෙන් අතේ ගෙන යා නොහැකි ලෙස% f සමහර පද්ධතිවල වැඩ කරන බව කියනු ලැබේ ???)
මයිකල්

14
@ ගෞතියර් - ඇත්ත වශයෙන්ම, ISO දිනය සඳහා% F භාවිතා කරන්න ;-) man7.org/linux/man-pages/man3/strftime.3.html
බ්‍රයන්මර්ස්

83

ටර්මිනලය Ctrl+ Alt+ විවෘත Tකර ධාවනය කරන්න,

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

එවිට,

history

වෙනස්කම් ස්ථිර කිරීමට පහත පියවර අනුගමනය කරන්න,

gedit ~/.bashrc

ඔබට පහත පේළිය .bashrc ගොනුවට එකතු කර එය සුරකින්න,

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

පහත දැක්වෙන විධානය ප්‍රභව .bashrc ගොනුව වෙත ධාවනය කරන්න,

source ~/.bashrc

එම ධාවනය historyවිධානයෙන් පසුව .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මූලාශ්‍රය : http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/


පිළිතුරු දීම ගැන ස්තූතියි, it එය ස්ථිර වෙනසක් වේවිද?
rɑːdʒɑ

1
හේයි, මම මෙය කරන්නේ OS X සහ Windows වලින් (MINGW හරහා), මම එය .bash_profile වෙත එක් කරමි, පැතිකඩ සහ rc අතර වෙනස කුමක්ද?
LasagnaAndroid

HISTTIMEFORMAT="%d/%m/%y %T " historyවැඩ
ඇලෙක්ස් 78191

19

ඔව්, ඔබට පුළුවන්: ඔබ සකසන්නේ නම් $HISTTIMEFORMAT, .bash-historyනිසි පරිදි කාලරාමුව ලබා දෙනු ඇත. එය පවතින .bash-historyඅන්තර්ගතයට උදව් නොකරන නමුත් අනාගතයේදී එය උපකාරී වනු ඇත.


1
වැඩි පැහැදිලි කිරීමක් සඳහා ඔබට එය පුළුල් කළ හැකිද?
rɑːdʒɑ

6
පෙර තනතුරට නිවැරදි කිරීම: HISTTIMEFORMAT සැකසීම මඟින් කාලරාමු ප්‍රදර්ශනය කිරීමට හැකි වේ ... පවා පවතී. මගේ ප්‍රියතම දෙය නම්: HISTTIMEFORMAT = '% F% T' වැදගත් වන්නේ ඔබ ජීවත් වන්නේ කුමන රටෙන්ද යන්න නොවේ ... එය කුමන වේලාවටදැයි සියලු දෙනා වහාම දනිති. :)

5
මම $ HISTTIMEFORMAT සකසා ඇති අතර මෙම කට්ටලයේ විධාන වලට පෙර පවා මට අද වේලාවන් ලැබුණි.
යසින් ඔකුමු

49 user491029 "... පවා පවතී". මෙය සත්‍ය, නමුත් නොමඟ යවන සුළුය. උබුන්ටු 14.04 හි, අවම වශයෙන්, මම HISTTIMEFORMAT සැකසූ පසු එය සියලුම ඉතිහාස සටහන් සඳහා කාලරාමු පෙන්වීමට පටන් ගෙන ඇත, නමුත් එය වර්තමාන සැසිවාරයට පෙර ක්‍රියාත්මක වන ඕනෑම විධානයක් සඳහා වන කාලරාමු වත්මන් සැසියේ පිවිසුම් කාලරාමුව ලෙස පෙනේ.
jbobbins

3

ඊළඟ පිවිසුමේ වෙනස්කම් ඔබට පෙනෙනු ඇත.

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

2

වෙනස් HISTIMEFORMATකිරීම මට වැඩ කළේ නැත, මන්ද මම zsh භාවිතා කරමි.

ඔබට එය zsh සමඟ වැඩ කිරීමට අවශ්‍ය නම්, ඔබ ටයිප් කළ යුත්තේ: history -i


1

සියලුම පරිශීලකයින් සඳහා ඉතිහාස කාලරාමු සක්‍රීය කිරීම සඳහා, /etc/profile.d හි ස්ක්‍රිප්ට් එකක් සාදන්න:

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

3
පෙරනිමි පර්යන්තය පිවිසුම් කවච ක්‍රියාත්මක නොවන බැවින් GUI හරහා පිවිසෙන පරිශීලකයින් සඳහා මෙය ක්‍රියා නොකරනු ඇත. /etc/bash.bashrcවඩා හොඳ තැනක් වනු ඇත.
මුරු

1

ක්‍රියාත්මක වන මගේ අනුවාදය

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

ref. 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 මෙතැනින් බලන්න


0

මම දන්නවා, මම එයට ප්‍රමාද වී පිළිතුරු දෙනවා, නමුත් සියලුම පරිශීලකයින් සඳහා මෙය කිරීමට, ඔබට ඕනෑම .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

රූප විස්තරය මෙහි ඇතුළත් කරන්න


හෙලෝ ශෂාන්ක්, පිළිතුර එකතු කිරීම ගැන ස්තූතියි, නමුත් මෙම පිළිතුර අනෙක් අයට වඩා වෙනස් වන්නේ කෙසේද? ඔබගේ පිළිතුර සම්පූර්ණයෙන්ම වෙනස් නම් එය ලැබීම ගැන අපි සතුටු වෙමු, නමුත් එසේ නොවේ නම් ඔබට පවතින පිළිතුරු වැඩි දියුණු කළ හැකිය.
rɑːdʒɑ

1
හායි, අදහස් දැක්වීමට ස්තූතියි. මෙය පහත දැක්වෙන ආකාරයට අනෙක් අයට වඩා වෙනස් ය: 1. ඔවුන්ගෙන් සමහරක් සියලු පරිශීලකයින් සඳහා නිර්මාණය කිරීම ගැන සඳහන් කර ඇති නමුත් කිසිදු ලිපිගොනු නාමයක් තැනීම / පැහැදිලි කිරීම ගැන කිසිවෙකු සඳහන් කර නැත /etc/profile.d. timestamp.shතාක්‍ෂණයට ඉතා සමීපව පෙනේ (එබැවින් එය ව්‍යාකූලත්වයක් ඇති කරයි) එබැවින් මම නම existing-foo-file.sh(foo-bar සංකල්පය) භාවිතා කළෙමි . 2. මූල නොවන පරිශීලකයින් සමඟ එය භාවිතා කිරීම ගැන කිසිවෙකු සඳහන් කර නැත. එබැවින් මම භාවිතා කිරීම පිළිබඳ උදාහරණයක් ලබා දී ඇත sudo. 3. 3 වන උදාහරණය පවතින ගොනුවකට එකතු කිරීමේ 2 වන උදාහරණය වැඩි දියුණු කරයි. ලිනක්ස් / යුනික්ස් ආරම්භකයින්ට මෙම ගැටලුවට මුහුණ දිය හැකි බැවින් මම විස්තාරනය කළෙමි.
ශෂාන්ක් අග්‍රවාල්

0

මම .bash_profile හි එක් පරිශීලකයෙකුට tty උපාංගයකට ඉතිහාසයක් පවත්වා ගෙන යන අතර ඔවුන්ට විශාල වීමට ඉඩ දෙන්න. සමහර විට මට grep භාවිතා කරමින් එම ලිපිගොනු හරහා විධානයක් භාවිතා කළේ කොහෙන්දැයි සොයා ගැනීමට අවශ්‍යය. මට අවශ්‍ය දේ ලබා ගැනීම සඳහා මම ටික වේලාවක් ගත කර ඇති අතර, එක් එක් ගොනුව සඳහා නූල් සහ ශීර්ෂයන් ලෙස කාල මුද්දර සහ කාලයට පෙර කුමන වේලාවක්ද, ඒ නිසා මම අඹරන්නේ නම් කොතැනද සහ කවදාද යන්න මම දකිමි:

$ 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 t
ttys003 Thu 28 Sep 2017 10:45:48+6.12H (1506613974)grep \ 755\  Qlog
ttys003 Thu 28 Sep 2017 10:45:48+6.15H (1506614092)grep \ 769\  Qlog
ttys003 Thu 28 Sep 2017 10:45:48+6.16H (1506614130)locate akd
ttys003 Thu 28 Sep 2017 10:45:48+6.17H (1506614159)less /System/Library/LaunchAgents/com.apple.akd.plist
ttys003 Thu 28 Sep 2017 10:45:48+6.17H (1506614172)mN -K PLIST
ttys003 Thu 28 Sep 2017 10:45:48+6.18H (1506614179)man -k plist
ttys003 Thu 28 Sep 2017 10:45:48+6.18H (1506614213)man swapllist

ජීවිතය ඉතා කෙටි බැවින් (LITS) සියලු පසුබිමට යා නොහැක, නමුත් මම එය සකස් කළ විට මගේ dev සටහන් මෙහි ඇත. මෙය මැකෝස් මත ඇති බැවින් විශේෂ උකුස්සන් නැත, නමුත් මම දිනය -r භාවිතා කරන්නේ එය ඔබට වෙනස් විය හැකි දිනය -d?. විනෝද වන්න! :

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
\#1502956374
man top
\#1502956600
top

As 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]|head
Works 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 terminal
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);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_ttys002

Works 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_ttys002

Do 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.