Linux命令之命令查找方式
阿新 • • 發佈:2017-09-03
命令查找順序
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命令之命令查找方式
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命令之命令查找方式