美文网首页
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