內(nèi)容簡(jiǎn)要
1.Shell簡(jiǎn)介
2.內(nèi)部命令與外部命令
3.hash緩存表
4.別名alias
1.Shell簡(jiǎn)介
Shell提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口柑司。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行。
顯示當(dāng)前使用的Shell
echo $SHELL
顯示當(dāng)前系統(tǒng)可以使用的Shell
cat /etc/shells
2.內(nèi)部命令與外部命令
Shell中可以執(zhí)行的命令分為內(nèi)部命令與外部命令兩種些膨,內(nèi)部命令內(nèi)建于Shell中,外部命令是Shell外的可執(zhí)行文件辣恋。
- 區(qū)分內(nèi)部命令與外部命令
type COMMAND
- 查看全部?jī)?nèi)部命令
help
和enable
均可 - 啟用某個(gè)內(nèi)部命令
enable COMMAND
- 禁用某個(gè)內(nèi)部命令
enable -n COMMAND
- 查看所有禁用的內(nèi)部命令
enable -n
3.Hash緩存表
當(dāng)一個(gè)Shell會(huì)話中第一次使用某個(gè)外部命令時(shí)奖亚,Shell會(huì)首先按照$PATH中的路徑依次搜索,并將搜索到的路徑緩存至hash表中艾船。當(dāng)此次會(huì)話再使用本命令時(shí),直接使用內(nèi)存中的hash表緩存高每,加快程序運(yùn)行速度屿岂。
顯示所有hash緩存命令和被命中(Hit)的次數(shù)
hash
顯示所有hash的命令
hash -l
將命令的全路徑path起別名name
hash -p path name
打印name的hash緩存
hash -t name
刪除name的hash緩存
hash -d name
此處需要注意name并非一定是命令,應(yīng)該使用hash -l
查看最后一列確認(rèn)清空所有hash緩存
hash -r
4.別名alias
顯示當(dāng)前shell會(huì)話的所有別名
alias
命名別名NAME觉义,等于執(zhí)行命令VALUE
alias NAME=VALUE
撤銷(xiāo)別名NAME,-a撤銷(xiāo)所有別名
unalias [-a] NAME
alias和unalias操作只在此會(huì)話中有效浴井,若要每次登錄時(shí)別名都生效晒骇,需要在配置文件中進(jìn)行修改
- 僅修改本用戶的設(shè)置,
~/.bashrc
- 修改所有用戶的設(shè)置磺浙,
/etc/.bashrc
**編輯后的配置文件不會(huì)立即生效洪囤,需要bash重新讀取配置文件 **
. ~/.bashrc
或者
source ~/.bashrc
均可
- 若別名與原命令同名,強(qiáng)制使用原命令可以有如下三種方法
'COMMAND'
\COMMAND
-
/PATH/COMMAND
執(zhí)行命令絕對(duì)路徑
總結(jié):命令在Shell中的執(zhí)行過(guò)程
- 輸入命令撕氧,回車(chē)執(zhí)行
- 先判斷本命令是否是別名:若是瘤缩,則按照別名的定義解析后進(jìn)入步驟3;若否伦泥,直接進(jìn)入步驟3
- 判斷命令是否為內(nèi)部命令:若是剥啤,則直接運(yùn)行;若否不脯,則進(jìn)入步驟4
- 查詢hash緩存表中是否有記錄:若有府怯,則直接按照緩存記錄的路徑執(zhí)行;若否防楷,則進(jìn)入步驟5
- 按照$PATH的路徑順序依次查詢:若查詢到牺丙,按照查詢的地址執(zhí)行命令并將地址緩存至hash表;若沒(méi)有查詢到,則報(bào)錯(cuò)冲簿。