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 命令行操作!