8

history コマンドの出力を ssh 経由でファイルに保存すると、次のような結果が得られます

ssh -i private_key user@ip 'export HISTFILE=~/.bash_history; export HISTTIMEFORMAT="%D-%T "; set -o history; history' > myfile.txt

出力

#1337431451
command

私が知る限り、このハッシュ文字列はタイムスタンプを表しています。これを目的の形式の文字列に変更するにはどうすればよいですか

PS- ssh で履歴を使用すると、タイムスタンプが出力されません。ほとんどすべてを試しました。したがって、次の最善の方法は、これらの # タイムスタンプを自分で読み取り可能な日時形式に変換することだと思います。どうすればいいですか?

4

3 に答える 3

6

貼り付けコマンドで行を結合できます:

paste -sd '#\n' .bash_history

awk で strftime を使用して日付を変換します。

echo 1461136015 | awk '{print strftime("%d/%m/%y %T",$1)}'

その結果、タイムスタンプ付きの bash 履歴は次のコマンドで解析できます。

paste -sd '#\n' .bash_history | awk -F"#" '{d=$2 ; $2="";print NR" "strftime("%d/%m/%y %T",d)" "$0}'

これは次のように変換します:

#1461137765
echo lala
#1461137767
echo bebe

1 20/04/16 10:36:05   echo lala
2 20/04/16 10:36:07   echo bebe

/usr/local/bin/fhistory のような内容のスクリプトを作成することもできます:

#!/bin/bash

paste -sd '#\n' $1 | awk -F"#" '{d=$2 ; $2="";print NR" "strftime("%d/%m/%y %T",d)" "$0}'

次のコマンドでbash履歴ファイルをすばやく解析します。

fhistory .bash_history
于 2016-04-20T07:38:57.793 に答える
3

興味深い質問: 試してみましたが、非対話型シェルで履歴にアクセスするためのシンプルでクリーンなソリューションが見つかりませんでした。ただし、履歴ファイルの形式は単純で、スクリプトを記述して解析できます。次の python スクリプトは興味深いかもしれません。で呼び出しますssh -i private_key user@ip 'path/to/script.py .bash_history'

#! /usr/bin/env python3

import re
import sys
import time

if __name__ == '__main__':
    pattern = re.compile(br'^#(\d+)$')
    out = sys.stdout.buffer
    for pathname in sys.argv[1:]:
        with open(pathname, 'rb') as f:
            for line in f:
                timestamp = 0
                while line.startswith(b'#'):
                    match = pattern.match(line)
                    if match: timestamp, = map(int, match.groups())
                    line = next(f)
                out.write(time.strftime('%F %T ', time.localtime(timestamp)).encode('ascii'))
                out.write(line)
于 2012-05-19T13:55:55.887 に答える