版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第八章shell編程
作為系統(tǒng)管理員經(jīng)常需要編寫一些配置文件和shell腳本文件以提高系統(tǒng)管理的效率,例如,成批地添加、刪除用戶,對(duì)系統(tǒng)中的文本文件進(jìn)行簡單處理等;作為嵌入式系統(tǒng)軟件開發(fā)者或C程序員為了編譯與調(diào)試原程序也需要編寫shell腳本程序。8.1vi編輯器
配置文件和shell腳本文件等都是文本文件,對(duì)它們都需要使用文本編輯器進(jìn)行編輯處理。在Linux系統(tǒng)中有許多種文本編輯器,其中既有字符界面如的vi、emacs等,也有圖形界面的如“附件”菜單項(xiàng)下的“文本編輯器(gedit)”等,用戶可以根據(jù)自己的喜好選擇使用,但是對(duì)于學(xué)習(xí)使用Linux系統(tǒng)的用戶一般都會(huì)學(xué)習(xí)vi編輯器的用法。8.1.1vi簡介
執(zhí)行vi命令時(shí),在CentOS7系統(tǒng)中實(shí)際上是執(zhí)行vin(ViIMproved)程序,它是傳統(tǒng)vi的增強(qiáng)版本,也是Linux系統(tǒng)的全屏幕交互式文本編輯器。vi自誕生起以其強(qiáng)大的功能備受用戶青睞,雖然以后Linux系統(tǒng)中又推出了許多種類的文本編輯器,而且就使用的方便性而言要比vi編輯器好,但是vi編輯器仍然在廣泛使用,這主要的原因是:第一,在有些情況下系統(tǒng)中能夠找到的編輯器只有vi;第二,它的功能強(qiáng)大,用戶一旦熟悉后,使用非常方便;第三,作為系統(tǒng)管理員使用正則表達(dá)式可以極大地提高工作效率,而學(xué)習(xí)vi則是掌握正則表達(dá)式的有效途徑。
編輯器vi可以編輯各種無格式的文本文件,尤其便于編輯原程序。它可以實(shí)現(xiàn)輸入、查找、替換、刪除和塊操作等許多基本的文本操作功能,而且用戶可以根據(jù)自己的需要對(duì)其進(jìn)行定制,以符合自己的習(xí)慣。在vim中,還有一些增強(qiáng)的功能,如撤消多行輸入、參數(shù)高亮顯示、命令行編輯和支持圖形方式vi(gvim)的多窗口、多緩沖功能等。由于vi是交互式的文本編輯器,它沒有菜單,只有命令,而且命令非常多,所以很多初學(xué)者使用不習(xí)慣,但是在掌握了它的使用訣竅后很快會(huì)喜愛上它。在vi中有三種工作模式:文本編輯模式、命令模式和行編輯模式。其中,文本編輯模式要工作在插入狀態(tài)下,而行編輯模式實(shí)際上也是命令模式的一種,只不過它需要在命令模式下先輸入“:”后再輸入命令而已(所以也有些書認(rèn)為是兩種工作模式)。用戶可以根據(jù)需要,通過一些命令在這三種模式之間自由地切換,而大多數(shù)命令就是該操作的英文單詞的第一個(gè)字母。另外,vi只是一個(gè)文本編輯器,它不是排版軟件,所以它不能像word那樣可以對(duì)文檔中的字體、格式和段落等屬性進(jìn)行編輯,這是由它的用途而決定的。用戶如果需要編輯文檔,請(qǐng)使用Linux系統(tǒng)中其他的文檔編輯軟件。在vi中對(duì)文本文件所做的修改將被存放到內(nèi)存緩沖區(qū)中,只要用戶不輸入存盤命令,那么隨時(shí)都可以放棄這些修改。一般情況下,文件在存盤時(shí)vi不會(huì)自動(dòng)保存?zhèn)浞菸募?;但是在打開文件時(shí)Linux系統(tǒng)會(huì)在磁盤相關(guān)目錄下自動(dòng)創(chuàng)建擴(kuò)展名為.swp的文件,這個(gè)文件也稱為交換文件,如果由于某些原因,如編輯崩潰、系統(tǒng)斷電或非法關(guān)機(jī)等操作時(shí),該文件就作為備份文件使用,用戶在下次啟動(dòng)系統(tǒng)時(shí)會(huì)在自己的主目錄下收到相關(guān)郵件,由用戶決定是否通過命令來恢復(fù)該文件。以上簡要介紹了使用vi的原因、vi的工作模式和特點(diǎn);本書是從系統(tǒng)應(yīng)用的角度來說明vi的使用方法,對(duì)vi的用法不打算也沒有必要做全面的介紹,如果讀者有需要可以查閱vi幫助手冊(cè)或者其他的參考書籍。另外,由于vi的版本不同,其命令格式、功能和用法會(huì)有一些差別,本書介紹的vi(vim)是6.1.320版本。8.1.2vi的啟動(dòng)與退出
要學(xué)習(xí)vi軟件的用法,當(dāng)然首先要了解如何啟動(dòng)它、如何在編輯完成后退出它。這也是使用某種軟件的最基本操作。8.1.2.1啟動(dòng)啟動(dòng)vi編輯器實(shí)際上就是執(zhí)行vi命令。
命令格式: vi[OPTION]file…
其中,參數(shù)file…是需要編輯的文本文件或文本文件列表,可以是具體的文件名,也可以是包含通配符的文件名,如*.txt或*.c等等。OPTION是可選的命令選項(xiàng),了解這些選項(xiàng)對(duì)于初學(xué)者來說難度較大,而且在多數(shù)情況下即使不使用也沒有什么影響,當(dāng)用戶已經(jīng)熟悉vi時(shí),完全可以通過在線幫助進(jìn)一步學(xué)習(xí)它。
當(dāng)啟動(dòng)vi時(shí),如果指定編輯的文件不存在,則vi將告知用戶這是未命名的文件,并進(jìn)入一個(gè)空白的界面,等待用戶的命令;如果指定編輯的文件存在,則vi顯示該文件的內(nèi)容并等待用戶的命令。因此,無論是編輯新文件還是編輯舊文件,在啟動(dòng)vi時(shí)它都是處于命令模式下,用戶必須使用命令才能切換到文本輸入模式或行編輯模式。8.1.2.2保存與退出
當(dāng)用戶完成編輯、需要退出時(shí),可以先保存所做的修改,保存文件內(nèi)容的命令為:
:w
它是一個(gè)行編輯命令,進(jìn)入行編輯模式一定要在命令模式下先輸入“:”,如果正在編輯文件的屬主是你自己,但你沒有寫權(quán)限時(shí),可以采用強(qiáng)制存盤命令來保存文件內(nèi)容:
:w!
在完成存盤后,vi仍然處于命令模式下,如果需要退出vi,則執(zhí)行:
:q
如果用戶對(duì)文件做了修改,而沒有保存就輸入退出命令,則vi會(huì)提示文件已經(jīng)修改的信息,以提醒用戶注意保存;vi拒絕未存盤就退出的行為,這是為了防止由于疏忽而造成的損失。如果用戶對(duì)文件做了錯(cuò)誤的修改,而不希望保存它。則就要輸入強(qiáng)制退出的命令:
:q!
如果用戶希望保存并退出,則可以輸入:
:wq
如果用戶同時(shí)打開多個(gè)文件編輯,當(dāng)都不需要保存退出時(shí),則可以輸入:
:qa!
在vi中,命令是區(qū)分大小寫的,使用中一定要注意,以上這些命令都是小寫的。8.1.3學(xué)習(xí)vi的訣竅
之所以許多初學(xué)者對(duì)vi敬而遠(yuǎn)之,是因?yàn)樗拿钐嗲译y以記憶,而實(shí)際上真正經(jīng)常使用的命令并不是太多,只要掌握以下幾個(gè)關(guān)鍵點(diǎn)并加以適當(dāng)練習(xí)很快就可以使用vi了,當(dāng)然要全面、熟練地掌握它還需要進(jìn)一步的學(xué)習(xí)。
首先,熟記vi的三種工作模式—文本編輯模式、命令模式和行編輯模式及其切換方式。在文本編輯模式(工作在插入狀態(tài)下)下vi將原樣接受用戶從鍵盤上輸入的字符(ESC字符除外);命令模式下主要完成編輯文件上的光標(biāo)定位、插入、刪除、剪切、粘貼、移動(dòng)、查找與修改文件內(nèi)容等;行編輯模式下主要完成文件的存儲(chǔ)、退出和執(zhí)行shell命令等。當(dāng)需要從文本編輯狀態(tài)切換到命令狀態(tài)時(shí),只需要按下ESC鍵;如果要進(jìn)一步切換到行編輯狀態(tài),則再輸入“:”即可;如果從命令狀態(tài)要切換到文本編輯狀態(tài),則有許多命令,如A、a、I、i、S、s、C、c、O和o命令,如果無法馬上記住這10個(gè)命令,則只要知道添加、插入和刪除等命令都可以使vi由命令狀態(tài)切換到文本編輯狀態(tài)就可以了,另外,也可以直接按鍵盤上的“Ins”鍵進(jìn)入文本編輯模式下的插入狀態(tài),但是這種方式只是完成狀態(tài)之間的轉(zhuǎn)換,并沒有上述某些命令所具有的特殊功能;在行編輯狀態(tài)下只要執(zhí)行的是非退出命令,在命令執(zhí)行完成后vi都會(huì)返回到命令狀態(tài)下。三種狀態(tài)之間的轉(zhuǎn)換關(guān)系如圖8-1所示。圖8-1vi三種模式間的轉(zhuǎn)換關(guān)系
其次,應(yīng)該熟悉光標(biāo)的基本移動(dòng)方法。因?yàn)関i的許多命令都是與光標(biāo)所在的位置相關(guān)的。這里所說的移動(dòng)光標(biāo)并非指通過鍵盤上的光標(biāo)鍵操作,而是使用vi自定義的光標(biāo)鍵,當(dāng)按一次h、j、k和l鍵時(shí),將分別使光標(biāo)向左移動(dòng)一個(gè)字符、向下移動(dòng)一行、向上移動(dòng)一行和向右移動(dòng)一個(gè)字符。讀者可能覺得奇怪,這不是與鍵盤光標(biāo)鍵操作一樣嗎?其實(shí)不然,它們之間的區(qū)別是:vi定義的光標(biāo)鍵可以與命令模式下的命令結(jié)合使用,按用戶的意愿一次向左或向右移動(dòng)多個(gè)字符,向上或向下移動(dòng)多行,而鍵盤光標(biāo)鍵操作是沒有這種效果的;另外,vi定義的光標(biāo)鍵只能在命令模式下使用,而鍵盤光標(biāo)鍵可以在命令模式下移動(dòng)也可以在文本編輯模式下移動(dòng)。vi定義的光標(biāo)鍵可以用圖8-2所示的助記圖來幫助記憶并掌握光標(biāo)移動(dòng)的規(guī)律。文本輸入狀態(tài)命令狀態(tài)行編輯狀態(tài)按ESC鍵按A,I,S,C,O等命令按“:”鍵執(zhí)行非退出命令圖8-2vi光標(biāo)鍵助記圖
第三,先掌握插入和刪除等基本命令。由于vi的命令很多,對(duì)于初學(xué)者而言,剛開始不可能也沒有必要全部掌握這些命令;只要先掌握基本的插入、刪除等命令,就應(yīng)該立即上機(jī)練習(xí)vi的使用,只有通過逐步、大量的練習(xí)才能掌握更多、更復(fù)雜的命令。khlj8.1.4基本命令
在vi編輯器的命令模式下,命令的組成格式是:nnc,其中,字符c是命令,nn是整數(shù)值,它表示該命令將重復(fù)執(zhí)行nn次,如果不給出重復(fù)次數(shù)的nn值,則命令將只執(zhí)行一次。例如,在命令模式下按j鍵表示光標(biāo)向下移動(dòng)一行,而在命令模式下輸入10j則表示光標(biāo)將向下移動(dòng)10行。顯然,這樣比單純移動(dòng)鍵盤光標(biāo)鍵效率要高的多。8.1.4.1定位光標(biāo)
由于文件內(nèi)容的插入、刪除和替換等操作都是針對(duì)光標(biāo)所在的字符或行而言的,因此應(yīng)該熟悉光標(biāo)移動(dòng)的命令和方法,并充分利用命令重復(fù)執(zhí)行的次數(shù)。為了提高文件編輯的效率,vi提供了許多種類的光標(biāo)定位命令:w 將光標(biāo)移動(dòng)到下一個(gè)單詞的第一個(gè)字符。W 將光標(biāo)移動(dòng)到后面第二個(gè)單詞的第一個(gè)字符。e或E 將光標(biāo)移動(dòng)到下一個(gè)單詞的最后一個(gè)字符。b或B 將光標(biāo)移動(dòng)到前一個(gè)單詞的第一個(gè)字符。/string 向后移動(dòng)光標(biāo),并使之停留在字符串string的第一個(gè)字符處。?string 向前移動(dòng)光標(biāo),并使之停留在字符串string的第一個(gè)字符處。$ 將光標(biāo)移動(dòng)到本行的最后一個(gè)字符上。Ctrl+b 將光標(biāo)移動(dòng)到本行的第一個(gè)字符上。其中,w或W命令的差別只在于非空格分隔字符上,w命令視非空格分隔字符為單詞,而W命令則忽略它。當(dāng)使用/string或?string命令時(shí),除了光標(biāo)移動(dòng)到指定的位置外,還使文件中所有符合字符串string的地方高亮顯示,因此,這兩個(gè)命令也是簡單的查找命令。參考示例:將光標(biāo)移動(dòng)到當(dāng)前單詞開始的第十個(gè)單詞的第一個(gè)字符上。在命令模式下輸入10w。8.1.4.2插入或添加
無論是插入還是添加,都是向所編輯的文件中加入新的內(nèi)容,但由于插入可以在光標(biāo)前或當(dāng)前行前,添加可以在光標(biāo)后或當(dāng)前行后,所以vi提供了多種插入和添加命令:i 在光標(biāo)前插入字符。I 在當(dāng)前行的行頭插入字符。a 在光標(biāo)后添加字符。A 在當(dāng)前行的行尾添加字符。o 在當(dāng)前行后添加新行。O 在當(dāng)前行前添加新行。由于這六個(gè)命令都會(huì)使vi編輯器從命令模式切換到文本編輯模式下的插入狀態(tài),所以當(dāng)插入或添加完成后,必須按ESC鍵返回到命令模式下。參考示例:假設(shè)某文本文件如下:nsertadiskin/dev/fd0.Anyinformationonthediskwillbelost.Press<Enter>tocontinueor^Ctoabort:光標(biāo)位于第二行單詞to的“t”字符上,現(xiàn)要在第一行的行首插入字符I。首先,執(zhí)行?on命令,將光標(biāo)移動(dòng)到第一行上(不必移到行首),然后按I鍵,光標(biāo)自動(dòng)轉(zhuǎn)到第一行的行首,并切換到插入狀態(tài),接著輸入字符“I”,當(dāng)插入完成后,按ESC返回到命令模式下。8.1.4.3刪除
刪除文本文件中的內(nèi)容,可以按字符、單詞和行為單位進(jìn)行刪除,因此,也有多個(gè)刪除命令。刪除命令執(zhí)行后將使vi繼續(xù)處于命令模式下。x 刪除光標(biāo)所在位置的字符,且光標(biāo)移動(dòng)到本行的下一個(gè)字符。X 刪除光標(biāo)所在位置的前一個(gè)字符,且光標(biāo)停留在原來的字符上。D 刪除光標(biāo)所在位置到行尾的所有字符,且光標(biāo)停留在本行的行尾。兩次按d 刪除光標(biāo)所在的行,且光標(biāo)移動(dòng)到下一行。先d后w 刪除光標(biāo)所在位置到下一個(gè)單詞的第一個(gè)字符間的所有字符,且光標(biāo)移
動(dòng)到下一個(gè)單詞的第一個(gè)字符。參考示例:假設(shè)某文本文件如下:Forexample,torunajobat4pmthreedaysfromnow,youwoulddoat4pm+3days,torunajobat10:00amonJuly31,youwoulddoat10amJul31andtorunajobat1amtomorrow,光標(biāo)位于from單詞的“f”字符上,要?jiǎng)h除光標(biāo)所在位置到行尾的所有字符。在命令模式下鍵入D命令后,顯示:Forexample,torunajobat4pmthreedays ajobat10:00amonJuly31,youwoulddoat10amJul31andtorunajobat1amtomorrow,可以看到從光標(biāo)原來所在位置開始到行尾的內(nèi)容全部刪除,光標(biāo)停留在行尾的位置。8.1.4.4查找
在文件中查找字符串時(shí),可以向前查找也可以向后查找,因此有兩種命令,其格式為: /expression ?expression
其中,斜杠(/)表示從當(dāng)前光標(biāo)位置開始向后查找,問號(hào)(?)表示從當(dāng)前位置開始向前查找,expression是正則表達(dá)式。如果正則表達(dá)式是字符串且包含:.、^、$、/、~等特殊字符(元字符),則查找包含這些特殊字符的字符串時(shí),一定要在它們每一個(gè)前面加上反斜杠(\)字符以示轉(zhuǎn)義,因?yàn)檫@些字符在vi或Linux中有特定的含義。
當(dāng)向前或向后查找到所需的字符串后,只要按n鍵,vi將繼續(xù)查找下一個(gè)字符串,如果按N鍵則向相反的方向繼續(xù)查找。
參考示例:假設(shè)某文本文件如下:For otherusers,permissiontouseatisdeterminedbythefiles~/yt-3.1.8containstheexactdefinitionofthetimespecification.
查找字符串~/yt-3.1.8,在命令模式下輸入:/\~\/yt-3\.1\.8,注意:要在每一個(gè)特殊字符前都要使用轉(zhuǎn)義字符。當(dāng)找到該字符串后,整個(gè)字符串高亮顯示且光標(biāo)停留在字符串中的第一個(gè)字符上。8.1.4.5修改
在vi編輯器中修改文本文件內(nèi)容的命令主要是刪除指定的字符或行并輸入新的字符,替換指定的字符或行。
s 刪除光標(biāo)所在位置的字符,且光標(biāo)移動(dòng)到下一個(gè)字符上。然后進(jìn)入文本編輯模式下的插入狀態(tài),等待用戶輸入。S 刪除光標(biāo)所在的行,且光標(biāo)仍在本行的行首,然后進(jìn)入文本編輯模式下的插入狀態(tài),等待用戶輸入。兩次按c 與S命令功能相同。C或c$ 刪除光標(biāo)所在位置到行尾的所有字符,且光標(biāo)停留在本行的行尾,然后進(jìn)入文本編輯模式下的插入狀態(tài),等待用戶輸入。r 用r命令后輸入的字符替換當(dāng)前光標(biāo)位置處的字符。一次只能替換一個(gè)字符,如果是相同連續(xù)的字符可以用nnr命令的形式。R 使用該命令會(huì)使vi進(jìn)入文本編輯模式的替換狀態(tài),在屏幕的左下方顯示“REPLACE(替換)”狀態(tài)信息。在這種狀態(tài)下,從當(dāng)前光標(biāo)所在的位置開始,新輸入的字符將逐個(gè)替換原有的字符,直到用戶按下ESC鍵返回到命令模式為止。注意:s、S、C、c$命令是修改命令,它們與x、X、D、d刪除命令不同的地方在于刪除字符或行后vi的工作模式轉(zhuǎn)變,等待用戶插入字符修改。R、r是替換命令,此時(shí)vi是文本編輯模式下的替換狀態(tài)而非插入狀態(tài),輸入的新字符將覆蓋舊字符,所以在輸入時(shí)一定要注意是否覆蓋了不該覆蓋的字符。
參考示例:假設(shè)某文本文件如下:TheTERMsignalwillkillprocesseswhichdonotcatchthissignal.forotherprocesses,itmaybenecessarytousetheKILL(9)signal,sincethissignalcannotbecaught.
將第一行中for的“f”字母由小寫替換為大寫。首先,執(zhí)行/for命令,將光標(biāo)移動(dòng)到該“f”字符上,其次,輸入r命令并緊接著輸入F字符,則替換完成。8.1.4.6剪切與粘貼
在文本文件編輯中,經(jīng)常需要將某處的一個(gè)句子或若干行文本移動(dòng)或復(fù)制到本文件的其他地方,這就需要編輯器有剪切和粘貼的功能。vi中的緩沖區(qū)分為通用緩沖區(qū)和專用緩沖區(qū),在一般情況下,最近一次的抽取、刪除、插入和修改的內(nèi)容都將存放在通用緩沖區(qū)中。利用這些緩沖區(qū)可以非常方便地實(shí)現(xiàn)文本內(nèi)容的剪切和粘貼。兩次按y將光標(biāo)所在行的內(nèi)容復(fù)制到通用緩沖區(qū),該命令也稱為抽取。p 取出通用緩沖區(qū)中的內(nèi)容放在光標(biāo)所在位置的后面,即粘貼。復(fù)制多行可以使用nnyy命令。另外,D、dd、O等刪除、插入命令也是以行為單位將處理的內(nèi)容放入通用緩沖區(qū)的。除了可以使用通用緩沖區(qū)進(jìn)行剪切、粘貼外,vi編輯器也可以使用專用緩沖區(qū)進(jìn)行這些操作。專用緩沖區(qū)的名字采用雙引號(hào)加單個(gè)字母表示。例如,”a,”b等等,同樣在命令模式下輸入”ayy,是將當(dāng)前行的內(nèi)容復(fù)制到專用緩沖區(qū)a中,而輸入”ap則是將專用緩沖區(qū)中的內(nèi)容粘貼到光標(biāo)位置之后。在對(duì)單個(gè)文件編輯的情況下,與通用緩沖區(qū)相比專用緩沖區(qū)沒有什么優(yōu)勢(shì),但是在對(duì)多個(gè)文件編輯時(shí),從當(dāng)前文件切換到下一個(gè)文件時(shí),通用緩沖區(qū)的內(nèi)容會(huì)丟失,而專用緩沖區(qū)的內(nèi)容卻依然存在。因此,當(dāng)需要同時(shí)對(duì)多個(gè)文件進(jìn)行編輯時(shí)才能體現(xiàn)出專用緩沖區(qū)的優(yōu)勢(shì)。參考示例1:將當(dāng)前行開始的4行內(nèi)容向后移動(dòng)8行。
在命令模式下,輸入:4dd8jp移動(dòng)實(shí)際上就是復(fù)制其內(nèi)容后再刪除并在新位置粘貼。其中,命令4dd是刪除4行,vi自動(dòng)將這4行的內(nèi)容保存在通用緩沖區(qū)中;命令8j表示將光標(biāo)向后移動(dòng)8行;命令p表示從通用緩沖區(qū)中取出內(nèi)容,粘貼在光標(biāo)位置后面。由于dd命令使通用緩沖區(qū)的內(nèi)容以行為單位存放,當(dāng)取出緩沖區(qū)的內(nèi)容時(shí),vi將它們粘貼在當(dāng)前行之后。參考示例2:將某文本文件中的兩行復(fù)制到新位置。
在命令模式下,將光標(biāo)移動(dòng)到源文本行的第一行,輸入:2yy其中,2yy表示從當(dāng)前行開始抽取兩行到通用緩沖區(qū)。再將光標(biāo)移動(dòng)到目標(biāo)行的位置后,輸入:p,則完成了兩行的復(fù)制。8.1.4.7撤消操作
使用編輯器的用戶都會(huì)希望有撤消操作的命令,例如,在執(zhí)行了刪除或修改的命令后又想恢復(fù)誤刪除或修改的內(nèi)容。對(duì)于vi編輯器只要在命令模式下按u鍵即可恢復(fù)。這個(gè)命令也稱為恢復(fù)命令,u是undo的縮寫?;謴?fù)命令u可以消除最近多次命令的影響,例如,在添加了一些新內(nèi)容后又用dd命令刪除了文件中的一行,當(dāng)?shù)谝淮伟磚鍵時(shí)恢復(fù)刪除的一行,第二次按u鍵時(shí)去掉添加的內(nèi)容。
恢復(fù)命令u對(duì)大多數(shù)行編輯命令所產(chǎn)生的影響也同樣可以消除。8.1.4.8幾個(gè)特殊命令J命令合并第n行與第n+1行,使用時(shí),將光標(biāo)移動(dòng)到第n行上按J鍵即可。這個(gè)命令用于合并行比直接使用鍵盤操作更高效,注意該命令是大寫的。.命令重復(fù)執(zhí)行前一條操作命令,常用于重復(fù)修改或替換的操作。~命令改變光標(biāo)所在位置字母的大小寫,即大寫變小寫、小寫變大寫,并將光標(biāo)移動(dòng)到下一個(gè)字符上。
這幾個(gè)命令簡單、實(shí)用,在編輯過程中如果使用得當(dāng)可以大大提高編輯的效率。8.1.5行編輯命令
如果要執(zhí)行行編輯命令,需要在命令模式下按冒號(hào)“:”,然后再輸入相應(yīng)的行編輯命令。除了退出vi命令外,行編輯命令將使vi仍然處于命令模式。vi編輯器雖然是全屏幕編輯器,但也支持行編輯,vi中行編輯命令也很多,以下僅介紹幾個(gè)常用的行編輯命令。8.1.5.1行編輯命令的地址在學(xué)習(xí)行編輯命令前先了解行編輯命令中的地址構(gòu)成形式和含義。簡單行用整數(shù)表示,字符圓點(diǎn)(.)表示當(dāng)前行,即光標(biāo)所在行。字符$表示文件的最后行。命令中一般用n、n1、n2等十進(jìn)制數(shù)表示第幾行。例如,要表示從第n1行到第n5行,則用逗號(hào)分隔;規(guī)則是n1在逗號(hào)前,n5在逗號(hào)之后,而且n1不能大于n5。這種表示法是絕對(duì)地址,在vi中也可以采用相對(duì)地址表示,例如,+n代表當(dāng)前行后的第n行,-n代表當(dāng)前行前的第n行;還可以用+、-號(hào)表示算術(shù)運(yùn)算。8.1.5.2執(zhí)行shell命令
用戶在編輯文本文件過程中,如果需要執(zhí)行shell命令,可以在不退出vi的情況下來完成操作。方法是在vi的行編輯模式下執(zhí)行!command_name,當(dāng)該命令執(zhí)行完成后,系統(tǒng)會(huì)提醒用戶按任意鍵返回。例如,執(zhí)行:
:!mount/dev/sda1/mnt
該命令將執(zhí)行掛載usb接口設(shè)備的命令,當(dāng)掛載完成后按任意鍵即可返回vi編輯器中繼續(xù)文本文件的編輯工作。8.1.5.3從文件中讀取
在編輯當(dāng)前文本文件時(shí),如果需要其他文本文件的內(nèi)容,則可以通過行編輯命令來導(dǎo)入。首先,將光標(biāo)移動(dòng)到適當(dāng)?shù)奈恢?,以使?dǎo)入的文件內(nèi)容添加到光標(biāo)所在行后,然后執(zhí)行:
:rfile_name
其中,r為文件導(dǎo)入命令,file_name為要導(dǎo)入文件的文件名。8.1.5.4將指定的內(nèi)容寫入文件
在編輯中如果需要把部分文件內(nèi)容保存到另一個(gè)文件,則執(zhí)行:
:n1,n5wfile_name
其中,n1,n5表示從第n1行到n5行的內(nèi)容保存到文件file_name中,如果是從當(dāng)前行到倒數(shù)第三行,也可以表示為.,$-2;如果該文件存在,則vi將給出“Fileexists”的錯(cuò)誤信息,這時(shí)可以執(zhí)行:
:n1,n5w>>file_name該命令采用附加重定向的方法將指定的文件內(nèi)容添加到一個(gè)已經(jīng)存在文件的尾部。8.1.6vi的特殊選項(xiàng) vi執(zhí)行時(shí)可用的選項(xiàng)很多,只是大多數(shù)選項(xiàng)對(duì)于初學(xué)者實(shí)用性不大,但是其中有些選項(xiàng)卻是重要的;例如,以只讀方式打開文件瀏覽,斷電后恢復(fù)備份文件等。8.1.6.1多文件編輯
當(dāng)啟動(dòng)vi編輯器時(shí),如果不是指定一個(gè)文件,而是給出文件列表,則可以同時(shí)編輯多個(gè)文件。例如:
[root@localhostroot]#vi*.c*.txt 它可以打開當(dāng)前目錄下所有擴(kuò)展名為.c和.txt的文件進(jìn)行編輯。當(dāng)編輯完一個(gè)文件并保存后,需要切換到另一個(gè)文件繼續(xù)編輯時(shí),執(zhí)行行編輯命令:
:n
就可以切換到下一個(gè)文件編輯了,如果忘記了正在編輯文件的名稱,只要執(zhí)行:
:f
該命令執(zhí)行后將在屏幕的左下方顯示如下信息:
“filename”linen1–n2%--(n3ofn4)
其中,filename是正在編輯文件的名稱;n1代表該文件的總行數(shù);n2代表當(dāng)前光標(biāo)行數(shù)在文件總行數(shù)中所占的百分?jǐn)?shù),該數(shù)據(jù)不是動(dòng)態(tài)更新的;n3代表當(dāng)前正在編輯的是第幾個(gè)文件;n4代表打開編輯的文件總數(shù)。
每個(gè)文件退出編輯也同樣使用q行編輯命令;如果用戶要放棄對(duì)所有打開文件的編輯,則可以執(zhí)行:
:qa!
該命令強(qiáng)制退出對(duì)所有打開文件的編輯操作。8.1.6.2瀏覽文件
如果用戶擔(dān)心vi編輯器打開的文件會(huì)由于誤操作而造成文件的破壞,則可以選擇使用-R選項(xiàng)以只讀方式打開文件瀏覽。例如: [root@localhostroot]#vi–Rfile_name 使用-R選項(xiàng)打開文件時(shí),如果用戶無意間對(duì)文件做了修改后退出,由于vi是禁止修改后不保存退出的,所以它一定會(huì)提醒用戶存盤操作(實(shí)際上在修改時(shí)vi就會(huì)提醒用戶修改了只讀文件);當(dāng)用戶使用w行編輯命令保存文件時(shí),即使用戶對(duì)該文件有寫的權(quán)限,vi也將告知用戶該文件是只讀的并拒絕存盤要求,這樣用戶就只能使用q!命令強(qiáng)制退出,從而避免了由于誤操作造成的文件破壞。8.1.6.3恢復(fù)備份文件 如果正在編輯文件因遭遇停電或非正常關(guān)機(jī)而中斷時(shí),用戶不必?fù)?dān)心未保存的文件內(nèi)容會(huì)丟失,Linux系統(tǒng)會(huì)在磁盤相關(guān)目錄下自動(dòng)創(chuàng)建一個(gè)擴(kuò)展名為.swp的文件,該文件就作為備份文件。用戶在下次啟動(dòng)系統(tǒng)時(shí)會(huì)在自己的主目錄下收到相關(guān)郵件,告知用戶可以從備份文件中恢復(fù)因中斷而丟失的文件內(nèi)容?;謴?fù)命令為: [root@localhostroot]#vi–rfile_name
其中,-r為恢復(fù)文件的命令選項(xiàng),file_name為要恢復(fù)的文件名。如果用戶不知道是否存在備份文件,可以執(zhí)行:
[root@localhostroot]#vi–r
vi將在系統(tǒng)的相關(guān)目錄下查找擴(kuò)展名為.swp的文件并將查找結(jié)果告知用戶。8.2shell概述
學(xué)習(xí)Linux操作系統(tǒng)時(shí),可能經(jīng)常聽到別人說起shell命令解釋功能、看到系統(tǒng)中某些目錄下有許多shell腳本程序。那么shell到底是什么?它在Linux操作系統(tǒng)中扮演什么角色?它是如何工作的?它與程序設(shè)計(jì)有何關(guān)系?在學(xué)習(xí)shell編程之前,先簡單地了解一些有關(guān)shell的基本概念。8.2.1shell的概念
Shell的英文原意是“殼”,這個(gè)詞形相地說明了它所處的位置和所扮演的角色。在Linux操作系統(tǒng)中,shell就是一組介于用戶與Linux系統(tǒng)內(nèi)核之間的系統(tǒng)程序,但是與其他系統(tǒng)應(yīng)用程序不同的是:一旦用戶登錄上系統(tǒng),shell就被系統(tǒng)裝入到內(nèi)存中并一直運(yùn)行到用戶退出系統(tǒng)為止;而一般系統(tǒng)應(yīng)用程序是在需要時(shí)才調(diào)入內(nèi)存執(zhí)行,任務(wù)完成后立即退出內(nèi)存。shell就像包裹在系統(tǒng)內(nèi)核外的“殼”,在命令行模式下用戶必須通過它才能與Linux系統(tǒng)交互。所以shell是用戶與Linux內(nèi)核之間的接口。由于用戶在命令行模式下發(fā)出的所有命令都必須通過shell與內(nèi)核的交互才能完成,因此,shell是一個(gè)命令解釋程序,其作用相當(dāng)于MS-DOS的程序。作為命令解釋器,它能解釋并處理用戶在系統(tǒng)提示符后輸入的命令,并將命令運(yùn)行的結(jié)果返回給用戶;它還具有控制流原語、參數(shù)傳遞、變量和字符串替換等特征。在Linux系統(tǒng)中,有些命令是集成在shell程序內(nèi)部的,例如切換當(dāng)前工作目錄的cd命令等,它們就像MS-DOS下的內(nèi)部命令,而有些命令是以獨(dú)立的可執(zhí)行程序存在,并放置于系統(tǒng)中某個(gè)目錄下,例如顯示當(dāng)前目錄下文件與目錄信息的ls命令等,它們就像MS-DOS下的外部命令。無論用戶輸入的是何種命令都必須由shell程序加以解釋并傳送給系統(tǒng)內(nèi)核執(zhí)行;當(dāng)用戶輸入命令時(shí),shell程序首先檢查該命令是否是集成在shell內(nèi)部的命令,如果是則通過系統(tǒng)內(nèi)核中相應(yīng)的系統(tǒng)功能調(diào)用執(zhí)行之;如果不是,則檢查該命令是否是獨(dú)立的可執(zhí)行應(yīng)用程序,這里的應(yīng)用程序可以是Linux系統(tǒng)提供的各種公用程序,如ls、cp等命令,也可以是用戶購買或自己開發(fā)的程序,如realplay等。Shell將根據(jù)系統(tǒng)提供的搜索路徑(保存在PATH環(huán)境變量中)在相應(yīng)的磁盤目錄中查找這些應(yīng)用程序,如果找到,則將其裝入內(nèi)存、地址通過系統(tǒng)調(diào)用傳遞給系統(tǒng)內(nèi)核即可執(zhí)行;如果沒有找到,則返回一個(gè)錯(cuò)誤信息,表示該命令不存在。shell既可以接收來自終端的命令,也可以從普通文件中讀取命令,因此可以把命令過程存儲(chǔ)起來形成shell程序(shell腳本文件),供以后使用;shell腳本文件可以簡單到只有一條命令,但shell本身又是一種可編程的程序設(shè)計(jì)語言,一種幾乎支持高級(jí)語言的所有程序結(jié)構(gòu)且簡單、易學(xué)的高級(jí)語言。作為程序設(shè)計(jì)語言,它可以由命令設(shè)置返回碼,可以修改命令的運(yùn)行環(huán)境,還可以使用while、for、if、then、else和case等流程控制語句以及函數(shù)、矩陣,所以shell腳本程序也可以是非常復(fù)雜的程序。
目前各種版本的Linux系統(tǒng)都支持多種shell程序,例如CentOS7提供了以下幾種shell:sh、bash(GNUBourne-AgainShell)、csh、tcsh等,其種類比原來RedHatLinux9.0要少,每種shell各有自己的特點(diǎn)。盡管shell有這么多的種類,但常用的是bash、csh和tcsh?,F(xiàn)在許多版本的Linux系統(tǒng)一般以bash作為系統(tǒng)默認(rèn)的shell。8.2.2啟動(dòng)與退出shell在Linux系統(tǒng)中,要求系統(tǒng)管理員在為每個(gè)用戶建立用戶賬戶時(shí)指定一種shell類型和用戶起始目錄,如果不指定,則系統(tǒng)默認(rèn)使用bash,并使用用戶名為起始目錄名。登錄后這個(gè)指定的shell就是系統(tǒng)為該用戶分配的shell,該指定的shell類型被存放在系統(tǒng)的口令文件/etc/passwd中。用戶如果不想使用系統(tǒng)默認(rèn)的或原來指定的shell,也可以從控制臺(tái)調(diào)用其他的shell。因此,啟動(dòng)shell有兩種方式。8.2.2.1登錄時(shí)啟動(dòng)在Linux系統(tǒng)引導(dǎo)過程中,首先,系統(tǒng)內(nèi)核被加載進(jìn)入內(nèi)存并進(jìn)行自解壓,然后開始運(yùn)行并掌握控制權(quán),它將完成對(duì)外圍設(shè)備的檢測(cè),并加載相應(yīng)的驅(qū)動(dòng)程序;接著安裝根文件系統(tǒng),如果文件系統(tǒng)安裝失敗,則系統(tǒng)掛起,否則Linux操作系統(tǒng)內(nèi)核調(diào)度系統(tǒng)的第一個(gè)進(jìn)程:init進(jìn)程;該進(jìn)程運(yùn)行時(shí)將讀取系統(tǒng)引導(dǎo)配置文件/etc/inittab中的信息,查詢終端的各個(gè)端口及其特征,當(dāng)發(fā)現(xiàn)有活動(dòng)的終端時(shí),調(diào)用getty進(jìn)程;當(dāng)getty進(jìn)程在接受了用戶輸入的用戶名和口令后,調(diào)用login程序;該程序?qū)呙?et/passwd和/etc/shadow文件,檢查其中是否存在匹配的用戶名和口令,如果用戶名和口令都匹配,則根據(jù)指定的shell類型啟動(dòng)相應(yīng)的shell程序并進(jìn)入該用戶起始目錄;如果是以圖形界面方式啟動(dòng),則控制權(quán)交給系統(tǒng)桌面進(jìn)程;如果是以字符界面方式啟動(dòng),則控制權(quán)交給默認(rèn)或指定的shell進(jìn)程(執(zhí)行中的shell程序)。隨后,在控制臺(tái)終端或圖形界面下的終端中shell進(jìn)程將讀取/etc/profile文件和用戶主目錄下的.bash_profile文件(隱含),用來配置共用環(huán)境和用戶個(gè)人環(huán)境,并在終端屏幕上顯示系統(tǒng)提示符$或#(超級(jí)用戶)。8.2.2.2交互式啟動(dòng)
如果用戶不滿意系統(tǒng)默認(rèn)或原來指定的shell類型時(shí),可以通過修改/etc/psaawd文件中指定的shell類型,但是這種方法需要重新啟動(dòng)Linux系統(tǒng)才能生效。實(shí)際上在命令行狀態(tài)下可以通過執(zhí)行命令的交互方式啟動(dòng)所需要的shell程序。例如: [root@localhostroot]#csh#在bash下啟動(dòng)csh [root@localhost~]#tcsh #在csh下啟動(dòng)tcsh #sh #在tcsh下啟動(dòng)sh sh-2.05b#bash #在sh下啟動(dòng)bash [root@localhostroot]#ps
PIDTTYTIMECMD 18685pts/0 00:00:00bash 18726pts/0 00:00:00csh 18786pts/0 00:00:00tcsh 18802pts/0 00:00:00sh 18803pts/0 00:00:00bash 18845pts/0 00:00:00ps[root@localhostroot]#
當(dāng)采用這種方式啟動(dòng)不同的shell時(shí),系統(tǒng)實(shí)際上是在原來的shell進(jìn)程下調(diào)用新的shell程序,因此是shell程序的嵌套調(diào)用;所以執(zhí)行ps命令即可看到這些shell進(jìn)程信息。8.2.2.3退出shell當(dāng)用戶要退出shell程序時(shí),可以通過鍵入exit命令。如果是在控制臺(tái)終端下則退出當(dāng)前shell程序后,系統(tǒng)又回到控制臺(tái)終端的login(登錄)界面;如果是在圖形界面的終端下,則退出后系統(tǒng)自動(dòng)關(guān)閉該終端。但是如果用戶采用了交互式啟動(dòng)shell,由于是shell程序的嵌套調(diào)用,所以執(zhí)行exit命令時(shí)是返回到上一級(jí)的shell程序下。8.2.3shell與子進(jìn)程在Linux系統(tǒng)中,一個(gè)程序(或命令)的執(zhí)行被稱為進(jìn)程,而且不同的進(jìn)程都對(duì)應(yīng)一個(gè)不同的整數(shù),稱為進(jìn)程號(hào)(processID縮寫為PID)。在進(jìn)程啟動(dòng)直到進(jìn)程終止這整個(gè)生存期之間,進(jìn)程號(hào)都保持不變。系統(tǒng)中存在許多系統(tǒng)進(jìn)程和用戶進(jìn)程,這些進(jìn)程間的關(guān)系是樹型的,有父進(jìn)程、子進(jìn)程和唯一的一個(gè)init根進(jìn)程。一個(gè)進(jìn)程可以用fork()系統(tǒng)調(diào)用生成自己的子進(jìn)程,而原來進(jìn)程稱為父進(jìn)程;同樣子進(jìn)程也可用fork()調(diào)用再生成自己的子進(jìn)程,如此等等;系統(tǒng)中會(huì)形成一棵進(jìn)程樹。根進(jìn)程的進(jìn)程號(hào)為1,其作用是啟動(dòng)Linux系統(tǒng),包括為每個(gè)終端生成一個(gè)getty進(jìn)程、啟動(dòng)網(wǎng)絡(luò)服務(wù)的各種守護(hù)進(jìn)程等。當(dāng)用戶登錄時(shí),系統(tǒng)將根據(jù)passwd文件為用戶啟動(dòng)一個(gè)shell進(jìn)程,該進(jìn)程就是用戶的命令解釋器,這里稱為命令解釋進(jìn)程。在命令行狀態(tài)下,每當(dāng)用戶輸入一條命令請(qǐng)求執(zhí)行時(shí),命令解釋進(jìn)程將用fork()系統(tǒng)調(diào)用創(chuàng)建一個(gè)子進(jìn)程;該子進(jìn)程用來執(zhí)行用戶輸入的命令,而這時(shí)的命令解釋進(jìn)程本身卻處于睡眠狀態(tài)(sleepstate);處于睡眠狀態(tài)的進(jìn)程是不使用任何計(jì)算機(jī)資源的,等到用戶輸入的命令執(zhí)行完畢后,Linux系統(tǒng)才會(huì)喚醒用戶的命令解釋進(jìn)程,只有到這個(gè)時(shí)候命令解釋進(jìn)程才給出輸入提示符,繼續(xù)接收、處理用戶輸入的命令。8.3Shell的功能在Linux操作系統(tǒng)中提供許多種類的Shell,不管用戶使用的是哪一種Shell都有一個(gè)共同的目的就是為Linux系統(tǒng)提供用戶界面。所以,各種Shell都有以下一些特性:1.命令行解釋;2.保留字;3.通配符;4.訪問和處理程序及命令;5.文件處理:輸入/出重定向和管道;6.命令組合7.命令替換8.變量維護(hù);9.環(huán)境設(shè)置;10.shell編程8.3.1命令行解釋當(dāng)用戶登錄到系統(tǒng)時(shí),如果系統(tǒng)設(shè)置的運(yùn)行級(jí)不是處于5級(jí),則系統(tǒng)將啟動(dòng)一個(gè)被稱為交互式的特殊的Shell。用戶會(huì)看到一個(gè)Shell狀態(tài),一般是$號(hào)或#號(hào)。在這種狀態(tài)下,用戶的輸入將被作為命令由Shell加以解釋。在該狀態(tài)下的輸入通常也被稱為命令行。常見的命令行格式: commandargument其中,command為Linux的命令或者是shell程序;argument是傳遞給該命令或shell程序的參數(shù)。命令名和第一個(gè)命令參數(shù)選項(xiàng)之間以及各個(gè)參數(shù)選項(xiàng)之間一般有分隔字符。Shell為內(nèi)核所做的工作之一就是去除那些不必要的分隔字符,一般分隔字符包括空格(spacebar)、水平制表符(tab)和換行符。例如: [root@localhostroot]#ls -a -l當(dāng)用戶輸入的參數(shù)中包含有多余的分隔字符時(shí),shell能識(shí)別并去除,在該示例中使之等效為ls–a-l或ls–al命令。8.3.2保留字對(duì)Shell具有特殊意義的字稱為保留字。例如、Shell編程中的do、done、for、if、then等等。保留字隨Shell版本的不同而不同。8.3.3通配符
所有的shell種類都支持通配符,這可以使用戶在文件名或文件擴(kuò)展名中使用通配符以方便描述文件。常用的通配符及含義有:通配符
含義* 匹配任何不以圓點(diǎn)(·)開頭、不含斜線(/)的字符串,包括空字符串;?
匹配任何不以圓點(diǎn)(·)開頭或不是斜線(/)的單個(gè)字符;[.,-,!] 按照范圍、列表或不匹配等形式匹配指定的字符;參考示例:命令
含義ls* 列出當(dāng)前目錄下的所有文件、目錄及該目錄中的文件,文件名以.開頭的隱含文件除外因?yàn)?不匹配這類字符串。lsz??txt 列出當(dāng)前目錄下以z字符開始、以txt字符串結(jié)束,中間為任意兩個(gè)字符的所有文件,如z0.txt、z1.txt等等。ls[a.c]* 列出當(dāng)前目錄下所有以a或c字符開頭的文件、目錄及該目錄中的文件。該命令實(shí)際上與ls[a,c]*命令等價(jià)。ls[!a-t]* 列出當(dāng)前目錄下所有不以a到t字符開頭的文件、目錄及該目錄中的文件。注意:由于?、*、[]等字符是shell的通配符,有特殊意義,因此當(dāng)要使用這些字符本身時(shí),在它前面要加上“\”轉(zhuǎn)義字符。同樣對(duì)于轉(zhuǎn)義符“\”本身及其他對(duì)shell有意義的字符使用時(shí)也是如此。參考示例: lsa\?.c列出當(dāng)前目錄下名為a?.c的文件8.3.4訪問和處理程序及命令當(dāng)命令輸入時(shí),Shell將讀取系統(tǒng)環(huán)境變量PATH的內(nèi)容。這些內(nèi)容中有包含可執(zhí)行文件的目錄列表。Shell將在這些目錄中尋找該命令,然后將實(shí)際的文件名傳遞給Linux系統(tǒng)內(nèi)核。參考示例:了解ls命令的執(zhí)行過程。首先,查看系統(tǒng)環(huán)境變量PATH的內(nèi)容: [root@localhostroot]#echo$PATH
顯示結(jié)果: /usr/kerberos/sbin:/usr/kerberos/bin:/zxj:/usr/local/sbin: /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
接著,進(jìn)入/bin目錄,并查看該目錄下的文件:
[root@localhostroot]#cd/bin [root@localhostbin]#ls–ll*列出/bin目錄下所有以l字符開頭的文件,可以看到:
-rwxr-xr-x1rootroot107802003-02-19link -rwsr-xr-x1rootroot10454642003-11-26linuxconf -rwxr-xr-x1rootroot222042003-02-19ln -rwxr-xr-x1rootroot777522003-01-31loadkeys -rwxr-xr-x1rootroot199642003-02-25login -rwxr-xr-x1rootroot676682003-02-19ls
當(dāng)鍵入ls命令時(shí),shell從PATH變量中讀到的內(nèi)容有/bin目錄,而該目錄下有l(wèi)s命令,所以shell就能找到該命令,并將文件名ls傳給系統(tǒng)內(nèi)核執(zhí)行。8.3.5文件處理:輸入/出重定向和管道一般情況下默認(rèn)的標(biāo)準(zhǔn)輸入是鍵盤、標(biāo)準(zhǔn)輸出是顯示器(終端)。但是shell的輸入/出重定向功能使用戶能從文件或其他命令的輸出中獲得信息(輸入重定向),也允許用戶將結(jié)果或錯(cuò)誤信息存入指定的文件中(輸出重定向)。與輸入/出重定向有關(guān)的字符是:|、<、>、>>等。8.3.5.1管道符|
管道符“|”使你可以將一個(gè)命令的輸出作為另一個(gè)命令的輸入。使用格式: command1arguments|command2arguments|…參考示例: [root@localhostbin]#ls|grepzxj 執(zhí)行該命令時(shí),shell將首先執(zhí)行l(wèi)s命令,并將ls的輸出傳遞給grep命令,由于grep命令的功能是查找內(nèi)容包含指定表達(dá)式或字符串(zxj)的文件,因此、這個(gè)包含管道符的命令將顯示出當(dāng)前目錄中所有文件名包含zxj字符串的文件。8.3.5.2輸入重定向符<
輸入重定向符的功能是使命令從給定的文件中讀取數(shù)據(jù)。使用格式: commandarguments<file_name參考示例1: [root@localhostbin]#maildns@<letter
該命令將文件letter的內(nèi)容以電子郵件(E_mail)的形式發(fā)送給名字為dns的用戶。參考示例2:[root@localhostbin]#wc–l<temp.txt
該命令將文件temp.txt作為wc命令的輸入,統(tǒng)計(jì)文件中的行數(shù)。8.3.5.3輸出重定向符>
輸出重定向符的功能是使命令的輸出存入指定的文件。使用格式: commandarguments>file_name參考示例: [root@localhostbin]#who>userlog
把命令who的輸出重定向到文件userlog中。8.3.5.4輸出附加重定向符>>
輸出附加重定向符的功能是將命令輸出的內(nèi)容附加到指定文件的末尾。當(dāng)使用輸出重定向時(shí),如果指定的文件存在,則原文件中的內(nèi)容將被新輸入的內(nèi)容覆蓋。如果用戶希望保留原來的文件內(nèi)容并在此基礎(chǔ)上添加新的內(nèi)容時(shí),則可以采用輸出附加重定向符。使用格式:
commandarguments>>file_name參考示例: [root@localhostbin]#ls>>filelist把當(dāng)前目錄中的文件、目錄名附(添)加到文件filelist的末尾。注意:
采用輸出重定向或輸出附加重定向時(shí),如果指定的文件不存在,則系統(tǒng)會(huì)自動(dòng)建立它;而采用輸入重定向時(shí),如果指定的文件名不存在,則輸入重定向命令就不能成功地執(zhí)行,這時(shí)shell會(huì)給出錯(cuò)誤信息:Nosuchfileordirectory。8.3.6命令組合
在Linux系統(tǒng)中,命令可以通過命令表的形式將若干命令組合使用以提高效率。在命令表中的命令通過分隔符分隔各個(gè)命令并確定命令執(zhí)行的條件。各分隔符及含義如下:
;
表示按順序執(zhí)行命令; && 表示根據(jù)條件(true)執(zhí)行其后面的命令; || 表示根據(jù)條件(false)執(zhí)行其后面的命令; & 表示該符號(hào)前面的命令在后臺(tái)執(zhí)行。參考示例1: [root@localhostbin]#ls;who;ps
該命令組合表示三個(gè)命令順序執(zhí)行,等價(jià)于分別執(zhí)行三條命令。參考示例2:[root@localhostbin]#ls*.txt~&&rm–f*.txt~
該命令組合表示如果在當(dāng)前目錄下找到.txt~(備份)文件,則強(qiáng)制刪除之;如果找不到這些文件,則刪除命令不會(huì)執(zhí)行。
命令表的執(zhí)行還可以有另外有兩種形式:{命令表;}和(命令表),兩者的區(qū)別之一是前者由當(dāng)前shell來執(zhí)行命令表,不產(chǎn)生新的子進(jìn)程;后者由當(dāng)前shell產(chǎn)生新的子進(jìn)程來執(zhí)行命令表。區(qū)別之二是前者的命令表與前“{”和后“}”之間要有空格(大多數(shù)shell的要求);后者的命令表與前“(”和后“)”之間可以沒有空格。區(qū)別之三是前者最后一個(gè)命令后要有“;”字符;而后者可以沒有。參考示例3: [root@localhostbin]#{cd/root;ls–l;} [root@localhostroot]#
該命令表由當(dāng)前shell執(zhí)行,先進(jìn)入/root目錄,然后執(zhí)行l(wèi)s–l命令,命令表執(zhí)行完畢后當(dāng)前目錄已經(jīng)改變?yōu)閞oot目錄。參考示例4:[root@localhostbin]#(cd/root;ls–l;)[root@localhostbin]# 該命令表由當(dāng)前shell產(chǎn)生新的子進(jìn)程來執(zhí)行,當(dāng)命令表執(zhí)行完畢后,子進(jìn)程消亡,而父進(jìn)程的當(dāng)前路徑?jīng)]有改變。思考:以下兩個(gè)命令表執(zhí)行后都輸出重定向到文件,它們有何不同? [root@localhostroot]#(data;who)>userlog [root@localhostroot]#data;who>userlog8.3.7命令的替換
命令的替換是將一個(gè)命令的輸出作為另外一個(gè)命令的參數(shù),而不是作為另外一個(gè)命令的輸入;這是與重定向不同的地方。使用格式:command1`command2[arguments]`
其中,參數(shù)arguments是可選的。當(dāng)一個(gè)字符串被括在兩個(gè)重音號(hào)“`”之間時(shí),shell將該字符串作為命令來解釋執(zhí)行,因此,shell首先解釋執(zhí)行command2[arguments],并將它的輸出作為command1的參數(shù)。這里“`”是重音號(hào)(也稱為反向單引號(hào)),如果誤用為單引號(hào),則shell無法識(shí)別。參考示例1:[root@localhostroot]#cp`ls*.txt`zxj
先列出當(dāng)前目錄下所有.txt文件并將它們作為cp命令的參數(shù)之一(源文件),復(fù)制到當(dāng)前目錄下名為zxj的目標(biāo)目錄中。參考示例2: [root@localhostbin]#cd`echo$HOME` [root@localhostroot]#
系統(tǒng)環(huán)境變量HOME中存放的內(nèi)容是用戶起始目錄信息,變量前的字符“$”表示引用該變量的內(nèi)容,echo命令為顯示變量的值;所以執(zhí)行后進(jìn)入用戶的起始目錄。說明:
在shell編程中,命令替換功能經(jīng)常用于對(duì)變量的賦值。8.3.8變量維護(hù)
變量是用戶存放以后要使用到的數(shù)據(jù)的地方。shell程序可以維護(hù)變量,即給變量賦值或修改變量原有的值或?qū)⒆兞康闹祩鬟f給當(dāng)前環(huán)境。使用格式: Variable(變量名)=value(值)
變量有系統(tǒng)定義與用戶自定義的,一般系統(tǒng)變量采用全部大寫字母的變量名,如PATH、HOME等。變量命名的規(guī)則與其他高級(jí)語言類似;對(duì)變量賦值時(shí)無需說明變量的類型,因此,可以直接將字符、字符串或數(shù)值(整數(shù)或小數(shù))賦給變量。參考示例: HOME=/home/zxj將起始目錄設(shè)置為/home/zxj目錄,則以后使用時(shí)HOME這個(gè)變量的值就是/home/zxj。需要修改時(shí)只要重新賦值即可。
當(dāng)需要使用變量(也稱為引用變量)時(shí),只要在變量前加$符號(hào)。例如:echo$PATH則顯示系統(tǒng)中可執(zhí)行文件的路徑。
為了使一個(gè)變量對(duì)于子進(jìn)程可用,則需要將變量的值傳遞給當(dāng)前環(huán)境,這可以用export命令來實(shí)現(xiàn),export命令也是shell程序的一個(gè)內(nèi)部命令,例如,執(zhí)行exportHOME命令。8.3.9shell環(huán)境控制
當(dāng)用戶成功地登錄系統(tǒng)時(shí)就執(zhí)行了一個(gè)默認(rèn)的或指定的shell程序,該shell進(jìn)程會(huì)為登錄的用戶創(chuàng)建一個(gè)特定的環(huán)境,包括系統(tǒng)指定的環(huán)境變量的值、系統(tǒng)啟動(dòng)時(shí)的用戶使用環(huán)境以及shell啟動(dòng)時(shí)所需要的選項(xiàng)等等,以便用戶能更有效地使用系統(tǒng)。1.環(huán)境變量
當(dāng)Linux系統(tǒng)安裝完成后,在/etc目錄下系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)profile文件,該文件中說明了系統(tǒng)環(huán)境變量的配置情況;每當(dāng)新創(chuàng)建一個(gè)用戶賬戶時(shí),系統(tǒng)也會(huì)在該用戶的起始目錄(超級(jí)用戶為root)中自動(dòng)創(chuàng)建一個(gè).bash_profile隱含文件(默認(rèn)采用bash時(shí)),該文件中說明了用戶個(gè)人的環(huán)境變量配置情況。在login進(jìn)程完成登錄檢查、啟動(dòng)shell時(shí),從這兩個(gè)文件中讀取系統(tǒng)環(huán)境變量和用戶個(gè)人環(huán)境變量的配置信息。用戶可以用文本編輯器打開這兩個(gè)文件并修改配置信息。在root用戶起始目錄中的.bash_profile文件內(nèi)容為:#.bash_profile#Getthealiasesandfunctions從.bashrc文件中讀取命令別名和功能設(shè)置
if[-f~/.bashrc];then .~/.bashrcfi#如果用戶起始目錄下的.bashrc文件存在,則解釋執(zhí)行該文件。其中,執(zhí)行.~/.bashrc命令等價(jià)于執(zhí)行sh~/.bashrc命令。
#Userspecificenvironmentandstartupprograms用戶指定的環(huán)境和起始程序
PATH=$PATH:$HOME/bin#在系統(tǒng)路徑的基礎(chǔ)上添加用戶起始目錄下的bin目錄,以存放用戶的可執(zhí)行文件。BASH_ENV=$HOME/.bashrc #設(shè)置bash環(huán)境變量,普通用戶的.bashrc文件沒有該語句。USERNAME="root" #設(shè)置用戶名變量,普通用戶的.bashrc文件沒有該語句。
exportUSERNAMEBASH_ENVPATH #向當(dāng)前環(huán)境傳遞三個(gè)變量的值。
有關(guān)profile文件的內(nèi)容和作用將在shell編程的位置變量中說明。2.啟動(dòng)文件
啟動(dòng)文件位于用戶的起始目錄下,用來定制系統(tǒng)的啟動(dòng)環(huán)境,但是建立用戶時(shí),若指定不同的shell程序,則CentOS7系統(tǒng)啟動(dòng)時(shí)所用的文件是相同的。例如,使用bash、sh、tcsh、csh時(shí),都使用.bashrc文件。
在root用戶起始目錄中的.bash文件內(nèi)容為:#.bashrc
#Userspecificaliasesandfunctions 用戶指定的命令別名和功能
aliasrm='rm-i'#把指令名稱rm–i設(shè)置為rm別名,即刪除前先詢問用戶。aliascp='cp-i'#把指令名稱cp–i設(shè)置為cp別名,即復(fù)制覆蓋同名文件前先詢問用戶。aliasmv='mv-i'#把指令名稱mv-i設(shè)置為mv別名,即移動(dòng)覆蓋同名文件前先詢問用戶。
#Sourceglobaldefinitions 原始文件全局定義if[-f/etc/bashrc];then ./etc/bashrcfi#如果/etc目錄下的bashrc文件存在,則執(zhí)行該文件。
用戶可以用任意一個(gè)文本編輯器打開該文件編輯,在文件中適當(dāng)?shù)奈恢蒙显O(shè)置命令的別名,以定制適合自己需要的系統(tǒng)啟動(dòng)環(huán)境;也可以根據(jù)需要添加其他的變量。3.啟動(dòng)選項(xiàng)由于shell本身就是命令,所以無論是從/etc/passwd文件啟動(dòng),還是從命令行啟動(dòng),它都可以帶選項(xiàng)。但是不同的shell其命令選項(xiàng)和基本格式可能存在差別,在確定選用合適的shell后,用戶可以根據(jù)需要指定一些選項(xiàng)作為shell程序的啟動(dòng)參數(shù)。對(duì)于bash則為:啟動(dòng)格式:bash[option][file]
其中,option為bash命令的選項(xiàng),有多個(gè)選項(xiàng)可供選擇,例如,-i選項(xiàng)表示該shell是交互式的。其他的選項(xiàng)及用途可以通過執(zhí)行manbash查看。8.4常用shell在Linux下有許多種shell,每種都有自己的特點(diǎn)。常用的shell有bash、tcsh和csh,一般以bash作為默認(rèn)的shell。8.4.1常用shell簡介bash程序設(shè)計(jì)者是免費(fèi)軟件基金會(huì)的BrianFox和凱斯西部保留地大學(xué)的ChetRamey。bash是一個(gè)與sh兼容的從標(biāo)準(zhǔn)輸入設(shè)備或文件讀取命令執(zhí)行的命令語言解釋程序、是sh的擴(kuò)展版本。它包括了許多ksh和csh中優(yōu)秀的特性,它既是一種用法靈活、功能強(qiáng)大的編程界面,也是一個(gè)使用方便、界面友好的用戶接口。 tcsh最初的程序設(shè)計(jì)者是WilliamJoy,以后又有幾十人加入并對(duì)其進(jìn)行功能擴(kuò)充。tcsh是一種與伯克利UNIXCshell,即csh完全兼容的增強(qiáng)型版本。它是一種既可用于交互式登錄命令解釋的shell,也是一種用于編寫腳本命令處理程序的shell。它的特色是:有一個(gè)命令行編輯器、可編程的字填充、拼寫錯(cuò)誤檢查、命令歷史記錄、作業(yè)控制等功能和具有類似于C語言的語法結(jié)構(gòu)。8.4.2bash的特色
作為Linux系統(tǒng)默認(rèn)的命令解釋程序,bash有著自己的特色,充分利用這些特色功能可以達(dá)到事半功倍的效果;這些特色主要是:8.4.2.1命令行自動(dòng)補(bǔ)齊
在Linux的字符終端中,當(dāng)要切換目錄或復(fù)制、移動(dòng)、刪除文件時(shí),如果文件或目錄名很長,則輸入是非??菰锖唾M(fèi)時(shí)的。例如,當(dāng)前目錄下有一個(gè)文件和三個(gè)目錄: a.outmail/games/linuxconf/
一般情況下,用戶要切換到linuxconf目錄時(shí),會(huì)輸入: [root@localhostroot]#cdlinuxconf
如果目錄名更長,或包含大小寫字母和數(shù)字等字符時(shí),輸入更加麻煩;有了命令行自動(dòng)補(bǔ)齊功能后要進(jìn)入linuxconf子目錄,則只要: [root@localhostroot]#cdl<Tab>即可進(jìn)入該目錄因此,在bash下輸入命令時(shí),通常不必輸入完整的命令,只要輸入命令的頭幾個(gè)字符后按下Tab鍵即可補(bǔ)齊未輸入的字符。至于需要輸入幾個(gè)字符,則要看當(dāng)前目錄下是否有同樣前綴的文件或目錄名。如果當(dāng)前目錄下還有與輸入的字符相同前綴的文件或目錄名,則計(jì)算機(jī)發(fā)出蜂鳴聲,提醒用戶沒有足夠的信息來補(bǔ)齊命令,如果用戶再次按下Tab鍵,則系統(tǒng)列出具有相同前綴的文件或目錄。例如某個(gè)目錄下存在三個(gè)以w字符開頭的文件,當(dāng)用戶輸入:[root@localhostroot]#ls–lw<Tab>系統(tǒng)不會(huì)完成命令自動(dòng)補(bǔ)齊,而是發(fā)出蜂鳴聲表示還需要輸入其他的字符來唯一確定文件名,當(dāng)再次按下Tab鍵時(shí),系統(tǒng)列出: [root@localhostroot]#wm wu-ftpd-current.tar.gz wxy.txt這時(shí),如果用戶輸入的下一個(gè)字符是u,則命令自動(dòng)補(bǔ)齊,顯示wu-ftpd-current.tar.gz文件的詳細(xì)信息。如果當(dāng)前目錄下還有一個(gè)名為wu-ftpd-current的目錄,則用戶在輸入了wu后按下Tab鍵時(shí)自動(dòng)補(bǔ)齊到wu-ftpd-current,然后發(fā)蜂鳴聲等待用戶輸入下一個(gè)字符。這個(gè)功能對(duì)于使用長名稱的命令、目錄、文件名特別省時(shí)方便,而短名稱的則未必能省時(shí)間。特別是在忘記命令、目錄或文件全名時(shí),只要記得第一個(gè)字符,即可方便地獲取全名。例如,用戶如果需要執(zhí)行XFree86命令,而忘記命令全名時(shí),如果記得第一字符為大寫的X,則只要: [root@localhostroot]#X<Tab>系統(tǒng)將列出所有以大寫的X開始的命令名,用戶只需要再鍵入: [root@localhostroot]#XF<Tab>就會(huì)自動(dòng)補(bǔ)齊該命令,回車即可執(zhí)行。8.4.2.2命令歷史記錄
對(duì)于一些剛剛用過的命令,如果馬上又要使用,則重新輸入實(shí)在是一件麻煩的事情。而bash具有記憶命令歷史記錄的功能,即bash可以記錄一定數(shù)目以前輸入過的命令。記憶命令歷史記錄的多少是由shell變量HISTSIZE的值確定的,一般默認(rèn)情況下該值為1000,用戶可以通過執(zhí)行命令: [root@localhostroot]#echo$HISTSIZE
來查看命令記錄的條數(shù)。如果用戶對(duì)該變量默認(rèn)的值不滿意,可以通過對(duì)HISTSIZE變量直接賦值的方法修改其大小或者通過編輯/etc/profile文件中的HISTSIZE變量修改,當(dāng)該值改小時(shí),前面的命令記錄丟失。用戶無須刻意關(guān)注命令歷史記錄的形成,在bash中是自動(dòng)記錄曾經(jīng)使用過的命令。 bash將輸入的命令記錄保存在一個(gè)文本文件中,當(dāng)用戶登錄時(shí)系統(tǒng)會(huì)讀取該文件的信息,在內(nèi)存中形成命令歷史列表供用戶使用。系統(tǒng)默認(rèn)將命令歷史記錄保存在名為.bash_history的文本文件中,該文件是隱含文件,通常存放在用戶起始(主)目錄中。該文件名可以使用HISTFILE變量進(jìn)行設(shè)置,設(shè)置方法就是用新文件名字符串(注意路徑)對(duì)其賦值。調(diào)用命令歷史記錄最為簡單的方法就是使用上、下光標(biāo)鍵。按一下向上光標(biāo)鍵,最后鍵入的命令將出現(xiàn)在命令行上;再按則倒數(shù)第二條命令會(huì)出現(xiàn),依此類推。當(dāng)通過光標(biāo)鍵調(diào)出命令時(shí),用戶回車即可立即使用。如果需要修改命令,則可以通過按左、右光標(biāo)鍵在命令行上左右移動(dòng)并結(jié)合backspace鍵和其他按鍵刪除或插入字符來修改。如果要顯示和修改命令的歷史記錄文件,則可以通過bash的內(nèi)部命令history和fc來完成。注意,雖然系統(tǒng)保存的~/.bash_history文件是純文本格式,但直接對(duì)其編輯后如果系統(tǒng)沒有從新啟動(dòng)是不能生效的,仍然需要使用history命令導(dǎo)入。1.history命令 history命令有多種使用格式。在用它顯示和修改命令的歷史記錄文件時(shí),可以根據(jù)不同的需求使用不同的命令格式。
命令格式1:history[n]
其中,參數(shù)n是可選的,為一個(gè)整數(shù)值,表示列出最近使用的n條命令記錄,如果該參數(shù)省略,則列出所有使用過的命令記錄;該命令格式會(huì)自動(dòng)對(duì)所列出的命令記錄加以編號(hào),若要執(zhí)行其中的某一條命令,只要輸入“!”并加上命令編號(hào)即可。history命令是bash的內(nèi)部命令。
參考示例1:列出最近使用過的5條命令記錄。 [root@localhostroot]#history5
系統(tǒng)顯示:manhistorymanhistory>history.txtclearlshistory5如果需要執(zhí)行其中的命令,則可以采用“!”加命令編號(hào)的形式,例如: [root@localhostroot]#!1002執(zhí)行了清屏操作。命令格式2: history–c其中,-c為命令選項(xiàng),表示要清除內(nèi)存中命令歷史列表所有的命令記錄,當(dāng)帶有-c選項(xiàng)的命令執(zhí)行后再使用上下光標(biāo)鍵則無法調(diào)出使用過的歷史命令了,而內(nèi)存中修改后的命令歷史列表將在系統(tǒng)注銷或關(guān)閉時(shí)寫入.bash_history文件中。命令格式3: history-doffset其中,-d為命令選項(xiàng),offset為選項(xiàng)參數(shù),它是一個(gè)整數(shù)值;使用該選項(xiàng)時(shí)表示在命令歷史列表中要?jiǎng)h除選項(xiàng)參數(shù)指定偏移位置的命令記錄;因此,使用帶該選項(xiàng)的命令前,需要知道要?jiǎng)h除命令記錄的編號(hào)。參考示例2:刪除命令歷史記錄列表中編號(hào)為7的命令。 [root@localhostroot]#history–d7修改的內(nèi)容在系統(tǒng)注銷或關(guān)閉時(shí)才從內(nèi)存寫入.bash_history文件。命令格式4: history-anrw[filename]其中,filename為可選參數(shù),默認(rèn)表示.bash_history文件,其他為命令選項(xiàng)。命令選項(xiàng)及含義:命令選項(xiàng)選項(xiàng)含義-a向.bash_history文件中添加當(dāng)前命令歷史列表。實(shí)際上是在系統(tǒng)注銷或關(guān)閉時(shí)才從內(nèi)存寫入,但也可以使用帶-w選項(xiàng)的命令立即寫入。-n將.bash_history文件中的命令歷史記錄導(dǎo)入當(dāng)前命令歷史列表中;但是必須指定.bash_history文件名參數(shù)。-r省略filename文件名參數(shù)時(shí),默認(rèn)讀取.bash_history文件中的命令歷史記錄并將它們作為當(dāng)前命令歷史列表。-w將當(dāng)前命令歷史列表寫到.bash_history文件中并覆蓋該文件中原有的內(nèi)容。表8-1history命令選項(xiàng)及含義
參考示例3:將當(dāng)前命令歷史列表馬上添加到.bash_history文件中。 [root@localhostroot]#history–w
參考示例4:清除當(dāng)前命令歷史列表,再從.bash_history文件中導(dǎo)入。 [root@localhostroot]#history–c
這時(shí),看看按下上下方向鍵有沒有歷史命令? [root@localhostroot]#history–r 或 [root@localhostroot]#history–n.bash_history這時(shí),再按下上下方向鍵有沒有歷史命令?
命令格式5: history-parg[arg...]
其中,-p為命令選項(xiàng),arg為選項(xiàng)參數(shù)列表。執(zhí)行這種格式的命令時(shí),將執(zhí)行選項(xiàng)參數(shù)arg列表以替代history命令的執(zhí)行,執(zhí)行結(jié)果顯示在標(biāo)準(zhǔn)輸出上。命令和執(zhí)行結(jié)果都不保存在歷史記錄列表中。選項(xiàng)參數(shù)列表是由反向單引號(hào)括起來的命令或命令表達(dá)式。
參考示例5:執(zhí)行l(wèi)s-al命令,但命令和執(zhí)行結(jié)果都不保留在歷史記錄列表中。 [root@localhostroot]#history–p`ls–al`
只是在標(biāo)準(zhǔn)輸出上顯示ls–al命令執(zhí)行的結(jié)果。
命令格式6: history-sarg[arg...]
其中,-s為命令選項(xiàng),arg為選項(xiàng)參數(shù)列表。執(zhí)行這種格式的命令時(shí),將執(zhí)行選項(xiàng)參數(shù)arg列表以替代history命令的執(zhí)行,執(zhí)行結(jié)果不顯示在標(biāo)準(zhǔn)輸出上而是添加到歷史記錄列表中。選項(xiàng)參數(shù)列表是由反向單引號(hào)括起來的命令或命令表達(dá)式。
參考示例6: [root@localhostroot]#history–s`ps`
執(zhí)行后,標(biāo)準(zhǔn)輸出上沒有任何信息顯示,但選項(xiàng)參數(shù)ps命令的執(zhí)行結(jié)果保存在歷史記錄列表中。2.fc命令
另一個(gè)與history命令功能相似的是fc命令,但它能通過指定或默認(rèn)的編輯器編輯歷史記錄列表,并在退出編輯器時(shí)自動(dòng)執(zhí)行歷史記錄列表中的所有命令。如果不指定編輯器,則系統(tǒng)默認(rèn)為vi編輯器。該命令也有兩種格式:
命令格式1:fc[-eename][-nlr]
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 民政局二零二五年度離婚合同范本(修訂版)12篇
- 2025版農(nóng)業(yè)土地租賃合同生態(tài)補(bǔ)償機(jī)制研究4篇
- 2025年林業(yè)保險(xiǎn)合同
- 2025年體育休閑度假合同
- 二零二五年度窗簾品牌授權(quán)安裝與銷售合同3篇
- 2025年家庭教學(xué)服務(wù)合同
- 2025年牛津上海版九年級(jí)數(shù)學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2025年度農(nóng)民公寓租賃合同解除及違約責(zé)任協(xié)議3篇
- 2025年倉儲(chǔ)海運(yùn)貨物保管合同
- 2025年度苗木種植與森林碳匯交易合作合同8篇
- 2025年度版權(quán)授權(quán)協(xié)議:游戲角色形象設(shè)計(jì)與授權(quán)使用3篇
- 2024屆甘肅省蘭州市城關(guān)區(qū)蘭州第一中學(xué)生物高一上期末監(jiān)測(cè)模擬試題含解析
- 公務(wù)攝影拍攝技巧分享
- 倉儲(chǔ)中心退貨管理制度
- 豐田鋒蘭達(dá)說明書
- 典范英語8-15Here comes trouble原文翻譯
- 六安市葉集化工園區(qū)污水處理廠及配套管網(wǎng)一期工程環(huán)境影響報(bào)告書
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第一章運(yùn)動(dòng)技能學(xué)習(xí)與控制概述
- 清華大學(xué)考生自述
- 人機(jī)工程學(xué)與眼鏡
- 中層后備干部培訓(xùn)心得體會(huì)范本
評(píng)論
0/150
提交評(píng)論