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 21:02
下一篇 2017-07-15 21:09

相關推薦

  • 8-8 sed 練習

    8-8 作業 1. 如何設置tab縮進為4個字符? 2. 復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log; 3. 刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;

    Linux干貨 2016-08-12
  • 磁盤管理之MBR與GPT分區

    磁盤管理之MBR與GPT分區 2016-08-26 zanghonglei%1 $ S 磁盤管理之MBR與GPT分區 linux下的文件分為常規文件和設備文件,常規文件一定在某一個設備上被存儲,不論這個設備是真實的還是虛擬的,這里的設備是linux中vfs層中的設備,也就是設備文件中的設備,vfs層的設備分為字符設備和塊設備,字符設備可以類比為一個…

    Linux干貨 2016-08-29
  • 第二周博客作業

      '經過了兩周的學習,對Linux有了更深的認識,學習到了很多的新知識,在此進行總結。一、Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示。答:Linux常用的文件管理類命令主要有以下幾個:  cp,mv,rm,mkdir,rmdir,install,touch;  cp命令:  作用是拷貝文件或文件夾,其用法為:  cp […

    Linux干貨 2016-12-12
  • vim必掌握用法

    vim最入門用法大全

    Linux干貨 2017-12-03
  • 四大開源協議的異同:GPL、LGPL、BSD、Apache

    便于自身理解四大常用開源協議的異同之處。

    Linux干貨 2017-10-25
  • linux 基礎目錄配置及用途說明

    bin -> usr/bin 一般存放root和一般用戶都可以使用的指令例如:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令,同時還存放著單人維護模式下還能夠被使用的指令。 boot  這個目錄主要放置開機會使用到的文件,包括linux核心文件以及開機選單和開機所需要的配置文件。 de…

    Linux干貨 2017-08-19
欧美性久久久久