共计 3637 个字符,预计需要花费 10 分钟才能阅读完成。
当咱们频繁应用 Linux 命令行时,无效地应用历史记录,能够大大提高工作效率。
在平时 Linux 操作过程中,很多命令是反复的,你肯定不心愿大量输出反复的命令。如果你是系统管理员,你可能须要对用户操作进行审计,治理好 Linux 命令历史记录显得十分重要。
明天咱们来介绍一下,在 Linux 应用 history 来缩小反复命令的几个实用技巧。
1 基本原理
Linux 命令的历史记录,会长久化存储,默认地位是以后用户家目录的 .bash_history
文件。
当 Linux 系统启动一个 Shell 时,Shell 会从 .bash_history
文件中,读取历史记录,存储在相应内存的缓冲区中。
咱们平时所操作的 Linux 命令,都会记录在_缓冲区_中。包含 history
命令所执行的历史命令治理,都是在操作_缓冲区_,而不是间接操作 .bash\_history 文件。
当咱们退出 Shell,比方按下 Ctrl+D
时,Shell 过程会把历史记录缓冲区的内容,写回到 .bash\_history 文件中去。
2 应用详解
分明了 history
的基本原理,咱们来具体学习一下如何应用它。
(一)根底用法
间接输出 history 命令,能够看到最近操作的所有命令都显示进去了
`$ history`
`1 bash`
`2 ls`
`3 vim .bash_history`
`4 cat .bash_history`
`5 history`
`6 bash`
有时候我不须要显示所有的历史命令,只显示最初的 10 条历史记录,能够在命令后加数字 N
即可
`$ history 10`
失常状况下,只有在 Shell 失常退出时,才会将缓冲区内容保留到文件。如果你想被动保留缓冲区的历史记录,执行 -w
选项即可
`$ history -w`
当然,如果你执行了一些敏感的命令操作,能够执行 -c
将缓冲区内容间接删除
`$ history -c`
(二)反复执行命令
如果要反复执行一些命令,能够应用 !
来疾速执行反复的命令。
举个例子,反复执行第 1024 历史命令,能够执行如下命令
`$ !1024`
1024
这个编号能够通过 history
查看哦
反复执行上一条命令
`$ !!`
反复执行倒数第 6 条历史命令,能够通过_正数_示意,-6
示意倒数第 6 条记录
`$ !-6`
(三)搜寻历史命令
有时候,须要反复执行某字符串结尾的最初一个命令,同样能够通过 !
来操作,而后按 Enter 执行即可
比方,方才执行了一个很长命令,只记录命令结尾是 curl
,这时就能够通过 !curl
疾速执行该命令
`$ !curl`
这个用法很高效,但存在不平安因素,因为有可能执行的命令不是你想要执行的,那就好事了。能够通过 :p
来平安地执行。
`$ !curl:p`
`curl www.sina.com.cn`
加上 :p
后,只是打印出了搜寻到的命令,如果要执行,请按 Up
键,而后回车即可。
如果你只晓得某条命令蕴含了 x
信息,不是以 x
结尾,同样能够通过 ?
来执行蕴含字符串的命令
`$ !?sina`
(四)交互式搜寻历史命令
在 Linux 搜寻历史命令,还能够通过交互式的搜寻形式,几乎高效间接。在命令行输出 Ctrl+R
后,进入交互界面,键入须要搜寻的关键字,如果匹配到多条命令,能够屡次键入 Ctrl+R
来切换上一条匹配的命令。
``(reverse-i-search)`sina': echo sina``
能够看到,我输出了 sina 后,就主动匹配到最近一次和 sina 匹配的命令,这时按下回车就能够执行该命令。
(五)反复执行上条命令
在这里总结下多种反复执行上条命令的形式,你能够抉择一种本人喜爱的就能够啦
-
!!
-
!-1
-
Ctrl+p
-
Up
-
Ctrl+R
(六)显示工夫戳
有时候须要对 Linux 零碎做审计,那为历史记录增加工夫戳,显示十分有用。
`$ export HISTTIMEFORMAT='%F %T'`
`$ history 3`
`46 2021-04-18 15:21:33 curl baidu.com`
`47 2021-04-18 15:21:35 pwd`
`48 2021-04-18 15:21:39 history 3`
能够看到,历史记录曾经显示了工夫戳。其实这些对于审计需要,还不够,能够加上更具体的信息:
``$ export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk'{print $NF}'|sed \-e's/[()]//g'` `whoami`"``
`6 2021-04-18 16:07:48 113.200.44.237 root ls`
`7 2021-04-18 16:07:59 113.200.44.237 root pwd`
`8 2021-04-18 16:08:14 113.200.44.237 root history`
(七)管制历史记录总数
默认状况下,Linux 零碎最多存储 1000 条历史记录,能够通过 HISTSIZE
环境变量查看
`$ echo $HISTSIZE`
`1000`
对于须要做审计的场景,1000 条历史记录可能会太少了,咱们能够批改为适合的值
`$ export HISTSIZE=10000`
留神,HISTSIZE
变量只能管制缓冲区中的历史记录数量,如果须要管制 .bash_history
文件存储的最大记录数,能够通过 HISTFILESIZE
进行管制
上述命令行批改只在以后 Shell 环境失效,如果须要永恒失效,须要写入配置文件
`$ echo "export HISTSIZE=10000" >> ~/.bash_profile`
`$ echo "export HISTFILESIZE=200000" >> ~/.bash_profile`
`$ source ~/.bash_profile`
(八)更改历史记录文件名
有时,为了方便管理和备份,须要更改历史记录文件的门路和名称。简略,同样能够通过环境变量 HISTFILE
更改它的文件名称
`$ echo "export HISTFILE=/data/backup/chopin.bash_history" >> ~/.bash_profile`
`$ souce ~/.bash_profile`
(九)禁用历史记录
处于某种非凡环境,咱们须要禁用历史记录
`$ echo "export HISTSIZE=0" >> ~/.bash_profile`
`$ echo "export HISTFILESIZE=0" >> ~/.bash_profile`
`$ source ~/.bash_profile`
哈哈,间接把上述两个变量的值设置为 0
,就实现了禁用历史记录的性能
(十)黑客必知的一个小技巧
最初分享一个鲜为人知的,黑客必知的小技巧。
在命令前额定多加一个_空格_,这样的命令是不会被记录到历史记录的,感觉是不是很酷
这个技巧如果在你的零碎不论用,请查看下环境变量 HISTCONTROL
是否蕴含 ignorespace
,貌似 centos 零碎默认没有设置这个值。
3 总结工夫
在 Linux 零碎,history
命令能够十分不便,帮忙咱们治理历史命令,平时咱们命令都会先记录在_缓存区_,在 Shell 退出时才会记录到文件中。
history 命令提供了很不便的治理性能,正当去配置和治理历史记录,能够让你的 Linux 零碎更加强壮和平安。
好了,老规矩,贴心的肖哥还是来总结一下 history
命令罕用办法
-
history n
:只显示最近的 n 条历史记录 -
history -c
:革除缓存区中的历史记录 -
history -w
:将缓存区的历史记录保留到文件 -
history -d N
:删除第 N 条历史记录
几种反复执行命令的办法:!!
、!-1
、!N
、!string
等
交互式历史命令搜寻,请应用 Ctrl+R
快捷键
适合应用几个相干的环境变量,让你的 Linux 零碎更平安:
-
HISTSIZE
:管制缓冲区历史记录的最大个数 -
HISTFILESIZE
:管制历史记录文件中的最大个数 -
HISTIGNORE
:设置哪些命令不记录到历史记录 -
HISTTIMEFORMAT
:设置历史命令显示的工夫格局 -
HISTCONTROL
:扩大的管制选项
如果在生产环境,这些环境变量须要长久化到配置文件 ~/.bash\_profile
`export HISTCONTROL=ignoreboth`
`# ignorespace: 疏忽空格结尾的命令 `
`# ignoredups: 疏忽间断反复命令 `
`# ignoreboth: 示意上述两个参数都设置 `
`# 设置追加而不是笼罩 `
`shopt -s histappend`
`export HISTSIZE=1000`
`export HISTFILESIZE=200000`
`export HISTTIMEFORMAT="%F %T"`
`export HISTIGNORE="ls:history"`
源于:公众号 - 编程涵养