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系统!