| 订阅 | 在线投稿
分享
 
 
 

Shell介绍

来源:互联网网民  宽屏版  评论
2008-06-01 01:17:21

#版权宣告: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

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
#版权宣告: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
󰈣󰈤
 
 
 
>>返回首页<<
 
 热帖排行
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有