第1問:為何叫做shell?
在介紹 shell 是什么東西之前,不妨讓我們重新審視使用者與電腦的關系。我們知道電腦的運作不能離開硬件,但使用者卻無法直接對硬件作驅(qū)動,硬件的驅(qū)動只能透過一個稱為“操作系統(tǒng)(Operating System)”的軟件來控管,事實上,我們每天所談的linux,嚴格來說只是一個操作系統(tǒng),我們稱之為“核心(kernel)”。然而,從使用者的角度來說,使用者也沒辦法直接操作kernel,而是透過kernel的“外殼”程序,也就是所謂的shell,來與kernel溝通。
這也正是kernel跟shell的形像命名關系。
從技術角度來說,shell是一個使用者與系統(tǒng)的互動界面(interface),主要是讓使用者透過命令行(command line)來使用系統(tǒng)以完成工作。因此,shell的最簡單的定義就是---命令解釋器(Command Interpreter):
將使用者的命令翻譯給核心處理, 同時,將核心處理結果翻譯給使用者。每次當我們完成系統(tǒng)登入(log in),我們就取得一個互動模式的shell,也稱為login shell或primary shell。若從行程(process)角度來說,我們在shell所下達的命令,均是shell所產(chǎn)生的子行程。這現(xiàn)像,我們暫可稱之為fork。如果是執(zhí)行腳本(shell script)的話,腳本中的命令則是由另外一個非互動模式的子shell(sub shell)來執(zhí)行的。也就是primary shell產(chǎn)生sub shell的行程,sub shell再產(chǎn)生script中所有命令的行程。(關于行程,我們?nèi)蘸笥袡C會再補充。)
這里,我們必須知道:kernel與shell是不同的兩套軟件,而且都是可以被替換的:
不同的操作系統(tǒng)使用不同的kernel, 而在同一個kernel之上,也可使用不同的shell。在linux的預設系統(tǒng)中,通常都可以找到好幾種不同的shell,且通常會被列于如下檔案里:
/etc/shells
不同的shell有著不同的功能,且也彼此各異、或說“大同小異”。常見的shell主要分為兩大主流:
sh:
csh:
c shell(csh) tc shell(tcsh) korn shell(ksh)大部份的Linux系統(tǒng)的預設shell都是bash,其原因大致如下兩點:
自由軟件 功能強大bash是gnu project最成功的產(chǎn)品之一,自推出以來深受廣大Unix用戶喜愛,且也逐漸成為不少組織的系統(tǒng)標準。
第2問:shell prompt(PS1)與 Carriage Return(CR)的關系?
當你成功登錄進一個文字界面之后,大部份情形下,你會在熒幕上看到一個不斷閃爍的方塊或底線(視不同版本而別),我們稱之為游標(cursor)。游標的作用就是告訴你接下來你從鍵盤輸入的按鍵所插入的位置,且每輸入一鍵游標便向右邊移動一個格子,若連續(xù)輸入太多的話,則自動接在下一行輸入。假如你剛完成登錄還沒輸入任何按鍵之前,你所看到的游標所在位置的同一行的左邊部份,我們稱之為提示符號(prompt)。提示符號的格式或因不同系統(tǒng)版本而各有不同,在Linux上,只需留意最接近游標的一個可見的提示符號,通常是如下兩者之一:            
新聞熱點
疑難解答