Linux history 命令记录加执行时间戳以及记录到日志

本文介绍如何配置Linux环境,使得每次执行的命令及其时间、执行者等信息被记录到历史记录中,并进一步将这些信息记录到系统日志中,便于进行审计与回溯。

命令记录加执行时间

export HISTTIMEFORMAT="%F %T `whoami`"

效果如下:

  25  2017-06-06 10:17:07 louisifup enp0s3
   26  2017-06-06 10:17:07 louissu - root
   27  2017-06-06 10:17:07 louisifconfig
   28  2017-06-06 10:17:07 louisping 192.168.1.6
   29  2017-06-06 10:17:07 louiscurl 192.168.1.6
   30  2017-06-06 10:17:07 louisroute -n
   31  2017-06-06 10:17:07 louiscurl -I 192.168.1.6
   32  2017-06-06 10:17:07 louisps -ef | grep salt
   33  2017-06-06 10:17:07 louissu - root
   34  2017-06-06 10:17:07 louisls
   35  2017-06-06 10:17:07 louishistory
   36  2017-06-06 10:17:07 louisvi /var/log/messages
   37  2017-06-06 10:17:07 louissu - root
   38  2017-06-06 10:17:09 louislls
   39  2017-06-06 10:17:09 louisllls
   40  2017-06-06 10:17:11 louis,sk
   41  2017-06-06 10:17:16 louishistory

讲登陆系统的人指定的命令以及时间,执行命令所在的目录记录到系统日志。

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; }); logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg";}'

/var/log/message 内容变为:


Jun  6 10:17:11 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:17:11 louis,sk
Jun  6 10:17:11 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:17:11 louis,sk
Jun  6 10:17:16 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:17:16 louishistory
Jun  6 10:23:34 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:17:16 louishistory
Jun  6 10:23:35 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:23:35 louisls
Jun  6 10:23:35 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:23:35 louisls
Jun  6 10:23:35 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:23:35 louisls
Jun  6 10:23:36 centser2 louis: [euid=louis]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/home/louis]2017-06-06 10:23:35 louisls
Jun  6 10:23:39 centser2 su: (to root) louis on pts/0
Jun  6 10:23:39 centser2 louis: [euid=root]:louis pts/0 2017-06-06 10:17 (192.168.1.4):[/root]2017-06-06 10:23:39 roothistory


<think>我们正在处理用户的问题:如何在Linux或Unix系统中查看历史命令执行时间戳? 根据用户提供的引用和系统指令,我们需要生回答并生相关问题。 步骤: 1. 理解用户需求:用户希望查看历史命令执行时间戳。 2. 根据引用和已知知识,我们知道默认情况下,history命令不会显示时间戳,但可以通过配置HISTTIMEFORMAT环境变量来显示。 3. 引用[2]提到,在标准的Bash环境中,历史命令默认不保存执行时间,但我们可以通过配置来记录时间戳。 4. 引用[3]提供了时间格式转换的信息,但我们的重点是如何让history显示时间戳。 回答要点: - 说明如何临时设置HISTTIMEFORMAT来显示时间戳。 - 说明如何永久设置(修改bash配置文件)。 - 注意:已经执行过的命令在设置前不会显示时间戳,设置后新执行命令才会记录时间。 同时,根据系统指令,我们需要: - 使用中文回答。 - 行内数学表达式用$...$(但这个问题可能用不到数学表达式)。 - 独立公式用$$...$$(同样,这个问题可能不需要)。 - 生相关问题。 另外,在回答中引用段落末尾添引用标识。注意,用户提供的引用[1]和[3]与当前问题关联不大,引用[2]部分相关,但我们的回答主要基于通用知识,必要时可引用[2]作为参考。 回答结构: 1. 解释问题:默认情况下history不显示时间戳。 2. 提供临时解决方案。 3. 提供永久解决方案。 4. 注意事项。 生相关问题。 开始回答:</think>### 如何在Linux/Unix中查看历史命令执行时间戳Linux/Unix系统中查看历史命令执行时间戳,需要通过配置`HISTTIMEFORMAT`环境变量实现。具体步骤如下: #### 1. **临时生效方法(当前会话)** ```bash export HISTTIMEFORMAT="%F %T " # 设置时间格式为"年-月-日 时:分:秒" history ``` 执行后,历史命令将显示为: ``` 501 2023-08-15 14:30:15 ls -l 502 2023-08-15 14:31:02 cd ~/Documents ``` #### 2. **永久生效方法** 将配置写入Shell配置文件: ```bash echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc # Bash用户 source ~/.bashrc # 立即生效 ``` - Zsh用户需修改`~/.zshrc` - 此配置仅对**新执行命令**生效,已有历史记录不会回溯添时间戳[^2] #### 3. **查看原始时间戳数据** 历史命令时间戳存储在`~/.bash_history`文件中,格式为: ``` #1660383000 ls -l #1660383015 cd ~/Documents ``` 其中`#1660383000`是Unix时间戳(自1970-01-01起的秒数),可通过`date -d @1660383000`转换[^3] #### 4. **高级用法** - **自定义时间格式**: ```bash export HISTTIMEFORMAT="[%d/%m %H:%M] " # 输出示例:[15/08 14:30] ``` - **结合过滤命令**: ```bash history | grep "2023-08-15.*ssh" # 查找某天的SSH命令 ``` > **注意**:系统日志如`/var/log/auth.log`可能包含SSH会话的命令记录(需root权限),但非完整解决方案[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值