内部命令和外部命令的划分
内部命令:只要Shell被执行,内部命令就自动载入内存,用户可以直接使用,如cd、pwd、echo命令等
外部命令:考虑到运行效率等原因,不可能把所有的命令都集成在Shell中,更多的Linux命令是独立于Shell之外的,这些就称为外部命令,如cp、ls等都属于外部命令
每个外部命令都对应了系统中的一个可执行的二进制程序文件,这些二进制程序文件主要存放在下列目录中
普通命令:/bin、/usr/bin和/usr/local/bin
管理命令:/sbin、/usr/sbin和/usr/local/sbin
普通命令是指所有用户都可以执行的命令,而管理命令则只有管理员root才有权限执行
Linux系统默认将外部命令程序文件的存放路径保存在一个名为PATH的环境变量中,执行“echo $PATH”命令可以显示出PATH变量里保存的目录路径(路径之间用“:”间隔)
[root@node-a shell]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
当用户输入命令并执行时,Shell首先检查命令是否是内部命令,若不是,Shell就会从PATH变量所保存的这些路径中寻找外部命令所对应的程序文件。
如果用户每执行一条命令都要去PATH变量中查找程序文件路径,那么势必会影响命令执行效率,因而Linux系统会将用户在当前Shell中所执行的外部命令程序文件路径缓存下来,这样当再次执行同样的命令时,就会直接从缓存中调用,而无须在PATH变量中查找
[root@node-a shell]# hash hitscommand 5/usr/bin/date 2/usr/bin/cat 2/usr/bin/vim 1/usr/bin/diff 1/usr/bin/stat 3/usr/sbin/hwclock 2/usr/bin/ls 4/usr/bin/clear