第07章shell的基礎(chǔ)知識167-203_第1頁
第07章shell的基礎(chǔ)知識167-203_第2頁
第07章shell的基礎(chǔ)知識167-203_第3頁
第07章shell的基礎(chǔ)知識167-203_第4頁
第07章shell的基礎(chǔ)知識167-203_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第7章shell的基礎(chǔ)知識203第7章shell的基礎(chǔ)知識目標完成此章學(xué)習(xí)后,你將掌握下列內(nèi)容:n 描述shell的作用。n 描述某用戶登錄時發(fā)生的事情。n 描述用戶環(huán)境的參數(shù)及其功能。n 設(shè)置和修改shell參數(shù)。n 理解并能修改特定的環(huán)境參數(shù),如PATH和TERM。n 配置用戶環(huán)境,使之能夠配合某特定的應(yīng)用程序。7.1什么是shell注釋shell作為程序,是一個具有交互性的命令行解釋器。它獨立于操作系統(tǒng)。這種設(shè)計思路使用戶可以靈活地選擇最適合用戶要求的接口。shell的作用在于等你鍵入命令、執(zhí)行一些特定的功能,然后將經(jīng)它解釋的命令傳到操作系統(tǒng)(內(nèi)核)執(zhí)行。本章內(nèi)容將介紹POSIX she

2、ll的交互性特點。POSIX shell不僅僅執(zhí)行用戶的命令,還通過與用戶交互,完成其他功能,且大多數(shù)功能在執(zhí)行用戶命令之前就完成了。shell的功能如下:n 搜索命令并執(zhí)行相關(guān)的程序。n 將shell未指定數(shù)值的變量的值替換為shell變量的值。n 對命令進行替換。n 用文件名生成字符補齊文件名。n 控制I/O重定向和管道。n 提供解釋性的編程接口,包括測試、分支和循環(huán)。當你登錄到UNIX系統(tǒng)時,shell會先為你的終端會話過程定義一些特定的特征,然后顯示你的提示符。這個提示符在POSIX、Bourne和 K shell中被默認為一個$ 符號。C shell的默認提示符是一個百分比符號(%)

3、。7.2常用的shell注釋POSIX是一個遵從POSIX標準的命令編程語言和命令解釋器,位于/usr/bin/sh。它可以執(zhí)行從終端和文件中讀來的命令。這個shell能夠和當前的POSIX標準保持一致,在HP-UX面世時這個標準已被人們所采用。POSIX shell在很多方面與Korn shell相似。它支持歷史命令、作業(yè)控制,還有其他多種有用的功能。Korn shell是一個命令編程語言和命令解釋器,位于/usr/bin/ksh。它可以執(zhí)行從終端和文件中讀來的命令。與POSIX shell相似,它也支持歷史命令、作業(yè)管理,還有其他多種有用的功能。Korn shell由AT&T Be

4、ll實驗室的David Korn開發(fā)而成。Bourne shell是一個命令編程語言和命令解釋器,位于/usr/old/bin/sh。它可以執(zhí)行從終端和文件中讀來的命令。這個shell缺少許多POSIX shell 和Korn shell的特征。Bourne shell由Stephen R. Bourne開發(fā),是AT&T UNIX最初采用的shell。C shell是一個命令語言解釋器,支持歷史命令緩存、類似語言的語法和作業(yè)控制。它由加州大學(xué)伯克利分校的William Joy開發(fā)。rsh和 rksh是Bourne shell和Korn shell相應(yīng)的限制版。限制版執(zhí)行環(huán)境的功能比一般

5、的shell受到的限制要多。限制版的shell工作起來就像有幾個功能不能實現(xiàn)的標準shell。使用限制版shell的用戶不能進行以下工作:n 修改目錄。n 重設(shè)PATH這個環(huán)境變量。n 在路徑名中使用“/”這個字符。n 重定向輸出。keyshell是標準shell的擴展版。它提供層次性的軟鍵菜單,為用戶寫命令行提供上下文相關(guān)的幫助。keysh由HP和AT&T開發(fā)。各種shell的特征比較見表7-1。表7-1各種shell的特征比較特 征描 述POSIXBourneKornC歷史命令命令可以存在緩存中供修改和重復(fù)使用是否是是命令行編輯用文本編輯器修改當前或以前的命令行是否是否文件名補齊在

6、命令行自動完成文件名的鍵入是否是是命令別名用戶可以重命名命令,自動包括命令的選項或縮短長命令行是否是是限制版一個安全性特征,其環(huán)境的功能受到限制是是是否作業(yè)控制跟蹤和訪問在后臺運行的進程是否是是7.3POSIX shell的特征注釋UNIX提供的其中一種shell是POSIX shell。 這個shell具有許多Korn shell擁有但Bourne shell沒有的特征。即使你不會用到POSIX shell所有的高級特征,但你會發(fā)現(xiàn)它提供了一個非常方便的用戶接口。以下是POSIX shell的一小部分特征:n 歷史命令n 命令行恢復(fù)和編輯n 作業(yè)控制n 文件名補齊n 別名命令n 增強的cd

7、命令用法n 高級的編程功能7.4別名化注釋別名是命令的一個新名字。使用別名可以縮短長命令行,創(chuàng)建新的命令,用別名命令的功能替換原標準命令的功能從而使標準命令執(zhí)行起來跟以前不同。別名可以是一個字母或者一個簡短的單詞。如,許多人常用命令ps ef。其實,用psf更方便??梢杂妹頰lias創(chuàng)建一個別名。$ alias name=string 其中name是命令的別名,string是被指定別名的原命令。如果string有空格,需用括號將其括起來。別名給使用者提供了方便,可以節(jié)省鍵入量、創(chuàng)建新的命令,使系統(tǒng)能夠理解并執(zhí)行常見的鍵入錯誤。鍵入別名命令和鍵入其他命令看上去是一樣的。用戶不知道其所執(zhí)行的命令

8、是UNIX系統(tǒng)的原有命令還是指向UNIX命令的別名命令。shell在執(zhí)行命令之前會擴展這個別名,然后執(zhí)行最終的命令行。如果用與系統(tǒng)交互的方式設(shè)定別名,這個別名將一直保持有效,直到退出系統(tǒng)為止。有些用戶發(fā)現(xiàn)shell的這種別名特征非常靈活,因此他們使其使用的UNIX系統(tǒng)能辨認出他們在另一個操作系統(tǒng)中常用的命令(如:alias dir=ls或者alias copy=cp -i)。別名常用來節(jié)省輸入完整的路徑名。不帶參數(shù)的alias會顯示所有當前定義的別名。要列出某特定別名的值,用alias name??梢杂胾nalias關(guān)閉別名,用法是:unalias name例子在一個命令行上可以使用幾個別名,

9、如:$ alias go=cd $ alias there=/home/user3/tree/ford/sports$ go there$ pwd$ /home/user3/tree/ford/sports為了能在一個命令行上引用多個別名,須在定義別名時將最后一個字符設(shè)為空格;不然,shell 不會認為下一個詞是別名。7.5文件名補齊注釋當訪問一個帶長文件名的文件時,文件名補齊非常方便。當輸入的字符足夠唯一確定該文件名時,按Esc Esc,這時POSIX shell會補齊文件名剩余的部分。如果提供的字符串還做不到唯一,POSIX shell將無法解析該文件名,這時必須再提供一些信息。出現(xiàn)文件名

10、沖突時,終端會發(fā)出鳴叫。只要沖突一消失,shell 就會補齊文件名??梢园碋sc = 列出可能選擇的文件名。POSIX shell顯示可選的文件名后,就可以用編輯器命令補上能唯一標記目標文件名的后續(xù)字符,然后按Esc Esc 補齊文件名。文件名補齊可以用在文件名路徑的任何地方。如:$ cd tr Esc Esc do Esc Esc r Esc Esc將顯示如下結(jié)果:$ cd tree/dog.breeds/retriever7.6命令歷史注釋POSIX shell維護著一個歷史文件,該文件存儲著曾經(jīng)輸入的命令。也可以重輸入這些命令。UNIX系統(tǒng)對歷史文件的維護跨越各個登錄進程。history

11、命令會顯示最近輸入的16個命令,每行用命令號開頭。當重輸入命令時,指定該命令相應(yīng)的命令號即可。可以顯示超過或少于16個的最近輸入的命令:history n其中n是要顯示的命令數(shù)目??梢燥@示一系列命令號:history a z其中a z 是一個命令號或一系列命令號。HISTSIZE參數(shù)定義可以訪問歷史命令的數(shù)目(默認的HISTSIZE值是128)。HISTFILE參數(shù)指定的是存儲已輸入命令的文本文件(默認的HISTFILE是.sh_history)。歷史命令列表顯示出來后,可以恢復(fù)、編輯或者重輸入任何其中一個命令。7.7重輸入命令注釋可以運行命令歷史列表中的任何命令,鍵入:r c其中c是命令號。

12、也可以輸入一個命令的首字母,這樣會執(zhí)行以該字母開頭的最近輸入的命令。如:$ history1 date2 cat file13 ls l$ r dMon Jul 4 10:03:13 19947.8回調(diào)命令注釋內(nèi)嵌在UNIX shell的編輯器中,應(yīng)用最廣泛的是vi,這個編輯器的基本功能是用來演示命令行編輯。將在后面的章節(jié)中學(xué)習(xí)vi的詳細用法。shell的歷史命令機制允許恢復(fù)以前輸入的命令,這樣不用重新鍵入這個命令行就可以重執(zhí)行該命令。還可以用vi編輯以前輸入的命令行。這些特性可節(jié)省大量的鍵盤輸入。如果你不是一個出色的打字員,還可以節(jié)省大量的時間和煩惱。為了讓vi命令在POSIX shell的

13、歷史機制中發(fā)揮作用,需要在你的環(huán)境中設(shè)定EDITOR變量。如果執(zhí)行了env命令,應(yīng)該看到下面這行:$ env.EDITOR=/usr/bin/vi如果這個參數(shù)還沒有設(shè)好,執(zhí)行下列命令設(shè)置這個參數(shù):$ EDITOR=/usr/bin/vi$ export EDITOR這兩個命令告訴POSIX shell你想用vi編輯器來回調(diào)和編輯歷史命令。如果想確保每次登錄時EDITOR參數(shù)已被正確設(shè)置,可以將這些命令放在.profile文件中。如果不設(shè)定EDITOR變量的值,其默認值是/usr/bin/ed指定的值。要回調(diào)前一個命令,只需按Esc。這時還不會看到屏幕有什么反應(yīng)。按Esc 的作用是將你置身于PO

14、SIX shell的vi環(huán)境中。這時可以使用許多一般的vi命令。如,按 k 在命令棧中移到后一個命令,繼續(xù)按 k ,會看到命令行每次顯示一個歷史命令。同樣,如果按 j ,會按相反方向滾動。當看見想重新執(zhí)行的命令出現(xiàn)在命令行上時,按Return。用history命令可以看到最近16個命令行及其命令號。如果想執(zhí)行某命令,按Esc n G,n是歷史命令列表中的命令行號;G是vi模式中的一個命令,作用是到達某個命令行。7.9命令行編輯注釋經(jīng)常需要回調(diào)一個命令,然后重新執(zhí)行,但首先要做一些小的修改。這時可以先按Esc,然后按 k ,這時回調(diào)的是最后一個命令。如果知道該命令的行號,可以先鍵入命令行號,然后

15、鍵入G,這樣可以回調(diào)要執(zhí)行的命令。如,假定history命令的結(jié)果是:120env121ls122cd123cd /tmp124pwd125history如果按 Esc k ,接著鍵入122G,下面的命令行會被回調(diào):cd在命令棧中定位命令的另一種方法跟以前一樣,先按Esc k ,然后按 / pattern。如,按Esc k 進入命令棧后,鍵入 / cd,可以定位最近的cd命令。如果再鍵入一個 / ,回調(diào)的是倒數(shù)第二個cd命令。一旦搜索了一個命令樣式后,鍵入n同樣會搜索下一個符合樣式的命令。定位到命令后,可以按 Return 執(zhí)行該命令,或者用下一節(jié)介紹的編輯命令進行編輯。如果不想執(zhí)行這個命令,

16、鍵入Ctrl + c 取消這個命令。7.10命令行編輯(續(xù))注釋當你鍵完一個很長的命令行時,常會發(fā)現(xiàn)在行首有一個錯誤。這時,你只能按Backspace,重新鍵入錯字后面的內(nèi)容。POSIX shell可以使你在執(zhí)行命令之前修改錯誤和修改命令行的部分內(nèi)容。這里使用的還是vi的編輯命令。為了修改一個命令行,須按Esc 進入編輯模式。這個模式可以編輯正在鍵入的命令行和用Esc 和 k 恢復(fù)的命令行。如果在編輯模式里,vi命令就可以工作了。如,x可以刪除一個字符,h和l可以在一行中左移和右移,cw可以修改一個詞,dw 可以刪除一個詞,等等。用vi命令可以訪問命令棧和編輯命令行。這種設(shè)計思路的優(yōu)點是:一旦

17、熟悉了vi命令,就掌握了使用命令棧的必要工具,不必學(xué)習(xí)另一種接口、另一組命令。用以下vi命令可以編輯命令行:h, Backspace ,l, Space ,w,b,$ 移動光標x,dw,p刪除和粘貼文本r,R,cw修改文本a,i進入鍵入模式(input mode)以添加文本為了能用vi命令訪問命令棧,需要設(shè)置變量EDITOR=/usr/bin/vi(其他可選的編輯器有g(shù)macs和emacs)。將每個命令行想像為一個微型的vi進程,你在每個命令行頭部均處于輸入狀態(tài)。要訪問以前輸入的命令,調(diào)用控制光標上移的vi命令,但在調(diào)用vi命令之前必須按 Esc 進入命令狀態(tài)。這時可以鍵入上移光標的vi命令

18、按 k 。連續(xù)按多個 k 就上移多個歷史命令。當希望運行的命令出現(xiàn)時,僅按Return 鍵就可以執(zhí)行這個命令,然后這個命令被追加到你的命令棧中。POSIX shell的主要好處是既可以輸入當前的命令,也可以輸入以前的命令。沒有必要按回格鍵返回到要修改或重新開始的地方。在輸入了一個有小錯誤的長命令行或者要修改參數(shù)時,這個特點尤其有用。出現(xiàn)這個特點之前,必須重新輸入整行,或者按Backspace ,然后重敲?;赑OSIX shell這個行編輯的特點,可以顯示一個以前輸入過的命令行,用vi命令對這行進行修改,然后執(zhí)行。所做的修改可以簡單到只改一個字符,也可以廣泛到將這個命令的整個參數(shù)列表都修改掉。

19、例子$ cp /usr/lib/X11/app-defaultsUsage:cp f1 f2 cp -r f1 . fn d1以上的命令原本應(yīng)該是cd,不是cp。POSIX shell可以修改這行而不用重敲。只是先按Esc,然后按 k ,這個命令行就會重現(xiàn)。按l,移動到cp的p字母處,然后用r命令將p替換為d。此時命令如下:$ cd /usr/lib/X11/app-defaults這時僅僅按一下Return 就可以執(zhí)行cd命令。如果在編輯命令行過程中存在困難,按一下 Break 就可以取消修改,這時可以回到正常的shell提示符下,這樣就可以再試一次。在編輯POSIX shell的命令行時不

20、要使用箭頭鍵。除了使用 h 和 l 鍵外,還可以使用Backspace 和空格條。字符錯位是另一種常見的打字錯誤。假設(shè)輸入下面這行, 其中ford 的r 和o寫反了。$ cd $ HOME/tree/car.models/frod/sportscd: directory not found可以用以下的步驟修改錯誤,然后再執(zhí)行:Esc k 按一次或多次直到顯示出目標命令行。 w 按多次直到光標移到frod的f下。 l 光標應(yīng)該位于frod的r下。 x p 刪除r,在o后面粘貼r。Return執(zhí)行該命令行。7.11用戶環(huán)境注釋環(huán)境描述了會話過程的許多內(nèi)容,其包括以下信息:n 主目錄的路徑名n 在哪

21、里存放emailn 工作的時區(qū)n 登錄的身份n shell從哪里搜索命令n 終端類型和大小n 應(yīng)用程序所依賴的其他東西例如,命令vi和more需要知道使用的終端類型,這樣它們才可以正確地格式化輸出結(jié)果。用戶環(huán)境可以比喻為辦公室環(huán)境。在辦公室里,像照明、噪聲和溫度等對于所有的工作人員都是一樣的。辦公室中只有你才擁有的因素構(gòu)成了你的特定環(huán)境。這些因素包括:你在做什么工作、你的辦公桌的布置、你和辦公室里其他人的關(guān)系等等。正如你的工作環(huán)境對于你是唯一的一樣,你的用戶環(huán)境也是唯一的。許多應(yīng)用程序要求在某些方面設(shè)置環(huán)境,這可以通過修改.profile文件來實現(xiàn)。當?shù)卿涍M系統(tǒng)時,可以運行命令env查看環(huán)境。

22、它會顯示設(shè)置在環(huán)境中的每一個因素。在env命令運行結(jié)果的列表中,“=”左邊是已經(jīng)設(shè)置的不同環(huán)境變量的名字,“=”右邊是相關(guān)參數(shù)的值。查看env(1)可以獲得更多的細節(jié)信息。每個環(huán)境變量的設(shè)置都有其理由。以下是一些常見的環(huán)境變量及其含義:TERM,COLUMNS和LINES描述所使用的終端HOME主目錄的路徑名PATH搜索命令地點的列表LOGNAME登錄用的用戶名env 和HISTFILE專用的POSIX shell變量DISPLAY專用的X Window 變量這些變量中有一些由系統(tǒng)來設(shè)定,其他的在/etc/profile或.profile中設(shè)定。7.12設(shè)定shell變量注釋shell變量與運

23、算式的變量類似。它是一個名字, 代表一個數(shù)值。UNIX的變量分配就是將一個值與一個變量名聯(lián)系起來。這樣可以通過變量名訪問這個值。如果這個值被修改,仍然可以通過同樣的變量名訪問到新的數(shù)值。將一個值分配給shell變量的語法是:name=value可以在終端的shell提示符后面或者在shell程序中輸入這個語句。注意在等號(=)的前后都沒有空格。這樣可以保證shell不會試圖將這個變量數(shù)值分配語句誤解為一個命令調(diào)用語句。區(qū)分shell變量名和shell變量值是很重要的。通過執(zhí)行預(yù)分配語句設(shè)定變量值,如:TERM=70092。這就要求shell記住名字TERM,以及當發(fā)生訪問TERM變量值的請求時

24、,用70092作出應(yīng)答。變量命名規(guī)定變量名必須以一個字母開頭(a-z和 A-Z),可以包含字母、數(shù)字或下劃線。對于變量名中字符的數(shù)目沒有限制。7.13兩個重要的環(huán)境變量注釋PATHPATH變量代表的是shell搜索命令的一系列目錄。這樣只需鍵入一個命令名,不用輸入該命令的完全路徑名(如:鍵入vi,不用鍵入 /usr/bin/vi)。下面是一個默認PATH變量的例子:PATH=/usr/bin:/usr/contrib/bin:/usr/local/bin這個例子表明,鍵入一個命令,shell將首先在/usr/bin搜索該命令,接著是/usr/contrib/bin,以此類推,直到在這些目錄找到

25、或者都找不到該命令。如果鍵入的命令在任何一個PATH目錄中都找不到,在屏幕上會顯示一個錯誤信息:command: not found。TERMTERM變量是一個描述使用終端類型的環(huán)境變量。為了使許多命令能正確執(zhí)行,這些命令需要知道使用的終端類型。如,ls命令需要知道屏幕上有多少列,more命令需要知道屏幕上有多少行,vi命令需要同時知道屏幕的行和列的數(shù)目,以及其他更多關(guān)于終端類型的信息,這樣它才能正常地工作。UNIX系統(tǒng)設(shè)置終端類型變量的默認方法是提示用戶輸入正確的終端類型:TERM=(hp)這時要么按 Return 把終端類型設(shè)為hp,要么鍵入正在使用的終端類型。終端類型hp是一個標準的80

26、列24行惠普終端。系統(tǒng)管理員已經(jīng)設(shè)置好了你的系統(tǒng),UNIX系統(tǒng)不會向你提問你的終端類型。在這種情況下,應(yīng)該用env命令查看TERM變量值。如果使用的工作站僅用一種顯示器,TERM變量很可能已被正確設(shè)置,不必修改。當使用命令more 或vi時,如果終端表現(xiàn)很異常,查一下TERM變量的值。如果它已被正確設(shè)置,執(zhí)行命令tset。這個命令將按TERM變量的值設(shè)置終端的特征。7.14常見變量的分配值常見變量的分配值用粗體顯示的變量名是需要設(shè)置的變量。n EDITOR=/usr/bin/vi用vi命令作行編輯。n ENV=$ HOME/.shrc在啟動shell時執(zhí)行$ HOME/.shrc。n HOME

27、=/home/user3指定登錄目錄。n FCEDIT=/usr/bin/vi對歷史命令行啟動vi編輯進程。n (波浪線)在POSIX shell中相當于主目錄。n HISTFILE=$ HOME/.sh_history指定存儲所有輸入過的交互式命令的文件。n LOGNAME=user3 指定登錄標識符或者用戶名。n MAIL=/var/mail/user3 系統(tǒng)使用的郵箱。n OLDPWD=/tmp 指定(說明)前一個目錄的位置。n PATH=/usr/bin:$ HOME/bin 指定搜索命令的目錄。n PS1= 指定主提示符。PS1=! $ 顯示命令行號和提示符。PS1=$PWD $ 顯

28、示當前工作目錄和提示符(注意:必須用單引號()括起來,不能用雙引號(”)。PS1=! $PWD $ 顯示命令行號、當前工作目錄和提示符。n PWD=/home/user3/tree 指定當前工作目錄。n SHELL=/usr/bin/sh 指定命令解釋器程序。n TERM=2392a 指定你的終端類型。用命令:eval test s Q -h 在啟動過程中,系統(tǒng)會讀取文件/etc/ttytype,用里面提供的信息正確設(shè)置終端類型。當有不同類型的終端聯(lián)接到你的系統(tǒng)時,這點非常有用。n TMOUT=300如果在指定的秒數(shù)內(nèi)沒有鍵入命令或回車鍵,shell會終止或者超時。n TZ=EST5EDT指定

29、系統(tǒng)用來顯示時間的時區(qū)。TERM變量必須正確設(shè)置TERM變量,這樣UNIX系統(tǒng)才能知道終端的特征。許多命令需要知道正在使用的終端類型才能正確輸出結(jié)果。如more和vi為了正確控制屏幕輸出結(jié)果,必須知道顯示器的行數(shù)和列數(shù)??梢酝ㄟ^變量分配直接定義TERM變量的值,或者用tset 命令分配,這個命令取決于正在使用的終端類型和文件/etc/ttytype中相應(yīng)的值。表7-2總結(jié)了一些不同終端模型及其對應(yīng)的TERM值。如果使用的終端模型不在其中,可以查看/usr/lib/terminfo下的子目錄。表7-2不同終端模型及其對應(yīng)的TERM值終 端 模 型TERM值HP 2392a2392aHP 7009

30、270092Hp 7009470094vt 100vt100Wyse 50wy50Medium resolution graphics display(512 5 600 pixels)300l 或者 hp300lHigh resolution graphics display(1024 5 768 pixels) 300h 或者 hp300hHP 98550 display station(1280 51024 pixels) 98550、hp98550、98550a或者 hp98550aHP 98720 or HP 98721 SRX(1280 51024 pixels) 98720、hp

31、98720、98720a、hp98720a、98721、hp98721、98721a或者hp98721aHP 98730 or HP 98731 Turbo SRX(1280 5 1024 pixels) 98730、hp98730、98730a、hp98730a、98731、hp98731、98731a或者hp98731a7.15登錄時發(fā)生的事情注釋當你坐下來要在系統(tǒng)上開始工作時,會看到屏幕上有一個login:提示符。鍵入你的用戶名后,系統(tǒng)讀進你的名字,提示你輸入密碼。鍵入密碼后,系統(tǒng)檢查密碼文件/etc/passwd,核對用戶名和密碼。如果鍵入的用戶名和密碼正確,系統(tǒng)會將你放在你的主目錄,

32、為你啟動一個shell。每次登錄都會看到這樣的情況。那么,當shell被啟動時,真正發(fā)生了什么事情呢?1getty(1) 顯示文件/etc/issue的內(nèi)容。(2) 發(fā)出登錄提示符。(3) 運行登錄程序。2login(1) 核對用戶名和密碼。(2) 將用戶置于Home目錄。(3) 運行用戶的shell。3shell(1) 運行/etc/profile POSIX,Bourne和 Korn shell或者/etc/csh.login(C shell) 。(2) 運行用戶主目錄中的.profile或.login。(3) 執(zhí)行用戶主目錄中的.kshrc文件,如果用戶已經(jīng)創(chuàng)建該文件,則在.profil

33、e文件中將這個ENV變量寫到.kshrc。(4) 發(fā)出shell提示符。一旦shell開始運行,它會從/etc/profile這個系統(tǒng)命令文件讀出命令。任何人在任何時候登錄和啟動一個shell,系統(tǒng)都會讀取該文件。在主目錄還有一個.profile文件。讀取/etc/profile后,shell會讀取.profile文件。這兩個文件用來設(shè)置一個用戶的環(huán)境。/etc/profile搭建起系統(tǒng)每個用戶的基本環(huán)境,.profile 進一步細化環(huán)境使其適應(yīng)用戶的要求。既然每個人都使用/etc/profile,那么系統(tǒng)管理員要承擔起維護這個文件的責任。但為了搭建用戶環(huán)境,維護.profile是你的責任。完

34、成這兩件事情后,shell發(fā)出第一個shell提示符。有關(guān)CDE的注釋如果用CDE登錄,CDE通常不使用/etc/profile、$ HOME/.profile和$ HOME/.login這幾個登錄腳本。但可以強迫執(zhí)行$ HOME/.profile (sh 或者ksh用戶)或$ HOME/.login(csh用戶),方法是在.dtprofile中設(shè)置下面這個環(huán)境變量:DTSOURCEPROFILE=true如果不設(shè)置這個變量為true,用CDE登錄只執(zhí)行.dtprofile。.dtprofile包含已被注釋掉的參數(shù)配置,這些參數(shù)用來設(shè)定CDE環(huán)境。7.16shell啟動文件注釋需要用一些環(huán)境變

35、量來配置會話過程(如:PATH、EDITOR)。也許你已經(jīng)看到,如果以交互的方式定義這些變量的值,那么每次登錄后必須重新定義這些變量。文件.profile和.kshrc的作用就是幫助使用者配置其會話過程。這些文件是簡單的shell腳本,可以定義環(huán)境變量、定義別名、在用戶登錄時執(zhí)行指定的程序。記?。篜OSIX shell源于Korn shell,而Korn shell則源于Bourne shell。因此,POSIX shell 除了支持.kshrc外,還支持Bourne shell支持的.file任何一個用戶如果想定制系統(tǒng)管理員提供給他的默認環(huán)境,他必須創(chuàng)建或者修改文件.

36、profile。這個文件通常用來在登錄過程中定義或者設(shè)置環(huán)境變量、建立用戶的終端、執(zhí)行程序(如date)。在.profile中加入exec applicationname可以啟動用戶的應(yīng)用程序。在這種情況下用戶將無法看到shell提示符,當應(yīng)用程序執(zhí)行完畢時,用戶將退出系統(tǒng)。/etc/profile/etc/profile是一個影響到整個系統(tǒng)的啟動文件,由所有使用Bourne 、Korn、POSIX shell的用戶執(zhí)行。系統(tǒng)管理員也許要配置這個文件以保證所有用戶的應(yīng)用程序能在一個一致的環(huán)境中執(zhí)行。普通用戶沒有這個文件的寫權(quán)限,因此不能修改這個文件的內(nèi)容。用戶可以通過修改他們?nèi)耸忠环莸?pro

37、file 或者.kshrc文件來定制其的環(huán)境。.kshrcPOSIX shell 和K shell都有一個可選的配置文件.kshrc。它非常像.profile,可以用來配置用戶環(huán)境。但與.profile不同的是,.kshrc不僅僅在登錄時被讀取,而且在每次啟動一個新的shell時被讀取。這樣每次啟動一個shell時,都可以創(chuàng)建別名甚至提示符。例如,X11Windows這樣的環(huán)境可以同時運行幾個shell。也可以用.kshrc文件,以便這些shell 看上去都一樣。.kshrc這個文件名并不是系統(tǒng)要求的名字。當激活shell時,它查找ENV變量指向的文件。這個文件通常命名為.kshrc,但可以按

38、照你的意愿命名。為了使用.kshrc文件,必須在.profile文件中定義一個新的環(huán)境變量(如果用的是HP VUE,在.vueprofile中定義這個變量)。這個變量就是ENV變量。在.profile文件中加入以下兩行:ENV=/.kshrcexport ENV這個命令告訴K shell你想使用起始目錄中的.kshrc文件(/.kshrc)。這時可以加入你使用的所有別名命令到文件.kshrc中。如果所處環(huán)境用的是Bourne shell 和POSIX shell,也許須將POSIX shell特有的變量及其數(shù)值存在.kshrc這個文件中,因為Bourne shell不會讀取這個文件。.cshr

39、c 和.login當?shù)卿涍M以C shell為登錄外殼的系統(tǒng)時,這個shell在起始目錄查找名為.login的文件。如果找到,出現(xiàn)第一個shell提示符之前將執(zhí)行這個文件中的命令。這點與POSIX 、Bourne和 Korn shell使用.profile完全一樣。如果找到.cshrc文件, 出現(xiàn)第一個shell提示符之前同樣將先執(zhí)行這個文件中的命令。7.17shell內(nèi)置命令與UNIX命令注釋鍵入的命令中有些是某個目錄(例如/usr/bin)中的文件。這些命令是UNIX命令。但有很多命令,如cd、pwd和echo等,事實上已經(jīng)內(nèi)置在shell本身當中。這些命令并不以文件的形式存在于UNIX文件

40、系統(tǒng)中,而類似于這個shell程序中的子程序。這些命令是內(nèi)置shell命令。既然UNIX命令存在于幾個目錄中,shell必須知道在哪里開始查找這些命令。shell中的PATH變量定義了查找的目錄和在這些目錄查找的順序。有些UNIX命令與shell內(nèi)置命令的名字一樣,但是,如果要訪問這些UNIX命令,用戶必須使用命令的絕對路徑名,以告訴shell使用的是UNIX命令而不是shell內(nèi)置的命令。7.18查找命令 whereis注釋UNIX主要在四個目錄下存放命令:/sbin、/usr/bin、/usr/local/bin、/usr/contrib/bin。whereis命令搜索這些目錄和其他目錄以

41、判斷某特定命令是否存在。許多用戶在其登錄目錄下設(shè)有自己的bin目錄。whereis不會搜索這些目錄。有時你忘了某個命令的位置及其在手冊中的所處章節(jié),whereis可提供一個途徑定位命令文件和定位命令在手冊中的位置。whereis命令接受單個參數(shù)某命令的名字。它返回的是該命令可執(zhí)行代碼的位置及其在手冊中的位置。whereris將搜索表7-3所列的目錄。表7-3whereris搜索的目錄/usr/src/*/usr/sbin/sbin/usr/bin/usr/lbin/usr/ccs/bin/usr/share/man/*/usr/local/man/*/usr/local/bin/usr/loc

42、al/games/usr/local/include/usr/local/lib/usr/contrib/man/*/usr/contrib/bin/usr/contrib/games/usr/contrib/include/usr/contrib/lib/usr/share/man/$ LANG/*/usr/local/man/$ LANG/*/usr/contrib/man/$ LANG/*如果想修改whereis搜索的目錄列表,用標記-b、-m或-s使搜索相應(yīng)限制在二進制代碼、手冊或者源代碼的范圍內(nèi)。7.19.profile樣本.profile樣本如下:# Set up the comm

43、and search paths:PATH=.:/bin:/usr/bin;export PATH# Define the promptPS1=“$ ”;export PS1# Set up the terminal :# The h option in the following tset command tells the shell to# find the appropriate terminal type to assign to TERM from the# file /etc/ttytypeeval tset s Q h# You could also hardcode your

44、 terminal type with:# TERM=2392a# Map control characters# The intr “C” maps Ctrl-c instead of DEL for program interruptstty erase “H” kill “U” intr “C” eof “D” susp “S”stty brkint hupcl ixon ixoff# Uncomment the following line if you want to change default permissions# umask 022# Set up POSIX shell

45、variables# Inform the POSIX shell to reference the $ HOME/.kshrc file# Aliases are usually defined hereenv=$ HOME/.kshrcexport ENV# The following variables are used to set up the command stack# and the history featureEDITOR=/usr/bin/vi; export EDITORHISTSIZE=50; export HISTSIZEHISTFILE=$ HOME/.sh_hi

46、story;export HISTFILEFCEDIT=/usr/bin/vi; export FCEDIT# Run the script .logout to clean out the history file# created by the POSIX shell command stacktrap “$ HOME/.logout” 0# The following lines can be updated for your application and uncommented# if you want your application to start automatically

47、when logging in# exec /usr/bin/myapplicationname7.20.kshrc 樣本和.logout樣本.kshrc樣本# Customize the prompt# The ! will display the command number in the prompt# PS1=! $ # The $ PWD will display the present working directory in the prompt # PS1=! $ PWD $ # The hostname will display the system name in the pro

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論