Linux內建命令,linux建命令

來源:互聯網
上載者:User

Linux內建命令,linux建命令
內建命令

內建命令指的就是包含在 Bash 工具集中的命令。這主要是考慮到執行效率的問題——內建命令將比外部命令的執行得更快,外部命令通常需要 fork 出一個單獨的進程來執行。另外一部分原因是特定的內建命令需要直接存取 shell 核心部分。

一個內建命令通常與一個系統命令同名,但是 Bash 在內部重新實現了這些命令。比如,Bash 的 echo 命令與 /bin/echo 就不盡相同,雖然它們的行為絕大多數情況下是一樣的。
關鍵字的意思就是保留字。對於 shell 來說關鍵字有特殊的含義,並且用來構建 shell 的文法結構。
比如,”for”,”while”,”do”和”!”都是關鍵字。與內建命令相同的是,關鍵字也是 Bash 的骨幹部分,但是與內建命令不同的是,關鍵字自身並不是命令,而是一個比較大的命令結構的一部分。

I/O 類
echo
重要程度:高
列印(到stdout)一個運算式或變數。
echo 需要使用 -e 參數來列印逸出字元。
一般的每個 echo 命令都會在終端上新起一行,但是 -n 選項將會阻止新起一行。
注意:echo command 將會刪除任何有命令產生的分行符號。
$IFS(內部域分隔字元)一般都會將\n(分行符號)包含在它的空白字元集合中。Bash 因此會根據參數中的換行來分離命令的輸出。然後echo 將以空格代替換行來輸出這些參數。
注意:這個命令是 shell 的一個內建命令,與 /bin/echo 不同,雖然行為相似。

printf
重要程度:中
printf 命令,格式化輸出,是 echo 命令的增強。它是 C 語言 printf() 庫函數的一個有限的變形,並且在文法上有些不同。
使用 printf 的最主要的應用就是格式化錯誤訊息。

read
重要程度:高
從 stdin 中讀取一個變數的值,也就是與鍵盤互動取得變數的值。使用 -a 參數可以取得數組。
對 read 命令來說,-n 選項將不會檢測ENTER(新行)鍵。
read 命令的 -t 選項允許設定read的逾時值。
read 命令也可以從重新導向的檔案中讀入變數的值。如果檔案中的內容超過一行,那麼只有第一行被分配到這個變數中。如果 read 命令有超過一個參數,那麼每個變數都會從檔案中取得以定義的空白分隔的字串作為變數的值。

檔案系統類
cd
重要程度:高
cd 修改目錄命令

pwd
重要程度:高
列印當前的工作目錄。這將給使用者(或指令碼)當前的工作目錄。使用這個命令的結果和從內建變數 $PWD 中讀取的值是相同的。

pushd、popd、dirs
重要程度:低
這幾個命令可以使得工作目錄書籤化,就是可以按順序向前或向後移動工作目錄。
壓棧的動作可以儲存工作目錄列表。選項可以允許對目錄棧作不同的操作。
pushd dir-name 把路徑 dir-name 壓入目錄棧,同時修改目前的目錄到 dir-name。
popd 將目錄棧中最上邊的目錄彈出,同時修改目前的目錄到彈出來的那個目錄。
dirs 列出所有目錄棧的內容(與 $DIRSTACK 便兩相比較)。一個成功的 pushd 或者 popd 將會自動的調用 dirs 命令。

變數類
let
重要程度:中
let 命令將執行變數的算術操作。在許多情況下,它被看作是複雜的 expr 版本的一個簡化版。

unset
重要程度:中
unset 命令用來刪除一個 shell 變數,效果就是把這個變數設為 null。

export
重要程度:中
export 命令將會使得被 export 的變數在啟動並執行指令碼(或shell)的所有的子進程中都可用。
不幸的是,沒有辦法將變數 export 到父進程(就是調用這個指令碼或 shell 的進程)中。
關於 export 命令的一個重要的使用就是用在開機檔案中,開機檔案是用來初始化並且設定環境變數,讓使用者進程可以存取環境變數。

getopts
重要程度:中
可以說這是分析傳遞到指令碼的命令列參數的最強力工具。這個命令與 getopt 外部命令,和C語言中的庫函數 getopt 的作用是相同的。它允許傳遞和串連多個選項到指令碼中,並能分
配多個參數到指令碼中。
getopts 結構通常都組成一組放在一個 while 迴圈中,迴圈過程中每次處理一個選項和參數,然後增加隱含變數 $OPTIND 的值,再進行下一次的處理。
注意: 1.通過命令列傳遞到指令碼中的參數前邊必須加上一個減號(-)。這是一個首碼,這樣getopts 命令將會認為這個參數是一個選項。事實上,getopts 不會處理不帶”-“首碼的參數,如果第一個參數就沒有”-“,那麼將結束選項的處理。
2.使用 getopts 的 while 迴圈模版還是與標準的while 迴圈模版有些不同。沒有標準 while迴圈中的[]判斷條件。
3.getopts 結構將會取代 getopt 外部命令。

指令碼行為
source, . (點命令)
重要程度:高
這個命令在命令列上執行的時候,將會執行一個指令碼。在一個檔案內一個 source file-name將會載入 file-name 檔案。source 一個檔案(或點命令)將會在指令碼中引入代碼,並附加到指令碼中(與 C 語言中的 #include 指令的效果相同)。最終的結果就像是在使用 “sourced”行上插入了相應檔案的內容,這在多個指令碼需要引用相同的資料,或函數庫時非常有用。

exit
重要程度:高
絕對的停止一個指令碼的運行。exit 命令有可以隨便找一個整數變數作為退出指令碼返回 shell時的退出碼。使用 exit 0 對於退出一個簡單指令碼來說是種好習慣,表明成功運行。
注意:如果不帶參數的使用 exit 來退出,那麼退出碼將是指令碼中最後一個命令的退出碼。等價於exit $?。

exec
重要程度:中
這個 shell 內建命令將使用一個特定的命令來取代當前進程。一般的當 shell 遇到一個命令,它會 fork off 一個子進程來真正的運行命令。使用 exec 內建命令,shell 就不會 fork 了,並且命令的執行將會替換掉當前 shell。因此,當我們在指令碼中使用它時,當命令實行完畢,
它就會強制退出指令碼。

ture
重要程度:高
一個返回成功(就是返回0)退出碼的命令,但是除此之外什麼事也不做。

type[cmd]
重要程度:中
與 which 擴充命令很相像,type cmd 將給出”cmd”的完整路徑。與 which 命令不同的是,type 命令是 Bash 內建命令。一個很有用的選項是 -a 選項,使用這個選項可以鑒別所識別的參數是關鍵字還是內建命令,也可以定位同名的系統命令。

bind
重要程度:低
bind 內建命令用來顯示或修改readline[5]的鍵綁定。

help
重要程度:中
獲得 shell 內建命令的一個小的使用總結。這與 whatis 命令比較象,但是 help 是內建命令。

作業控制命令
jobs
重要程度:中
在後台列出所有正在啟動並執行作業,給出作業號。

disown
重要程度:中
從 shell 的當前作業表中,刪除作業。

fg、bg
重要程度:中
fg 命令可以把一個在後台啟動並執行作業放到前台來運行。而 bg 命令將會重新啟動一個掛起的作業,並且在後台運行它。如果使用 fg 或者 bg 命令的時候沒指定作業號,那麼預設將對當前正在啟動並執行作業做操作。

wait
重要程度:中
停止指令碼的運行,直到後台啟動並執行所有作業都結束為止,或者直到指定作業號或進程號為選項的作業結束為止。
你可以使用 wait 命令來防止在後台作業沒完成(這會產生一個孤兒進程)之前退出指令碼。

logout
重要程度:中
退出一個登陸的 shell,也可以指定一個退出碼。

times
重要程度:中
給出執行命令所佔的時間,使用如下形式輸出:
0m0.020s 0m0.020s
這是一種很有限的能力,因此這不常出現於 shell 指令碼中。

kill
重要程度:高
通過發送一個適當的結束訊號,來強制結束一個進程。

command
重要程度:中
command 命令會禁用別名和函數的尋找。它只尋找內部命令以及搜尋路徑中找到的指令碼或可執行程式。

注意一下bash 執行命令的優先順序:
1.別名
2.關鍵字
3.函數
4.內建命令
5.指令碼或可執行程式($PATH)

builtin
重要程度:低
在”builtin”後邊的命令將只調用內建命令。暫時的禁用同名的函數或者是同名的擴充命令。

enable
重要程度:低
這個命令或者禁用內建命令或者恢複內建命令。如:enable -n kill 將禁用 kill 內建命令,所以當我們調用 kill 時,使用的將是 /bin/kill 外部命令。
-a 選項將會恢複相應的內建命令,如果不帶參數的話,將會恢複所有的內建命令。
選項 -f filename 將會從適當的編譯過的目標檔案[6]中以共用庫(DLL)的形式來載入一個內建命令。

autoload
重要程度:低
這是從 ksh 的 autoloader 命令移植過來的。一個帶有”autoload”聲明的函數,在它第一次被調用的時候才會被載入。這樣做會節省系統資源。
注意:autoload 命令並不是 Bash 安裝時候的核心命令的一部分。這個命令需要使用命令enable -f(見上邊enable 命令)來載入。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.