Hyper-V VM 上的 Ubuntu 20.04
我正在尝试做类似的事情写在这个答案里。我认为这个答案将所有终端记录到某个文件中。如果可能的话,我希望能够按天记录我的所有终端输入/输出。这样当我想知道我在某一天做了什么时,我可以转到那一天的日志文件并读取我的终端的输入/输出。
答案1
我不知道您是否可以在服务器机器上安装软件,但 ZSH 和 FISH(BASH shell 的替代品)在其历史文件中存储每个运行命令的时间戳。ZSH 按行存储,FISH 每条命令存储两行。两者都使用 Unix 时间戳。 嘚 :1591635588:0;ssh 用户@服务器 ls /tmp 鱼 989 - cmd: ssh user@server ls /tmp 990 时间: 1591387835
我使用安装了 oh-my-zsh 的 ZSH 而不是 bash。ZSH 的历史记录文件 (~/.zsh_history) 将每个命令(行)存储为 bash,但将运行该命令时的 Linux 时间戳放在开头。要将历史记录保留在您这边(客户端),您可以通过 ssh 运行该命令:
$~> ssh user@server ls /tmp
$~> ssh user@server cat /etc/os-release
在 ZSH 上它的存储方式如下:
$~> cat ~/.zsh_history
: 1591635588:0;ssh user@server ls /tmp
: 1591636831:0;ssh user@server cat /etc/os-release
如果对该文件运行 AWK,则可以翻译时间戳:
$~> awk -F":" '{print strftime("%Y-%m-%d %H\:%M\:%S", $2),$3}' ~/.zsh_history
2020-06-08 14:49:10 0;ssh user@server ls /tmp
2020-06-08 14:50:04 0;ssh user@server cat /etc/os-release
例如,您可以结合使用 grep 按日期进行过滤,并将其发送到文件:
$~> awk -F":" '{print strftime("%Y-%m-%d %H:%M:%S", $2),$3}' ~/.zsh_history \
| grep -E "2020-06-08" > ${HOME}/2020-06-08-history.log