美文网首页
Linux的命令优先级

Linux的命令优先级

作者: 简通 | 来源:发表于2021-08-02 13:09 被阅读0次

Linux中的bash命令行

在Linux的bash shell 命令行,我们都知道,命令有三种类型.到底那种类型的命令优先级级高一些呢???

shell中可执行的两类命令

  • 内部命令:由shell自带的,而且通过某命令形式提供
  • 外部命令:在文件系统路径下有对应的可执行程序文件

内部命令

内部命令: 指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令.属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指令也就自动载入内存了

help        #内部命令列表
enable      #管理内部命令
enable cmd      #启用内部命令
enable –n cmd      #禁用内部命令
enable –n        #查看所有禁用的内部命令
查看内部命令

外部命令

指的是Linux系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令对应了系统中的一个文件,称为外部命令。

image.png

别名

我们将一些需要频繁使用的但又比较长的命令设置一个别名,只要需输入一个简短的别名就可以达到和"执行比较长的命令"得到同样的作用。
查看别名命令:alias

定义别名
#定义别名
[root@oldboy ~]# alias net='cat /etc/sysconfig/network-scripts/ifcfg-eth0

#取消别名 
 [root@oldboy ~]# unalias  net
 
#永久保存别名
    #全局[环境变量]文件
        /etc/profile
        /etc/bashrc         优先于/etc/profile
    #用户[环境变量]文件
        ~/.bash_profile
        ~/.bashrc
        
#如何不使用别名
        命令全路径,用which查看
        命令开头加反斜线。
        取消别名

缓存命令

系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率


查看hash缓存表
hash 命令常见用法
    hash                   #显示hash缓存
    hash -l                #显示hash缓存,可作为输入使用
    hash -p path name      #将命令全路径path起别名为name
    hash -t name           #打印缓存中name的路径
    hash -d name            #清除name缓存
    hash -r                #清除缓存
#hash为了加快外部命令的执行过程会放入缓存表

如何判断一个命令是外部命令还是内部命令?

用type来区分是否是外部命令

[root@jian ~]# type find
find 是 /usr/bin/find
[root@jian ~]# type pwd
pwd 是 shell 内嵌
[root@jian ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@jian ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls

它们的优先级

别名与内部命令

[root@jian ~]# pwd
/root
[root@jian ~]# type pwd
pwd 是 shell 内嵌
[root@jian ~]# alias pwd='ls -l /etc/hosts'
[root@jian ~]# pwd
-rw-r--r--. 1 root root 352 6月  28 20:00 /etc/hosts
[root@jian ~]# unalias pwd
[root@jian ~]# pwd
/root
#得出结论,别名优先于内部命令

hash缓存的命令与外部命令

[root@jian ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jian ~]# which head
/usr/bin/head
[root@jian ~]# hash -r
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@jian ~]# hash
命中  命令
   1    /usr/bin/head
[root@jian ~]# mv /usr/bin/head /usr/local/sbin/
[root@jian ~]# head -1 /etc/passwd
-bash: /usr/bin/head: 没有那个文件或目录
[root@jian ~]# mv /usr/local/sbin/head /usr/bin/
[root@jian ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
#得出结论  hash缓存的命令优先于外部命令

内键命令与外部命令

#找一个特殊的命令echo,即是内部命令,也是外部命令
[root@jian ~]# hash -r
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# echo 

[root@jian ~]# type echo
echo 是 shell 内嵌
[root@jian ~]# enable -n echo 
[root@jian ~]# hash
hash: 哈希表为空
[root@jian ~]# echo 

[root@jian ~]# hash
命中  命令
   1    /usr/bin/echo
[root@jian ~]# type echo
echo 已被哈希 (/usr/bin/echo)
[root@jian ~]# enable echo 
[root@jian ~]# type echo
echo 是 shell 内嵌
#得出结论:内部命令优先于外部命令

总结

alias>shell内部>hash>外部路径

相关文章

网友评论

      本文标题:Linux的命令优先级

      本文链接:https://www.haomeiwen.com/subject/axidvltx.html