Linux history 命令详解
history 是 Linux 系统中一个非常实用的命令,用于查看、管理和操作当前 Shell 会话中执行过的命令历史记录。它可以帮助用户快速重复执行命令、搜索历史记录、清除敏感命令等,极大地提高了命令行操作的效率。
一、基本用法
-
显示历史记录
-
直接输入
history命令,会列出当前 Shell 会话中执行过的所有命令及其对应的序号。$ history示例输出:
1 ls -l2 cd /var/log3 cat syslog
-
-
限制显示条数
-
显示最近
n条历史记录:$ history 10
-
二、常用选项
| 选项 | 描述 | 示例 |
|---|---|---|
-c | 清空当前会话的历史记录 | history -c |
-d offset | 删除指定偏移量处的命令(按序号) | history -d 5(删除第5条命令) |
-a | 将当前会话的新命令追加到历史文件(~/.bash_history)中 | history -a |
-r | 从历史文件中读取命令并加载到当前会话中 | history -r |
-w | 将当前会话的历史记录写入历史文件 | history -w |
-n | 从历史文件中读取尚未读取的新记录 | history -n |
组合命令 history -c && history -w 的作用
-
完整流程:
-
history -c:清空当前会话的内存历史记录。
-
history -w:将空的历史记录写入历史文件,覆盖原有内容。
-
-
最终效果:
- 当前会话的历史记录被清空。
- 历史文件(如 ~/.bash_history)也被清空,原有命令记录被删除。
-
典型应用场景:
- 防止敏感命令(如包含密码的命令)被记录到历史文件中。
- 在脚本中需要临时清理历史记录时使用。
三、环境变量配置
通过修改环境变量,可以更灵活地管理历史记录:
-
设置历史记录数量
HISTSIZE:控制当前会话中保存在内存中的命令数。HISTFILESIZE:控制历史文件中保存的命令行数。
export HISTSIZE=1000 # 内存中最多保存1000条命令 export HISTFILESIZE=2000 # 历史文件中最多保存2000条命令 -
忽略重复命令或特定命令
HISTCONTROL:定义如何处理重复命令或以空格开头的命令。ignoredups:忽略重复的连续命令。ignorespace:忽略以空格开头的命令。ignoreboth:合并以上两者。
export HISTCONTROL=ignoreboth -
排除特定命令
HISTIGNORE:指定不保存到历史记录中的命令(用冒号分隔)。
export HISTIGNORE="ls:pwd:exit" # 不保存 ls、pwd、exit 命令 -
显示时间戳
HISTTIMEFORMAT:为每条历史记录添加时间戳。
export HISTTIMEFORMAT="%F %T " # 格式:YYYY-MM-DD HH:MM:SS示例输出:
1 2025-06-16 11:37:45 ls -l2 2025-06-16 11:38:00 cd /var/log -
实时记录命令
PROMPT_COMMAND:每次执行命令后立即追加到历史文件。
export PROMPT_COMMAND='history -a'
四、高级功能
-
搜索历史记录
-
使用
Ctrl + R反向搜索历史命令(输入关键字后按↑↓键选择)。 -
使用
grep过滤历史记录:history | grep "ls" # 搜索包含 "ls" 的命令
-
-
快速执行历史命令
!!:执行上一条命令。!n:执行第n条命令(如!3执行第3条命令)。!string:执行以string开头的最新命令(如!cat执行最近的cat命令)。!-n:执行倒数第n条命令(如!-2执行倒数第2条命令)。
-
命令参数替换
-
!!:$:获取上一条命令的最后一个参数。$ ls anaconda-ks.cfg $ vi !!:$ # 等价于 vi anaconda-ks.cfg -
!^:获取上一条命令的第一个参数。$ cp file1 file2 $ rm !^ # 等价于 rm file1 -
!cmd:arg:从历史中提取特定命令的参数(如!cp:2获取cp命令的第二个参数)。
-
-
禁用历史记录
-
将
HISTSIZE设置为 0,禁用历史记录功能:export HISTSIZE=0
-
五、历史文件操作
-
历史文件位置
- Bash:
~/.bash_history - Zsh:
~/.zsh_history - Fish:
~/.local/share/fish/fish_history
- Bash:
-
手动清空历史文件
-
清空当前用户的
.bash_history文件:> ~/.bash_history -
或者:
cat /dev/null > ~/.bash_history
-
-
保护隐私
-
修改历史文件权限,防止其他用户读取:
chmod 600 ~/.bash_history
-
六、不同 Shell 的差异
| Shell | 历史命令 | 历史文件位置 |
|---|---|---|
| Bash | history | ~/.bash_history |
| Zsh | history | ~/.zsh_history |
| Fish | history | ~/.local/share/fish/fish_history |
七、总结
history 命令是 Linux 命令行用户不可或缺的工具,通过合理配置和使用,可以显著提升工作效率。以下是关键点总结:
- 基础用法:
history显示所有记录,history n显示最近n条。 - 管理记录:使用
-c清空、-d删除、-a追加等选项。 - 环境变量:通过
HISTSIZE、HISTCONTROL等控制记录行为。 - 高级技巧:
Ctrl + R搜索、!!重复命令、参数替换。 - 隐私保护:清空历史文件、设置权限、禁用记录。
通过灵活运用这些功能,你可以更高效地管理 Linux 命令行操作!