




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、遠見培訓http:.cn3.1Linux 常用工具S簡介3.1.1在 Linux 系統開發過程中,開發者或者用戶與 Linux 系統(內核)進行交互的時候需要,這就是 S,有了它,用戶就能通過鍵盤輸入與系統進行交互了。S一個會執行用戶輸入令,并且在屏幕上顯示執行結果。這種交互的全過程都是基于文本方式的,這種面向命令行的用戶界面被稱為 CLI(d Lineerface),在圖形化用戶界面(GUI)出現之前,人們一直是通過命令行界面來操作計算機的。Linux 的圖形化環境最近這幾年有很大改進,在 X 窗口系統下,只需打開 S提示來完成極少量的任務。然而,許多 Linux功能在 S提示下要比在圖形化
2、用戶界面(GUI)下完成得更加高效,況且一些應用程序并不支持圖形界面。單從字面意思上理解,S的本意是“殼”的意思,通俗地講就是內部與外部使用者發生聯系的介質。當用戶希望與系統內核(Kernel)發生聯系進而控制硬件設備時,用戶不會也不允許直接與內核交互,而必須通過 S來下達命令使系統來控制硬件,同時內核也會通過 S過程。來反饋執行情況,這里的 S就是一個橋梁。圖 3.1 形象地說明了這一圖 3.1 S工作示意圖S提供了用戶與操作系統之間通訊的方式。這種通信可以以交互方式(從鍵盤輸入,并且可以立即得到響應),或者以 Sscript(非交互)方式執行。Sscript 是放在文件中的一串 S和操作系
3、統命令,它們可以被重復使用。本質上,Sscript 是把命令行令簡單地組合到一個文件中。S本身又是一個解釋型的程序,也是一種編程語言,S程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構。S編程語言簡單而且易于掌握,任何在提示符中能鍵入令都能放到一個可執行的 S程序中。作為操作系統的外殼,如果把 Linux 內核想像成一個系統的中心部分,那么 S就是圍繞內核的外層。當從 S或其他程序向 Linux 傳遞命令時,內核會做出相應的反應。歷史上第一個真正的 Unix s稱為“sh”,是 Stephen R. Bourne 于 20 世紀 70 年代中期Linux
4、系統開發技術詳解基于 ARM第 3 章、linux 編程環境在新澤西的 AT&T 貝爾編寫的,為了紀念他,亦稱為“Bourne s”,Bourne S是一個交換式令解釋器和命令編程語言。在 20 世紀 80 年代早期,在Berkeley 的加利福尼亞大學開發了 C s(csh 和 tcsh),它主要是為了讓用戶更容易地使用交互式功能。Cs是一種比 Bourne S更適于編程的 s,它的語法與 C 語言很相似。Bash(Bourne Again S)是目前大多數 Linux(Red Hat,Slackware 等)系統默認使用的 S,它由 Brian Fox 和 Chet Ramey 共同完成,
5、內部命令一共有 40 個,它是 Bourne S的擴展,與 Bourne S完全向后兼容,并且在 Bourne S的基礎上增加了很多特性。Bash是 GNU 計劃的一部分,用來替代 Bourne S下的特點。Linux 使用它作為默認的 S是因為它有以可以使用類似 DOS 下面的 doskey 的功能,用上下方向鍵查閱和快速輸入并修改命令。自動通過查找匹配的方式,給出以某字串開頭令。包含了自身的幫助功能,只要在提示符下面鍵入 help 就可以得到相關的幫助。Linux 下使用 S非常簡單,打開終端就可以看到 S的提示符了,登錄系統之后,系統將執行一個稱為 S的程序,正是 S進程提供了命令行提示
6、符。作為 Linux 默認的 Bash,對于普通用戶用“$”作為 S提示符,而對于根用戶(root)用“#”作提示符。如圖 3.2 所示。從上面的界面中可以看到,當前用戶是普通用戶“zxq”時,S提示符是$;而當切換為根用戶 root 時,S提示符是#。一旦出現了 S提示符,就可以鍵入命令名稱及命令所需要的參數了。用戶鍵入有關命令行后,如果 S戶鍵入:找不到以其中令名為名字的程序,就會給出錯誤信息。例如,如果用可以看到,用戶得到了一個沒有找到該命令的錯誤信息。3.1.2常用 S命令目前,Linux 下基于圖形界面的工具越來越多,許多工作都不必使用 S就可以完成了。然而,專業的 Linux 使用
7、者還是認為 S是一個非常必要的工具,使用 Linux 時一定要熟悉Sheel 的使用,至少要掌握一些基礎知識和基本令。由于 Bash 是 Linux 上缺省的 S分為兩種。,本章主要介紹 Bash 及其相關知識,S命令可以包含于 S內部令,如 cd 命令;存在于系統文件內部的某個應用程序,如 ls 命令。對用戶使用 S來說,不必關心一個命令是建立在 S內部還是一個單獨的程序。在$mypfilemand not found$遠見培訓http:.cn實際執行的時候,S會首先檢查輸入令是否是 S的內部命令,如果不是,再檢查是否是一個內部的應用程序。然后 S在搜索路徑里尋找這些應用程序(搜索路徑就是一
8、個能找到可執行程序的目錄列表)。如果鍵入令不是一個內部命令并且在路徑里沒有找到這個可執行文件,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解為系統調用并傳給 Linux 內核。S命令的一般格式如下。命令名 【選項】 【參數 1】 【參數 2】用戶登錄時,實際就進入了 S,它遵循一定的語法將輸入令加以解釋并傳給系統。命令行中輸入的第一個部分必須是一個命令的名二個部分是命令的選項或參數,命令行中的每個部分必須由空格或 Tab 鍵隔開,注意,這里的選項和參數都用【】標注,這是說明它們都是可選的,因為有令不需要選項和參數就可以執行。1對于選項和參數的說明【選項】是包括一個或多
9、個字母的代碼,它前面有一個減號(-),Linux 用它來區別選項和參數,【選項】可用于改變命令執行的動作的類型。多個【選項】可以用一個減號(-)連起來,例如ls -l-a 與ls -la相同。以常用的 ls 命令為例,ls 命令可以查看當前目錄的內容,加入選項-l 可以以長格式查看當前目錄內容,如圖 3.3 所示.。加入-l 選項,將會為每個文件列出一行信息,諸如數據大小和數據最后被修改的時間。使用該指令可以查看文件的權限位,如上圖中的“-rw-r-r-”符號,它表示的是 3 組不同用戶對該文件的使用權限,每組有 3 個權限位,如下所示。rw-用戶權限圖 3.3 ls 命令r-r-同組用戶權限
10、其他用戶權限Linux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境【參數】提供命令運行的信息,或者是命令執行過程中所使用的文件名。使用分號(;)可以將 2 個命令隔開,這樣可以實現一行中輸入多個命令。命令的執行順序和輸入的順序相同。當然,ls 命令也可以加入參數,例如 ls -l /home/zxq 命令會將/home/zxq 目錄的內容詳細地列出。2命令行輸入命令行輸入實際上是可以編輯的一個文本緩沖區,在命令行中就可以輸入 S在按“回車鍵”以確認當前操作之前,可以對輸入的內容進行編輯。比如刪除、命令了。、粘貼等,還可以字符,使得用戶在輸入命令,尤其是復雜命令時,若出現鍵入錯
11、誤,無須重新輸入整個命令,只要利用編輯操作,即可改正錯誤。Bash 可以保存以前鍵入命令的列表,這一列表被稱為命令歷史表。按向上箭頭鍵,便可以在命令行上逐次顯示各條命令。同樣,按向下箭頭鍵可以在命令列表中向下移動,這樣可以將以前的各條命令顯示在命令行上,用戶可以修改并執行這些命令,這樣可以不用重復輸入以前執行 令。3常用 S命令介紹S命令種類很多,功能也很復雜,下面主要就幾種常用的 S命令來介紹。(1)輸入命令行自動補齊(automaticd line completion)功能在 Linux 下有時比如對文件操作的時候,有的文件名或文件夾的名稱可能會很長,完全逐字輸入比較麻煩,在輸入命令的任
12、何時刻,可以按鍵,當這樣做時,系統將試圖補齊此時已輸入令。例如,假設當前目錄下有一文件:Busybox-pre-1.00.tar.gz,現在想要解壓該文件,而該文件是當前目錄下惟一以 B 開頭的文件名,此時就可以如下操作。此時,系統會自動補齊該文件名后面的部分,這樣用起來就會非常方便。使用命令行自動補齊功能,對于使用長命令或操作較長名字的文件或文件夾都是非常有意義的。對目錄和文件的操作改變當前目錄這里的目的目錄名可用相對路徑表示,也可以用絕對路徑表示。如果要切換到上一級目錄,可以采用下面令。顯示當前所在目錄Linux 下 pwd 命令是最常用令之一,用于顯示用戶當前所在的目錄。例如:# pwd
13、/home/TH# cd .# cd 目的目錄名# tar zxvf Busy-pre-1.00.tar.gz遠見培訓http:.cn執行 pwd 指令后,系統提示當前所在的目錄是/home/TH。創建目錄在 Linux 下可以使用 mkdir 指令來創建一個目錄。# mkdir 新目錄名例如:mkdir/home/TH,改命令的功能就是在/home/目錄下創建 TH 子目錄。刪除一個目錄/文件rm選項被刪除的文件/目錄對于選項的說明如下。-r:完全刪除目錄,就其下的目錄和文件也一并刪除。-i:在刪除目錄之前需要經過使用者的確認才能被刪除。-f:不需要確認就可以刪除,也不會產生任何錯誤信息。例
14、如:rm rf /home/TH/tmp,就是不必經過確認就把/home/TH/tmp/下的目錄和文件全部刪除。拷貝文件/目錄# cp 選項 源文件/目錄 指定文件/目錄對于選項的說明如下。-i:采用-i 選項時,當指定目錄下已存在被覆蓋,如使用者的回答是 y(yes)才執行-p:保留權限模式和更改時間。的文件時,會在之前要求確認是否要的動作。-r:此參數是用來將一目錄下的所有文件都到另一個指定目錄中。例如:cp /etc/ld.conf/,拷貝/etc/目錄下的 ld.conf 文件到系統的主目錄中;cp -r dir1 dir2,將目錄 dir1 的全部內容全部建立文件的符號到目錄 dir
15、2 里面。建立文件的符號是 Linux 中一個很重要令,它的基本功能是為某一個文件在另外一個位置建立一個不同的,這個命令最常用的選項是-s,具體用法如下。# ln -s 源文件 目標文件在實際的操作過程當中,有時在不同的目錄中要用到相同的文件,不需要在每一個需要的目錄下都放一個相同的文件,而是使用 ln 命令(link)它就可以(相當于建立了一個快捷方式),這樣可以避免重復的占用磁盤空間。例如:ln s /best /usr/local/best,這就為/bin 下的 test 文件在/usr/local/bin 目錄下建立了一個符號。使用 ln 命令需要注意:ln 命令會保持每一處文件的同步
16、性,也即是說如果改動了某一文件,其他的符號文件都會發生相應的變化;其次,ln 命令的方式又有軟和硬兩種,注意上面提到的用法就是軟,它只會在你選定的位置上生成一個文件的鏡像,不會占用磁盤空間,硬沒有選項-s,它會在指定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬,文件都保持同步變化。Linux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境改變文件/目錄權限在 Linux 系統下面,一個文件有可讀(r)、可寫(w)、可執行(x)3 種模式,以用數字來表示該文件的使用權限,其語法如下。od 可其中 X、Y、Z 各為一個數字,分別表示 User(用戶)、Group(同組用
17、戶)及 Other(其他用戶)對于該文件的使用權限。對于文件的屬性,r(可讀)=4,w(可寫)=2,x(可執行)=1。對于每一位用戶來說,若要具有 rwx 屬性則對應的位應為 4+2+1=7,若要 rw-屬性則為 4+2=6,若要 r-x 屬性則為 4+1=5。比如下面的例子:其執行結果就是使程序 test 對于用戶可讀、寫、執行,對于同組用戶可讀、執行,對于其他用戶可執行。od 還有一種用法就是使用包含字母和操作符表達式的字符設定法(相對權限設定),通過參數-r、-w、-x 來設定權限,這里不再詳細地介紹。改變文件/目錄的所例如#n TH File1將當前目錄下的文件 File 改為用戶 T
18、H 所有。#n -R THDir1將當前目錄 Dir1 改為用戶 TH 所有。用戶管理添加/刪除用戶# adduseruser1,由具有 root 權限的用戶添加用戶 user1; # userdeluser2,由具有 root 權限的用戶刪除用戶 user2;設置用戶口令為了更好地保護用戶賬號的安全,Linux 允許用戶隨時修改自己的口令。修改口令令是 passwd,它將提示用戶輸入舊口令和新口令,之后還要求用戶再次確認新口令,以避免用戶無意中按錯鍵。文件的打包和壓縮先來看一下 Linux 下打包命令。Linux 下最常用的打包程序就是 tar(tarchive-磁帶存檔),使用 tar 程
19、序打出來的包都是以.tar 結尾的。Tar 命令可以為文件和目錄創建(備份中改變文件,或者向中加入新的文件。使用 tar 命令,可以把一大文件),也可以在堆的文件和目錄全部打包成一個文件,這對于備份文件或將幾個文件組于傳輸是非常有用的。其語法如下。為一個文件以便# tar 選項f文件/目錄file.tarn -R 用戶名 文件/目錄#od 751 /home/TH/test#od XYZ 文件遠見培訓http:.cn選項后面的 f 是必須的,通常用來指定包的文件名。注意選項說明如下。c:創建新的例如:文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。將/home/tmp 目錄下的文件
20、打包為 test.tarr:增加文件到已有的包,如果發現還有一個目錄或是一些文件忘記備份了,這時可以使用該選項,將還需要的目錄或文件添加到包文件中,例如:該命令將所有的 jpg 文件添加到 test.tar 包里面去。-r 是表示增加文件的意思。t:列出包文件的所有內容,查看已經備份了哪些文件。例如:x:從 tar 包文件中恢復所有文件,事實上是一個解包的過程。例如:k:保存已經存在的文件。例如把某個文件還原,在還原的過程中,遇到相同的文件,不會進行覆蓋。w:每一步都要求確認。tar 命令還有一個非常重要的用法,這就是 tar 可以在打包或解包的同時調用其他的壓縮程序(如 gzip、bzip2
21、)來壓縮文件。打包和壓縮是兩個不同的概念。注意Linux 下的壓縮文件主要有以下幾種格式。press 程序的壓縮格式;.bz2-bzip2 程序的壓縮格式;.gz-gzip 程序的壓縮格式;.tar.gz-由 tar 程序打包,并且經過 gzip 程序的壓縮,是 Linux 下常見的壓縮文件格式;.tar.bz2-由 tar 程序打包,并且經過 bzip2 程序的壓縮。以下就幾種常用的情況進行說明。調用 gzip 程序來壓縮文件gzip 是 GNU 組織開發的一個壓縮程序,gzip 壓縮文件的后綴是.gz,與 gzip 相對的解壓程序是 gunzip。tar 中使用-z 這個參數來調用 gzi
22、p。下面舉例說明。# tar czf test.tar.gz *.jpg# tar -xf test.tar# tar -tf test.tar# tar -rf test.tar *.jpg# tar -cf test.tar /home/tmpLinux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境這條命令是將當前目錄下的所有.jpg 文件打成一個 tar 包,并且將其用 gzip 程序壓縮,生成一個 gzip 壓縮過的包,壓縮包名為 test.tar.gz,解開該壓縮包的用法如下。調用 bzip2 程序來壓縮文件bzip2 是 Linux 下的一個壓縮能力更強的壓縮程序,
23、bzip2 壓縮文件的后綴是.bz2,與 bzip2相對應的解壓程序是bunzip2。tar 中使用-j 這個參數來調用 gzip 壓縮程序。例如:該命令是將當前目錄下所有.jpg 的文件打成一個 tar 包,并且將其用 bzip2 程序壓縮,生成一個 bzip2 壓縮過的包,壓縮包名為 test.tar.bz2,解開該壓縮包的用法如下。(5)rpm 軟件包的安裝在使用任何操作系統的過程中,安裝和卸載軟件是必須的操作。Linux 中有一套軟件包管理器,最初由 Red Hat 公司推出,稱為 rpm(Red Hat Package Manager),它可以用來安裝、查詢、校驗、刪除、更新 rpm
24、 格式的軟件包。rpm 軟件含可執行的二進制程序和該程序運行時所需要的文件,rpm 格式的軟件包文件使用.rpm 為擴展名。與直接從源代碼安裝相比,軟件包管理易于安裝、更新和卸載軟件,也易于保護配置已安裝文件。安裝 rpm 軟件包的主要格式如下。rpm 命令主要有以下參數。i:安裝 rpm 軟件包。 t:測試安裝。h:安裝時輸出 hash 記號(#),可以顯示安裝進度。 f:忽略安裝過程中的任何錯誤。U:升級安裝 rpm 軟件包。 e:卸載已安裝的軟件包。V:檢測軟件包件是否正確安裝。以安裝 develop-devel-0.9.2-2.4.5.i386.rpm 軟件包為例,圖 3.4 顯示了它
25、的安裝過程。#rpm ioptions softwarm# tar xjf test.tar.bz2# tar -cjf test.tar.bz2 *.jpg# tar xzf test.tar.gz遠見培訓http:.cn圖 3.4 rpm 軟件包安裝示例如圖 3.4 所示,系統提示的#號就表示軟件安裝進度,當后面的的百分比數字為 100%時表示軟件安裝完成。(6)源碼diff 命令diff 命令是生成源代碼補丁的必備工具,其命令格式如下。diff命令行選項源文件 新文件diff 命令常用選項如下。基本命令-r:遞歸處理相應目錄。-N:包含新文件到 patch。-u:輸出格式(unified
26、 format),這種格式比缺省格式更緊湊些。-a:可以包含二進制文件到 patch。通常可以使用 diff 命令加參數-ruN 來比較 2 個文件并生成一個補丁文件。這個補丁文件會列出這 2 個不同版本文件的差異。比同,現在來創建補丁文件。2 個文本文件:text1 和 text2,二者內容不盡相這樣就創建好了補丁文件 test.patch,補丁創建好以后需要給相應文件/程序打好補丁,這里就要用到 patch 命令。patch命令行選項patch 文件 patch 的詳細使用方法可參見 patch 的 man help,常用例如采用下面的指令來打好補丁。令行選項是-pn(n 是自然數),-p
27、1 選項代表 patch 文件名左邊目錄的層數,考慮到頂層目錄在不同的系統上可能有所不同。要使用這個選項,就要把 patch 文件放在要被打補丁的目錄下,然后在這個目錄中運行path -p1 patchfile命令。rootlocalhostpatch -p1 test.patchLinux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境(7)配置、編譯、安裝源碼包軟件所謂源碼包軟件,顧名思義,就是源代碼的可見的軟件包,在 Linux 系統下也經常需要用到源碼包軟件。大多數的源碼軟件包是以 tar.gz 或 tar.bz2 的形式得到的,所以在配置和編譯之前需要將軟件包解壓縮,具
28、體的做法已經面提到過。配置、編譯、安裝的過程大多如下所示。./configure 用來配置軟件的功能,./configure 比較重要的一個參數是-prefix,通過使用-prefix 參數,可以指定軟件的安裝目錄;比如可以指定軟件安裝到/homet/tmp 目錄中,可以執行如下的指令。(8)中斷 S命令執行的方法在 Linux 系統下,一旦出現了 S提示符,就可以鍵入命令名稱及命令所需要的參數。S將執行這些命令。如果在執行過程當中想終止命令執行,可以從鍵盤上按 Ctrl+C 發出中斷信號來中斷它。模塊管理指令Linux 內核采用模塊化管理方式,這是 Linux 內核的一大特點,這也使得 Li
29、nux 整體結構非常靈活,編于精簡。insmod(添加模塊)指令Linux 有許多功能是通過模塊的方式,在需要時才載入 kernel。如此可使 kernel 較為精簡,進而提高效率,以及保有較大的彈性。這些可動態加載的模塊,通常是系統的設備驅動程序。加載模塊采用 insmod 指令,其常用語法如下。insmod -fkmpsvxX -o 模塊文件其中的參數解釋如下。-f:查目前 kernel 版本與模塊編譯時的 kernel 版本是否一致,強制將模塊載入。-k:將模塊設置為自動卸載。-m:輸出模塊的載入信息。-p:測試模塊是否能正確地載入 kernel。-s:將所有信息在系統文件中。-v:執行
30、時顯示詳細的信息。-x:要匯出模塊的外部符號。-X:匯出模塊所有的外部符號,此為預設置。rmmod(卸載模塊)指令Linux 把系統的許多功能編譯成一個個單獨的模塊,待有需要時再分別加載它們,如果#./configure -prefix=/home/tmp # make# make install#./configure # make# make install遠見培訓http:.cn不再需要這些模塊的時候,就可以使用 rmmod 命令來卸載這些模塊。其語法如下。rmmod -as 模塊名稱其使用參數說明如下。-a:刪除所有目前不需要的模塊。-s:把信息輸出至 syslog 常駐服務,而非終端
31、機界面。3.1.3編寫 S在 Linux 系統中,雖然有各種各樣的圖形化接口工具,但是 S仍然是一個非常靈活的工具。S不僅僅是命令的執行,而且是一種編程語言,它提供了定義變量和參數段以及豐富的程序控制結構。由于 S特別擅長系統管理任務,尤其適合那些易用性、可性和便攜性比效率更重要的任務,所以用戶可以通過使用 S使大量的任務自動化,就像使用 DOS 操作系統的過程當中,會執行一些重復性令。因此這些大量的重復性命令寫成批處理命令,通過執行這個批處理命令來代替執行重復性令。在 Linux 系統中也有類似的批處理命令,被稱作是 S(Script)。前面已經提到 S也是一種解釋性的語言,而解釋執性的語言
32、的與編譯型語言(如 C 語言)的最大不同就在于它們編寫起來很方便,也很快捷,可以說,使用 S來完成一些特定的常用的任務是一個不錯的選擇。1建立編輯 S文件使用 Linux 下的普通編輯器如 vi、Emacs 等即可。Linux 下的 S默認采用 Bash,所以本書也主要以 Bash為例介紹,在建立 S程序的開始首先應指明使用哪種 S來解釋所寫的,一般來說 Bash以#!開頭(文件的首行),而#!后面同時要將所使用 S的路徑明確,比如 Bourne S的路徑為/bin/sh,而 C S的路徑則為/bin/csh,Linux 下默認采用 Bash,所以本書也主要以 Bash為例介紹,下面的語句就是
33、指定 Bash 來解釋。該語句說明該文件是一個 Bash 程序,需要由/bin 目錄下的 Bash 程序來解釋執行。除了在想用 C S內指定所使用的 S類型以外,使用過程中也可以在命令行中強制指定。比如執行某個,就可以使用以下命令。為了增加程序的可讀性,S語句也可以像高級語言那樣加注釋,在 Bash程序中從“#”號開始到行尾的部分均被看作是程序的注釋語句。2S變量S編程中可以使用變量,這充分體現了它的靈活性。對 S來講,所有變量的取值都是一個字串。S中主要有以下幾種變量:系統變量,環境變量,用戶變量。其中用戶變量在編程過程中使用頻繁;系統變量在對參數判斷和命令返回值判斷會使用;環境變量# cs
34、h Myscript#! /bin/shLinux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境主要是在程序運行的時候需要設置。此外,S的執行并不需要編譯,所以也就不需用檢查中變量的類型,因此在 S定義。中使用變量不必像高級語言那樣事先對變量進行S系統變量以下是一些常用到的 S系統變量及其含義。$ # :$ ? :保存程序命令行參數的數目。保存前一個命令的返回值。在Linux 中,命令退出狀態為 0 表示該命令正確執行,任何非 0 值表示命令出錯。注意$ 0$ *:當前程序名。以($1 $2)的形式保存所有輸入以($1$2)的形式保存所有輸入令行參數。令行參數。$ :$ n :
35、$1 為命令行的第一個參數,$1 為命令行的第二個參數,依次類推。舉一個針對以上系統變量使用的例子,使用 vi 編輯一個Script,其內容如下。文件,文件名為 Example在命令行中執行該# ./Example Script程序:o Linux命令行中的o Linux 是其參數,該程序執行結果如下。SS環境變量環境變量是所有 S程序都會接受的參數。S程序運行時,都會接收一組變量,這組變量就是環境變量,常用的 S環境變量如下。PATH:決定了 S將到哪些目錄中尋找命令或程序。HOME:當前用戶主目錄的完全路徑名。HISTSIZE:歷史數。LOGNAME:當前用戶的登錄名。HOSTNAME:指
36、主機的名稱。S:S路徑名。LANGUGE:語言相關的環境變量,多語言可以修改此環境變量。The No. of parameter is:2The script name is:./ Example ScriptThe parametershe script are:o Linux#!/bin/sh# Script name: Example Scriptecho The No. of parameter is: $#; echo The script name is:$0;echo The parametershe script are:$*;遠見培訓http:.cn:當前用戶的郵件存放目錄。
37、PS1:主提示符,對于 root 用戶是#,對于普通用戶是$。PS2:輔助提示符,默認是“”。 TERM:終端的類型。PWD:當前工作目錄的絕對路徑名。S用戶變量S用戶變量是最常使用的變量,可以使用任何不包含空格字符的字串來當做變量名稱,在 Linux 支持的所有 S中,都可以用賦值符號(=)為變量賦值,在使用 S用戶變量的時候,通常是按照下面的語變量名=變量值例如:則來定義用戶變量。在定義變量時,變量名前不應加符號$,等號兩邊一定不能留空格。注意變量的,要在變量前加$,例如:下面舉一個非常簡單的例子來說明。上面的例子很簡單,定義了一個變量 SR,并且賦值給 SR,然后在終端輸出 SR 的值。
38、3流制同傳統的編程語言一樣,S提供了很多特性,如數據變量、參數傳遞、判斷、流制、數據輸入和輸出、子程序及以中斷處理等。(1)條件語句同其他高級語言程序一樣,復雜的 S程序中經常使用到分支和循環控制結構,主要有 2 種不同形式的條件語句:if 語句和 case 語句。if 語句if 語句的語法格式如下。if expresthen#! /bin/bash# This is a example SR=o World echo $STRS=stringecho $SA=9B=o WorldLinux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境case 語句case 語句的語法格式如下
39、。case 語句是多分支語句,它按“)”左邊的模式對字符串值的匹配來執行相應令,匹配總是由上而下地進行,總是執行首先匹配到的模式對應令表,如果模式中的每個都匹配不到,則什么也不執行,所以一般會在最后,放一個*),代表以上都不匹配的任意字符串。;表示該模式對應循環語句while 循環語句在 while 循環語句中,當某一條件為真時,執行指定令部分程序。令。語句的結構如下。for 循環語句for 循環語句對一個變量的可能的值都執行一個命令序列。賦給變量的幾個數值既可以在程序內以數值列表的形式提供,也可以在程序以外以位置參數的形式提供。for 循環語句的一般格式如下。for變量名 in 列表 dod
40、1 d2donewhile expres doddonecase 字符串 in模式 1)d;模式 2)d;esacds1/ expres為True 時的動作elseds2/ expres為False 時的動作fi.遠見培訓http:.cn4S的執行S是以文本方式的,而非二進制文件。所以 S必須在 Linux 系統的S下解釋執行。如果已經寫好 S,運行該可以有以下的幾種方法。(1)設置好的執行權限之后再執行可以使用下列方式設置的執行權限。od u+x Scriptname 只有自己可以執行,其他人不能執行;od ug+x Scriptname 只有自己以及同一群可以執行,其他人不能執行;od +
41、x Scriptname 所有人都可以執行。設置好執行權限之后就可以執行可按下面的方式來執行。程序了,例如,編輯好一個程序 MyScript 之后,(2)使用 Bash 內部指令source例如下面的執行過程:(3)直接使用 sh 命令來執行例如:后面的兩種情況不必設置權限即可執行。注意3.1.4正則表達式正則表達式源于人類神經系統如何工作的早期。在 19 世紀 60 年代,一位叫 StephenKleene 的數學家了一篇標題為“神經網事件的表示法”的,正式引入了正則表達式的概念。正則表達式就是他稱為“正則集的代數”的表達式,因此采用“正則表達式”這個術語,此后,正則表達式的第一個實用應用程
42、序就是 Unix 中的 qed 編輯器。在 S編程中經常會用到正則表達式(regular expres),簡單地講,正則表達式是一種可以用于模式匹配和替換的有效工具。正則表達式描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。使用 S時,從一個文件中抽取多于一個字符串有時會很不方便,而使用正則表達式可以方便快捷地解決這一問題。正則表達式由普通字符(例如字符 a 到 z)以及特殊字符(稱為特殊字符)組成特定文字模式。當從一個文件或命令中抽取或者過濾文本時,使用正則表達式可以簡化命令中的匹配表達。Linux 系統自帶的所有文本過濾
43、工具在某種模式下都支持正則表達式,正則表達式可以匹配行首與行尾、數據集、字母和數字以及一定范圍內的字符串集合,在進行匹配時,localhostzxq# sh Myscriptlocalhostzxq# source Myscriptlocalhostzxq#od +x MyScriptlocalhostzxq# ./MyscriptLinux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境正則表達式有一組基本特殊字符,其基本的特殊字符及其含義如表 3.1 所示。表 3.1正則表達式特殊字符及其含義續表下面舉幾個簡單的例子來說明。1行首和行尾的匹配在 Bash 中使用正則表達式時,
44、可以使用和$來分別匹配行首和行尾的字符或字符串,比如下面的正則表達式。abc.該表達式的含義是在每行開始任意匹配 4 個字符,之后必須是字符 abc,行尾匹配任意的 3 個字符,那么該表達式與下面各個字符串的匹配結果如下。Gyftabc123457853abcpoi 85fabc0k8不匹配(行尾不匹配)匹配不匹配(行首不匹配)2 和指定次數的匹配括號 用來匹配特定字符串和字符串集合,可以用逗號將要匹配的不同字符串分開,用 “-”符號表示匹配字符串的范圍,例如,想要匹配任意的字母和數字,可以使用下面的正則表達式。A-Z,a-z,0-9*號可以匹配單字符 0 次或多次,例如下面的字符串都可以與表
45、達式 Des*k 匹配。Desk Dessk Dessskl使用*可匹配所有匹配結果任意次,如果要指定匹配的次數,就應使用 用法,使用有 3 種模式。patternn 匹配模式出現 n 次。特 殊 字 符代 表 含 義.用來匹配任意的單字符Patternn用來匹配 pattern面出現的次數,n 即為次數Patternn,用來匹配前面 pattern 出現的次數,次數最少為 nPatternn,m用來匹配前面 pattern 出現的次數,次數在 n 和m 之間特 殊 字 符代 表 含 義只匹配行首$只匹配行尾*單字符后跟*將匹配 0 個或者多個此字符 匹配 內的字符,可以是單個字符也可以是字符
46、序列轉義字符,用來一個字符的特殊含義遠見培訓http:.cnpatternn, 匹配模式出現至少 n 次。patternn, m 匹配模式出現次數在 n 到 m 次之間,n, m 為 0255 中的任意整數。例如表達式G2H、G2,H、G2,3的匹配結果分別如下。GGHGG(.,多個 G)H GGH,GGGH3使用反斜杠來一個特殊字符的含義有時在進行文本過濾或抽取的時候,所要匹配的字符本身就是特殊字符,但并沒有特殊的含義,為了將二者區分開來,就需要用到反斜杠來轉義該字符(也稱轉義符)。比如要匹配包含“*”的字符串,而“*”是一個特殊字符,因此需要操作。*這樣的表示方式就認為*是一個特殊的字符,
47、再比如要匹配包含“”的語句,可以如下表示。它的特殊含義,就可以如下反斜杠將的特殊含義,在這里只是代表一個普通字符。構造正則表達式的方法和創建數學表達式的方法一樣,采用多種元字符與操作符將一些基本的表達式組為功能更復雜的正則表達式,其組成元素可以是單個的字符、字符集、字符或數字的范圍、字符間的選擇或者所有這些元素的任意組合。表 3.2 是常用到的一些正則表達式。表 3.2常用正則表達式特及其含義表 達 式代 表 含 義只匹配行首$只匹配行尾 STR匹配以 STR 作為行的開頭SsignalL匹配單詞 s i g n a l、Signal、s i g n a L、SignaLUSER$匹配只包含
48、USER 的行d.x.x.x匹配對用戶、用戶組和其他用戶組成員都有可執行權限的目錄.*0用來匹配 0 之前或之后加任意字符$用來匹配空行.*$用來匹配行中任意字符串a-za-z*至少一個小寫字母0-0A-Za-z匹配非數字或字母(大小寫均可)i I n N匹配大寫或小寫的 i/n .匹配帶句點的行 0 0 0 * 匹配 0 0 0 或個 0Linux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境3.1.5程序編輯器編輯器是系統的重要工具之一,在系統中,編輯器都是必不可少的部件。Linux系統提供了一個完整的編輯器系列,如 Ed、Ex、Vi 和 Emacs 等,按功能它們可以分為
49、兩大類。行編輯器(如 Ed、Ex)全屏幕編輯器(如 Vi、Emacs)行編輯器每次只能對一行進行操作,使用起來不是很方便。而全屏幕編輯器可以對整個屏幕進行編輯,用戶編輯的文件直接顯示在屏幕上,修改的結果可以立即看出來,克服了行編輯方式存在的一些缺點,便于用戶學習和使用。Vi(Visualerface)和 Emacs(Editing withMACroS)是 Linux 下主要的 2 個編輯器,下面的內容主要就 Vi 的使用做詳細的介紹。Vi 編輯器最初是由 Sun Microsystems 公司的 Bill Joy 在 1976 年開發的。一開始 Bill 開發了 Ex 編輯器,后來開發了 V
50、i 作為 Ex 的 visualerface,也就是說 Vi 允許一次能看到一屏的文本而非一行,Vi 也因此得名。隨術的不斷進步,基于 Vi 的各種變種版本不斷出現,其中,移植特性最好,使用最廣泛的當屬 Vim 編輯器,相比早期的 Vi,Vim 編輯器增加的一項最重要的功能便是多級撤銷,Vi 只支持一級撤銷。目前,Vi/Vim 已經是 Linux 下用的最普遍的文本處理器之一,Vi 也是 Linux 下的第一個全屏幕交互式編輯程序,使用非常普遍,Vi 沒有菜單,只有命令,且命令繁多,但是一旦掌握了 Vi 的用法,就可以體會到它的強大功能。它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,
51、而且用戶可以根據自己的需要對其進行定制,這是其他編輯程序所沒有的。在終端下m 命令就可以看到 Vi 的界面了,如圖 3.5 所示。.*匹配只有一個字符的行遠見培訓http:.cn圖 3.5 Vi 界面Vi 有 3 種基本工作模式:指令行模式、文本輸入模式、末行模式,它們的相互關系如圖3.6 所示。圖 3.6 Vi 的模式切換關系下面分別來介紹這 3 種模式。1指令模式(d mode)指令模式主要使用方向鍵移動光標位置以進行文字的編輯,在輸入模式下按【Esc】鍵或是在末行模式輸入了錯誤命令,都會回到指令模式,表 3.3 列出了其常用操作命令及含義。表 3.3vi 指令模式命令及其含義操 作 命
52、令實 現 功 能0光標移至行首h光標一格l光標右移一格j光標向下移一行k光標向上移一行$ + A將光標移到該行最后PageDn向下滾動一頁PageUp向上滾動一頁d+方向鍵刪除文字dd刪除整行指令錯誤返回: 進入末行模式末行模式(Last line Mode)ESC 返回指令模式a、i、o輸入模式文本輸入模式(Input Mode)指令模式(Commmand Mode)Linux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境2文本輸入模式在 vim 下編輯文字,不能直接、替代或刪除文字,而必須先進入輸入模式。要進入輸入模式,可以在指令模式下按【a/A】鍵、【i/I】鍵或【o/O
53、】鍵,它們3.4 所示。令及其含義如表表 3.4文本輸入模式命令及其含義結束文本輸入模式必須用【Esc】鍵。注意3末行模式末行模式主要用來進行一些文字編輯輔助功能,比如字串搜尋、替代、保存文件等,表3.5 介紹一些常用令。表 3.5末行模式命令及其含義大多數時候,可用命令如:Vi filename 來打開文件 filename,Vim 以編輯或打開某個文件。下面以編輯一個簡單程序為例介紹 Vi 的簡單使用方法,其主要流程如下。在終端輸入命令用 Vi 建立文件(可以是文本文件、CC+程序等)# vi Script_edit操 作 命 令實 現 功 能:q結束 Vi 程序,如果文件有過修改,先保存
54、文件:q!強制退出 Vi 程序:wq保存修改并退出程序:set nu設置行號操 作 命 令實 現 功 能a在光標后開始A在行尾開始i從光標所在位置前面開始I從光標所在列的第一個非空白字元前面開始o在光標所在列下新增一列并進入輸入模式O在光標所在列上方新增一列并進入輸入模式Esc返回命令行模式pp整行r修改光標所在字符S刪除光標所在的列,并進入輸入模式遠見培訓http:.cn輸入該命令之后就進入了 Vi 的編輯界面,如圖 3.7 所示。圖 3.7 Vi 編輯界面此時的 Vi 是指令模式,輸入“:set nu”來設置行號,此時屬于末行模式,末行模式不能直接切換到文本輸入模式,需要先切換到指令模式,
55、按【Esc】鍵進入指令模式。輸入“i”進入輸入模式。在指令模式下輸入“i”進入文本輸入模式,并編輯文本內容,如圖示。保存、修改編輯內容并退出 Vi 程序。在輸入模式下編輯并修改相應內容,編輯好之后需要再返回到指令模式(Esc),之后輸入“:wq”就可以保存并且退出剛才的編輯程序了。3.2Makefile3.2.1GNU makeGNU make 最初是 Unix 系統下的一個工具,設計之初是為了C 程序文件不必要的重新編譯,它是一個自動生成和目標程序的工具。在使用 GNU 的編譯工具進行開發時,經常要用到 GNU make 工具。使用 make 工具,可以將大型的開發項目分解成為多個更易于管理
56、的模塊,對于一個包括幾百個源文件的應用程序,使用 make 和 Makefile 工具就可Linux 系統開發技術詳解基于 ARM第 3 章、linux 編程環境以高效的處理各個源文件之間復雜的相互關系,進而取代了復雜令行操作,也大大提高了應用程序的開發效率,可以想到的是如果一個工程具有上百個源文件時,但是采用命令行逐個編譯那將是多么大的工作量。使用 make 工具管理具有多個源文件的工程,其優勢是顯而易見的,舉一個簡單的例子,如果多個源文件中的某個文件被修改,而有其他多個源文件依賴該文件,采用手工編譯的方法需要對所有與該文件有關的源文件進行重新編譯,這顯然是一件費時費力的事情,而如果采用 m
57、ake 工具則可以避免這種繁雜的重復編譯工作,大大地提高了工作效率。make 是一個解釋 Makefile 文件中指令令工具,其最基本的功能就是通過 Makefile文件來描述源程序之間的相互關系并自動編譯工作,知系統以何種方式編譯和鏈接程序。一旦正確完成 Makefile 文件,剩下的工作就只是在 Linux 終端下輸入 make 這樣的一個命令,就可以自動完成所有編譯任務,并且生成目標程序。通常狀況之下 GNU make 的工作流程如下。查找當前目錄下的 Makefile 文件初始化文件中的變量分析 Makefile 中的所有規則為所有的目標文件創建依賴關系根據依賴關系,決定哪些目標文件要
58、重新生成執行生成命令為了比較形象地說明 make 工具的工作原理,舉一個簡單的例子來介紹。假定一個項目中有以下一些文件。源程序:Main.c、test1.c、test.c。包含的頭文件:head1.h、head2.h、head3.h。由源程序和頭文件編譯生成的目標文件:Main.o、test1.o、test2.o。由目標文件生成的可執行文件:test。 這些不同組成部分的相互依賴關系如圖 3.9所示。在該項目的所有文件當中,目標文件 Main.o 的依賴文件是 Main.c、head1.h、head2.h;test1.o 的依賴文圖 3.9 依賴關系件是 head2.h、test1.c;目標文
59、件 test2.o 的依賴文件是 head3.h、test2.c;最終的可執行文件的依賴文件是 Main.o、test1.o 和 test2.o。執行 make 命令時,會首先處理 test 程序的所有依賴文件(.o 文件)的更則,對于.o 文件,會檢查每個依賴程序(.c 和.h 文件)是否有更新,判斷有無更新的依據主要看依賴文件的建立時間是否比所生成的目標文件要晚,如果是,那么會按規則重新編譯生成相應的目標文件,接下來對于最終的可執行程序,同樣會檢查其依賴文件(.o 文件)是否有更新,如果有任何一個目標文件要比最終可執行的目標程序新,則重新生成新的可執行程序,所以,make 工具管理項目的過
60、程是從最底層開始的,是一個逆序遍歷的過程。從以上的說明就能夠比較容易理解使用 make 工具的優勢了,事實上,任何一個源文件的改變都會導致重新編譯、生成可執行程序,使用者不必關心哪個程序改變、或者依賴哪個文件,make 工具會自動完成程序的重新編譯和工作。遠見培訓http:.cn執行 make 命令時,只需在 Makefile 文件所在目錄輸入 make 指令即可,事實上,make命本身可帶有這樣的一些參數:【選項】、【宏定義】、【目標文件】。其標準形式如下。Make 選項 宏定義 目標文件Make 命令的一些常用選項及其含義如下。-f file:指定 Makefile 的文件名。-n:打印出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年(下)第一次階段性檢測高二語文(學科)-學生用卷
- 疫情防控員協議合同協議
- 電動自行車租賃合同協議
- 申請長期無固定合同協議
- 環境咨詢服務合同協議
- 白酒合作經營合同協議
- 電腦維修協議合同書
- 電子商務行業合同協議
- 電商平臺售票合同協議
- 電線來料加工協議合同
- 2024年全球及中國通信用氮化鋁陶瓷基板行業頭部企業市場占有率及排名調研報告
- 湖北省武漢市2025屆高中畢業生四月調研考試物理試卷(含答案)
- 2024年護士資格證考試內外科基礎護理試題及答案
- 慢性病管理的重要試題及答案
- 業務轉讓合同協議
- 銷售差價提成管理制度
- 《東歐社會主義國家的改革與演變》社會主義國家的改革與演變化課件-2
- 2025-2030中國口服輪狀病毒疫苗行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025年鄭州鐵路職業技術學院單招職業傾向性測試題庫必考題
- 2025年許昌職業技術學院單招職業技能測試題庫及答案一套
- 2025年安陽職業技術學院高職單招語文2019-2024歷年真題考點試卷含答案解析
評論
0/150
提交評論