如何查看Linux系统执行过的命令历史记录?

在Linux系统中,查看已执行的命令是日常运维、安全审计和故障排查的重要操作,Linux提供了多种方式记录和查询命令执行历史,包括Shell内置的历史命令记录、系统日志文件、实时监控工具等,本文将详细介绍这些方法的具体操作、适用场景及注意事项。

怎么查看linux执行了哪些命令

使用history命令查看当前会话的历史记录

history命令是bash、zsh等Shell内置的工具,用于记录和管理当前用户在终端中执行的命令,默认情况下,history会显示当前会话中最近执行的命令列表,每条命令前带有一个数字序号(表示在历史文件中的位置)。

基本用法

  • 查看最近执行的命令:直接输入history,默认显示最近1000条命令(具体数量由HISTSIZE变量控制)。

    history

    输出示例:

    1001  ls -l /home  
    1002  cd /tmp  
    1003  pwd  
    1004  cat test.txt  
  • 查看指定数量的历史命令:通过n参数限制显示条数,例如查看最近50条:

    history 50
  • 搜索历史命令:结合grep命令可快速定位特定命令,例如查找包含“yum”的命令:

    history | grep yum

历史命令的保存与清理

  • 手动保存当前会话历史:默认情况下,退出Shell时,当前会话的历史命令会自动追加到历史文件(通常为~/.bash_history),若需手动保存,可执行:
    history -a  # 将当前会话的历史记录追加到历史文件
  • 清空历史记录:
    history -c  # 清空当前会话的历史记录
    history -r  # 从历史文件中重新加载历史记录到当前会话

历史命令的个性化配置

通过修改~/.bashrc或~/.bash_profile文件,可自定义历史记录的行为,

export HISTSIZE=2000        # 设置历史记录最大保存条数
export HISTFILESIZE=2000    # 设置历史文件最大保存条数
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "  # 为历史命令添加时间戳
export HISTCONTROL=ignorespace  # 忽略以空格开头的命令
export HISTCONTROL=ignoredups   # 忽略重复命令

配置完成后,执行source ~/.bashrc使生效,此时history显示的命令将包含时间戳,便于追溯。

查看历史文件中的长期记录

history命令显示的是当前会话和已保存到历史文件的记录,历史文件默认存储在用户主目录下(如~/.bash_history),可通过$HISTFILE变量查看路径。

查看历史文件内容

  • 直接查看历史文件:

    cat ~/.bash_history

    输出格式为纯文本,每行一条命令,无时间戳(除非配置了HISTTIMEFORMAT)。

    怎么查看linux执行了哪些命令

  • 查看带时间戳的历史记录:若配置了HISTTIMEFORMAT,可通过grep和awk解析时间戳:

    grep -E '^[0-9]' ~/.bash_history | awk '{print $1" "$2" "$3}' | head -n 10

历史文件的权限与安全

历史文件默认权限为600,仅当前用户可读写,若需防止其他用户查看,可手动设置权限:

chmod 600 ~/.bash_history

通过系统日志查看命令执行记录

除了Shell历史文件,Linux系统还会将关键命令执行记录(如sudo、登录操作)保存到系统日志中,适合审计和追溯。

常用日志文件及内容

日志文件路径 适用发行版
/var/log/secure RHEL/CentOS 认证日志,记录sudo命令、SSH登录、远程执行命令等安全相关操作
/var/log/auth.log Ubuntu/Debian 与/var/log/secure类似,记录认证和授权信息
/var/log/bash.log 自定义配置 若通过syslog配置了bash日志,可记录所有bash命令执行详情(需root权限开启)
/var/log/wtmp 多数发行版 永久登录记录,通过last命令查看(记录登录/登出时间、用户、终端等)
/var/log/btmp 多数发行版 失败登录记录,通过lastb命令查看

查看日志中的命令记录

  • 查看sudo执行记录:

    grep sudo /var/log/secure

    输出示例:

    Aug 10 14:30:01 localhost sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/yum update -y
  • 查看SSH远程执行的命令:若通过SSH执行命令,需检查/var/log/secure或/var/log/auth.log中的session信息:

    grep "session opened" /var/log/secure | grep ssh
  • 开启bash详细日志(需root权限):修改/etc/rsyslog.conf,添加以下内容记录所有bash命令:

    if $programname == 'bash' then /var/log/bash.log

    重启rsyslog服务:systemctl restart rsyslog。

实时监控命令执行

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

script命令录制终端会话

script命令可将终端操作录制为文本文件,包括输入的命令和输出结果:

怎么查看linux执行了哪些命令

script -a session.log  # 开始录制,追加到session.log
# 执行命令...
exit  # 结束录制

录制后的文件可通过cat session.log查看,适合临时记录操作过程。

auditd系统审计服务

auditd是Linux内核的审计工具,可实时监控文件访问、系统调用、命令执行等,适合高安全性场景。

  • 安装auditd:

    yum install auditd  # RHEL/CentOS
    apt install auditd  # Ubuntu/Debian
  • 添加审计规则(监控所有用户执行的命令):

    auditctl -a always,exit -F arch=b64 -S execve -k commands
  • 查看审计日志:

    ausearch -k commands -i  # 查看与commands相关的审计记录
    aureport -x  # 生成命令执行摘要报告

进阶方法:查看其他用户或进程的命令

查看其他用户的历史记录

需root权限,直接查看目标用户的历史文件:

cat /home/username/.bash_history

通过/proc目录查看进程命令行

对于正在运行的进程,可通过/proc/$PID/cmdline查看其启动命令,例如查看PID为1234的进程:

cat /proc/1234/cmdline

注意事项

  1. 历史记录可能被篡改:用户可通过history -c清空当前会话记录,或直接编辑~/.bash_history文件,重要审计需结合系统日志(如/var/log/secure)交叉验证。
  2. 权限限制:系统日志文件通常需root权限查看,普通用户可通过sudo命令获取权限。
  3. 日志轮转:系统日志会通过logrotate工具轮转(如/var/log/secure.1、/var/log/secure.2.gz),旧日志需解压后查看。

相关问答FAQs

问题1:为什么history命令显示的历史记录不全,有些最近执行的命令看不到?
解答:可能原因包括:(1)历史记录未从内存写入文件,可执行history -a手动追加;(2)HISTFILESIZE设置过小,导致旧记录被覆盖,检查echo $HISTFILESIZE并适当调大;(3)当前会话异常退出(如强制关闭终端),导致未保存到历史文件,可通过/var/log/secure或/var/log/auth.log追溯登录后的操作。

问题2:如何防止历史命令被其他用户查看或篡改?
解答:(1)设置历史文件权限为600:chmod 600 ~/.bash_history;(2)在~/.bashrc中添加unset HISTFILE,禁用当前用户的历史记录;(3)启用auditd服务审计命令执行,并将日志保存到只读目录;(4)限制普通用户sudo权限,避免通过sudo查看系统日志。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20254.html

赞 (0)
酷番叔酷番叔
上一篇 2025年8月30日 12:41
下一篇 2025年8月30日 13:06

相关推荐

  • 电脑命令行入门指南

    在Windows系统中搜索“cmd”或“命令提示符”打开;在macOS或Linux中打开“终端”应用,打开后输入特定命令(如cd切换目录、dir或ls查看文件)即可执行系统管理、文件操作等任务。

    2025年7月29日
    32900
  • 安全合规打折,标准会否打折扣?

    在企业经营活动中,安全合规始终是不可逾越的红线,但现实中,“安全合规打折”现象却时有发生——企业为追求短期利益、降低成本或简化流程,主动或被动地降低安全标准、规避合规要求,这种行为看似节省了眼前资源,实则埋下了巨大隐患,安全合规的本质是通过制度约束和风险管控,保障企业稳定运营、员工权益及社会公共利益,而“打折……

    2025年10月20日
    24100
  • 统信UOS/麒麟Kylin如何打开终端?5种方法

    图形界面快捷方式(推荐新手)任务栏启动器点击屏幕底部任务栏上的【启动器】图标(通常为麒麟/UOS logo)→ 在搜索框中输入 “终端” 或 “terminal”→ 点击出现的【终端】应用图标右键菜单入口在桌面空白处点击鼠标右键→ 选择【在终端中打开】(此方式直接定位到当前用户主目录)全局快捷键(高效操作)同时……

    2025年7月21日
    86300
  • 安全实时传输协议故障原因何在?

    安全实时传输协议(SRTP)是用于保护实时媒体流(如语音、视频)安全性的核心协议,通过加密、消息认证和重放保护机制,确保传输数据的机密性、完整性和真实性,在实际应用中,SRTP故障频发,影响实时通信的质量和安全性,其故障原因复杂多样,涉及协议配置、网络环境、密钥管理、设备兼容性等多个层面,需系统分析以定位问题并……

    2025年11月4日
    22900
  • 安全实时传输协议的主要作用是什么?

    安全实时传输协议(Secure Real-time Transport Protocol,SRTP)是由IETF(互联网工程任务组)制定的一种用于保护实时媒体流数据传输安全的协议,它专为实时通信场景设计,在实时传输协议(RTP)的基础上增加了机密性、完整性和身份验证等安全机制,有效解决实时通信中数据被窃听、篡改……

    2025年11月13日
    25900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信