菜鸟科技网

Linux如何查看最近执行的命令?

在Linux系统中,管理员或用户经常需要查看最近执行的命令,以便排查问题、审计操作或追溯历史记录,Linux提供了多种命令和工具来实现这一需求,从基础的history命令到更高级的审计工具,每种方法都有其适用场景和特点,本文将详细介绍这些方法,包括它们的原理、使用方式及注意事项。

Linux如何查看最近执行的命令?-图1
(图片来源网络,侵删)

基础命令:history

history命令是最常用、最直接查看历史命令的方法,它默认记录用户在当前终端会话中执行过的命令,并将历史记录存储在用户主目录下的.bash_history文件中(具体文件名可能因Shell不同而异,如.zsh_history对应Zsh)。

基本用法

  • 查看所有历史记录
    直接输入history即可显示当前会话中的历史命令列表,每条命令前会带有序号。

    history

    输出示例:

      1  ls -l
      2  cd /tmp
      3  cat test.txt
      4  history
  • 显示最近N条命令
    通过history N可以只显示最近的N条命令,例如history 10显示最近10条。

    Linux如何查看最近执行的命令?-图2
    (图片来源网络,侵删)
  • 执行历史命令
    使用加序号可以快速执行某条历史命令,如!3会执行序号为3的命令(即cat test.txt)。

高级选项

  • 时间戳显示
    .bashrc.bash_profile中设置HISTTIMEFORMAT="%F %T ",可使history显示命令执行时间。

    export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
    history

    输出示例:

      1  2023-10-01 10:30:15 ls -l
      2  2023-10-01 10:30:20 cd /tmp
  • 忽略重复命令
    设置HISTCONTROL=ignoredups可避免连续重复的命令被记录。

    Linux如何查看最近执行的命令?-图3
    (图片来源网络,侵删)
  • 限制历史记录数量
    通过HISTSIZE控制当前会话记录的命令数量,HISTFILESIZE控制.bash_history文件的最大行数。

    export HISTSIZE=1000
    export HISTFILESIZE=2000

局限性

  • history仅记录当前用户的历史,且默认不记录命令执行时间(需手动配置)。
  • 历史记录可能被用户手动清除或修改,安全性较低。

查看其他用户的历史记录

若需要查看其他用户的历史记录,需具备root权限,并直接访问目标用户的.bash_history文件。

sudo cat /home/username/.bash_history

注意事项

  • 直接查看历史文件可能遗漏实时会话中的命令(未保存至文件)。
  • 需确保目标用户使用的是Bash Shell,其他Shell(如Fish、Zsh)的记录文件可能不同。

实时监控命令执行:scriptscriptreplay

对于需要实时监控或回放命令执行场景的场景,可以使用scriptscriptreplay工具。

录制终端会话

script -a session.log

执行后,所有终端操作将被记录到session.log文件中,包括输入、输出及时间戳,退出录制使用exit

回放会话

scriptreplay -t session.log.timing session.log

需先通过script-t选项生成时间戳文件(如session.log.timing)。


系统级审计工具:auditd

对于企业级安全审计,Linux内核自带的auditd服务可记录所有用户的命令执行日志,包括时间、用户、命令参数等详细信息。

启用auditd

sudo systemctl start auditd
sudo systemctl enable auditd

规则配置

通过auditctl添加审计规则,例如监控/bin//usr/bin/下的所有命令:

sudo auditctl -a always,exit -F dir=/bin -F perm=x -F auid>=1000
sudo auditctl -a always,exit -F dir=/usr/bin -F perm=x -F auid>=1000

查看审计日志

sudo ausearch -m EXEC -ts recent
  • -m EXEC:筛选执行类事件。
  • -ts recent:显示最近时间段的记录。

优点

  • 无法被普通用户篡改,安全性高。
  • 支持细粒度过滤(如按用户、命令路径等)。

缺点

  • 配置复杂,需root权限。
  • 可能产生大量日志,需合理规划存储。

第三方工具:lastcommacct

lastcommacct是Linux进程 accounting 功能的工具,可记录所有命令的执行情况。

启用acct

sudo systemctl enable acct

查看历史命令

lastcomm

输出包括命令名称、用户、终端、执行时间等信息。

查看用户统计

sa -u

显示每个用户执行的命令数量、CPU时间等统计信息。


不同方法的对比

方法 适用场景 优点 缺点
history 当前用户会话记录 简单易用,无需额外配置 仅限当前会话,可被手动清除
直接查看.bash_history 查看其他用户历史 无需安装额外工具 非实时,依赖文件完整性
script 实时录制/回放会话 支持时间戳和完整操作记录 需手动启动,可能遗漏后台进程
auditd 企业级安全审计 高安全性,不可篡改,细粒度过滤 配置复杂,资源消耗高
lastcomm 系统级命令统计 记录所有用户,支持统计分析 需启用acct,日志可能庞大

相关问答FAQs

Q1: 为什么history命令显示的时间戳不准确?
A: history本身不记录时间戳,需通过HISTTIMEFORMAT变量格式化显示,若未配置该变量,时间戳部分可能显示为空白或异常,建议在.bashrc中添加export HISTTIMEFORMAT="%F %T "以启用时间戳记录。

Q2: 如何防止历史记录被恶意删除?
A: 可以通过以下方法增强安全性:

  1. 限制.bash_history文件的权限(如chmod 600 ~/.bash_history),防止其他用户读取。
  2. 使用auditd服务记录系统级操作,普通用户无法清除审计日志。
  3. 定期将.bash_history备份到不可修改的位置(如只读文件系统或远程日志服务器)。
分享:
扫描分享到社交APP
上一篇
下一篇