一、命令分类
在Linux系统中命令分为两类:
1.内部命令:shell buildin 每次启动系统都会重新加载入内存。
2.外部命令:即某目录下的文件,通过外部介质安装的命令工具包,如通过yum、rpm等方式安装,具体安装路径在$PATH下。
二、命令执行顺序
在命令执行过程中,命令形态主要分为4类:alias(别名命令)、内部命令、hash缓存命令和外部命令。
三、命令执行顺序
1. type command 查看是否是内部命令
2. alias 定义别名 ualias取消别名
3. enable command 启用内部命令
-n command 关闭内部命令
4. hash 显示hash缓存
-d 删除具体缓存命令路径
5. cp src dst/name 复制文件
6. mv src dst 移动文件
7. echo $PATH 显示PATH的内容
8. which -a command 查看所有包含command的路径
9. rm 删除文件
四、实例:‘pwd’即是内部命令又是外部命令,以‘pwd’为例实验证明其执行顺序
1.type命令判断pwd命令是内部命令,新建alias pwd条目为ls命令并执行,结果为列出当前目录文件,说明alias优先于内部命令。
[root@h(Brad) etc]#type pwd
pwd is a shell builtin
[root@h(Brad) ~]#alias -p pwd=’ls’
[root@h(Brad) ~]#pwd
123 723.txt dead.letter Documents install.log
2.禁用内部命令pwd,清空hash,执行pwd仍然显示ls结果,说明不论内部命令是否启用,都会执行alias。
[root@h(Brad) etc]#enable -n pwd
[root@h(Brad) ~]#hash -r
[root@h(Brad) ~]#pwd
123 723.txt dead.letter Documents install.log
3.删除aliaspwd,使用pwd命令,仍然有效,并且判断为外部命令,hash路径在/bin/pwd。说明相比外部命令,系统优先使用内部命令。
[root@h(Brad) ~]#unalias pwd
[root@h(Brad) etc]#pwd
/etc
[root@h(Brad) etc]#type pwd
pwd is hashed (/bin/pwd)
4.删除hash -d pwd,用hash -p命令创建一条pwd的hash,cp /sbin/ifconfig到/usr/sbin/pwd执行pwd结果为查看网络信息。说明执行的是/usr/sbin/pwd,hash路径优先。
[root@h(Brad) etc]#hash -d pwd
[root@h(Brad) ~]#cp /sbin/ifconfig /usr/sbin/pwd
[root@h(Brad) ~]#hash -p /usr/sbin/pwd pwd
[root@h(Brad) ~]#pwd
eth0 Link encap:Ethernet HWaddr 00:0C:29:03:75:7F
inet addr:172.16.253.154 Bcast:172.16.255.255 Mask:255.255.0.0
5.显示PATH路径
[root@h(Brad) etc]#echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
6.hash -d 删除pwd条目
[root@h(Brad) etc]#hash
hits command
20 /bin/grep
1 /bin/pwd
[root@h(Brad) etc]#hash -d pwd
[root@h(Brad) etc]#hash
hits command
20 /bin/grep
2 /usr/sbin/groupadd
7.move pwd到/usr/sbin并执行,可以执行,并hash /usr/bin,说明在PATH的其他目录中也可以执行,并hash。
[root@h(Brad) etc]#mv /bin/pwd /usr/sbin
[root@h(Brad) etc]#pwd
/etc
[root@h(Brad) etc]#hash
hits command
20 /bin/grep
1 /usr/sbin/pwd
8.删除hash中pwd ,cp /sbin/ifconfig到/bin/pwd并执行,执行pwd结果为查看网络信息。说明执行的是/bin/pwd,在PATH中左面目录为优先执行目录。
[root@h(Brad) etc]#hash -d pwd
[root@h(Brad) etc]#cp /sbin/ifconfig /bin/pwd
[root@h(Brad) ~]#which -a pwd
/bin/pwd
/usr/sbin/pwd[root@h(Brad) etc]#hash -d pwd
[root@h(Brad) etc]#pwd
eth0 Link encap:Ethernet HWaddr 00:0C:29:03:75:7F
inet addr:172.16.253.154 Bcast:172.16.255.255 Mask:255.255.0.0
9.rm删除/bin/pwd,执行pwd显示找不文件,说明相比PATH顺序,优先读取hash中的缓存目录命令。
[root@h(Brad) ~]#rm /bin/pwd
rm: remove regular file `/bin/pwd’? y
[root@h(Brad) etc]#pwd
-bash: /bin/pwd: No such file or directory
五、结论:系统执行命令的优先顺序依次为:
alias——> shell builtin——> hash ——> PATH
原创文章,作者:manbinn,如若转载,请注明出处:http://www.178linux.com/86057