命令的分類:
在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