Linux中命令的分類,hash緩存表與別名

    命令的分類

    在Linnux中,平常工作用的是字符界面。Linux輸入命令后,shell接收命令通過系統調用把命令送入內核中執行。
    *shell中的可執行命令分為兩類

       1.內部命令:為shell自帶命令,利用某種形式在開機后到到加載內存中

          help,enable      可以查內部有那些命令
    如:  
   [ting@CentOS7~]$help
   :                                      kill [-s sigspec | -n signum | -sig>
   [ arg… ]                             let arg [arg …]
   [[ expression ]]                       local [option] name[=value] …

   [ting@CentOS7~]$enable
   enable .
   enable :
   enable alias
   enable bg
   enable cd
         enable -n cmd   禁用內部命令
enable cmd      啟用內部命令
enable -n       查看禁用命令
    如:
[ting@CentOS7~]$enable -n cd 
[ting@CentOS7~]$help   #查看是否禁用
cd [-L|[-P [-e]]] [dir]                readarray [-n count] [-O origin] [->
    command [-pVv] command [arg …]           打
的被禁用了
 
    [ting@CentOS7~]$ enable cd  # 啟用內部命令
    [ting@CentOS7~]$help
    cd [-L|[-P [-e]]] [dir]                    readarray [-n count] [-O origin] [->
 

2.外部命令:在系統路徑下有對應的可執行程序的文件

  which,whereis   查看外部命令和內部命令的路徑
如:
[ting@CentOS7~]$which cat
       /usr/bin/cat
     [ting@CentOS7~]$whereis yus
      yus:[ting@CentOS7~]$whereis yes
      yes: /usr/bin/yes /usr/share/man/man1/yes.1.gz
      
     [ting@CentOS7~]$whereis cd   ## 查看內部命令的路徑
      cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
      *區分命令是外部命令或外部命令
  type COMMAND
 

    [ting@CentOS7~]$type cd
    cd is a shell builtin
    [ting@CentOS7~]$type cat
    cat is /usr/bin/cat
    查看是不是外部命令就type一下看看有沒有系統路徑;

問:為什么內部命令和外部命令都有可以執行程序的系統路徑?
因為shell的的類型不同如通常我們是用bash,如果另用其他的shell如csh就會產生內部命令不一樣,
我們通常把一些內部命令寫到系統路徑下對應的可執行程序的文件中。

—————————————————————————————————————————

hash緩存表及其常用用法:

 *Hash緩存表

    系統初始hash表為空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到后會將這條命令的路徑記錄
    到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去PATH
    路徑下尋找。利用hash緩存表可大大提高命令的調用速率
    echo $PATH:查找外部命令要找的路徑的順序:
    [ting@CentOS7~]$echo $PATH
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ting/.local/bin:/home/ting/bin
  

      *常用用法

hash      顯示hash緩存
hash -l   顯示h所以ash緩存的名字,一般做輸入使用
hash -t  name  打印緩存中的name路徑
hash -p  pth name 將命令的路徑path(特別是一些常用并且路徑很長的)起別名為name
hash -d  name   清除name的緩存
hash -r   清除所有的緩存
如:
[ting@CentOS7~]$hash     
    hits    command
     1    /usr/bin/cat
     4    /usr/bin/whereis
   
    [root@CentOS7/]#hash -l
    builtin hash -p /usr/bin/grep grep #–>最后一個單詞是顯示緩存的名字,它可以和路徑的基名不一致
    builtin hash -p /usr/bin/ls ls
   
    [root@CentOS7/]#hash -d grep     #刪除grep(名字)的路徑
    [root@CentOS7/]#hash)
    hits    command
     3    /usr/bin/ls
   
    [root@CentOS7/]#hostname
    CentOS7.3
    [root@CentOS7/]#hash
    hits    command
     1    /usr/bin/hostname
    [root@CentOS7/]#hash -p /usr/bin/hostname  h  #將/usr/bin/hostname路徑改名h
    [root@CentOS7/]#h
    CentOS7.3
    [root@CentOS7/]#hash -l
    builtin hash -p /usr/bin/hostname hostname
    builtin hash -p /usr/bin/hostname h   #——>緩存名字h與路徑基名hostname不一致
   
________________________________________________________________________________

命令別名:

為什么要取別名?
就如人為什么有了名字,為什么要有一些其他的小名等別名,還不是為了方便我們叫,同理在
Linux中也一樣,一個命令路徑很長時,而且經常我們要用,這時別名就起了作用。
alias  newname = oldname     將oldname起別名為newname

  撤銷別名:
unalias [-a] name [name]    加-a 為取消所有別名

[root@CentOS7~]#alias h=hostname

    [root@CentOS7~]#h
    CentOS7.3

———————————————————————————————————————————————————————————

命令的優先級 :

a.外部命令與內部命令優先級比較(用pwd舉例)

[root@CentOS~]#type pwd
    pwd is a shell builtin
    [root@CentOS~]#enable -n pwd   # 禁用內部命令 
    [root@CentOS~]#pwd
     /root
    [root@CentOS~]#type pwd        
    pwd is /bin/pwd                 #pwd是外部命令
    [root@CentOS~]#enable pwd       #啟用內部命令
    [root@CentOS~]#pwd               
    /root
    [root@CentOS~]#type pwd         #—-> 說明內部命令比外部命令優先級高
    pwd is a shell builtin

  結論:
            內部命令比外部命令優先級高
  
別名有內部命令優先級比較

[root@CentOS7~]#alias pwd=hostname        #將hostname起別名叫pwd
    [root@CentOS7~]#pwd                       #輸入pwd如果結果是/,那么就是內部命令優先級比
    CentOS7.3                                 #外部優先級高,反正則是輸出hostname的結果CentOS
    [root@CentOS7~]                           #那么別名優先級比內部優先級高

      結論:
             別名優先級比內部優先級高

SO:別名優先級高于內部命令高于外部命令



原創文章,作者:m25Chronos,如若轉載,請注明出處:http://www.www58058.com/80945

(0)
m25Chronosm25Chronos
上一篇 2017-07-15
下一篇 2017-07-15

相關推薦

  • 馬哥教育網絡班21期+第10周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)     1)開機后會進行POST(開機加電自檢),加載BIOS,之后會根據BIOS上的boot  sequence(引導加載次序)找到第一個有引導程序的設備,找到MBR,bootloader(引導加載器)就安裝在MBR內。M…

    Linux干貨 2016-09-19
  • 我的linux學習方法

    目前記住Linux單詞命令過于困難,現在主要記住linux的命令的作用及用處,不記得單詞可以百度查找做多了自然就記住了。

    Linux干貨 2018-03-17
  • 編輯器之神VS神之編輯器

      在linux下有兩款非常棒的處理器,它們的功能異常的強大,在普通使用者手中,我們或許僅僅把它們當做文本處理器,但在官方文檔中,它們不僅僅被定義為開發工具。正如在windows下,office在我們手中僅僅是文本,表格,PPT等文件的處理工具,而在大神手中,Excel是可以用來作畫的!PowerPoint 還可以用來播放視頻!  &nb…

    Linux干貨 2017-08-05
  • N25_第四周博客作業

    N25_第四周博客作業   1、復制/etc/ske1目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組合其他用戶均沒有任何訪問權限。     2、編輯/etc/group文件,添加組hadoop.。             &nb…

    Linux干貨 2016-12-24
  • 第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel /home/tuser1 ]# chmod -R 700 /home/tuser1/ 2、編輯/etc/group文件,添加組hadoop ~]# echo "hadoop:…

    Linux干貨 2016-12-14
  • openssl總結及私有CA的搭建

    一、前言 什么是openssl?講openssl之前我們先了解一下什么是ssl?ssl是secure socket layer的簡稱,其使用對稱加密,非對稱加密(公鑰加密解密),單向加密解密結合證書實現數據傳輸安全,openssl默認是在系統安裝時就已經安裝上去的。隨著互聯網的迅速發展,網絡通信已經成為傳遞信息的主要途徑。而通信時的數據傳輸大部分都是明文傳輸…

    Linux干貨 2016-01-05
欧美性久久久久