一、history用法(续):
[dxk@admin ~]$ help history
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]
显示或操纵历史列表。
带行号显示历史列表,将每个被修改的条目加上前缀 `*'。
参数 N 会仅列出最后的 N 个条目。
选项:
-c 删除所有条目从而清空历史列表。(保存历史命令的文件.bash_history中记录的历史命令并不会受到影响,而且仅对当前bash有效,重新登录后还会显示出之前的)
-d 偏移量 删除历史列表中指定的历史命令。(仅删除历史列表中指定行号的,历史文件中相应的并不会删除,同样仅对当前bash有效)
-a 将当前内存中的历史追加到历史文件中(本次登陆后所输入的命令【本次登录所输入的所有命令是存在内存中的】会在退出后才写入历史命令文件中,使用 history -a命令后直接手动将内存中的历史命令追加到.bash_history文件中)
-n 从历史文件中读取所有未被读取的行(在历史列表中没有的命令将从历史文件中加载到当前历史列表中)
-r 读取历史文件并将内容追加到历史列表中(将历史文件中的所有命令追加到当前历史列表中)
中
-w 将当前历史写入到历史文件中并追加到历史列表中(相当于是将历史列表中的历史命令和历史文件中的历史命令全部整合同时写入到文件和当前历史列表中)
-p 对每一个 ARG 参数展开历史并显示结果而不存储到历史列表中
-s 以单条记录追加 ARG 到历史列表中
如果给定了 FILENAME 文件名,则它将被作为历史文件。否则
如果 $HISTFILE 变量有值的话使用之,不然使用 ~/.bash_history 文件。
如果 $HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用于
strftime(3) 的格式字符串来打印与每一个显示的历史条目想关联的时
间戳,否则不打印时间戳。
退出状态:
返回成功,除非使用了无效的选项或者发生错误
(一) -p 和 -s 选项
1.history -p 命令
相当于 echo
命令,可以打印字符串和变量,同时可以显示输出到终端的命令的执行结果。但不会保存到历史列表和命令历史文件中。
#打印字符串效果如下:
#history -p 后面的参数写什么就会原封不动的打印出什么(变量除外,但如果变量是用单引号强引用括起来也是一样 ),即使是命令
[root@admin ~]# history -p Welcome to my CSDN!
Welcome
to
my
CSDN!
[root@admin ~]# history -p ls
ls
[root@admin ~]# history -p 'Welcome to my CSDN'
Welcome to my CSDN
[root@admin ~]# history -p "Welcome to my CSDN"
Welcome to my CSDN
#打印变量效果如下:
[root@admin ~]# history -p $PS1
[\u@\h
\W]\$
[root@admin ~]# history -p '$PS1' #这里因为是单引号,为强引用(即所见即所得)
$PS1
[root@admin ~]# history -p "$PS1"
[\u@\h \W]\$
如果history -p
后面的参数为使用反引号(反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。)括起来要执行的命令(注意:这里所说的命令必须是执行后输出结果输出到控制台的,例如:ls、pwd、cat等等,vi、vim等不行)
如果反引号中的命令是vim,那么就是这样的:
[root@admin ~]# history -p `vim test.sh`
Vim: 警告: 输出不是到终端(屏幕)
#这个情况下会死机,即使 Ctrl + c 也没用,只能关掉重启(无论是远程连接工具还是虚拟机)
看看输出是到终端的命令执行出来是什么样的:
[root@admin ~]# history -p `echo Welcome to my CSDN`
Welcome
to
my
CSDN
[root@admin ~]# history -p `echo $PS1`
[\u@\h
\W]\$
[root@admin ~]# history -p `ls`
anaconda-ks.cfg
date.txt
error.txt
etc.tar.ga
file
file1
ip.txt
list.txt
test.sh
[root@admin ~]# history -p `pwd`
/root
[root@admin ~]# history -p `cat test.sh`
name=zhangsan
echo
$name
[root@admin ~]#
敲黑板划重点:只要是以history -p开始执行的命令,后面参数无论跟什么,都不会添加到历史列表和历史文件中
2.history -s 命令
请看实际操作:
[root@admin ~]# history -c
[root@admin ~]# history -s hello world
[root@admin ~]# history -s 'hello world'
[root@admin ~]# history -s "hello world"
[root@admin ~]# history -s ls
[root@admin ~]# history -s 'ls'
[root@admin ~]# history -s "ls"
[root@admin ~]# history -s `ls` #这个是反引号
[root@admin ~]# history -s $PS1
[root@admin ~]# history
1 hello world
2 ls
3 anaconda-ks.cfg date.txt error.txt etc.tar.ga file file1 ip.txt list.txt test.sh
4 [\u@\h \W]\$
5 history
总结 :
3.有关历史命令的几个变量:
①$HISTSIZE
用于设置历史列表的显示数目,不会影响到文件中存储的历史命令数量
[root@admin ~]# echo $HISTSIZE
1000
[root@admin ~]# HISTSIZE=10 #这里对该变量进行临时修改,要想修改后一直有效必须写入环境变量文件中(下同)
[root@admin ~]# echo $HISTSIZE
10
[root@admin ~]# history #对该变量设置为10,所以历史列表中显示的历史命令只有10条
347 cat -n .bash_history
348 echo $HISTSIZE
349 vim .bash_history
350 vim /etc/profile
351 echo $HISTSIZE
352 source /etc/profile
353 echo $HISTSIZE
354 HISTSIZE=10
355 echo $HISTSIZE
356 history
[root@admin ~]#
②$HISTTIMEFORMAT
给历史命令打印时间戳
这里打印的时间只会在历史列表中显示,历史文件中并不会有
[root@admin ~]# echo $HISTTIMEFORMAT #默认历史命令没有添加时间戳
[root@admin ~]# HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " #这里我们进行临时修改,并指定要显式的时间格式
[root@admin ~]# echo $HISTTIMEFORMAT
%Y-%m-%d %H:%M:%S
[root@admin ~]# history #查看效果
355 2020-07-09 09:42:07 HISTTIMEFORMAT=""
356 2020-07-09 09:42:18 echo HISTTIMEFORMAT
357 2020-07-09 09:42:26 echo $HISTTIMEFORMAT
358 2020-07-09 09:43:18 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
359 2020-07-09 09:43:24 echo $HISTTIMEFORMAT
360 2020-07-09 09:43:34 history
③$HISTFILE
指定存放命令历史的目录文件
每个用户都会拥有各自的存放历史命令的文件,系统默认这个文件是各用户家目录下的.bash_history文件
[root@admin ~]# echo $HISTFILE
/root/.bash_history
[root@admin ~]# cd /etc
[root@admin etc]# touch histfile #自行创建一个文件,目的是将历史命令保存到这个文件中去
[root@admin ~]# HISTFILE="/etc/historyfile" #将次变量临时修改为我们刚创建的/etc/historyfile文件,这样后面的历史命令都会保存到这个文件中去
[root@admin ~]# echo $HISTFILE #这里是为了查看我们修改是否成功
/etc/historyfile
[root@admin ~]# history -a #将当前内存中的历史命令写入到我们指定的存储历史命令的文件中去
[root@admin ~]# cat -b /etc/historyfile #查看效果
1 #1594259004
2 echo $HISTTIMEFORMAT
3 #1594259014
4 history
5 #1594259204
6 echo $HISTFILE
7 #1594259229
8 cd /etc/file
9 #1594259243
10 cd /etc
11 #1594259257
12 touch histfile
13 #1594259259
14 cd
15 #1594259292
16 HISTFILE="/etc/historyfile"
17 #1594259316
18 echo $HISTFILE
19 #1594259334
20 history -w
④$HISTFILESIZE
用于设置命令历史文件的大小;超出设置的数量会删除旧的
通俗地讲:用于设置在变量$HISTFIZE定义的文件(默认为.bash_history) 中保存命令的记录总数,可以理解为.bash_history文件中最多只有HISTFILESIZE行
[root@admin ~]# echo $HISTFILESIZE #改变量系统默认设置为 1000
1000
[root@admin ~]# HISTFILESIZE=3 #这里临时修改大小为3
[root@admin ~]# cat -n .bash_history #我们查看保存命令历史文件中的历史命令只剩下3条
1 vim /etc/profile
2 source /etc/profile
3 exit
[root@admin ~]