~/.bashrc
ファイルに時間を追加したので、次のようにhistory
コマンドを実行すると時間が表示されます。
376 04/10/19 20:39:52 Sudo cat ~/.bash_history
377 04/10/19 20:40:04 date
378 07/10/19 10:13:29 echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
379 07/10/19 10:13:38 source ~/.bashrc
380 07/10/19 10:13:54 history
381 07/10/19 10:20:08 Sudo vim /home/subir/.bash_history
382 07/10/19 10:20:29 Sudo nano /home/subir/.bash_history
383 07/10/19 11:34:20 cd ..
384 07/10/19 11:34:34 find | grep .bash_history
385 07/10/19 11:34:48 cat ./subir/.bash_history
386 07/10/19 11:37:32 history
しかし、このセッションのデータが~/.bash_history
ファイルに追加されると、次のようになります。
#1570201804
date
#1570423409
echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
#1570423418
source ~/.bashrc
#1570423434
history
#1570423808
Sudo vim /home/subir/.bash_history
#1570423829
Sudo nano /home/subir/.bash_history
#
の後の値は何ですか?誰かがその意味を推測するのを手伝ったり、~/.bash_history
ファイルでタイムスタンプを取得する方法を教えたりできますか?.
これはUnixタイムスタンプ/エポック時間です-1970年1月1日から経過した秒数。
これを日時に変換すると、次の結果が得られます。
$ date -d @1570201804
Fri Oct 4 18:10:04 EAT 2019
UTCでは10/04/2019 @ 3:10pm (UTC)
ですが、東アフリカにいるので、10/04/2019 @ 6:10pm (UTC)
には+3時差があります。
あなたのタイムゾーンは+5:30だと思います
タイムスタンプを含む.bash_historyを解析します( awk )。
まず、改行_-F \\n
_でフィールドを切り取り、#Epoch _$0 ~ /^#[0-9]+/
_で始まる行を確認します。次に、エポック文字列substr($1,2)
をフォーマットする前に、最初の文字strftime("%d/%m/%y %T")
を削除します。最後に、改行なしの最初の部分_printf "%5d %s "
_を印刷するので、コマンドを含む次の行getline
をフェッチして、同じ行に印刷できます。
_awk -F \\n '{ if ($0 ~ /^#[0-9]+/) {printf "%5d %s ", ++i, strftime("%d/%m/%y %T", substr($1,2)); getline; print $0 }}' ~/.bash_history
_
出力:
_ 1 07/10/19 14:46:09 echo a
2 07/10/19 14:46:28 echo b
3 07/10/19 14:46:39 echo c
_