Unix/Linux下的Shell命令解释程序

Unix的Shell是作为操作系统的最外层,也称外壳。它有以下几种身份:

作为命令语言:为用户提供使用操作系统的接口,用户利用该接口与机器交互;

作为程序设计语言:用户可以利用多条Shell命令构成一个文件,称为Shell文件或Shell过程;

作为Shell命令解释程序:用于对从标准输入或文件中读入的命令进行解释执行。

本章主要介绍Shell命令语言。

一 简单命令

简单命令是一个能完成某种功能的目标程序的名字,按功能将命令分为如下五大类:

(1)进入与退出系统

进入系统也成为注册,用户须与系统管理员商定一个唯一的用户名,管理员用该名字在系统文件树上,为用户建立一个子目录树的根节点。打开终端后,屏幕上会出现Login:提示,键入后系统会询问用户口令,通过检查后,用户便能进入系统。

当用户用完系统后,应向系统报告自己不再往系统装入任何处理要求,系统得知后,便马上为用户记账,清除用户的使用环境。在多用户情况下,通过Ctrl-D可以重新供另一用户登入。

用户的进入与退出个过程,是由系统直接调用Login及Logout程序完成的。

(2)文件操作命令

a. 显示文件内容命令cat

$cat filename1 filename2 ...

b. 复制文件副本命令cp

$cp source target

c. 修改文件名命令mv

$mv oldname newname

d. 撤销文件命令rm

$rm filename1 filename2 ...

e. 确定文件类型命令file

$file filename1 filename2 ...

(3)目录操作命令

a. 建立目录mkdir

$ mkdir dirname1 dirname2 ...

b. 撤销目录rmdir

$ rmdir dirname1 dirname2 ...

c. 改变工作目录cd

d. 改变对文件的存取方式chmod

格式:chmod user op-code permission filename

其中,user用于指明访问者的身份,可以是用户自己、用户组、所有其他用户及全部,分别用u、g、o和a表示;op-code是操作码,分别用+、-及=表示增加、消除及赋予访问者某种权利;permission则是分别用r、w及x表示读、写及执行许可,如命令:

chmod go-w temp

表示消除用户组和其他所有用户对文件temp的写许可。

(4)系统询问命令

a. 访问当前日期和时间命令date,若在命令后给出参数,则date程序把参数作为重置系统时钟的时间;

b. 询问系统当前用户的命令who,它将列出当前每一个处在系统中的用户的注册名、终端名和注册进入时间,并按终端标志的字母顺序排序,

用户可用who命令了解系统的当前负荷,以及核实登陆用户的注册名、终端名信息等;

c. 显示当前目录路径名的命令pwd

二 重定向与管道命令

(1)重定向命令

在Unix系统中,系统定义了三个文件,其中有两个分别称为标准输入和标准输出文件,各对应于终端键盘输入和终端屏幕输出。它们是在用户注册时,由Login程序打开。这样,用户程序执行时,隐含的标准输入是键盘输入,标准输出是屏幕显示。如果用户想要改变输入或输出文件,即标准输入与标准输出的重定向,可用重定向符“<”和“>”实现输入和输出转向。如:

$ cat file1 > file2 表示把文件file1的内容打印输出到文件file2上

$ wc < file3 表示对file3中读出的行中的字和字符进行计数

此外,cat file4>>file2表示将file4的内容附加到现有文件file2的末尾,它与cat file1 file4>>file2的效果是一样的。

在一个命令行中,可以同时改变输入与输出,如:

a.out<file1>file0 表示在可执行文件a.out执行时,将从文件file1中提取数据,同时把a.out的执行结果数据输出到文件file0中。

(2)管道命令

用符号"|"来连接两条命令,使前一条命令的输出作为后一条命令的输入,如

cat file | wc 使cat命令把file中的数据作为wc命令的输入。

其机制是系统将为管道建立一个作为通信通道的pipe文件,这时cat命令的输出既不出现在终端上,也不存在某中间文件中,而是由Unix系统来缓冲第一条命令的输出,并作为第二条命令的输入。这种用管道线所连接的命令之间是单向、同步运行的。

三  通信命令

Unix系统为用户提供了实时和非实时两种通信方式,分别用write及mail命令。联机用户也可以根据自己的当前情况,决定是否接受其他用户与其进行通信的要求。

(1)邮箱通信命令mail

mail采用信箱通信方式,是Unix各用户进行非交互式通信的工具。发信者把要发送的消息写成信件,“邮寄”到对方的信箱中。用mail进行通信时,不要求接收者利用终端与发送者会话。即,在发信者发送信息时,虽然接收者在系统中注册过,但允许他此时没有系统;或者虽在使用系统,但拒绝接收任何信息。mail命令在用于发信时,把接收者的注册名当做参数打入后,便可在新行开始键入信件正文,最后仍在一个新行上用"."来结束信件或用"^D"退出mail程序。

接收者也用mail命令读取信件,命令格式:

mail [-r][-q][-p][-file][-F persons]

其中选项r、q、p、file分别表示:按先进先出顺序显示各信件的内容;再输入终端字符后,退出mail程序但不改变信箱的内容;一次性显示信箱全部内容而不带询问;把指定文件当作信件来显示。

(2)对话通信命令write

write命令使得用户与当前在系统中的其他用户直接进行联机通信。命令格式:

write user[ttyname]

当接收者只有一个终端时,终端名可以缺省。当接收者的终端被允许接收消息时,屏幕提示会通知接收者源用户名及其所用终端名。

(3)允许或拒绝接收消息命令mesg

mesg命令格式:

mesg[-n][-y]

选项n表示拒绝接收消息,选项y表示恢复对方的写许可,即允许接收消息。不带自变量的mesg命令只报告当前状态而不改变它。

四 后台命令

在命令后加上“&”号,是告诉Shell将该命令放在后台执行,以便用户在前台继续键入其他命令。此时,标准输入文件会自动地从终端定向到一个被称为"/dev/null"的空文件中。若shell未重定向标准输入,那么shell和后台进程都会同时从终端进行读入,此时用户键入终端的字符就不能确定被送到哪一个进程中,因而必须为后台运行的命令重定向标准输入,以使键入的字符都被送到shell进程。

原文地址:https://www.cnblogs.com/sophia-yun/p/3245916.html