@H_502_1@ 在Linux中,不同的目录下可能有相同的文件。虽然同名,两个文件的作用却完全不同。
@H_502_1@执行同一命令,可能会显示完全不同的结果。如pwd本来显示当前工作目录,我们却可以定义别名使它输出时间。
@H_502_1@要了解命令执行的先后顺序,首先我们要明白内部命令和外部命令的不同。使用type command可以查看命令类型。
@H_502_1@这里pwd是内部命令,cal是hash(缓存)命令,ls是别名,date则是外部命令。
@H_502_1@这里要引进一个变量PATH,通过echo,我们可以查看变量PATH的值。
@H_502_1@CentOS 6.9与CentOS 7.3里PATH的值有所不同。
@L_404_4@
@H_502_1@在CentOS 7.3中我们可以用whereis 查看pwd的路径。
@H_502_1@
@H_502_1@可以看到此时的pwd路径为/usr/bin/pwd,后面的两个则是pwd命令的帮助文档。
@H_502_1@这时type下,会发现pwd成了外部命令。
@H_502_1@我们把/usr/sbin/ifconfig复制到/usr/loacl/sbin下并取名为pwd。
@H_502_1@CentOS 7.3中PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin。冒号为分隔符。
@H_502_1@上述中,/usr/local/sbin/下的pwd优先于/usr/bin下的pwd,执行/usr/local/sbin/pwd的结果。
@H_502_1@这时我们可以使用rm -rf删除/usr/local/sbin/pwd。这时只有/usr/bin/pwd存在。
@H_502_1@type pwd,此时的pwd是hash命令。
@H_502_1@上述证明,hash的命令执行要优先于PATH。
@H_502_1@这时我们type pwd。
@H_502_1@再次清除pwd的hash条目。再次复制ifconfig到/usr/local/sbin/pwd,使pwd输出ifconfig的效果。
@H_502_1@type以下,pwd再次成为hash命令。
@H_502_1@enable pwd,使pwd恢复为内部命令。
@H_502_1@可知,内部命令执行优先于hash。
@H_502_1@alias pwd=cal,为pwd设置别名为cal。
@H_502_1@可知,alias(别名)的执行优先于builtin(内部命令)。
@H_502_1@综上,命令执行的优先级即为:alias > 内部命令> hash > PATH 。当然,如果PATH中也找不到的话,就只能command not found了。