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