码迷,mamicode.com
首页 > 系统相关 > 详细

Linux命令之命令查找方式

时间:2017-09-03 15:41:36      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:命令查找顺序


  • 1 命令类型

        linux中命令类型分为两类,一类为shell中自带的命令,即内部命令,而其它的在文件系统之上的命令程序,即外部命令.
    
            内部命令的优点: 命令程序在内存中,使用更快捷
    
            相关命令: type,enable
                type - 查看命令类型(自身也是内部命令)
                    type COMMAND
    
                enable - 禁用或启用某指定内部命令
                    enable [options] COMMAND
                        enable 列出所有内部命令
                        enable -n COMMAND 禁用指定内部命名
                        enable COMMAND 启用指定内部命令
  • 2 外部命令查找顺序

        命令的查找在系统上,实质为查找某路径下的命令程序.
        Linux中通过PATH变量保存系统查找的路径.找到的程序文件正常执行后,会将其找到的文件路径保存至hash表中.
    
            hash表,用于缓存已经执行成功后的命令路径,保存至特定的内存空间中.
    
            相关变量:
                PATH变量保存的默认值(CentOS6.x)
                # echo $PATH   
                /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin
                :/usr/sbin:/usr/bin:/root/bin
    
            相关命令: which,whereis,hash
    
                which - 显示命令完整路径
                    which COMMAND
                whereis - 显示命令路径及帮助文档路径
                    whereis COMMAND
                hash - 忘记或显示hash表中缓存信息
                    hash 列出hash表信息
                    hash -d COMMAND  删除hash表中指定命令的缓存
                    hash -r 清空hash表
  • 3 命令别名

        alias - 命令别名创建
    
            alias name=‘VALUE‘
    
            示例:
                alias hh=‘echo hhhh‘
    
        unalias - 取消别名
    
            unalias NAME
  • 4 查找顺序证明

    • 4.1 hash与PATH的顺序

      准备环节:
          查看whoami所在路径
          # which whoami
          /usr/bin/whoami
          显示当前PATH值
          # echo $PATH
          /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
          :/usr/bin:/root/bin
          清空hash表
          # hash -r
          # hash
          hash: hash table empty
      
      实验步骤:
          先执行whoami,让其路径保存至hash表中.
          再将whoami文件移至PATH的其它目录下.
          此时再次执行whoami命令,如果whoami命令正常显示,
          则说明是在PATH中找到whoami程序文件,则查找顺序是PATH优先于hash,反之亦然.
      
          # whoami        
          root
          # hash    
          hits    command
          1    /usr/bin/whoami
          # mv /usr/bin/whoami /bin      
          # whoami           
          -bash: /usr/bin/whoami: No such file or directory
      
          无法找到,证明是在hash表中找到的whoami路径.因此hash优先于PATH.
    • 4.2 内部和外部的顺序

      准备环节:
      
          pwd是内部命令
          # type pwd
          pwd is a shell builtin
          pwd文件所在路径
          # which pwd
          /bin/pwd
          清空hash表
          # hash -r 
          hash: hash table empty
          禁用pwd内部命令,使其使用外部命令执行pwd
          # enable -n pwd
      
      实验步骤:
      
          将pwd命令的路径缓存至hash表中,然后再将whoami命令复制到hash中记录的路径,命名为pwd.
          此时将pwd命令的内部命令启用,执行pwd.
          如果显示的结果为whoami的结果,则表示是从hash表中查询到的,否则是在内部命令查询到的.反之亦然.
      
          # pwd          显示当前所在工作目录路径
          centos6.example.com
          # hash
          hits    command
             1    /bin/pwd
          # cp /usr/sbin/whoami /bin/pwd      将whomai命令复制到/bin下并重命名为pwd
          cp: overwrite `/bin/pwd‘? y
          # pwd         显示当前用户名
          root
          # enable pwd  启用pwd内部命令
          # pwd
          /root
      
          结果pwd显示的原信息,证明内部命令优先于外部命令
    • 4.3 alias和外部的顺序

      准备环节:
          定义一个与pwd同名的别名
          # alias pwd=‘echo hello‘
          启用pwd内部命令
          # enable pwd
      
      实验步骤:
          使用pwd命令,查看结果.如果输出hello,则表示alias优于内部命令.反之亦然.
      
          # alias pwd=‘echo hello‘
          # enable pwd
          # pwd
          hello
      
          结果表明alias优于内部命令
  • 5 总结

        命令分为: 内部命令和外部命令
        命令: type,enable,hash,which,whereis,alias,unalias
        变量: PATH(保存命令查找路径,以:隔开)
        命令查询顺序为: 
            alias -> 内部命令 -> hash -> PATH
    
        补充: 
            在使用别名时,临时使用命令本身.实现方法:
                \COMMAND
                ‘COMMAND‘
                "COMMAND"
                /PATH/TO/COMMAND  使用命令的绝对路径
    
                例:
                    # alias echo=‘echo 123‘
                    # echo abc
                    123 abc
                    # \echo abc
                    abc
Linux命令之命令查找方式

Linux命令之命令查找方式

  • 1 命令类型

        linux中命令类型分为两类,一类为shell中自带的命令,即内部命令,而其它的在文件系统之上的命令程序,即外部命令.
    
            内部命令的优点: 命令程序在内存中,使用更快捷
    
            相关命令: type,enable
                type - 查看命令类型(自身也是内部命令)
                    type COMMAND
    
                enable - 禁用或启用某指定内部命令
                    enable [options] COMMAND
                        enable 列出所有内部命令
                        enable -n COMMAND 禁用指定内部命名
                        enable COMMAND 启用指定内部命令
  • 2 外部命令查找顺序

        命令的查找在系统上,实质为查找某路径下的命令程序.
        Linux中通过PATH变量保存系统查找的路径.找到的程序文件正常执行后,会将其找到的文件路径保存至hash表中.
    
            hash表,用于缓存已经执行成功后的命令路径,保存至特定的内存空间中.
    
            相关变量:
                PATH变量保存的默认值(CentOS6.x)
                # echo $PATH   
                /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin
                :/usr/sbin:/usr/bin:/root/bin
    
            相关命令: which,whereis,hash
    
                which - 显示命令完整路径
                    which COMMAND
                whereis - 显示命令路径及帮助文档路径
                    whereis COMMAND
                hash - 忘记或显示hash表中缓存信息
                    hash 列出hash表信息
                    hash -d COMMAND  删除hash表中指定命令的缓存
                    hash -r 清空hash表
  • 3 命令别名

        alias - 命令别名创建
    
            alias name=‘VALUE‘
    
            示例:
                alias hh=‘echo hhhh‘
    
        unalias - 取消别名
    
            unalias NAME
  • 4 查找顺序证明

    • 4.1 hash与PATH的顺序

      准备环节:
          查看whoami所在路径
          # which whoami
          /usr/bin/whoami
          显示当前PATH值
          # echo $PATH
          /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
          :/usr/bin:/root/bin
          清空hash表
          # hash -r
          # hash
          hash: hash table empty
      
      实验步骤:
          先执行whoami,让其路径保存至hash表中.
          再将whoami文件移至PATH的其它目录下.
          此时再次执行whoami命令,如果whoami命令正常显示,
          则说明是在PATH中找到whoami程序文件,则查找顺序是PATH优先于hash,反之亦然.
      
          # whoami        
          root
          # hash    
          hits    command
          1    /usr/bin/whoami
          # mv /usr/bin/whoami /bin      
          # whoami           
          -bash: /usr/bin/whoami: No such file or directory
      
          无法找到,证明是在hash表中找到的whoami路径.因此hash优先于PATH.
    • 4.2 内部和外部的顺序

      准备环节:
      
          pwd是内部命令
          # type pwd
          pwd is a shell builtin
          pwd文件所在路径
          # which pwd
          /bin/pwd
          清空hash表
          # hash -r 
          hash: hash table empty
          禁用pwd内部命令,使其使用外部命令执行pwd
          # enable -n pwd
      
      实验步骤:
      
          将pwd命令的路径缓存至hash表中,然后再将whoami命令复制到hash中记录的路径,命名为pwd.
          此时将pwd命令的内部命令启用,执行pwd.
          如果显示的结果为whoami的结果,则表示是从hash表中查询到的,否则是在内部命令查询到的.反之亦然.
      
          # pwd          显示当前所在工作目录路径
          centos6.example.com
          # hash
          hits    command
             1    /bin/pwd
          # cp /usr/sbin/whoami /bin/pwd      将whomai命令复制到/bin下并重命名为pwd
          cp: overwrite `/bin/pwd‘? y
          # pwd         显示当前用户名
          root
          # enable pwd  启用pwd内部命令
          # pwd
          /root
      
          结果pwd显示的原信息,证明内部命令优先于外部命令
    • 4.3 alias和外部的顺序

      准备环节:
          定义一个与pwd同名的别名
          # alias pwd=‘echo hello‘
          启用pwd内部命令
          # enable pwd
      
      实验步骤:
          使用pwd命令,查看结果.如果输出hello,则表示alias优于内部命令.反之亦然.
      
          # alias pwd=‘echo hello‘
          # enable pwd
          # pwd
          hello
      
          结果表明alias优于内部命令
  • 5 总结

        命令分为: 内部命令和外部命令
        命令: type,enable,hash,which,whereis,alias,unalias
        变量: PATH(保存命令查找路径,以:隔开)
        命令查询顺序为: 
            alias -> 内部命令 -> hash -> PATH
    
        补充: 
            在使用别名时,临时使用命令本身.实现方法:
                \COMMAND
                ‘COMMAND‘
                "COMMAND"
                /PATH/TO/COMMAND  使用命令的绝对路径
    
                例:
                    # alias echo=‘echo 123‘
                    # echo abc
                    123 abc
                    # \echo abc
                    abc

本文出自 “12064120” 博客,请务必保留此出处http://12074120.blog.51cto.com/12064120/1962290

Linux命令之命令查找方式

标签:命令查找顺序

原文地址:http://12074120.blog.51cto.com/12064120/1962290

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!