CentOS 7.3验证Linux命令执行的优先级

在Linux中,不同的目录下可能有相同的文件。虽然同名,两个文件的作用却完全不同。

CentOS 7.3验证Linux命令执行的优先级

执行同一命令,可能会显示完全不同的结果。如pwd本来显示当前工作目录,我们却可以定义别名使它输出时间。

CentOS 7.3验证Linux命令执行的优先级

要了解命令执行的先后顺序,首先我们要明白内部命令和外部命令的不同。使用type command可以查看命令类型。

CentOS 7.3验证Linux命令执行的优先级

我们可以看到以上四个命令的显示结果是完全不同的。

这里pwd是内部命令,cal是hash(缓存)命令,ls是别名,date则是外部命令。

这里要引进一个变量PATH,通过echo,我们可以查看变量PATH的值。

CentOS 7.3验证Linux命令执行的优先级

CentOS 6.9与CentOS 7.3里PATH的值有所不同。

CentOS 7.3验证Linux命令执行的优先级

不过两者中的PATH表示的都是是shell搜索命令执行的顺序。

在CentOS 7.3中我们可以用whereis 查看pwd的路径。

CentOS 7.3验证Linux命令执行的优先级

可以看到此时的pwd路径为/usr/bin/pwd,后面的两个则是pwd命令的帮助文档。

这时我们执行enable -n pwd命令,禁用pwd原本的内部命令的功能。

这时type下,会发现pwd成了外部命令。

我们把/usr/sbin/ifconfig复制到/usr/loacl/sbin下并取名为pwd。

执行pwd,会输出ifconfig显示ip地址的功能。

CentOS 7.3验证Linux命令执行的优先级

可以看出,外部命令的执行顺序是按PATH变量的值搜索的。

CentOS 7.3中PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin。冒号为分隔符。

上述中,/usr/local/sbin/下的pwd优先于/usr/bin下的pwd,执行/usr/local/sbin/pwd的结果。

这时我们可以使用rm -rf删除/usr/local/sbin/pwd。这时只有/usr/bin/pwd存在。

执行pwd,我们发现并没有输出当前工作目录。反而显示/usr/local/sbin/pwd不存在。

type pwd,此时的pwd是hash命令。

hash -d pwd,删除pwd的缓存。再执行pwd,pwd终于显示了当前的工作目录。

CentOS 7.3验证Linux命令执行的优先级

上述证明,hash的命令执行要优先于PATH。

这时我们type pwd。

再次清除pwd的hash条目。再次复制ifconfig到/usr/local/sbin/pwd,使pwd输出ifconfig的效果。

CentOS 7.3验证Linux命令执行的优先级

type以下,pwd再次成为hash命令。

enable pwd,使pwd恢复为内部命令。

执行pwd,输出为当前工作目录。

可知,内部命令执行优先于hash。

CentOS 7.3验证Linux命令执行的优先级

alias pwd=cal,为pwd设置别名为cal。

执行pwd,我们会发现pwd输出了当月日历。

可知,alias(别名)的执行优先于builtin(内部命令)。

综上,命令执行的优先级即为:alias > 内部命令> hash > PATH 。当然,如果PATH中也找不到的话,就只能command not found了。

CentOS 7.3验证Linux命令执行的优先级




















本文转自阿拉杜美美51CTO博客,原文链接:

http://blog.51cto.com/amelie/1947877

 ,如需转载请自行联系原作者






上一篇:《树莓派渗透测试实战》——2.1 树莓派的使用场景


下一篇:《Kali Linux渗透测试的艺术》—第2章2.4节透测试执行标准