Shell、内外部命令——Linux基本命令(2)
1.Shell
Shell是Linux系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行.
shell也被稱為LINUX的命令解釋器(commandinterpreter).
vshell是一種高級程序設計語言.
? ? ? ? ? ? ? ? ? ? ? ? ? ??
2.bash shell
GNUBourne-AgainShell(bash)是GNU計劃中重要的工具軟件之一,目前也是Linux標準的shell,與sh兼容.
(1)查詢當前系統(tǒng)使用哪個Shell
使用echo$SHELL
echo的作用是輸入什么就輸出什么,因此,echo一個變量值就是把變量引用出來,即可以顯示當前系統(tǒng)的Shell為bash。
PS:一定要輸入$,否則系統(tǒng)會不識別它是個變量,僅僅把它當做一個字符串顯示。
(2)查詢當前系統(tǒng)已安裝的所有shell
使用cat/etc/shells
3.Shell提示符
(1)提示符格式
bash最原本格式為:
? ? ? ? ? ? ? ? ? ? ? ? ? ??
顯示名稱和版本號。
但是這種提示符格式不是很實用,因此centos6將提示符默認值改成如下格式:
此格式可以直觀地顯示出當前用戶名root和主機名centos6和目錄~和用戶類型#。
?
(2)查詢主機名
查詢主機名的命令為hostname
可以發(fā)現(xiàn),提示符顯示的主機名并不是完整的主機名,只是顯示最前面部分,為了方便區(qū)分。
?
(3)目錄顯示
~表示當前目錄。如果沒有進入時默認為~。
當進入一個目錄時,會顯示路徑的最后一截。
可以發(fā)現(xiàn),提示符顯示的路徑也不是完整的路徑,只是顯示最后一部分,為了方便確認用戶確實已經(jīng)進入這個目錄下。
?
(4)查詢當前的目錄
使用命令pwd
如圖,顯示當前目錄。
?
(5)用戶類型
#表示root用戶,$表示普通用戶。
?
(6)修改提示符
PS1是提示符格式的變量名,因此可以使用echo查看提示符格式
可以看出格式就是提示符的格式。
一些提示符格式如下:
\u: 當前用戶
\h: 主機名簡稱
\H: 完整主機名
\w: 完整的工作目錄名稱,家目錄會以 ~代替
\W: 最后一個目錄
\t: 24小時時間格式
\T: 12小時時間格式
\!: 命令歷史數(shù)
\#: 開機后命令歷史數(shù)
?
如果想要修改格式,可以將PS1重新賦值,使用=賦值。
我們將h改為大寫H,W改為小寫w,注意要在$后面敲一個空格,使格式美觀。
我們發(fā)現(xiàn),主機名和用戶名都顯示為完整的了。
PS:$前面應輸入兩個\,因為$本身是一個特殊字符,\$才可以可以使它轉(zhuǎn)譯為普通字符。
?
(7)永久修改提示符
我們發(fā)現(xiàn),僅僅用上面的方法,exit退出再登陸之后又恢復為原始默認的狀態(tài)。因此,我們有一個方法使其永久修改。
將export PS1="[\u@\H \w]\$ "命令添加到當前登錄用戶的~/.bashrc文件中的最后一行,然后使用$ source ~/.bashrc#使其生效。
?
(8)修改顏色
使用PS1="\[\e[33m\][\u@\h\W]\\$ \[\e[0m\]"修改提示符顏色
顏色表如下:
如圖,修改成功:
4.內(nèi)部命令與外部命令
內(nèi)部命令:由shell自帶的,而且通過某命令形式提供
內(nèi)部命令在系統(tǒng)啟動時就調(diào)入內(nèi)存,是常駐內(nèi)存的,所以執(zhí)行效率高。
?
外部命令:在文件系統(tǒng)路徑下有對應的可執(zhí)行程序文件
外部命令是系統(tǒng)的軟件功能,用戶需要時才從硬盤中讀入內(nèi)存。
?
5.命令類型
(1)判斷命令類型
使用type可以判斷一個命令是內(nèi)部命令還是外部命令
如圖,cd為內(nèi)部命令,ifconfig為外部命令。
(2)enable顯示所有啟用的內(nèi)部命令
(3)enable |wc -l 統(tǒng)計啟用的內(nèi)部命令數(shù)量(l是字母不是數(shù)字1)
統(tǒng)計出共61條
(4)enable -n COMMAND禁用命令
輸入enable –n bg,就可以禁用bg。
輸入enable |wc –l 查詢發(fā)現(xiàn)只有60個
再用enable查詢,發(fā)現(xiàn)果然沒有bg了,即被禁用了。
輸入enable –n可以查詢所有被禁用的命令
同樣,可以使用enable-n |wc -l統(tǒng)計被禁用的內(nèi)部命令數(shù)量
(5)enable COMMAND啟動命令
使用enable可以使被禁用的命令重新啟動
將那三條命令重新啟動,查詢被禁用里面為空,且啟動命令數(shù)又恢復到61個了。
?
(6)關于禁用
禁用內(nèi)部命令并不是說不能使用,而是需要從硬盤當中去尋找所對應的外部命令。
6. hash
(1)緩存路徑
系統(tǒng)初始hash表為空,當外部命令執(zhí)行時,默認會從PATH路徑下尋找該命令,找到后會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執(zhí)行之,如果不存在,將會去變量PATH路徑下尋找。
使用 echo 查看PATH的路徑:
以冒號為間隔符,從左到右依次尋找。
利用hash緩存表可大大提高命令的調(diào)用速率。
如圖,fdisk是一個外部命令,當運行過后,這個命令就多了一個hash,即將路徑緩存了下來。
緩存過后就不用去PATH路徑依次去找了。
?
※這里舉一個例子。分別運行pwd和ifconfig,使其緩存到hash里,可以看到ifconfig的路徑在pwd之前。然后我們使用cp命令,將ifconfig復制到pwd之前的路徑并且也命名為pwd。從理論上來說,應該通過路徑按照順序從左到右去尋找,會先找到/usr/local/sbin/pwd,內(nèi)容應該為ifconfig的內(nèi)容,但是我們執(zhí)行pwd之后發(fā)現(xiàn)仍然是pwd的結(jié)果,并且查詢pwd的路徑仍然為/bin/pwd。
這就說明,在之前運行的時候就已經(jīng)將pwd的路徑緩存到/bin/pwd中了,所以再次運行時不需要在PATH路徑中依次尋找,而是調(diào)用hash緩存中的路徑。
(2)hash 顯示當前被hash的所有外部命令
hash -l 顯示當前被hash的外部命令,包含別名
(3)hash -d name刪除hash
現(xiàn)在我們將hash中的緩存的pwd刪除,刪除時需要輸入的name就是用hash -l查到的別名。
可以看出列表中沒有了pwd。
然后我們查看一下pwd的類型,發(fā)現(xiàn)地址變成之前復制過去的地址了,因為緩存被刪除了。
所以此時執(zhí)行pwd,應該是ifconfig的內(nèi)容了。
PS:也可以使用hash -r 清空所有的hash。
hash -p /.../.... name 可以手動增加一個hash緩存。
?
總結(jié):當執(zhí)行一個命令時,它的優(yōu)先級為:內(nèi)部命令> hash> PATH?
轉(zhuǎn)載于:https://blog.51cto.com/tyendless/1951492
總結(jié)
以上是生活随笔為你收集整理的Shell、内外部命令——Linux基本命令(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery和JavaScript区别
- 下一篇: [工具]各种截图工具和录屏软件