操作系统本科实验材料1.docx
- 文档编号:6265157
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:39
- 大小:72.19KB
操作系统本科实验材料1.docx
《操作系统本科实验材料1.docx》由会员分享,可在线阅读,更多相关《操作系统本科实验材料1.docx(39页珍藏版)》请在冰豆网上搜索。
操作系统本科实验材料1
操作系统(本科)实验材料1
Linux使用及shell程序设计
学习内容
你用过Linux命令吗?
你知道如何利用Linux命令编写程序吗?
……
与UNIX操作系统相同,Linux系统提供了大量的命令。
利用命令可以有效地完成文件操作、目录操作、进程管理、设备管理等工作。
shell处于Linux系统中一个重要的层次,它是用户与系统交互作用的界面。
在使用Linux命令时,shell都作为命令解释程序出现,这是shell最常见的使用方式。
除此以外,它还是一种高级程序设计语言,它有变量、关键字,有各种控制语句,如if,while,for等语句,支持函数模块,有自己的语法结构。
利用shell程序设计语言可以编写出功能很强、代码简单的程序。
本章主要介绍以下主题:
●Linux常用命令
●shell脚本的建立和执行
●shell变量与一般控制结构的应用
●shell特殊字符的应用
学习目标
了解:
shell的特点和主要版本,C编译器的使用。
理解:
shell特殊字符的应用,shell变量的种类和算术运算,函数的定义和调用,shell内置命令。
掌握:
Linux命令格式和常用命令,shell脚本的建立和执行,shell变量,一般控制结构的应用。
2.1Linux常用命令
Linux系统提供的命令需要在shell环境下运行。
Linux系统中默认的shell是bash,它提供了几百条系统命令。
虽然这些命令的功能不同,但它们的使用方式和规则都是统一的。
在桌面环境下,可以利用终端程序进入传统的命令行操作界面,进入方式如下:
在“开始”菜单中选择“应用程序→附件→系统终端”。
Konsole终端程序的窗口如图2-1所示。
要退出终端程序,可以单击窗口右上角的“关闭”按钮,或在shell提示符下执行exit命令,也可按快捷键
图2-1Konsole终端程序的窗口
2.1.1Linux简单命令
下面列出几个常用的简单命令,包括使用格式和说明。
(1)who命令
who命令列出所有正在使用系统的用户、所用终端名和注册到系统的时间。
而whoami命令将列出使用该命令的当前用户的相关信息。
(2)echo命令
echo命令可以将命令行中的参数显示到标准输出(即屏幕)上。
(3)date命令
date命令在屏幕上显示或设置系统的日期和时间。
如果没有选项和参数,将直接显示系统当前的日期和时间。
(4)cal命令
cal命令可以显示公元1~9999年中任意一年或者任意一个月的日历。
如果使用该命令时不带任何参数,则显示当前月份的日历。
如果在cal命令后只有一个参数,则该参数被解释为年份,而不是月份。
当有两个参数时,则第一个参数表示月份,第二个参数表示年份。
(5)clear命令
clear命令清除屏幕上的信息,它类似于DOS中的CLS命令。
2.1.2Linux命令格式
bash命令的一般格式是:
命令名[选项][参数1][参数2]…
例如:
cp–ffile1.cmyfile.c
该命令将源文件file1.c复制到目标文件myfile.c中,并且覆盖后者原有内容。
使用bash命令时,应注意以下几点。
(1)命令名必须是小写的英文字母,并且往往是表示相应功能的英文单词或单词的缩写。
(2)由方括号括起来的部分是可选的,即可有可无,依具体情况而定。
(3)选项以“-”开始,多个选项可用“-”连起来,如ls-l-a与ls-la相同。
(4)在命令、选项和参数之间要用空格隔开。
连续的空格会被shell解释为单个空格。
(5)命令行的参数提供命令运行的信息或者命令执行过程中所使用的文件名。
通常,参数是一些文件名,告诉命令从哪里可以得到输入,以及把输出送到什么地方。
(6)如果命令行中没有提供参数,命令将从标准输入文件(即键盘)上接收数据,输出结果显示在标准输出文件(即显示器)上,而错误信息则显示在标准错误输出文件(即显示器)上。
可使用重定向功能对这些文件进行重定向。
(7)命令在正常执行后返回一个0值,表示执行成功;如果命令执行过程中出错,没有完成全部工作,则返回一个非零值(在shell中可用变量$?
查看)。
在shell脚本中可用此返回值作为控制逻辑流程的一部分。
另外,Linux操作系统的联机帮助对每个命令的准确语法都做了说明(详见2.1.5节)。
2.1.3文件操作命令
1.Linux文件类型
Linux操作系统支持以下文件类型:
普通文件、目录文件、特殊文件。
普通文件也称为常规文件,如文本文件,数据文件,可执行的二进制程序。
目录文件类似于Windows系统中的文件夹,其中包含许多普通文件和子目录。
特殊文件是特指各种外部设备的文件,为了便于统一管理,Linux把所有I/O设备都按文件格式供用户使用,分为字符特殊文件(如终端、打印机)和块特殊文件(如硬盘、软盘和磁带)。
2.常用文件操作命令
Linux常用文件操作命令包括观看文件的内容,复制文件,删除文件,移动文件等。
(注意:
下面给出一些命令的功能,在附录A中列出Linux常用命令的较详细的说明。
)
(1)cat命令
cat命令用来显示文件的内容,类似于DOS下的TYPE命令。
(2)more命令
more命令显示文件内容,每次显示一屏。
满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今已显示的该文件的百分比:
--More--(XX%)。
(3)cp命令
cp命令将源文件或目录复制(copy)到目标文件或目录中。
其一般使用格式是:
cp[选项]源文件或目录目标文件或目录
利用选项-R,-r可以递归复制目录,即将源目录下的所有文件及其各级子目录都复制到目标位置。
注意:
若把一个文件复制到已经存在目标文件中,那么,该目标文件的内容将被破坏。
所有目标目录必须是已经存在的,cp命令不能创建目录。
(4)rm命令
rm命令可以删除(remove)文件和目录。
其一般使用格式是:
rm[选项]文件列表
应注意:
使用rm命令要格外小心。
因为一旦删除了一个文件,就无法再恢复它。
所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。
(5)mv命令
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到(move)另一个目录中。
如果目标文件已经存在,则目标文件的内容将被覆盖。
其一般使用格式是:
mv[选项]源文件或目录目标文件或目录
(6)wc命令
wc命令用来统计指定文件的字节数、字数、行数,并将统计结果显示出来,并且总是按以下格式显示,并且每项只占一列:
行数字数字节数文件名
(7)pr命令
pr命令按给定格式输出文件。
通常,在不带选项的情况下,会输出指定文件的内容,并在开头加上标题行:
日期、时间、页码。
(8)grep命令
grep命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行。
其一般使用格式是:
grep[选项]查找模式[文件名1,文件名2,…]
例如,在密码文件/etc/passwd中查找包含“mengqc”的所有行:
$grep"mengqc"/etc/passwd
mengqc:
x:
500:
100:
mengqc:
/home/mengqc:
/bin/bash
grep命令在指定文件中搜索特定模式及定位特定主题等方面用途很大。
要搜索的模式被看做是一些关键词,查看指定的文件中是否包含这些关键词。
如果没有指定文件,它们就从标准输入中读取。
在正常情况下,每个匹配的行被显示到标准输出上。
如果要搜索的文件不止一个,则在每一行输出之前加上文件名。
2.1.4目录操作命令
1.目录结构
(1)Linux文件系统采用带链接的树状目录结构,即只有一个根目录(通常用“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息……这样一层一层地延伸下去,构成一棵倒置的树,如图2-2所示。
图2-2Linux树状目录结构
在目录树中,根节点和中间节点(用圆圈表示)都必须是目录,而文件只能作为“叶子”出现。
当然,目录也可以是叶子。
在Linux系统中,除根目录(root)外,所有文件和目录都包含在相应的目录文件中。
用户登录进入系统时,其主目录就是用户当前工作目录。
主目录往往位于/home或者/usr目录之下,并且与注册名相同,如/usr/mengqc。
(2)为了访问文件,必须告诉系统:
它们在什么地方,即保存在哪个目录下。
路径名描述了文件系统中通向任意文件的路径。
有两种路径名:
绝对路径名和相对路径名。
在Linux操作系统中,每一个文件有唯一的绝对路径名,它是从根目录(/)开始,沿着层次树向下、由到达指定文件的所有目录名连接而成的,各目录名之间以斜线字符(/)隔开,如/usr/mengqc/mub1/m1.c。
绝对路径名也称全路径名。
相对路径名是相对当前工作目录的路径名。
如果当前工作目录是/usr/mengqc,则文件/usr/mengqc/mub1/m1.c的相对路径名是:
mub1/m1.c。
相对路径名不能以斜线(/)字符开头。
为了访问在当前工作目录中和当前工作目录之上的文件,可以在相对路径名中使用特殊目录名——点(.)和点点(..)。
点(.)表示本目录自身,而点点(..)代表该目录的父目录。
例如,当前目录为/usr/mengqc/mub1,想列出/usr/liu目录的内容,可使用命令:
$ls../../liu
另外,还应注意:
①在每个目录中都有点点目录文件(..)。
如/usr/mengqc/mub1的父目录是/usr/mengqc,而后者的父目录是/usr。
②利用../表示父目录的形式可以连续使用,直至根目录,如上例所示。
系统中的每个文件都可以利用相对路径名来命名。
(3)Linux具有为一个文件起多个名字的功能,称为链接。
被链接的文件可以存放在同一目录下,但是必须有不同的文件名;另外,被链接的文件也可以存放在不同的目录下,有相同的文件名。
文件链接有两种形式,即硬链接和符号链接。
硬链接是在别的目录或本目录中增加目标文件的一个目录项,即登记在多个目录中。
如图2-2所示的m2.c文件就在目录mub1和liu中都建立了目录项。
一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为1。
应注意:
不能对目录文件做硬链接;不能在不同的文件系统之间做硬链接。
就是说,链接文件和被链接文件必须位于同一个文件系统中。
符号链接也称为软链接,是将一个路径名链接到一个文件,即建立一个小文本文件(如图2-2中的abc),其中只包含所链接文件的全路径名。
如图中虚线箭头所指的那个文件是实际包含所有数据的文件。
对符号链接文件进行读、写时,将沿着链接方向查访实际的文件。
与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
用ln-s命令建立符号链接时,源文件最好用绝对路径名。
这样可以在任何工作目录下进行符号链接。
而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。
在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。
符号链接的大小是其链接文件的路径名中的字节数。
当用ls-l命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如:
lrwxrwxrwx…14Jun2010:
20/etc/motd->/original_file
其中表示“文件大小”的数字“14”恰好说明源文件名“/original_file”由14个字符构成。
2.常用目录操作命令
(1)mkdir命令
mkdir命令用来创建目录。
例如:
$mkdir/usr/mengqc/test在目录/usr/mengqc下建立子目录test。
(2)rmdir命令
rmdir命令可以从一个目录中删除一个或多个空的子目录。
另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
应注意:
目录被删除之前应该是空目录。
就是说,删除该目录之前,其中的所有文件必须用rm命令全部删除。
虽然还可以用带有-r选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
(3)cd命令
cd命令用来改变工作目录。
(4)pwd命令
pwd命令显示出当前工作目录的绝对路径。
(5)ls命令
ls命令列出指定目录的内容。
其一般使用格式是:
ls[选项][目录或文件]
如果给出的参数是目录,该命令将列出其中所有子目录与文件的信息;如果给出的参数是文件,将列出有关该文件属性的一些信息。
在默认情况下,输出条目按字母顺序排列。
常用选项有:
-a显示指定目录下所有子目录和文件,包括以“.”开头的隐藏文件(如.cshrc)。
-d如果参数是目录,则只显示它的名字(不显示其内容)。
往往与-l选项一起使用,以得到目录的详细信息。
-F在列出的文件名后面加上不同的符号,以区分不同类型的文件。
附加的符号有:
/表示目录;*表示可执行文件;@表示符号链接文件;|表示管道;=表示socket文件。
-R递归显示指定目录的各个子目录中的文件。
-l以长格式显示文件的详细信息。
输出的信息分成多列,它们依次是:
文件类型与权限链接数文件主文件组文件大小建立或最近修改的时间文件名
例如:
-rw-r--r--2mengqcgroup198Jun232007m2.c
它说明:
m2.c是普通文件,所有用户都可以读,只有文件主可以写,但都不可以执行;文件的链接数为2;文件主是mengqc;用户组是group;文件大小为198字节;于2007年6月23日建立。
2.1.5文件存取权限
每个文件都规定了权限,即允许用户对其进行什么操作。
而用户对文件进行操作的前提就是拥有相应的权利。
利用文件存取权限可以保护文件。
1.用户和权限
(1)文件主:
Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主唯一的注册名。
对文件的控制取决于文件主或超级用户(root)。
文件或目录的创建者对创建的文件或目录拥有特别使用权。
当然,文件的所有关系是可以改变的,可以将文件或目录的所有权转让给其他用户,但只有文件主或root才有权改变文件的所有关系。
文件的所有权的标志是用户ID(UID)。
(2)用户组:
当系统管理员为你建立账户之后,会分配一个组ID和一个特定的用户组名。
通常,这些组名包含了有相同需求的用户,如一个开发部门的所有成员。
采用组方式也有助于增强系统使用的安全性。
在Linux系统中,每个文件要隶属于一个用户组。
当创建一个文件或目录时,系统会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。
文件用户组关系的标志是GID。
文件的GID只能由文件主或超级用户(root)来修改。
利用chgrp命令可以改变文件的GID。
(3)存取权限:
Linux系统中的每个文件和目录都有存取许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
Linux系统中规定了4种不同类型的用户:
①文件主(owner);
②同组用户(group);
③可以访问系统的其他用户(others);
④超级用户(root),具有管理系统的特权。
存取权限规定3种访问文件或目录的方式:
读(r),写(w),可执行或查找(x)。
当用ls-l命令显示文件或目录的详细信息时,最左边的一列为文件的存取权限。
其中各位的含义如图2-3所示。
图2-3文件权限表示
对于普通文件:
读权限(r)表示只允许相应用户读取该文件的内容,而禁止对它做任何的更改操作。
凡是把文件作为输入参数的命令都需要对该文件有读的权限,如cat,more等。
写权限(w)表示允许相应用户打开并修改文件,如命令vi,cp等。
执行权限(x)表示允许相应用户将该文件作为一个程序执行。
对于目录:
读权限(r)表示可以列出在该目录中存放的文件,即读取目录内容列表。
这一权限允许shell使用文件扩展名字符列出相匹配的文件名。
写权限(w)表示允许从目录中删除或添加新的文件,通常只有目录主才有写权限。
执行权限(x)表示允许在目录中进行查找,并能用cd命令将工作目录改为该目录。
2.有关存取权限的命令
(1)chmod命令
chmod命令用于改变或设置文件或目录的存取权限。
只有文件主或超级用户root才有权用chmod命令改变文件或目录的存取权限。
根据表示权限的方式,该命令有两种用法:
符号模式和绝对方式。
①以符号模式改变权限
一般使用格式是:
chmodkey文件名
其中,key的组成形式是:
[who][操作符][mode]
这三部分必须按顺序输入。
可以用多个key,但必须以逗号间隔。
who表示操作对象,可以是下述字母中的任一个或者它们的组合:
u表示“用户(user)”,即文件或目录的所有者。
g表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o表示“其他(others)用户”。
a表示“所有(all)用户”。
它是系统默认值。
操作符可以是:
+表示添加某个权限;-表示取消某个权限;=表示赋予给定权限并取消其他所有权限(如果有的话)。
mode表示权限,可用下述字母的任意组合:
r表示可读;w表示可写;x表示可执行。
例如:
$chmoda+xex1将文件ex1的权限改为所有用户都有执行权限。
$chmodu=r,ug=xex1将文件ex1的权限重新设置为文件主可以读和执行,组用户可以执行,其他用户无权访问。
②以绝对方式改变权限。
一般使用格式是:
chmodmode文件名
用绝对方式设置或改变文件的存取权限,就是用数字1和0表示图2-3中的9个权限位,置为1表示有相应权限,置为0表示没有相应权限。
例如,某个文件的存取权限是:
文件主有读、写和执行的权限,组用户有读和执行的权限,其他用户仅有读的权限。
用符号模式表示是rwxr-xr--,用二进制数字表示是111101100。
为了记忆和表示方便,通常用3个八进制数表示这9位二进制数。
这样,上述二进制数就等价于八进制数754。
就是说,mode是以3位八进制数字出现的,第一位表示文件主权限,第二位表示组用户权限,第三位表示其他用户权限。
例如:
$chmod664ex1使文件ex1的文件主和同组用户具有读、写权限,而其他用户只可读。
(2)umask命令
umask命令用来设置限制新建文件权限的掩码。
一般使用格式是:
umaskmode
创建新文件时,由文件创建掩码决定其最初的权限。
用户每次注册进入系统时,umask命令都被执行,并自动设置掩码mode来限制新文件的权限。
用户可以通过再次执行umask命令来改变默认值,新的权限将把旧的覆盖掉,即指定哪些权限将在以后新建文件的默认权限中被删除。
2.1.6联机帮助命令
Linux系统中有大量的命令,而且许多命令又有众多选项或参数,要想全部记住它们相当困难。
对大多数用户来说,也没有必要这样做,因为用户常用的命令是整个命令集合中的一个子集。
幸运地是,Linux提供了很有用的联机帮助命令man,利用它可以方便地查看所有命令的完整说明,包括命令语法、各选项的意义以及相关命令等。
例如:
$mandate查看date命令的用法。
$mangrep查看grep命令的用法。
2.1.7vi编辑器
建立和修改文本文件要利用编辑器。
Linux常用的文本编辑器是vi,它是屏幕编辑器。
在shell提示符后输入命令vi,则进入vi编辑器,并处于vi的命令方式。
例如:
$viexample.c
此时,从键盘上输入的任何字符都被作为编辑命令来解释,例如,a表示附加命令,i表示插入命令,x表示删除字符命令等。
如果输入的字符不是vi的合法命令,则机器发出“报警声”,光标不移动。
另外,此时输入的字符并不在屏幕上显示出来,例如,输入i,屏幕上并无变化,但编辑器的工作方式却发生变化:
由命令方式变为输入方式。
通过输入vi的命令i、a、o等可以从命令方式进入输入方式。
在输入方式下,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当做该文件的正文。
进入输入方式后,输入的可见字符都在屏幕上显示出来,而编辑命令不再起作用,仅作为普通字符出现。
例如,在命令方式下输入i,进到输入方式,然后再输入i,就在光标位置添加一个字符i。
由输入方式回到命令方式的办法是按下Esc键。
如果已在命令方式下,那么按下Esc键就会发出“嘟嘟”声。
利用4个方向键可以在一个文件中移动光标位置。
从vi的命令方式返回到shell状态有四种方法,即:
(1)wq命令:
把编辑缓冲区的内容写到指定的文件中,然后回到shell状态下。
(2)ZZ命令:
仅当被编辑的内容做过修改时,才将缓冲区的内容写到指定文件上。
(3)x命令:
其功能与ZZ的功能相同。
(4)q!
命令:
强行退出vi,即无条件退出,并不把缓冲区中的内容写到文件中。
2.1.8C编译器
UNIX/Linux系统支持众多程序设计语言,而C语言是其宿主语言,C++是扩展的C语言。
目前Linux平台上最常用的C语言编译系统是gcc(GNUCompilerCollection),它是GNU项目中符合ANSIC标准的编译系统,能够编译用C,C++和Objective-C等语言编写的程序。
gcc常用的方式有以下几种形式:
$gccf1.cf2.c编译源文件f1.c和f2.c,生成的可执行文件默认为a.out。
$gccf1.cf2.c-oex1编译源文件f1.c和f2.c,生成的可执行文件为ex1。
$gcc-cf1.c编译源文件f1.c,只生成目标文件f1.o,不进行连接。
$gcc-cf1.cf2.c-oex1.o将源文件f1.c和f2.c编译成一个目标文件,名为ex1.o。
2.2shell概述
在前面介绍Linux命令时,shell都作为命令解释程序出现,这是shell最常见的使用方式。
除此以外,它还是一种高级程序设计语言,它有变量、关键字,有各种控制语句,如if,while,for等语句,支持函数模块,有自己的语法结构。
利用shell程序设计语言可以编写出功能很强但代码简单的程序。
特别是,它把相关的Linux命令有机地组合在一起,可大大提高编程的效率,充分利用Linux系统的开放性能,就能够设计出适合自己要求的命令。
2.2.1shell的特点和主要版本
1.shell的特点
shell是一种高级程序设计语言,功能强大,为用户开发程序提供了便捷的手段。
它具有如下突出特点:
(1)对已有命令进行简单组合,如建立shell脚本,就构成新命令。
(2)可以直接使用shell的内置命令,而不需创建新的进程,减少系统调度开销。
(3)允许灵活地使用数据流,提供通配符、输入/输出重定向、管道线等机制,方便了模式匹配、I/O处理和数据传输。
(4)结构化的程序模块,提供了顺序流程控制、条件控制、循环控制等。
(5)提供了在后台(&)执行命令的能力。
(6)提供了可配置的环境,允许用户创建和修改命令、命令提示符和其他的系统行为。
2.shell的种类
Linux系统提供
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 本科 实验 材料