1. 程式人生 > >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
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命令之命令查找方式