root@ccx ~]# history
1 bash
2 ls
3 vim .bash_history
4 cat .bash_history
5 history
6 bash
- 有时候我不需要显示所有的历史命令,只显示最后的 10 条历史记录,可以在命令后加数字 N 即可
root@ccx ~]# history 10
主动保存缓冲区
正常情况下,只有在 Shell 正常退出时,才会将缓冲区内容保存到文件。如果你想主动保存缓冲区的历史记录,执行 -w 选项即可
root@ccx ~]# history -w
删除缓冲区
当然,如果你执行了一些敏感的命令操作,可以执行 -c 将缓冲区内容直接删除
root@ccx ~]# history -c
-
如果要重复执行一些命令,可以使用
!
来快速执行重复的命令。 -
举个例子,重复执行第 1024 历史命令,可以执行如下命令
root@ccx ~]# !1024
#1024 这个编号的命令内容是可以通过 history 查看哦
- 重复执行上一条命令
root@ccx ~]# !!
- 重复执行倒数第 6 条历史命令,可以通过负数表示,-6 表示倒数第 6 条记录
root@ccx ~]# !-6
- 有时候,需要重复执行某字符串开头的最后一个命令,同样可以通过 ! 来操作,然后按 Enter 执行即可
比如,刚才执行了一个很长命令,只记录命令开头是 curl,这时就可以通过 !curl 快速执行该命令
假设我最后一次执行的是 curl 1.1.1.1
root@ccx ~]# !curl
上面命令呢就是会执行curl 1.1.1.1
- 这个用法很高效,但存在不安全因素,因为有可能执行的命令不是你想要执行的,那就坏事了。可以通过
:p
来安全地执行。
root@ccx ~]# !curl:p
curl 1.1.1.1
#加上 :p 后,只是打印出了搜索到的命令,如果要执行,请按 ↑ 键,然后回车即可。
- 如果你只知道某条命令包含了 x 信息,不是以 x 开头,同样可以通过 ? 来执行包含字符串的命令
root@ccx ~]# ?x
- 其实更多的呢 都是喜欢用grep来搜索
histoart | grep x
,得到含有x的所有历史命令内容及前面序号以后,然后再用!序号
来快速执行该命令。
- 在 Linux 搜索历史命令,还可以通过交互式的搜索方式,简直高效直接。在命令行输入
Ctrl+R
后,进入交互界面,键入需要搜索的关键字,如果匹配到多条命令,可以多次键入Ctrl+R
来切换上一条匹配的命令。
(reverse-i-search)`sina’: echo sina
可以看到,我输入了 sina 后,就自动匹配到最近一次和 sina 匹配的命令,这时按下回车就可以执行该命令。
- 有时候需要对 Linux 系统做审计,那为历史记录添加时间戳,显示非常有用。
root@ccx ~]# export HISTTIMEFORMAT='%F %T ’
root@ccx ~]# history 3
46 2022-01-11 18:21:33 curl baidu.com
47 2022-01-11 18:21:35 pwd
48 2022-01-11 18:21:39 history 3
- 可以看到,历史记录已经显示了时间戳。其实这些对于审计需求,还不够,可以加上更详细的信息:
root@ccx ~]# export HISTTIMEFORMAT="%F %T who -u am i 2>/dev/null| awk '{print root@ccx ~]#NF}'|sed \-e 's/[()]//g'
whoami
"
6 2022-01-11 18:22:48 113.200.44.237 root ls
7 2022-01-11 18:22:59 113.200.44.237 root pwd
8 2022-01-11 16:08:14 113.200.44.237 root history
- 默认情况下,Linux 系统最多存储 1000 条历史记录,可以通过 HISTSIZE 环境变量查看
root@ccx ~]# echo root@ccx ~]#HISTSIZE
1000
- 对于需要做审计的场景,1000 条历史记录可能会太少了,我们可以修改为合适的值
root@ccx ~]# export HISTSIZE=10000
-
注意,HISTSIZE 变量只能控制缓冲区中的历史记录数量,如果需要控制
.bash_history
文件存储的最大记录数,可以通过 HISTFILESIZE 进行控制 -
上述命令行修改只在当前 Shell 环境生效,如果需要永久生效,需要写入配置文件
root@ccx ~]# echo “export HISTSIZE=10000” >> ~/.bash_profile
root@ccx ~]# echo “export HISTFILESIZE=200000” >> ~/.bash_profile
root@ccx ~]# source ~/.bash_profile
- 有时,为了方便管理和备份,需要更改历史记录文件的路径和名称。简单,同样可以通过环境变量 HISTFILE 更改它的文件名称
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!