国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Shell介紹

2019-11-17 05:49:24
字體:
來源:轉載
供稿:網友
#版權宣告: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






發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 从化市| 界首市| 汉阴县| 怀化市| 吴旗县| 衡阳县| 凌源市| 乐都县| 襄樊市| 安化县| 西吉县| 大名县| 泽库县| 南雄市| 阿拉善盟| 齐河县| 临海市| 凌源市| 广水市| 苏州市| 离岛区| 上饶县| 富平县| 瑞昌市| 务川| 乌拉特前旗| 泰来县| 邛崃市| 黑河市| 海安县| 台南市| 玛沁县| 涿州市| 红桥区| 合水县| 荔浦县| 博罗县| 新安县| 芦溪县| 聊城市| 高淳县|