1. 命令的概念
- 命令的執(zhí)行過程
系統(tǒng)第一次執(zhí)行外部命令時(shí)Hash緩存表為空叫确,系統(tǒng)會先從PTAH路徑下尋找命令,找到后會將路徑加入到Hasa緩存中膀钠,當(dāng)再次執(zhí)行此命令時(shí)會直接從Hash的路徑下執(zhí)行掏湾,如果存在直接執(zhí)行,如果不存在將繼續(xù)從PATH下的路徑繼續(xù)查找肿嘲,Hash表可以提高命令的調(diào)用速率融击。
- 命令的優(yōu)先級
alias -------------------------------------別名
??builtin------------------------------內(nèi)部命令
????hash-------------------------緩存表
??????$PATH---------------可執(zhí)行程序或腳本(外部命令)
- 內(nèi)部命令與外部命令
內(nèi)部命令是shell自帶的
外部命令是安裝系統(tǒng)時(shí)默認(rèn)安裝的,并且在文件系統(tǒng)下有對應(yīng)的路徑
- 查看命令是內(nèi)部命令還是外部命令
type [commnd]
[root@centos6 ~]# type cat #判斷cat命令雳窟,外部命令顯示文件路徑
cat is /bin/cat
[root@centos6 ~]# type cd #判斷cd命令
cd is a shell builtin
2.命令的別名
命名別名只在當(dāng)前進(jìn)程中有效
如果想永久有效尊浪,要定義在配置文件中
??僅對當(dāng)前用戶:~/.bashrc
??對所有用戶有效:/etc/bashrc
- 查看進(jìn)程中所有的別名
alias
[root@centos6 ~]#alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
......
- 定義別名
alias NAME="VALUE"
[root@centos6 ~]#alias aubin=cat
[root@centos6 ~]#aubin test
hello world
- 刪除別名
[root@centos6 ~]#unalias aubin
[root@centos6 ~]#aubin test
-bash: aubin: command not found
- 定義對當(dāng)前用戶永久生效的別名
[root@centos6 ~]#vim .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias aubin=cat # <<<-----此處定義別名
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@centos6 ~]#. .bash #立即生效
- 定義指定用戶生效的別名
[root@centos6 ~]#cd ~ li
[root@centos6 li]#vim .bashrc #編輯用戶目錄下的.bashrc
- 定義所有用戶生效的別名
[root@centos6 ~]#vim /etc/bashrc
alias aubin=cat # <<<-----加入定義別名
[root@centos6 ~]#. /etc/bashrc #立即生效
3.內(nèi)部命令
shell程序找到鍵入命令所對應(yīng)的可執(zhí)行程序或代碼,由shell分析后提交給內(nèi)核分配資源并將其運(yùn)行起來封救。
- 查看所有的內(nèi)部命令
[root@centos6 ~]#help
[root@centos6 ~]#enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
......
- 內(nèi)部命令的禁用與啟用
enable
[root@centos6 li]#enable -n cd #禁用內(nèi)部命令
[root@centos6 li]#enable cd #啟用內(nèi)部命令
- 禁用內(nèi)部命令失效
[root@centos6 li]#enable -n pwd
[root@centos6 li]#enable -n #查看禁用的內(nèi)部命令或如下圖用help
enable -n pwd
也可以help
查已經(jīng)被禁用的命令【命令前的*
代表命令已經(jīng)用】
禁用內(nèi)部命令
enable -n pwd
后依然可以使用
[root@centos6 li]#pwd
/home/li
使用which
查看命令的執(zhí)行文件
[root@centos6 li]#which pwd
/bin/pwd
當(dāng)內(nèi)部命令禁用后拇涤,按照bash優(yōu)先級繼續(xù)搜索Hash表、$PATH誉结。直到在$PATH中發(fā)現(xiàn)/bin/pwd
的可執(zhí)行文件則將其運(yùn)行鹅士。
- 查看禁用的內(nèi)部命令
[root@centos6 li]#enable -n
enable -n cd
enable -n pwd
或者如上圖所示使用help
命令查看
4.HASH緩存表
用來顯示和清除哈希表,執(zhí)行命令的時(shí)候惩坑,系統(tǒng)將先查詢哈希表掉盅。
- 查看命令的緩存
hash
[root@centos6 ~]# hash
hits command
3 /usr/bin/cal
1 /usr/bin/yum
[root@centos6 ~]# 查看詳細(xì)的Hash表
[root@centos6 ~]#hash -l
builtin hash -p /bin/dd dd
builtin hash -p /usr/bin/yum yum
- 向Hash表中增加內(nèi)容
hash -p path command
[root@centos6 ~]#將cat定義一個(gè)別名存在hash表
[root@centos6 ~]#hash -p /bin/cat aubin
[root@centos6 ~]#aubin test
hello world
- 打印Hash表中命令的路徑
hash -t command
[root@centos6 ~]#hash -t aubin
/bin/cat
- 刪除Hash表中指定命令
hash -d command
[root@centos6 ~]#hash -d aubin
- 刪除Hash表中所有命令
hash -r
[root@centos6 ~]# hash -r
- 查看命令的路徑
which
[root@centos6 ~]# which cat #查看命令的路徑,以第一個(gè)路徑為準(zhǔn)
/bin/cat
[root@centos6 ~]# which -a cat #查看命令所有路徑以舒,一個(gè)命令可能有多個(gè)路徑
/bin/cat
/usr/local/bin/cat
5.外部命令
外部命令就是一個(gè)可執(zhí)行文件趾痘,當(dāng)執(zhí)行外部命令時(shí),系統(tǒng)會去執(zhí)行在文件目錄下對應(yīng)的可執(zhí)行文件蔓钟。
- 列出命令的路徑
[root@centos6 /]#which echo #列出命令的路徑
/bin/echo
[root@centos6 /]#which cp #which列出文件路徑會顯示別名
alias cp='cp -i'
/bin/cp
[root@centos6 /]#which --skip-alias cp #列出文件路徑而不顯示別名
/bin/cp
- 列出命令所有路徑永票,多個(gè)bash有相同命令時(shí),則命令有多個(gè)路徑奋刽。
[root@centos6 /]#which -a echo
/bin/echo
- 列出命令與幫助手冊的路徑
[root@centos6 /]#whereis echo
echo: /bin/echo /usr/share/man/man1/echo.1.gz /usr/share/man/man1p/echo.1p.gz