从零开始的linux 第八章


呼~~又是一个美好的一天~~从上一次小编更新到现在,已经经过辣么长时间啦~是不是有点想念小编呢~~可不要想念小编到疯掉哦~~

wKiom1mqAkfiVHhnAAA72FES9bM954.jpg

好啦同学们,为了走上人生的巅峰,打起精神,努力学习~~...嗯...虽然不努力会很轻松,但是!看看你的口袋里,还能再掏出来几张褶皱的毛票??轻松是没有前途的(吐槽:胡说八道!)

路人甲!!路人甲!!起床上课!!

wKiom1mqBNCCadiJAACzPyHJOwc833.jpg

(↑刚睡醒的路人甲)

咦??路人乙,你拿被子干嘛?

(↓路人乙拿着被子漫不经心的走到床前,啪叽一声躺了上去)

wKioL1mqBdjTf8qfAABBLeHTAaY779.jpg

(↑路人乙)

wKioL1mqBiaRCdWIAAAQogUde54050.jpg猝死个屁,都给小编起来!!小编这么忙还坚持给你们讲课,不听课的拖出去打死!

(端坐的同学们wKiom1mqCKGjuXpFAAAEAo_7vYg400.jpg


好啦~~小编上一章详细的介绍了 man 命令帮助文档的使用方法,同学们务必要养成每遇到一个命令先用 man 命令来获取帮助~~


那么,废话不多说~~小编现在就开始讲这章的内容吧~~注意哦~这章的命令是很杂乱的~~(吐槽:你哪次讲的不乱!!)

..额..不要在意这些细节啦~~那么,小编前面讲了 alias 别名,内部命令外部命令。那么,内部命令是嵌入到shell里的命令,在系统内部就已经有这些命令的路径,我们在使用时系统会直接到内部寻找(一本正经的胡说),那么外部命令呢,系统要如何查找呢??这里我们可以查看 PATH 变量,可以查看外部命令所存放的路径:

echo $PATH

wKioL1mqDbqDIYa0AAANG_uS3gw168.png

PATH 是存放外部路径的变量,$ 符号是引用变量,echo 是显示,总体意思就是:引用PATH变量,将引用的结果显示出来。嘛~~不懂没关系,小编以后会讲到的~~现在我们看到 PATH 变量的值有以上几个目录,这些目录用“:”分隔开。那,这又是什么意思呢?这些目录代表着我们 外部命令 所存放的路径,当我们在命令行中输入一条外部命令时,系统会从这几个目录中 从左到右 一次查找,那么,找到这些命令之后仅仅只是执行么??提问~~路人丙~~

路人丙:“唉??难道不是执行么?”

额..好吧,并没什么错,确实是执行,但是,执行的同时,还会把这个外部命令的路径给记录下来~以便于下次使用时不用从这些目录中重新查找。

那,将外部命令的路径记录在哪呢?当然是记录在缓存当中啦~~称为 hash缓存表

hash:显示执行过的外部命令的缓存(显示路径)

wKiom1mqEyzzkpalAAAJsSo5kKo007.png

啊咧??怎么显示这些?不用慌嘛~~这句话的意思是 hash缓存表为空。因为 hash 缓存中存放的是外部命令的路径,而这些路径的来源是我们执行一个外部命令,系统去 PATH 变量中找出这个外部命令才记录在 hash 缓存中,所以,hash 缓存表默认是为空的~~


小编现在找一个外部命令执行一下~~比如,man 一下 hash再退出

wKioL1mqFRjTgd4jAAAKwNNWrEU525.png

现在,hash表中有内容啦~~内容就是 man 这个外部命令的路径,从这里可直观的看出 man 命令的路径在 /usr/bin/ 目录下~~对于 hash 命令,还有哪些用法呢??

hash -d name(命令名字):清空指定命令的缓存

比如,现在小编的 hash 缓存中有 man 命令的缓存,每个hash 缓存前面都会有一个编号,这个编号是这个外部命令执行了多少次。刚才小编执行了一次 man 后退了出来,所以前面为 1,那为了验证,小编再执行一次。

wKioL1mqGGbhGGucAAAVRmJodTQ141.png

现在,hash 缓存表中的 hits中的一列 man 命令的缓存变成了 2。现在小编就用 hash 的 -d 选项将这条缓存删除。

wKiom1mqGQKAo-qJAAALNh7CQ7U220.png

这样,就删除了 man 命令在 hash 中的缓存,因为小编的 hash 缓存中只有 man 这一条缓存,所以删除后显示为空。


现在小编的 hash 缓存中有多条记录

wKioL1mqGjSQBONhAAANEO3yfPg011.png

小编想把这多条缓存一起清除怎么办呢??提问~路人甲~~咦??路人甲...你脸色好难看~~(小编突然看到路人甲捂着肚子~~)

wKiom1mqG3-iNdahAADG3yWhWew995.jpg

(↑一眼就看穿原因的小编):“路人甲可以出去啦~~”


好吧,那就小编来告诉大家吧~~

hash -r:清空所有缓存

wKioL1mqHa-hDQKCAAAKVNq7s0E000.png

小编之前的 hash缓存表中是有两条缓存记录的,用了 -r 选项后,会清空 hash缓存表中的所有缓存记录。

除了这些,hash还有哪些选项呢?

hash -t name(命令名字):显示指定命令在hash缓存中的命令

现在,小编再把 man 的缓存添加到 hash缓存表中,然后用 -t 命令

wKioL1mqH7Hj5Je4AAAKN1VPTeY220.png

以上就是显示 man命令在 hash缓存中的路径。不过我们要查一个命令的路径也不用这个啦~~小编会给大家介绍一个其他命令的~~所以这些就不用记啦~~


小编到现在已经讲了 alias别名,内部命令,PATH外部命令的路径,hash缓存;实际上我们输入一条命令的时候,系统是不知道我们输入的是 外部命令 还是 内部命令,那么,系统要如何去查找这些命令呢?提问~路人乙~

路人乙:“内个..当然是从别名,内部命令,外部命令和缓存中查啦~”

八嘎!我是让你说顺序啦~~顺序~~

wKioL1mqJFPwe6mRAACYlfuBXME878.jpg

(↑路人乙)

再次提问~~路人丙~~

路人丙:“这个..先别名,再缓存,再内部命令,最后是外部命令...”

这么笨,真的是小编教的么

wKiom1mqJeDAD0_VAAAYYkPgw5E320.gif

还是小编来说吧~~系统在查找命令时,会先从我们定义的 别名alias,之后是 内部命令,然后是 hash缓存,最后是 PATH变量(外部命令路径)

综上: alias --> 内部命令 --> hash --> PATH 

当以上的所有都找不到我们输入的命令时,将会提示 command not find(命令找不到) 


好啦~小编上面提到了查找命令的路径,小编刚才使用 hash -t 来查询 hash缓存表中的命令的路径,那小编想查询其他命令的路径需要用哪个命令呢?

which:显示命令的完整路径 

比如,小编现在查一下之前学过的命令的路径

wKiom1mqKPygyyOYAAAMOmx0jWo469.png

查询 ls 命令的路径,从显示结果可以看出,which 这条命令不仅可以显示命令的完整路径,同时命令若有别名,还会将别名一起显示,显示别名的下面就是该命令的完整路径,ls命令的路径在 /usr/bin/ 目录下。which 命令还有一些其他的选项,但基本我们都不会用,所以小编这里就不再做过多的介绍啦~~


另外,再给大家介绍几个查看用户信息的命令

whami:显示当前登录的用户

wKiom1mqKpPi0F-gAAAIq0ZP5HU957.png

那这个命令到底有什么作用呢??现在是没什么用啦~~不过以后写脚本可是有用的哦~~让脚本不是管理员不能运行等等,会用到这条命令。

这条命令分开写,是另一种不同的效果

who am i:显示当前用户及终端信息

wKioL1mqK0TA0uMwAAAMmDYDXgU419.png

这条命令当开启多个终端,并使用同一个用户的时候,可以用来查看。不过,查看终端,咱们有更简单的命令啦~~小编之前讲过用 tty 来查看终端。

who:查看当前登录系统的用户

wKiom1mqTTfwCQ_IAAARyKyIB7s155.png

who 命令可以用来查看当前系统有哪些用户登录,并显示他们所用的那种终端登录的~~这个命令还有其他的选项哦~~

who -b:查看系统此次启动的时间

wKiom1mqTiTgVhj9AAALc-Qxws0801.png

该命令可以查看我们的linux系统在什么时间启动的~~ 啊咧??时间好像不对呢~~嘛,算啦~~不改啦,下一章小编给大家介绍时间命令的时候再来一起改时间吧~~~

who -r:查看当前的运行级别

wKioL1mqTsmy96j-AAALY24Oi0I265.png

该命令可查看当前的运行级别~~那么,什么是运行级别呢??在第三章小编跟大家介绍过用 init 5 来进入命令行界面,而这个命令行界面的运行级别就是 5,图形化的运行级别是 3,具体指什么,小编以后再跟大家慢慢介绍~~

w:查看登录当前系统的用户,并显示他们在做什么

wKioL1mqUAGgJDW1AAAbPE9HjKM911.png

这个命令所显示的内容要比 who 命令详细(嘛,不要在意时间啦~~小编真的是早上写的博客~)在该命令所显示的内容最后一列 WHAT 的那一列,显示这些登录的用户在做什么,比如小编用另一个终端做其他事情,就用 nano 编辑一个文件吧~~再用 w 命令查看

wKioL1mqUPrQ9QLTAAAk0hlnvus921.png

看最后一个的 WHAT 的一列,已经出现了 nano 在编辑 /etc 目录下的 passwd 文件~~


好啦~~杂乱的命令就介绍到这儿吧~~小编要休息咯~~

wKiom1mqU96CigiRAAE3jnmSj8Y246.jpg

                                          THE END