一、基本查询与搜索
1、搜索特定命令
# 显示所有包含"ssh"的历史命令
history | grep ssh
# 显示最近20条命令
history 20
# 显示第100-150条命令
history 100 150
2、使用反向搜索(Ctrl+R)
# 按 Ctrl+R 进入反向搜索模式
(reverse-i-search)`':
# 输入关键字,如"ssh"
(reverse-i-search)`ssh': ssh user@192.168.1.100
# 继续按 Ctrl+R 向前搜索下一个匹配
# 按 Enter 执行,按 Ctrl+C 取消

二、快速执行历史命令
1、通过编号执行
# 执行历史记录中第n条命令
!n
# 示例:执行第1024条命令
!1024
2、通过反向引用执行
# 执行上一条命令
!!
# 或
!-1
# 执行倒数第n条命令
!-n
# 示例:执行倒数第三条命令
!-3
3、通过字符串匹配执行
# 执行最近以"ssh"开头的命令
!ssh
# 执行最近包含"grep"的命令
!?grep?
# 执行最近以"vim"开头且包含"conf"的命令
!vim*conf
三、历史记录操作
1、清空历史记录
# 清空当前会话的历史记录
history -c
# 清空历史文件
history -c
> ~/.bash_history
# 或
cat /dev/null > ~/.bash_history
2、删除特定历史记录
# 删除第n条历史记录
history -d n
# 删除多个记录
history -d 100 101 102
# 或
for i in {100..110}; do history -d 100; done
3、保存历史记录
# 立即将内存中的历史记录写入文件
history -a
# 从历史文件中读取记录到当前会话
history -r
# 追加历史文件到当前会话
history -n
例如:将当前会话历史记录写入 /data/history_log
通过登录时间判断
# 获取登录时间
login_time=$(who -u | grep $(whoami) | grep -Eo '([0-9]{2}:){2}[0-9]{2}' | head -1)
# 如果HISTTIMEFORMAT已设置为包含时间,可以过滤
history | grep -A 1000 "$(date +%F) $login_time" > /data/history_log
手动录入
# 查看当前会话的历史记录编号范围
history | tail -5
# 将当前会话的所有历史记录写入文件
history > /data/history_log
# 追加方式写入(保留原有内容)
history >> /data/history_log

四、会话管理
多会话历史记录同步
# 编辑用户配置文件
vim ~/.bashrc
# 实时同步历史记录
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
按会话保存历史记录
# 编辑用户配置文件
vim ~/.bashrc
# 为每个终端会话创建独立历史文件
export HISTFILE="${HOME}/.bash_history.$(tty | sed 's/\\//-/g').$(date +%Y%m%d)"
五、历史命令history增加执行时间显示
要在server11的history命令中显示命令的执行时间,可以设置HISTTIMEFORMAT环境变量。以下是具体配置方法:
1、临时生效(当前会话)
直接在终端执行:
export HISTTIMEFORMAT="%F %T "
之后执行的命令会被记录时间,但之前的历史命令不会显示时间。
2、永久生效
修改bashrc配置文件:
# 编辑用户配置文件
vim ~/.bashrc
# 或使用nano
nano ~/.bashrc
在文件末尾添加:
# 设置历史命令时间格式
export HISTTIMEFORMAT="%Y-%m-%d %T "
# 设置历史记录大小
export HISTSIZE=5000
export HISTFILESIZE=10000
# 忽略重复命令
export HISTCONTROL=ignoredups:erasedups

保存后生效
source ~/.bashrc




