从零开始的linux 第九章
大家早上好~~呼~今天天气好冷~小编都快感冒惹~
同学们要记得多穿衣服呀~~但是~~可不要穿太多哦~~不然可表现不出可爱的一面~~
(小编此时看了看路人甲,仔细打量一下路人甲的着装)
(↑小编意味深长的眼神)
嗯,看来同学们还是很有品位的嘛~~~,既然这样~作为你们启蒙老师的小编,就不用给同学们灌输...就不灌输 哲♂学 思想啦~~马上开始这一章的课程吧~~
小编先带大家回顾一下上一章的内容:
上一章,小编给大家介绍了 PATH 变量,hash 缓存及选项,which显示命令的完整路径,whami显示当前登录的用户,who am i显示当前用户及终端信息,who查看当前登录系统的用户及其选项,w 查看登录当前系统的用户并显示他们在做什么。这些命令具体的使用小编就不再做什么过多的总结啦~~同学们可以翻阅上一章的内容。
那么这章,小编同样要给同学们介绍一个非常有用的命令:history命令历史。
所谓命令历史,就是我们使用过后的命令。当我们执行一条命令后,无论命令执行成功没有,都会把我们在命令行输入的内容给记录下来,而这些被记录下来的内容,就被称为命令历史。
history:查看命令历史
在命令行中直接输入 history 即可查看曾经使用过的命令,这些命令前面的数字可以理解为该命令是命令历史中的第几个命令。(其实小编只截图了一部分,小编的这个专门用来讲课的机器已经有300多条命令历史咯)
可是..小编可是刚开机,怎么会有这么多命令历史呢?其实,history 命令是有一个配置文件的,而用户每次登录都会读取这个配置文件,该配置文件中存放的就是用户所执行过的命令。
~/.bash_history文件中存放了 history 的命令历史,现在,小编就来看一下这个文件内容。
↑这是小编直接在命令行输入 history 所显示的内容,而最后的4个,是小编刚才刚输入的命令。
↑这是小编查看 ~/.bash_history 所显示的内容。
那,这两个有什么不同呢?没错,~/.bash_history这个文件中,没有把小编刚才输入的4条命令存在文件中,而这4条命令被放在了 history 缓存中,当用户退出时,这些命令才会被 追加 到这个文件中。所以,新执行的命令不会在该文件中出现。
当用户登录时,会读取这个文件,曾经使用过的命令可以用 history 查看。但是~~小编会告诉大家一些控制命令历史的方法~~认真听哦~~
小编刚才说,新执行的命令退出后会被追加到 命令历史的文件(~/.bash_history) 中,可不可以不退出就可以将新执行的命令追加进去呢?
history -a:本次会话新执行的命令写入到历史文件中
小编再来查看一下 命令历史文件:
新执行的命令都被添加到了历史文件中。
阿啦~~被你们发现惹~~其实查看一个文件就是用的 cat 命令,不过具体用法小编以后再来说咯~
拥有相同功能的选项还有 -w
history -w:把历史列表中的命令追加至历史文件中
虽然看上去 history -w 与 history -a 没什么区别,但实际上他们是有区别的,一个是本次会话,另一个则是历史列表。所以当使用两个不同的终端时,用 -a 选项添加到历史文件中的命令,不会包括其他终端输入的命令,-w 包括所有终端输入的命令。
说到添加,那我们能不能删除呢?删除历史列表的指定的命令历史:
history -d #(表示第几条命令历史):删除指定的命令历史
用 history 命令可查看历史列表中的命令,这些命令前边的数字就是表示该命令在历史列表中的第几条命令。
比如小编现在要把第 392 这条命令历史删除。
与上图相比,第 392 条命令历史在历史列表中被删除,而其后面的所有命令历史都向前移动了一位,原本第393条命令历史是 history,现在变为第392条。
但这有什么用呢?比如,你要对别人的电脑做一些小动作,并且是对方不被发现,但是你做的所有操作都会被记录在命令历史中,这时候就可以用这个功能将命令历史删除啦~~不过,删除的动作会被看到哦~~小编等下再告诉同学们如何不被看到~~
-d 选项一次性删除的命令历史太少,我们也可以将所有的命令历史列表清空:
history -c:清空命令历史列表
2333(大笑),这下做一些小小的动作就不会被发现了吧~~~但是,还是有些缺陷,对方回来后突然发现命令历史列表空了就会有所察觉的~~嘛~不要急,小编等下告诉同学们更好的方法~
现在,小编的历史列表空了,想找回其他命令怎么办呢??提问,路人丙回答~
路人丙:“唉??小编这次不提问路人甲和路人乙了么?”
吵死啦,谁让你是男生,人家是女生。
(↑路人乙一脸嘲讽的看着路人丙)
(路人丙一脸无辜的表情):“既然能从历史列表中向历史文件中追加命令历史,当然也能从历史文件中读取命令历史到历史列表中...”
嗯,还不笨嘛~~不愧是小编教的~~
history -r:从文件读取命令历史至历史列表中
现在命令历史重新回到历史列表中啦~~但是刚才小编删除之前未追加的历史文件中的命令就丢失了~
history命令不仅可以将执行过的命令记录下来,也可以强行将没有执行过的命令写入到历史中。
history -s ‘COMMAND(命令)‘:强行将命令写入历史中但不执行
历史列表中确实已经存在 ls /etc/ 这条命令(ls命令下面的history是小编用history来查看命令历史)
那么,问题来了~~既然可以强行写入命令历史而且不执行,那可不可以让命令不写入历史中呢?当然可以~~
history -p ‘COMMAND‘:使用的命令不保存在历史列表中
但是小编可觉得这个没有一点点作用哦~~毕竟并没有执行单引号里面的命令。
那么,history 命令的选项小编就介绍这么多,history 命令还有很多功能哦~~该命令还有一些环境变量:
HISTSIZE:查看shell进程可保留的历史命令的条数(history命令虽然可以把曾经执行过的命令记录下来,但存放量并不是无限大的,我们可以通过这个变量来查看存放量为多少)
小编之前已经说过如何去引用变量了,虽然...说的很简洁就是了...
$:引用变量
echo $HISTSIZE:查看可保留的历史命令条数
从显示结果可以看出,可保留的历史命令条数最多1000条,但实际上,这个是可以改变的,但尽量还是不要去改了吧~毕竟1000条够我们来调用啦~~等以后小编讲到变量或者配置文件时,同学们自然就会如何修改啦~~
HISTFILE:查看永久保存命令历史的文件路径
这个文件路径是根据每个用户来定的,因为小编现在是root用户,所有这个文件就显示在/root目录下,默认都是用户的家目录。
HISTFILESIZE:查看命令历史文件保留的命令条数
命令历史文件所能保留的命令条数默认也是1000条。
从上面看出,历史列表和历史文件中所能保存的命令历史都是1000条,若超过了1000条怎么办呢?当我们使用第1001条命令时,历史列表会将第一条命令删除,所有命令向前移动一位,第1001条历史也就成了第1000条历史记录,文件中也是如此。
HISTTIMEFORMAT="%F %T":显示命令执行的时间
嗯,差不多就是这样,不过这种赋值方式,仅仅对于当前终端有效,若想其他地方也有效,就在前面加上 export ,但是重启之后也会丢失的~~向永久保存,就写入配置文件中吧~~要写入哪个配置文件呢??就留给同学们自己研究吧~~
嘛~这些都不重要,下面小编讲一下 控制命令历史记录 的方式:
HISTCONTROL
↑该环境变量的取值有:ignoredups:忽略重复的命令(默认)
ignorespace:忽略以空白字符开头的命令
ignoreboth:以上两个同时生效
erasedups:删除重复的命令
下面,小编就给大家演示一下:
ignoredups
小编清空命令历史后,执行了两次 ls 命令,但是这个命令却只在命令历史列表中显示一次,已经充分说明 HISTCONTROL 变量的默认值是 ignoredups.
ignorespace
先把变量的值该成 ignorespace,之后,小编所执行的命令前面都加上空格。
历史中,只有改变变量值的历史,而小编下面所执行的两天命令都没有出现在历史列表中~
嗯...那..剩下那个变量参照着小编所做的步骤,同学们自己试一下~~但是,小编的那么赋值方法仅仅是对当前的终端有效~换其他终端无效哦~~小编讲了这么多的命令历史,那命令历史到底有什么用呢?既然存在命令历史,我们就可以调用这些命令历史来省去输入重复命令的麻烦,当然这只是其中一个用法~~具体用法还是要视情况而定啦~~
至于如何调用命令历史,小编下次再说吧~~好累~~小编要休息咯~
(生气脸)路人甲:“每次讲到有用的地方小编都跑了!”
路人乙:“就是,这种人就应该拖出去打死!”
THE END
本文出自 “13125850” 博客,请务必保留此出处http://13135850.blog.51cto.com/13125850/1963974
原文地址:http://13135850.blog.51cto.com/13125850/1963974