LOADING...

加载中请稍等...

loading

Linux每日一篇 - 33 - history

Linux命令历史管理神器!掌握history命令,轻松查看和管理命令历史,让操作效率翻倍!

history命令是什么?

history命令是Shell内置功能,用于显示、搜索、管理用户在命令行中执行过的命令历史记录。它可以帮助用户快速找回之前执行的命令,提高工作效率。

基本用法

# 显示命令历史
history

# 显示最近N条命令
history 10

# 清空历史记录
history -c

# 将历史记录保存到文件
history -w

# 从文件读取历史记录
history -r

# 删除指定行的历史记录
history -d 100

# 将当前会话的历史添加到历史文件
history -a

实用技巧

# 在命令行中使用快捷键:
# !! - 执行上一条命令
# !n - 执行历史中第n条命令
# !string - 执行最近以string开头的命令
# !?string - 执行最近包含string的命令
# ^string1^string2 - 执行上一条命令,将string1替换为string2

# 搜索历史命令
history | grep "pattern"

# 执行历史中倒数第3条命令
!-3

# 使用Ctrl+R进行反向搜索
# 按Ctrl+R然后输入关键词搜索历史命令

# 显示带时间戳的历史命令
export HISTTIMEFORMAT="%F %T "
history

# 设置历史记录保存数量
export HISTSIZE=5000
export HISTFILESIZE=5000

# 忽略重复命令
export HISTCONTROL="ignorespace:ignoredups"
# 或者
export HISTCONTROL="ignoreboth"  # 忽略空格开头和重复命令

# 忽略特定命令
export HISTIGNORE="ls:pwd:history"

# 执行历史命令的一部分
!!:0      # 执行上一条命令的命令名
!!:$      # 执行上一条命令的最后一个参数
!!:1      # 执行上一条命令的第一个参数

常用场景

# 查看最近执行的命令
history

# 查找回滚数据库的命令
history | grep rollback

# 重新执行复杂的命令
!156  # 执行历史编号为156的命令

# 搜索包含特定关键词的命令
history | grep "mysql"
history | grep "ssh"

# 查看特定时间范围内的命令
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
history | grep "$(date +%Y-%m-%d)"

# 清理敏感信息(如密码)
history | grep -v "password"

# 将历史命令导出到文件分析
history > my_history.txt

# 查看今天执行的命令
export HISTTIMEFORMAT="%F "
history | grep "$(date +%F)"

# 重复执行修改文件权限的命令
history | grep chmod | tail -5

配置和优化

# 在 ~/.bashrc 中添加以下配置来优化history:

# 显示时间戳
export HISTTIMEFORMAT="%F %T "

# 增加历史记录数量
export HISTSIZE=5000
export HISTFILESIZE=5000

# 忽略重复命令和以空格开头的命令
export HISTCONTROL="ignoreboth"

# 忽略特定命令
export HISTIGNORE="ls:pwd:history:clear:bg:fg:exit"

# 立即追加到历史文件(多终端共享)
shopt -s histappend

# 记录完整命令(包括换行)
shopt -s cmdhist

# 保存多行命令到单个历史条目
shopt -s lithist

# 实时同步历史(在每个命令后)
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

高级用法

# 使用fc编辑和执行历史命令
fc -l     # 列出历史命令
fc 100    # 编辑历史编号为100的命令
fc -s string  # 重新执行最近以string开头的命令

# 统计最常用的命令
history | awk '{print $2}' | sort | uniq -c | sort -nr | head -10

# 查看特定时间段的命令
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
history | awk '$3 ~ /12:00:00/,/13:00:00/'

# 导出历史命令为脚本
history | sed 's/^[ ]*[0-9]*[ ]*//' > commands.sh

# 从历史中恢复命令行序列
# 适用于重现操作步骤或教学演示

# 安全清除历史记录(删除敏感信息后)
history -c
history -w

安全注意事项

# 1. 避免在命令行输入密码等敏感信息
# 好的做法是:
mysql -u username -p  # 系统会提示输入密码
# 而不是:
# mysql -u username -p password

# 2. 清理已记录的敏感命令
history | grep "sensitive_command"
# 找到编号后使用:
# history -d 编号

# 3. 设置历史记录不保存某些命令
export HISTIGNORE="*password*:mysql*:*secret*"

# 4. 正确清理历史记录
history -c        # 清空内存中的历史
history -w        # 写入到历史文件(清空后)

关于我

全平台同名”汪多多是只猫”,专注分享实用技术教程,让你的IT学习之路更轻松!

关注我,每天一个Linux命令,轻松入门Linux系统!

头像
汪多多是只猫
失业的运维工程师
热爱开源与分享
微信公众号