1. 程式人生 > >Shell、內外部命令——Linux基本命令(2)

Shell、內外部命令——Linux基本命令(2)

linux

1.Shell

ShellLinux系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行.

shell也被稱為LINUX的命令解釋器(commandinterpreter.

vshell是一種高級程序設計語言.

技術分享


2.bash shell

GNUBourne-AgainShell(bash)GNU計劃中重要的工具軟件之一,目前也是Linux標準的shell,與sh兼容.

1)查詢當前系統使用哪個Shell

使用echo$SHELL

echo的作用是輸入什麽就輸出什麽,因此,echo一個變量值就是把變量引用出來,即可以顯示當前系統的Shellbash

技術分享


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改為大寫HW改為小寫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為外部命令。


2enable顯示所有啟用的內部命令

技術分享


3enable |wc -l 統計啟用的內部命令數量(l是字母不是數字1

技術分享

統計出共61


4enable -n COMMAND禁用命令

輸入enable –n bg,就可以禁用bg

輸入enable |wc –l 查詢發現只有60

再用enable查詢,發現果然沒有bg了,即被禁用了。

技術分享

輸入enable –n可以查詢所有被禁用的命令

技術分享

同樣,可以使用enable-n |wc -l統計被禁用的內部命令數量


5enable COMMAND啟動命令

使用enable可以使被禁用的命令重新啟動

技術分享

將那三條命令重新啟動,查詢被禁用裏面為空,且啟動命令數又恢復到61個了。

6)關於禁用

禁用內部命令並不是說不能使用,而是需要從硬盤當中去尋找所對應的外部命令。

技術分享



6. hash

1)緩存路徑

系統初始hash表為空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去變量PATH路徑下尋找。

使用 echo 查看PATH的路徑:

技術分享

以冒號為間隔符,從左到右依次尋找。

利用hash緩存表可大大提高命令的調用速率。

如圖,fdisk是一個外部命令,當運行過後,這個命令就多了一個hash,即將路徑緩存了下來。

技術分享

緩存過後就不用去PATH路徑依次去找了。

這裏舉一個例子。分別運行pwdifconfig,使其緩存到hash裏,可以看到ifconfig的路徑在pwd之前。然後我們使用cp命令,將ifconfig復制到pwd之前的路徑並且也命名為pwd。從理論上來說,應該通過路徑按照順序從左到右去尋找,會先找到/usr/local/sbin/pwd,內容應該為ifconfig的內容,但是我們執行pwd之後發現仍然是pwd的結果,並且查詢pwd的路徑仍然為/bin/pwd

這就說明,在之前運行的時候就已經將pwd的路徑緩存到/bin/pwd中了,所以再次運行時不需要在PATH路徑中依次尋找,而是調用hash緩存中的路徑。

技術分享


2hash 顯示當前被hash的所有外部命令

技術分享


hash -l 顯示當前被hash的外部命令,包含別名

技術分享


3hash -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)