Shell介紹

#版權宣告:1999CopyrightOLS3Allrightsreserved.

#作者:OLS3(臥龍小三)

#本講義僅供台南縣87學年度網路治理進階研習班上課之用.

#學員可保存一份自用,供日後網管時參考備查.

#作者保有一切形式的著作權.

#欲作其它用途者,需經作者授權同意.

#未經作者授權同意之前,請勿轉載刊登.

Shell

當我們登入Linux之後,第一個接觸到的,便是Shell.我們必須對它有點初步的熟悉才行.

一.Shell簡介.

Linux系統分成三個重要的部份

核心

Shell

工具程式

核心的部份相當低階,操作者不易和它直接溝通,因此,必須要有一個友善的介面(interface),使得操作時能更爲方便,這個介面便是Shell.

換言之,Shell就是一個居於核心和操作者之間的一層使用者介面.

那麽,爲何稱它爲Shell呢?Shell的本意是"殼"的意思呢!

沒錯,在核心的外面,包覆著一層外殼,用來負責接收使用者輸入的指令,然後將指令解譯成核心能夠了解的方式,傳給核心去執行,再將結果傳回至預設的輸出周邊.

如圖所示:

例如:鍵入

ls-l

shell給你以下回應:

檔有

案檔

種案檔案大小最近修改的

類檔案權限數擁有人組別(byte單位)日期及時間檔案名稱

drwxr-xr-x14rootroot1024Jul2121:31.

drwxr-xr-x17rootroot1024Apr1112:01..

drwxr-xr-x882821024Feb2519:23apache

-rw-r--r--1rootroot1335460Feb2517:45apache_1_3_4.tar.gz

drwxr-xr-x6rootroot1024Aug311998FTP

drwxr-xr-x5rootroot1024Aug311998httpd

drwx------2jamesjames1024Apr2306:47james

drwxr-xr-x2rootroot12288Aug311998lost found

drwxr-xr-x2msqlnobody1024Dec281998msql

drwxr-xr-x28ols3ols32048Jul1921:38ols3

drwxr-xr-x31022nobody1024Jan2523:40ols3cgi

drwxrwxr-x3perlols31024Feb207:11perl

-rw-------1rootroot2097152Jul2118:39quota.group

-rw-------1rootroot1278656Jul2118:39quota.user

drwxrwxr-x2rootnobody1024May111998samba

drwxr-xr-x3apachenobody1024Feb2516:58temp

drwxrwxr-x2webadmnobody1024Mar1416:34webadm

其實不只是Linux有這一層Shell,其它作業系統也有.

比如DOS的command.com,Windows的GUI(GraphicalUserInterface),Mac的GUI.

Shell按著表現的方式與讀取使用者輸入種類的不同,可分爲二大類:

Textbase:文字導向

Graphbase:圖型導向

所謂"讀取使用者輸入種類不同"是指:讀取自鍵盤,或讀取自滑鼠,其它serialinput,螢幕觸控等.

這樣說來,Shell似乎只是命令直譯器罷了?!

嗯,這倒要按不同的OS所附給的Shell其功能和選擇性的自由度而定.

以DOS的COMMAND.COM而言,它就是一個十足的命令直譯器,除了一點點batch檔的能力之外,它的功能並不多.Win平台的GUI,則是一個圖型式的命令直譯器,介面十分友善.不過,這二種OS,不能讓你自由而簡單地選擇Shell.(以前DOS有4dos可選用)

Linux的shell,除了做爲命令直譯器之外,它也是一個不錯的程式語言,是系統治理維護時的重要工具.

由於Unix家族,對Shell的處理,采獨立自由開放的方式,因此,Shell的種類相當地多,更可以讓人自由地更換(chsh).

目前流行的shell有:

Bourneshell:sh

Cshell:csh

Kornshell:ksh(商業軟體)

tcsh(free)

BourneAgainshell:bash(GNU)

Linux的標准shell是采用bash.它也是我們要學習的主要對象.

二.Shell的簡史

第一個重要的shell是Bourneshell(如此命名是爲了紀念此shell的發明者StevenBourne),1979年第一個流行的Unix版本7發行時,開始使用Bourneshell.

Bourneshell的主檔名爲sh,因此,日後人們便以sh爲Bourneshell的主要識別名稱.

雖然Unix上的shell有許多種,但Bourneshell的地位至今仍然沒有改變.許多Unix系統中仍然使用sh做爲重要的治理工具.(它的工作從開機到關機,幾乎無所不包)

第一個廣爲流行使用的shell變種是Cshell.Cshell主要附在BSD版的Unix系統中.它的作者是柏克萊大學的BillJoy.Cshell主要是因爲其語法和C語言相類似,因而得名.這使得Unix系統的程式師,在學習Cshell時,感到相當地方便輕易.

以上這二種形成shell的二大主流,後來的變種shell大都攫取這二種shell的優點.

比如Korn,tcsh及bash.

Bashshell是GNU計劃的重要工具軟體之一,也是GNU作業系統中標准的shell.

Bash相容於sh,因此,許多早期開發出來的Bourneshell都可以繼續在bash中運作.現在我們安裝好的RedHatLinux便是完全使用Bash.(/bin/sh->/bin/bash)

Bash在1988年誕生,最初的作者是BrianFox,ChetRamey於1989加入,現在官方正式的維護者是ChetRamey,他的工作便是持續不斷地增強bash的功能.

1995~1996期間推出bash2.0,在這之前,廣爲使用的版本是1.14.x,它增加了許多新的功能,以及更好的相容性.

當然,Bash是完全免費的,它是OpenSource的一員,原始碼全部開放.

二.Bash的功能.

Bash具有以下功能:

相容於Bourneshell(sh)

包含有Cshell以及Kornshell中最好的功能.

具命令列編修的能力(您記得以前DOS中的doskey嗎?)

工作控制(jobcontrol)的能力,可控制前景及背景程式

具shell程式設計的能力,可讓您自訂shell及設計程式,治理系統.

三.新版的Bash哪裏抓取?

若欲抓取新版的bash,可至http://www.gnu.org或其mirror站台.

中研院FTP也是不錯的選擇.ftp://ftp.sinica.edu.tw或ftp://linux.sinica.edu.tw

三.開始使用Bash

當你login進Linux主機時,便開始和bash互動,一直到你logout主機(下exit,logout,或按^D)爲止.

Bash的提示符號爲$(代表一般身份使用者),當您具有root權限時,提示符號則變爲#.

一旦出現提示符號時,您便可以開始鍵入操作命令列(commandline)了.

命令可分爲二大類:

bash內建的指令

程式

假如是bash內建的指令,則由bashshell負責回應;若是程式,則shell會找出該程式,然後將控制權交給核心,由核心執行該程式,執行完之後,再將控制權交回給shell.

怎麽知道那些指令是bash內建的,那些是程式呢?通常用"which指令",若沒有任何回應,表示是內建的指令(除非該指令錯誤、不存在,或該程式不在預設的搜尋路徑之內),例如下:

[ols3@ols3/ols3]$whichecho[沒有回應,表示是內建的指令]

[ols3@ols3/ols3]$whichls

/bin/ls

四.命令列的格式.

命令列通常由好幾個字串組成,中間用空白或tab鍵分開.如下所示:

commandoptionsarguments(或稱爲parameters)

命令選項參數

rm-rf/home/ols3

除了空白和tab鍵之外,每一部份,我們稱之爲token,比如上面的例子中,便有三個token:rm,-rf,/home/ols3.

當鍵入此一命令列時,shell首先將它分解成個別的token,然後判定是內建的指令,或是程式,再按之前提過的方式去執行.

怎麽知道一個命令或程式,它有那些選項和參數呢?通常man一下該指令,就可以得到了.例如:

manrm

另外,多行指令也可以一下全部寫在同一命令列中,只要中間用;分開,如:

ls;mkdirtest;clear

五.現行目錄和自家目錄.

所謂現行目錄(currentDirectory)是指:你現在所處的位置,又稱爲工作目錄(workingdirectory).

欲知現行目錄爲何?可下pwd指令便知.

所謂自家目錄(homedirectory)是指:當初root爲你建立帳號時,所指定給你的一個私人專用的目錄,也是你登入系統之後,第一個進入的地方.

欲知自家目錄,可用下列方式:

cd(然後直接按Enter)

cd~(~代表自家目錄)

cat/etc/passwdgrep您的帳號

相關的技巧

cd./myway(進入目前目錄下的myway目錄中)

cd..(回到上一層目錄)

cd-(回到先前的目錄)

六.萬用字元.

假如命令列的參數中,含有檔名,那麽萬用字元(wildcards)可以帶來十分便利的操作.(不過若使用不當,也是惡夢的開始)

假如各位以前有過DOS的操作經驗,應該還記得*及?所代表的意義吧?!

以下是bash中使用的萬用字元:

?代表任何單一字元(character)

*代表任何字串(注重:0個以上的字元,例:*yes將包含yes或yes-or-not)

[字元組合]在中括號中的字元皆符合,如:[a-z]代表所有的小寫字母

[!字元組合]不在中括號中的字元皆符合,如:[!0-9]代表非數字的字元皆符合

七.輸入和輸出與重新導向.

當Linux系統完成開機之後,預設上,便開有三個檔案,這三個檔案是做爲輸入、輸出以及顯示錯誤之用的.

我們稱之爲:

標准輸入:通常是鍵盤,檔案代碼爲0

標准輸出:通常是螢幕,檔案代碼爲1

標准錯誤:通常標准輸出相同(也就是螢幕),檔案代碼爲2

雖然系統已幫你設好了這三個檔案,但我們仍然可以視需要,適時地改變輸入,輸出,及錯誤這三者至不同的地方.這種改變標准輸出入的動作,我們稱之爲"I/O重新導向"(I/ORedirection).

例如:

ls-la>myfile就是將查詢的結果重新導向至myfile中(本來是應該出現在螢幕上的)

catmyfile便可以看見ls-la的結果.

catyoufile就是將myfile的內容拷貝給youfile.

>代表將輸出轉向

<代表將輸入轉向

另一個會將輸出入轉向的機制是"管線"(Pipelines).

所謂的管線就是將一個程式的輸出當成另一個程式的輸入.

例如:cat/etc/passwdgrepols3

上面這段指令的意思是說:把/etc/passwd檔的內容顯示結果(即輸出)丟給grep這個指令當作輸入值,然後由grep從中找出包含要害字ols3的資料列.

八.前景與背景工作.

Linux是多人多工的作業系統,這意謂Linux可以讓多人同時使用,更可以同時執行許多程式.

一般而言,你所執行的指令會一直握著控制權,一直到程式結束爲止,我們稱爲這樣的執行工作是在前景工作(foregroundjobs),假如,執行指令時,你仍然可以再做其它的事情,那我們就稱它是在背景工作.

通常比較耗時間的工作,我們會把它丟到背景去執行,而這期間,我們仍然可以和shell繼續溝通,下達其它命令給shell去執行.

例如:我們想從中研院的FTP伺服器下載某一個目錄中所有的檔案,但又不想等它執行完畢(因爲這樣耗時間,也很無聊),可以用以下的方式來達成:

ncftp-Rftp://linux.sinica.edu.tw/pub1/redhat/powertools&

其中&這個符號便是將命令列丟到背景去執行的指令.

假如您想離線之後,仍然令系統繼續傳檔,可以在前面再加一個nohup的指令,如下:

nohupncftp-Rftp://linux.sinica.edu.tw/pub1/redhat/powertools&

nohup是nohangup即不挂斷之意.

八.非凡字元及引號.

有許多字元,對shell來說,是具有非凡意義的.詳列於下:

符號意義

~自家目錄

`命令取代

#解

$變數取值

&背景工作

*萬用字元

(子shell開始

)子shell結束

\使非凡字元恢複本意

管線

[字元組合開始

]字元組合結束

{命令區塊開始

}命令區塊結束

;命令分隔號

'單引號(不具變數置換的功能)

"雙引號(具置換的功能)

<輸入轉向

>輸出轉向

/路徑分隔號

?萬用字元

!管線邏輯意義上的NOT

九.常用控制組合鍵.

我們在操作Linux時,常會使用一些組合鍵來控制shell的活動.

詳列如下:

組合鍵意義

Ctrl-C中止目前的命令

Ctrl-\同上

Ctrl-D輸入結束,即EOF之意(如使用mail信件結束時);或logout登出Linux

Ctrl-Z暫停目前的命令

Ctrl-M相當按Enter

Ctrl-S暫停螢幕輸出

Ctrl-Q恢複螢幕輸出

Ctrl-U將命令列整列刪除

Ctrl-?刪除最後一個字元,相當於按Del

十.指令練習.

指令選項或參數意義

ls

pwd

which

more

less

passwd

man

cat

toUCh

cd

mkdir

rmdir

cp

rm

head

tail

wc

grep

ps

Shell用戶限制應用的方法介紹
例:限制用戶benny只能使用FTP和E-mail服務,而不能使用telnet和ssh登入錄[root@localhost]#vi /etc/passwdradvd:x:75:75:radvd user:/:/sbin/nologinamanda:x:33:6:Amanda user:/var/lib/amanda:/bin/bashpegasus:x...查看完整版>>Shell用戶限制應用的方法介紹
 
Shell編程(7)- 正則表達式介紹
1、句點“.”可以匹配任意單字符。2、在行首以^匹配字符串或字符序列3、在行尾以$匹配字符串或字符4、使用*匹配字符串中的單字符或其重複序列5、使用\屏蔽一個特殊字符的含義($.'"*|^()\+? )6、使用[]匹配...查看完整版>>Shell編程(7)- 正則表達式介紹
 
Linux Shell學習:uniq命令使用方法介紹
uniq命令的作用:顯示唯一的行,對于那些連續重複的行只顯示一次! 接下來通過實踐實例說明: [root@stu100 ~]# cat test boy took bat home boy took bat home girl took bat home dog brought hat home dog brough...查看完整版>>Linux Shell學習:uniq命令使用方法介紹
 
菜鳥樂園:Linux系統Shell入門命令介紹
關機:halt,reboot,poweroff 小解: halt停止系統運行,不關閉電源 reboot重新啓動系統 poweroff停止系統運行,並關閉電源 切換到超級用戶:su 目錄操作:mkdir,rmdir,cd 小解: mkdir創建一個新目錄 rmdir刪除目錄 cd切換到...查看完整版>>菜鳥樂園:Linux系統Shell入門命令介紹
 
Linux Shell學習:uniq命令使用方法介紹
uniq命令的作用:顯示唯一的行,對于那些連續重複的行只顯示一次! 接下來通過實踐實例說明: [root@stu100 ~]# cat testboy took bat homeboy took bat homegirl took bat homedog brought hat homedog brought hat...查看完整版>>Linux Shell學習:uniq命令使用方法介紹
 
Wscript.Shell 對象詳細介紹
WshShell 對象ProgID Wscript.Shell 文件名 WSHom.Ocx CLSID F935DC22-1CF0-11d0-ADB9-00C04FD58A0B IID F935DC21-1CF0-11d0-ADB9-00C04FD58A0B 下表說明和 WshShell 對象有關的屬性。屬性 說明 Environment 返回 Ws...查看完整版>>Wscript.Shell 對象詳細介紹
 
linux與unix shell編程指南_(7)正則表達式介紹
正則表達式介紹1、使用句點匹配單字符 句點“.”可以匹配任意單字符。“.”可以匹配字符串頭,也可以是中間任意字符。假定正在過濾一個文本文件,對于一個有1 0個字符的腳本集,要求前4個字符...查看完整版>>linux與unix shell編程指南_(7)正則表達式介紹
 
SPB Mobile Shell 5.0即將上市
在MWC 2010展示的SPB Mobile Shell 5.0,看來離正式上市時間不遠了,它是一款給智能型手機所用的第三方接口,今天宣布先在ODM、OEM與電信業者的裝置上使用。SPB Mobile Shell 5.0會有以下特點:真實3D接口顯示支持An...查看完整版>>SPB Mobile Shell 5.0即將上市
 
SPB Mobile Shell 5.0 公布!支持 Android、Symbian 及 WM
SPB Mobile Shell 5.0 公布!支持 Android、Symbian 及 WM
[撰文:Stone IP]我們在 Toshiba TG02 動手玩上己經看到一些有關 SPB Mobile Shell 的畫面,而現在 SPB Mobile Shell 5.0 也正式公布,除了提供予廠商外,也將直接發售予消費者。比較特別的是 SPB Mobile Shell 除了...查看完整版>>SPB Mobile Shell 5.0 公布!支持 Android、Symbian 及 WM
 
 
回到王朝網路移動版首頁