菜鸟科技网

Linux命令执行记录怎么查?

在Linux系统中,查看命令执行记录是系统管理和日常运维中的常见需求,无论是排查问题、审计操作还是追溯历史命令,都需要掌握多种查看方法,Linux系统通过不同的机制记录命令执行历史,包括Shell历史记录、系统日志、进程监控工具等,每种方法适用于不同场景,下面将详细介绍这些查看命令执行记录的方式。

Linux命令执行记录怎么查?-图1
(图片来源网络,侵删)

Shell历史记录查看

Shell历史记录是最直接、最常用的命令执行记录方式,主要依赖于Shell环境维护的历史列表,默认情况下,Bash Shell会将用户输入的命令保存在历史文件中,通常位于用户主目录下的.bash_history文件(历史文件路径可能因Shell类型不同而有所差异,如Zsh的默认历史文件为.zsh_history)。

基本查看命令

  • history命令:这是查看当前Shell会话历史记录最常用的命令,执行history会显示当前会话中执行过的命令列表,每条命令前带有一个数字序号,

    history

    输出示例可能为:

    1  ls -l
    2  cd /home
    3  ps aux

    通过序号可以快速执行历史命令,如!2会执行序号为2的命令(即cd /home)。

    Linux命令执行记录怎么查?-图2
    (图片来源网络,侵删)
  • 查看历史文件内容:除了当前会话的历史记录,还可以直接查看历史文件内容,使用catlessmore命令:

    cat ~/.bash_history
    less ~/.bash_history

    less命令支持分页浏览,适合查看较长的历史文件。

历史记录的定制与搜索

  • 控制历史记录数量:通过设置HISTSIZEHISTFILESIZE环境变量可以控制当前会话和历史文件中保存的命令数量,在~/.bashrc~/.bash_profile中添加:

    export HISTSIZE=1000
    export HISTFILESIZE=2000

    设置后需重新加载配置文件(如执行source ~/.bashrc)生效。

    Linux命令执行记录怎么查?-图3
    (图片来源网络,侵删)
  • 历史记录时间戳:若要记录命令执行的时间戳,可以在~/.bashrc中启用HISTTIMEFORMAT变量:

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

    设置后,history命令的输出会包含每条命令的执行时间,

    1  2023-10-01 10:00:00 ls -l
    2  2023-10-01 10:01:00 cd /tmp
  • 搜索历史记录:使用history结合grep可以快速搜索特定命令:

    history | grep "ssh"

    或者在当前Shell中使用Ctrl+R进入反向搜索模式,输入关键词后按Enter执行匹配的命令。

历史记录的清理与覆盖

  • 清理当前会话历史记录:执行history -c可清空当前会话的历史列表。
  • 删除历史文件中的特定命令:若要删除历史文件中的某条命令,可以先通过history找到序号,再使用history -d 序号删除,例如删除序号为5的命令:
    history -d 5

    删除后需执行history -w将当前会话历史写入文件,否则修改不会保存到历史文件中。

系统日志查看

除了Shell历史记录,Linux系统还会通过日志服务记录用户的登录信息和执行的命令,这些日志通常存储在/var/log/目录下,适合审计和长期追溯。

查看登录日志

  • last命令:显示用户的登录历史,包括登录时间、来源IP、终端等信息,

    last

    输出示例可能为:

    root     pts/0        192.168.1.100   Tue Oct  1 10:00   still logged in
    user1    pts/1        10.0.0.50       Mon Sep 30 15:30 - 09:45  (18:15)

    登录记录保存在/var/log/wtmp文件中,last命令直接读取该文件。

  • lastb命令:显示失败的登录尝试,用于排查异常登录行为,记录保存在/var/log/btmp文件中。

查看命令执行日志(需配置)

默认情况下,Linux系统不会记录所有命令的执行日志,但可以通过配置syslog或使用auditd服务实现。

  • 通过syslog记录命令:修改rsyslog配置文件(如/etc/rsyslog.conf),添加以下规则记录用户执行的命令:

    :omusrmsg:*              /dev/console
    *.*;auth,authpriv.none   -/var/log/syslog
    local6.*                /var/log/commands.log

    然后通过pam_exec模块在用户登录时记录命令,具体配置较为复杂,需结合PAM模块实现。

  • 使用auditd服务auditd是Linux下的审计工具,可详细记录系统调用、文件访问和命令执行,审计所有用户执行的bash命令:

    auditctl -a always,exit -F arch=b64 -S execve -F exe=/bin/bash -k commands

    审计日志保存在/var/log/audit/audit.log中,使用ausearch查看:

    ausearch -k commands -i

实时监控命令执行

若要实时监控当前或其他终端的命令执行,可以使用以下工具:

script命令

script命令可以记录当前终端的所有操作,包括输入和输出,生成一个typescript文件:

script -a session.log

执行后,终端中的所有命令和输出都会记录到session.log中,输入exit结束记录。

tmuxscreen会话记录

使用tmuxscreen管理终端会话时,可以启用会话日志功能,在tmux中启用日志:

tmux new -s session_name
# 在tmux会话中执行:Ctrl+b :,然后输入:set-option -g history-file /path/to/history.log

pstop查看进程

若要查看当前正在执行的命令,可以使用pstop命令:

ps aux
top

ps aux显示所有进程的详细信息,包括执行的命令和参数;top实时更新进程列表,适合监控动态进程。

不同查看方式的对比

为了更直观地比较上述方法,下表总结了它们的适用场景和特点:

查看方式 适用场景 优点 缺点
history命令 查看当前或历史Shell会话命令 简单快捷,支持搜索和序号执行 仅限当前用户,默认不记录时间戳
直接查看历史文件 永久保存的命令记录 可跨会话查看,支持文本编辑 需手动清理,默认无时间戳
last/lastb命令 查看登录/失败登录记录 记录来源IP和登录时间 不记录具体命令执行内容
auditd服务 系统级命令审计和追踪 详细记录,支持过滤和实时监控 配置复杂,需额外开启服务
script命令 实时记录终端操作 记录完整交互过程 需手动启动,不记录历史命令

相关问答FAQs

问题1:为什么history命令显示的历史记录和实际执行的不一致?
解答:这种情况通常由以下原因导致:

  1. 历史文件未同步:当前会话的历史记录未写入文件,可通过history -w强制同步。
  2. 多终端会话:多个终端同时运行时,history仅显示当前会话的历史,其他终端的记录需单独查看。
  3. 环境变量配置:若HISTCONTROL设置了ignorespaceignoredups,以空格开头的命令或重复命令可能不会记录。
  4. 历史文件权限问题:若~/.bash_history文件权限异常(如只读),可能导致新命令无法写入。

问题2:如何永久记录所有用户的命令执行日志?
解答:要永久记录所有用户的命令执行日志,可通过以下步骤配置auditd服务:

  1. 安装并启动auditd服务(若未安装,使用apt install auditdyum install auditd安装)。
  2. 编辑/etc/audit/rules.d/audit.rules文件,添加以下规则:
    -a always,exit -F arch=b64 -S execve -F euid>=0 -F auid>=1000 -F auid!=4294967295 -k commands
    -a always,exit -F arch=b32 -S execve -F euid>=0 -F auid>=1000 -F auid!=4294967295 -k commands

    上述规则会记录所有UID≥1000(普通用户)执行的命令。

  3. 重启auditd服务使规则生效:systemctl restart auditd
  4. 查看日志时使用ausearch -k commands -i,日志文件位于/var/log/audit/audit.log
    注意:此方法需要确保auditd服务正常运行,且日志文件存储空间充足。
分享:
扫描分享到社交APP
上一篇
下一篇