web-dev-qa-db-ja.com

〜/ .bash_historyファイルで時間を確認する方法

~/.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ファイルでタイムスタンプを取得する方法を教えたりできますか?.

8
Prototype

これは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だと思います

9
Parto

タイムスタンプを含む.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
_
1
bac0n