LinuxShell命令history
【注】具体详解参见 help 手册。
1. 简介
history
内建命令用于显示或操纵历史命令列表。
2. 格式
1 | history [NUM|-c|-d [offset]] |
其中,FILE
用于指定保存历史命令列表的文件,默认是~/.bash_history
文件。若未指定任何选项参数,则默认显示保存的所有历史命令列表。
2.1 注意事项
-
要设置保存历史命令的条目数,可修改
HISTSIZE
环境变量。 -
要设置保存历史命令列表的默认文件,可修改
HISTFILE
环境变量。 -
要设置显示时间戳,可修改
HISTTIMEFORMAT
环境变量(被用于strftime(3)
的格式字符串来打印时间戳),该环境变量默认为空不打印时间戳。 -
当登陆 Shell 时,会自动读取历史命令列表文件到内存缓冲区内;当 Shell 退出时,才把内存缓冲区写入历史记录文件中(除非手动运行
history -a
命令强制写入)。 -
当使用了无效选项或发生错误时返回失败,否则返回成功
2.2 常用功能
- 开启时间戳
将以下代码添加到 ~/.bashrc
文件中:
1 | export HISTTIMEFORMAT="%F %T " |
然后刷新 ~/.bashrc
文件:
1 | source ~/.bashrc |
测试一下,本人终端测试部分结果如下:
1 | ... |
3. 选项
选项参数 | 说明 |
---|---|
NUM |
显示最近的 NUM 个命令条目 |
-c |
删除所有命令条目,清空历史命令列表 |
-d offset |
从 offset 指定的区域删除历史命令记录offset 取值格式为 N[-M] :若未指定 -M 选项,则指定删除第 N 条历史记录;若指定 -M 选项,则指定删除区间 [N,M] 内的所有历史记录【注】 N 、M 均可以取负数,表示历史命令文件中倒数 N 、M |
-a |
将当前 Shell 会话的命令内存缓冲区强制追加到历史命令文件中 |
-n |
从历史命令文件中读取所有未被当前 Shell 会话读取的行追加到当前 Shell 会话的历史命令内存缓冲区中 |
-r |
读取历史命令文件并将所有内容附加到当前 Shell 会话的历史命令内存缓冲区中 |
-w |
将当前 Shell 会话的历史命令内存缓冲区写入到历史命令文件中 |
-p |
对每个一个 ARG 参数展开历史并显示结果,但不存储到内存缓冲区中 |
-s |
将 ARG 参数列表作为单条记录追加到内存缓冲区内(可用于伪造历史命令记录) |
4. 附录
4.1 快捷键
-
在终端可以使用 Ctrl+p / 回滚历史命令;或者 Ctrl+n / 下翻历史命令。
-
在终端还可以使用 Ctrl+r 搜索历史命令,然后输入命令包含的部分关键字,就会显示搜索到的历史命令。
4.2 ! 命令
在终端可用 !{N|string}[:M]
来获取内存缓冲区的历史命令记录:
-
N
代表第N
条历史命令(N
取正值于history
显示的命令序号,不在history
显示命令序号范围内则无效);N
也可以取负数,表示内存缓冲区中倒数第N
条历史记录;N
还可以取!
(即!!
命令),表示内存缓冲区中上一条历史命令 -
string
指定搜索最近一条以string
开头的命令。 -
M
代表指定命令的第M
个参数(若未给定N
,则默认指定上一条命令),M
取 0 代表命令名本身;M
还可以取$
、^
、*
,分别代表第一个参数(即同M
取 1)、最后一个参数、所有参数。