タイムスタンプ保存履歴ファイル

タイムスタンプ保存履歴ファイル

私は履歴コマンドの出力にタイムスタンプを撮る方法に関する多くの文書を見ました。しかし、保存された履歴ファイルにタイムスタンプを追加するにはどうすればよいですか?たとえば、各ユーザーのbash履歴を/root/history/.bash_history-$USERに保存するサーバー設定があります。これは /root/.bash_profile で 1 行で行われます。

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

次の行を追加しました。

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

/root/.bash_profileに移動してインポートします。ただし、タイムスタンプはファイルに保存されず、履歴コマンドを実行したときにのみ表示されます。同時に2つのタスクを実行するように設定するにはどうすればよいですか?

編集する:

提案されているように、.bashrcファイルに次の行を追加しました。

export HISTSIZE=3000
export HISTFILESIZE=5000
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print   $1}')
format_history () {
 perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]  {10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;'    /root/history/.bash_hist-$(who -m | awk '{print $1}')
}
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

vim、cat、またはそれ以下を使用して履歴ファイルを開こうとすると、次のようになります。

command I ran
#Thu Mar Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed Dec Wed     Dec Wed Dec Wed Dec Wed Dec 31 18:00:31 1969 18:00:31 1969 18:00:31 1969   18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969  18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 18:00:31 1969 14:26:02 2016

編集3:

最新の変更を行った後:

# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
# Fri Apr  1 15:26:35 2016#
#1459542395
command

答え1

次のようなことができます

perl -Mposix -pe 's/^#([0-9]{10})/POSIX::strftime( "%d\/%m\/%y %T", gmtime($1))/eg' .bash_history > readable_history

ファイルのエポックタイムスタンプをフォーマットされたタイムスタンプに置き換えます。これを内部で実行するには、フォーマットされた時間を各行の上にコメントとして挿入するように変更できますが、bashが履歴タイムスタンプファイルを読み取るときに解釈しないように、最初の数字の前にスペースを入れる必要があります。自分のために。

編集:履歴ファイルを壊さずに内部で実行する行は次のとおりです。

perl -Mposix -i -pe 's/^#([0-9]{10})(.*)/"# ".POSIX::strftime( "%d\/%m\/%y %T", gmtime($1))."\n#$1$2"/ge' .bash_history

これにより、次のファイルが生成されます。

#1356431101 command arg arg
#1356531101 command2 arg2

次のようになります。

# 25/12/12 10:25:01
#1356431101 command arg arg
# 26/12/12 14:11:41
#1356531101 command2 arg2

Edit2:これを私のbashrcに入れることが私に役立ちました:

format_history () {
    perl -i -e '$/=undef;my $string=<>;$string=~s/#([0-9]{10}.*\n.*$)/"# ".localtime($1)."#\n#$1"/ge;print $string;' ~/.bash_history
}
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

最終編集 - 以下は何も繰り返さないべきより良い正規表現バージョンです。

perl -i -e '$/=undef;my $string=<>;$string=~s/(#\s[^\n]*\n)?#(\d{10}\n)/"# ".localtime($+)."\n#$+"/ge;print $string;' your_history_file_name_here

関連情報