Linux-history 命令的介绍与使用

Linux-history 命令的介绍与使用



介绍

在 linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中。通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查。

  • 用于显示或操作历史列表。历史列表是指用户执行过的指令命令。
  • 用于读取历史命令文件中的目录 到历史命令缓冲区 和将历史命令缓冲区中的目录 写入命令文件。
  • history命令是被保存在内存中的。当退出或者登录shell时,会自动保存或读取历史列表。
  • 该命令单独使用时,仅显示历史命令。加上number,则展示内存中最后number个历史命令。
  • 在命令行中,可以使用符号 ! 执行指定序号的历史命令。例如,要执行第 2 个历史命令,则输入!2。
  • 在内存中,历史命令仅能够存储 1000 条历史命令,该数量是由环境变量 HISTSIZE 进行控制。
  • 默认是不显示命令的执行时间,命令的执行时间,history 已经记录,只是没有显示。

Tips: 如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查Home目录下的用户主目录下的 .bash_history 文件,该文件记录了用户所使用的命令和历史信息。


语法

  • Usage:

    history [-c] [-d offset] [n]
    # or 
    history -anrw [filename]
    # or 
    history -ps arg [arg...]
    
  • Options:

    n     显示历史记录中最近的 n 个记录。
    -c    清空内存中的历史列表,非历史文件
    -d offset  删除 OFFSET 对应的历史条目(OFFSET类似序号)
               负的 OFFSET 表示从历史列表的末尾开始倒数。算上本次操作命令开始倒数。
    
    -a    将此会话中的历史行附加到历史文件中
    -n    读取所有尚未从历史文件中读取的历史行并将它们追加到历史记录列表中
    -r    读取历史文件并将其内容附加到历史列表中列表
    -w    将当前的历史记录写到历史文件中
    
    -p    对每个 ARG 进行历史扩展并显示结果显示结果,而不存储在历史列表中
    -s    将 ARG 作为一个条目附加到历史列表中。
    

Tips:

  • 如果配置变量 FILENAME 它就被用作历史文件。(默认历史文件: ~/.bash_history
  • 如果配置变量 HISTTIMEFORMAT 其值格式为 strftime(3) 的字符串,用于打印与每个显示的历史条目相关的时间戳。
  • strftime(3) 的格式字符串: "%F %T "
    • %F 表示显示出 Y-M-D 格式的日期,等同 "%Y-%m-%d"
    • %T 表示显示出 H-M-S 这样格式的时间。等同 "%H:%M:%S"

环境配置

  1. 配置显示历史命令的执行时间格式

    • export HISTTIMEFORMAT="%F %T "
  2. 历史列表忽略指定命令

    • export HISTIGNORE="pwd:ls:ll"
      场景: 忽略这些指令诸如“pwd”,“ls”之类的基本指令。注意在 HISTIGNORE 中添加“ls”,只忽略“ls”,而不忽略“ls –l”。一定要准确的写出要忽略的的指令,多个指令之间用 : 隔开。
  3. 配置历史列表缓存区的记录总数(默认 1000)

    • export HISTSIZE=500
  4. 配置历史列表文件 .bash_history 的记录总数(默认 2000)

    • export HISTFILESIZE=3000
  5. 配置指定历史列表文件(默认 ~/.bash_history)

    • export HISTFILE=~/.history
  6. 配置记录所有重复命令(默认 HISTCONTROL=ignoreboth)

    • export HISTCONTROL=ignoredups

    当 HISTCONTROL 为以下值时,作用分别如下:

    • ignoredups 记录此后所有操作命令,包括连续重复命令;
    • ignoreboth 消除此后命令历史中的连续重复条目(默认);
    • erasedups 消除此后命令历史列表中的重复命令。
  7. 禁用 history

    • export HISTSIZE=0
      效果:执行 history 后没有显示任何信息。

Tips: 上述配配置均是当前回话生效,如需永久生效,请将对应配置写入环境配置文件中,如 ~/.bashrc , /etc/profile


复用历史命令

  1. 反向查询历史命令

    Ctrl+r ,再输入关键字

    Tips:

    • 在命令行提示符下按下 Ctrl+r ,终端将显示如下提示 (reverse-i-search)`':
    • 使用 Ctrl+r 反向查询历史命令,将匹配的最新一条显示出来,如果还想继续向上查询,继续按 Ctrl+r 。
  2. 执行上一个命令

    • !!
    • !-1
  3. 执行序号 num 的历史命令

    • !num
  4. 执行最近一个 cmd 开头的历史命令

    • !cmd
  5. 清空历史命令

    • 清空缓存中的历史命令
      • history -c
    • 清空历史列表文件
      • rm -f ~/.bash_history
      • echo "" > ~/.bash_history
  6. 复用上一条命令的参数

    • !!:^!:^!^ 执行上一条命令的第一个参数;
    • !!:$!:$!$ 执行上一条命令的最后一个参数;
    • !!:num!:num 执行上一条命令的第 num 个参数;
  7. 复用最近一条 cmd 命令的参数

    • !cmd:^ 执行 cmd 命令的第一个参数;
    • !cmd:$ 执行 cmd 命令的最后一个参数;
    • !cmd:num 执行 cmd 命令的第 num 个参数;

栗子

打印历史命令

  • 打印历史命令

    # 打印历史命令列表
    history
    
    # 打印最近 10 条历史命令
    history 10
    
  • 反向查询历史命令

    # 1.查询最近一次删除命令 `rm`
    Ctrl+r -->  输入 rm --> 倒数第二此执行删除命令 Ctrl+r
    
    # 2.查询最近删除文件夹命令 `rm -rf`
    Ctrl+r --> 输入 rm -rf
    

执行历史命令

  • 执行上一条历史命令

    • !!!-1
  • 执行第 10 条历史命令

    • !10
  • 执行最近 cd 开头的命令

    • !cd

复用历史命令的参数

ls file1 file2 file3 ... fileN

  • 复用上一个命令参数

    # 第一个参数
    !!:^ 或者 !:^ 或者 !^
    # 第 3 个参数
    !:3
    # 最后一个参数
    !!:$ 或者 !:$ 或者 !$
    
  • 复用最近 ls 命令的参数

    # 第一个参数
    !ls:^
    # 第 3 个参数
    !ls:3
    # 最后一个参数
    !ls:$
    


Via

posted @ 2022-10-21 17:34  Librarookie  阅读(1448)  评论(0编辑  收藏  举报