收藏 分享(赏)

Linux操作系统实验教程.doc

上传人:精品资料 文档编号:10021976 上传时间:2019-09-29 格式:DOC 页数:43 大小:539KB
下载 相关 举报
Linux操作系统实验教程.doc_第1页
第1页 / 共43页
Linux操作系统实验教程.doc_第2页
第2页 / 共43页
Linux操作系统实验教程.doc_第3页
第3页 / 共43页
Linux操作系统实验教程.doc_第4页
第4页 / 共43页
Linux操作系统实验教程.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、1Linux 操作系统实验教程第 1 章 Linux 系统概述一、Linux 系统结构从操作系统的角度来分析 Linux,它的体系结构总体上属于层次结构如下图所示: 从内到外包括三层:最内层是系统核心,中间是 Shell、编译编辑实用程序、库函数等,最外层是用户程序,包括许多应用软件。从操作系统的功能角度来看,它的核心有五大部分组成:进程管理、存储管理、文件管理、设备管理、网络管理。各子系统实现其主要功能,同时相互之间是合作、依赖的关系。进程会管理是操作系统最核心的内容,它控制了整个系统的进程调度和进程之间的通信,是整个系统合理高效运行的关键;存储管理为其他子系统提供内存管理支持,同时其他子系

2、统又为内存管理提供了实现支持,例如要通过文件管理和设备管理实现虚拟存储器和内外存的统一管理。二、 配置一个双引导系统如果计算机中已经安装了其他操作系统,并想创建一个引导系统以便兼用 Red Hat Linux 和另外的操作系统,需要使用双引导。机器启动时,可以选择其中之一,但不能同时使用两者。每个操作系统都从自己的硬盘驱动器或硬盘分区中引导,并使用自己的硬盘驱动器或硬盘分区。如果计算机上还没有安装任何操作系统,可以使用专门的分区及格式化软件给 Windows 创建指定大小的分区,Windows 的文件系统为 FAT,再为Linux 系统创建所需要大小的分区(4G 或更大),另外再给 Linux

3、 留 100MB左右的交换分区,Linux 的文件系统为 ext2。然后就可以安装系统了。应首先安装 Windows,然后再安装 Red Hat Linux。如果只进行了分区而没有格式化各分区,在安装时可以使用 Windows 自带的格式化程序和 Linux 自带的格式化程序进行各自分区的格式化。当 Windows 已经被安装,而且已为 Linux 准备了足够的磁盘空间,就可以安装 Linux 了。Red Hat Linux 安装程序通常会检测到 Windows 并自动配置引导程序来引导 Windows 或 Red Hat Linux。2安装完成之后,无论在什么时候启动计算机,都能够在引导装载

4、程序屏幕中指明想启动 Red Hat Linux 还是另外的操作系统。选择 Red Hat Linux 来引导 Red Hat Linux;选择 DOS 来引导 Windows。三、 Red Hat Linux 的安装将 Red Hat Linux9.X 安装光盘插入光驱,然后启动计算机,即可从 CD-ROM 启动 Red Hat Linux9.X 安装程序。步骤 1,机器启动之后,显示 boot 提示屏幕,其中包括几个不同的引导选项,每个引导选项还有一个或多个与之关联的帮助屏幕。以图形方式从光盘中安装 Red Hat Linux,单击“回车”键继续安装。步骤 2,安装程序检测用户系统并试图识

5、别光驱。如果找到了,会进入安装进程的下一个阶段。这时若要终止安装进程,应取出光盘,重新引导机器。步骤 3,欢迎使用 Red Hat Linux,欢迎屏幕并不提示做任何输入。可阅读左侧面板内的帮助文字来获得附加的说明,以及关于如何注册 Red Hat Linux产品的信息。单击 next 继续步骤 4,语言选择。使用鼠标选择要使用的语言。选择恰当的语言会在稍后的安装中帮助定位时区配置。安装程序将会根据这个屏幕上所指定的信息来定义恰当的时区。选择恰当的语言(例如简体中文)后,单击 next 继续。步骤 5, 键盘配置。用鼠标选择要在今后用作系统默认的键盘布局类型(例如 U.S.English),选

6、定后,单击 next 继续。如果要在安装结束以后,想改变键盘类型,可在系统启动后窗口中单击屏幕左下角的 ,弹出主菜单,选择“系统设置/键盘” ,如果不是根用户,系统会提示输入根口令再继续;或者在 shell 提示符下输入 redhat-config-keyboard 命令,如果不是根用户,系统会提示输入根口令再继续。步骤 6,鼠标配置。为系统选择正确的鼠标类型。如果找不到一个能确定与系统兼容的鼠标,可以根据鼠标的键数和它的接口,选择“通用”项目中的一个。选定鼠标型号以后,单击 next 继续。如果在安装结束以后改变鼠标配置,可在系统启动后窗口中单击屏幕左下角的 ,弹出主菜单,选择“系统设置/鼠

7、标” ,如果不是根用户,系统会提示输入根口令再继续;或者在 shell 提示符下输入 redhat-config-mouse 命令,如果不是根用户,系统会提示输入根口令再继续。步骤 7,选择安装还是升级。如果安装程序在系统中检测到从前安装的 Red Hat Linux 版本,则“升级检查”屏幕就会自动出现。这里考虑在系统上执行 Red Hat Linux 的新安装,选择“执行 Red Hat Linux 的新安装” ,然后单击 next 继续。步骤 8,选择要执行的安装类型。Red Hat Linux 的安装类型选项有“个人桌面” 、 “工作站” 、 “服务器” 、 “定制” 和“升级” 。选

8、择“个人桌面” ,单击next 继续。步骤 9,网络配置。安装程序会自动检测到机器中拥有的任何网络设备,并把它们显示在“网络设备”列表中。选择默认选项后,单击 next 继续。3要在安装结束以后改变网络配置,可在系统启动后窗口中单击屏幕左下角的“红帽子 ”,弹出主菜单,选择“系统设置/网络” ,如果不是根用户,系统会提示输入根口令再继续;或者在 shell 提示符下输入 redhat-config-network 命令,如果不是根用户,系统会提示输入根口令后再继续。步骤 10,为系统选择恰当的安全级别。 “高级”:系统不会接受那些没有被具体制定的连接(除了默认设置,例如 DNS 回应、DHCP

9、 之外) 。如果要把系统连接到互联网上,但是并不打算运行服务器,这是最安全的选择。如果需要额外的服务,可以选择“定制”来具体指定允许通过防火墙的服务。 “中级”:防火墙将不准系统访问某些资源。可以选择“定制”来具体指定允许通过防火墙的服务。 “无防火墙”:给予完全访问权,且不做任何安全检查。 “信任的设备”:选择“信任的设备”中的任何一个可使系统接受来自这一设备的全部通信而不受防火墙规则的限制。 “允许进入”:启用这些选项,将允许具体指定的服务穿过防火墙。防火墙配置完毕,单击 next 继续。要在安装完毕后改变安全级别配置,可在系统启动后的窗口中单击屏幕左下角的 ,弹出主菜单,选择“系统设置/

10、安全级别” ,如果不是根用户,系统会提示输入根口令再继续;或者在 shell 提示符下输入 redhat-config-securitylevel 命令,如果不是根用户,系统会提示输入根口令后再继续。步骤 11,选择时区。可以通过选择计算机的物理位置,或指定时区和通用协调时间(UTC)之间的偏移来设置时区。时区选定后,单击 next 继续。要在安装完成以后改变时区配置,可在系统启动后的窗口中单击屏幕左下角的“红帽子 ”,弹出主菜单,选择“系统设置/日期即:# fdisk -l显示内容如:sda sda1 sda2 sdb sdb1 sdb2 等信息,其中,sda 与 sdb 表示目前系统有两个

11、硬盘,后面带有数字表示各个硬盘下的各区目录;硬盘或存储设备一般都是以 sd 开头.2.插入 U 盘或硬盘,再次运行 fdisk -l 命令,系统将再次显示目前所能识别到的硬件存储设备,比较两次输出的不同,将发现第二次运行时会增加一些内容;系统将在原来的基础上增加显示:sdc,等内容,表示新插入的 U 盘或移动硬盘是挂靠在系统的 sdc 下.3.运行 mount 命令,如:#mkdir /mnt/usb 在 mnt 下建立 usb(自己起的子目录名)子目录#mount t vfat /dev/sdc /mnt/usb4.运行完毕,可以直接在/mnt/usb 目录下,使用 U 盘或移动硬盘8若要显

12、示 U 盘或移动硬盘中的中文文件名,可加参数“ o” ,即:可输入如下命令#mount t vfat /dev/sdc /mnt/usb o iocharset=gb23125. 断开 U 盘或移动硬盘之前,运行 umount 命令,保证数据不会造成丢失,命令如下:#umount /dev/sdc共 5 个步,即1、用 root 帐户登录;2、mkdir /mnt/usb;(注:创建挂载目录)3、mount /mnt/sda1 /mnt/usb;(注:挂载 U 盘)4、现在就可以使用 U 盘了,在/mnt/usb 目录下的内容就是 U 盘里的内容了;5、使用完后,用以下命令卸载 U 盘即可。#

13、umount /mnt/usb第 2 章 Linux 系统的 Shell 命令一、目录管理命令1、建立目录命令(mkdir)格式:mkdir 目录名 1 目录名 2 常用的选项有-m,指定目录的模式,即访问权限,用 3 位八进制数字跟在后面表示。例:$mkdir d1 d2 d3在当前目录下建立了 3 个子目录,名字分别为 d1、d2、d3$mkdir d4 m 775在当前目录下建立名为 d4 的目录,访问权限为 775,即该目录的所有者和同组用户有读、写和执行这个目录的权限,其他用户有读和执行权限。2、删除目录(rmdir)格式:rmdir 目录名 1 目录名 2 该命令一次可以删除多个目

14、录,删除目录时要求目录为空。另外,Linux 系统还提供了 rm 命令删除目录和文件。 Rm 名令常用的选项有:-f:如果文件不存在则忽略,并且不提示。-r:递归地删除目录下的内容,rm 只有加了这个参数才可以删除目录。3、改变工作目录(cd )改变工作目录命令与 PC-DOS 的改变工作目录命令一样。注意,当转到别的用户目录时,能执行的操作取决于该用户赋予的权利。格式:cd 路径名当不给出路径名时,cd 命令的执行就转到用户的注册目录(home)中,即由环境变量$HOME 指定的目录,否则,转到按路径名指定的目录。例如:$cd d1进入到当前目录下的 d1 目录中$cd /home/y/d2

15、按路径名转到 d2 目录下。$cd 9转到 y 目录下。指定路径时,可以使用相对路径,也可以用绝对路径,这一点和 PC-DOS一样。注:要转到某个目录时,必须对那个目录有执行权,否则出错。4、确定当前目录所在的位置(pwd)格式:pwd例如:$pwd/home/y/d1当前目录路径为:/home/y/d15、列出某目录下的内容(ls)该命令与 PC-DOS 中的 dir 命令类似,列出目录下的各文件名。格式:ls 选择项常用的选择项有:-l:按长格式列出每个文件的全部属性信息(如文件名、文件大小、文件的存取方法等)。-a:列出所有的文件名,包括以“.”开始的隐含文件。-s:对每个文件按块给出大

16、小。-i:在第 1 列给出每个文件的 i 节点号。-t:按文件最后修改时间排序列出。-R:列出包括子目录下的文件名。6、目录、文件改名和移动目录、文件(mv)格式 1:mv 源目录名 目标目录名功能:如果目标目录不存在,则将源目录名改为目标目录名。如果目标目录名已经存在,则将源目录移到目标目录之下,作为它的子目录。此时要求使用该命令的用户对目标目录有写权限。格式 2:mv 源文件名 目标文件名功能:将源文件名改为目标文件名。格式 3:mv 文件名 1 文件名 2 目录名功能:将文件 1 文件 2 传送到指定的目录中。常用的选项有:-f:如果目标文件存在,则覆盖目标文件而不提示。-u:只复制目标

17、中不存在的文件或更新过的文件。7、复制目录或文件(cp)cp 命令既可以复制目录也可以复制文件格式 1:cp 选择项 源目录名 目标目录名功能:将一个或多个源目录中的文件复制到目标目录下。格式 2:cp 选择项 源文件名 目标文件名功能:把一个文件复制到另一个文件中。格式 3:cp 选择项 文件名 1 文件名 2 目录名功能:把一个或多个文件复制到一目录中。 说明:(1)当源目录或源文件为多个时,各目录名或各文件名之间用空格分开。(2)将一个文件复制到目录时,该目录必须是可写的,否则复制失败。当把一个文件复制到另一个文件时,若目标文件已经存在,则覆盖之,但覆盖文10件的所有者的存取权限保持不变

18、。常用的选择项有:-i:当目标已经存在时,在覆盖之前,先提示是否覆盖;-f:如果目标文件存在,则覆盖目标文件而不提示;-r:递归地复制源目录到目标目录;-u:只复制目标中不存在的文件或者更新过的文件;-R:递归地复制当前目录及子目录下的文件;-p:复制时保持文件的属性;-d:复制时保持链接关系;8、显示目录所占磁盘空间的大小(du)格式:du 选择项 目录名常用的选择项有:-a:递归地显示所有目录下的文件占用的空间;-h:以可读形式列出各文件大小;-s:只显示该目录的大小,目录中的各文件占用的空间不显示二、文件管理1、显示文件内容命令(cat 和 more)(1)连接和显示文件(cat)格式

19、1:cat 文件 1 文件 2功能:连续显示各文件的内容。各文件之间没有标志也没有空行。格式 2:catfile1功能:建立一个文件名为 file1 的文件。用 ctrl+d 组合键结束文件的输入。格式 3:cat 文件 1 文件 2文件 3功能:将文件 1 和文件 2 的内容写到文件 3 中。格式 4:cat 文件 1 文件 2 文件 3功能:将文件 1 和文件 2 的内容附加到文件 3 的末尾。(2)分屏显示文件内容(more)格式:more 选择项 文件 1 文件 2如果一屏显示不完,按空格键可以显示下一屏的内容。随时按 q 键退出该命令。常用的选择项有:+行号:从文件的指定行号开始显示

20、。+/字符串:从文件中指定的字符串前两行开始显示。-s:把文件中的多个空行压缩成一个空行。2、删除文件命令(rm)格式:rm 选择项 文件名 1 文件名 2常用的选择项有:-f:如果文件不存在则忽略,并且删除前不提示。-r:递归地删除目录下的内容,只有加了该参数才可以删除目录。3、统计文件中的行、字和字符数(wc)格式:wc 选择项 文件名常用的选择项有:-l:只对指定文件中的行进行统计。11-w:只对指定文件中的字进行统计。-c:只对指定文件中的字符进行统计。如果没有选择项,wc 的统计顺序为,先统计行,再统计字,然后统计字符。最后给出被统计的文件名。三、其它1、检查磁盘剩余空间(df)2、

21、echo格式: echo -n word/string此命令把每个单词或字符串写入 shell 的标准输出.四、变量和参数在 shell 程序中,共有 6 种类型的变量1、变量的定义定义变量的格式:变量名=表达式用$可以取得变量的值,如:$num 为 num 的值。2、位置变量位置变量是在调用 shell 程序的命令行中按照确定的位置决定的变量。位置变量用来存储 Shell 程序后面所跟的参数。第一个参数存储在变量 1 中,第二个参数存储在变量 2 中,依次类推。在程序名之后输入的每个参数之间用空格分隔。$0 是当前该命令文件的名字。例如,编写一个 Shell 程序 reverse,执行时带两

22、个参数。输出时,将两个参数的位置颠倒。reverse 的内容为:#program reverse, prints the command line parameters out in reverse orderecho “$2“ “$1“在 Shell 下执行此 Shell 程序:reverse hello there其输出为:there hello3、shell 预定义变量有些变量在执行 Shell 程序时系统就设置好了,并且不能加以修改:$# 存储运行 Shell 程序时输入的位置参数的个数。$? 存储上一个执行命令的返回值。$* 存储从第一个位置参数开始的所有位置参数的内容。$ 存储所有

23、命令行输入的参数,分别表示为“$ 1”,“$ 2” . . . 。$ 存储当前执行进程的进程标识 PID。$! 存储上一个后台执行命令的进程标识 PID。五、运算符和表达式Shell 中的运算符包括运算符 描述 示例 文件运算符 -e filename 如果 filename 存在,则为真 -e /var/log/syslog -d filename 如果 filename 为目录,则为真 -d /tmp/mydir -f filename 如果 filename 为常规文件,则为真 -f /usr/bin/grep 12-L filename 如果 filename 为符号链接,则为真 -L

24、 /usr/bin/grep -r filename 如果 filename 可读,则为真 -r /var/log/syslog -w filename 如果 filename 可写,则为真 -w /var/mytmp.txt -x filename 如果 filename 可执行,则为真 -L /usr/bin/grep filename1-nt filename2 如果 filename1 比 filename2新,则为真 /tmp/install/etc/services -nt /etc/services filename1-ot filename2 如果 filename1 比 fi

25、lename2旧,则为真 /boot/bzImage -ot arch/i386/boot/bzImage 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) -z string 如果 string 长度为零,则为真 -z “$myvar“ -n string 如果 string 长度非零,则为真 -n “$myvar“ string1= string2 如果 string1 与 string2 相同,则为真 “$myvar“ = “one two three“ string1!= string2 如果 string1 与 string2 不同,则为真 “$myvar“ !=

26、 “one two three“ 算术比较运算符 num1-eq num2 等于 3 -eq $mynum num1-ne num2 不等于 3 -ne $mynum num1-lt num2 小于 3 -lt $mynum num1-le num2 小于或等于 3 -le $mynum num1-gt num2 大于 3 -gt $mynum num1-ge num2 算术运算符:- +-*/%大于或等于(在*和/之前必须冠以反斜线“ ”)负号加号减号乘号除号取余 3 -ge $mynum - 3 3 + 5 8 3 2 * 3 6 / 2 5 % 2 在脚本程序中可以用运算符将运算对象连接

27、起来构成的式子称为表达式。13六、shell 控制语句1、if 语句格式 1:if 条件表达式 then 命令序列fi格式 2:if 条件表达式 then 命令序列else 命令序列fi格式 3:if 条件表达式 then 命令序列elif 条件表达式 then 命令序列else 命令序列fi格式 4:if test 条件表达式 then 命令序列elif test 条件表达式then 命令序列.else 命令序列fi说明:(1)格式 1、格式 2、格式 3 中的“”和“”两侧要留有空格(2)格式 4 中的“ ”不属于 if 语句中的符号,只在本格式中说明“”中的内容可以重复出现多次。2、fo

28、r 循环语句 格式 1: for 变量 in 值表do命令表done格式 2: for 变量 in 文件正则表达式do命令表done其执行过程是,变量的值依次取当前目录下(或给定目录下)与正则表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直至所有匹配的文件名取完为止,退出 for 循环。 14格式 3: for i in $* 或者 for i do do命令表 命令表done done这两种形式是等价的。其执行过程是,变量 i 依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。3、while 循环语句格式:while 条件表达式 do命令表done其执行过程

29、是,先进行条件测试,如果结果为真,则进入循环体(dodone 之间部分 ), 执行其中命令;然后再做条件测试直至测试条件为假时才终止 while 语句的执行。4、until 语句格式:until 条件表达式do命令表done它与 while 语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。5、break 语句和 continue 语句break 语句可以使我们从循环体中退出来。格式: break n 其中,n 表示要跳出几层循环。默认值是 1,表示只跳出一层循环。 continue 语句跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。格

30、式: continue n 其中,n 表示从包含 continue 语句的最内层循环体向外跳到第几层循环。默认值为 1。循环层数是由内向外编号。6、case 语句case 语句允许进行多重条件选择。格式:case 字符串 in模式字符串 1) 命令序列 1; ;模式字符串 2) 命令序列 215; ;模式字符串 n) 命令序列 n; ;esac其执行过程是用“ 字符串 ”的值依次与各模式字符串进行比较,如果发现同某一个匹配,那么就执行该模式字符串之后的各个命令,直至遇到两个分号为止。如果没有任何模式字符串与该字符串的值相符合,则不执行任何命令。在使用 case 语句时应注意:(1)每个模式字符

31、串后面可有一条或多条命令,其最后一条命令必须以两个分号(即; )结束。(2)模式字符串中可以使用通配符。(3) 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是“ 或” 的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。(4)各模式字符串应是惟一的,不应重复出现。并且要合理安排它们的出现顺序。例如,不应将“*”作为头一个模式字符串,因为“*” 可以与任何字符串匹配,它若第一个出现,就不会再检查其它模式了。(5)case 语句以关键字 case 开头,以关键字 esac(是 case 倒过来写!)结束。(6)case 的退出(返回)值是整个结构中最

32、后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。7、expr 语句虽然 shell 并不精于数值计算,但还是提供了有关的计算语句。格式:expr 表达式 1 表达式 2 表达式中只允许整数,合法的运算符有+、-、*、/ 和%(取余) ,在*(乘号)和/(除号)之前必须冠以(反斜杠) ,以防这些运算符由 expr 获得之前被shell 解释。例如:$expr 3 * 5 + 2 / 216注意:运算符两侧要留有空格。8、read 语句利用 read 语句命令可以从键盘上读取数据,然后赋给指定的变量格式:read 变量 1 变量 2 例如:read x y z输入数据时,数据间以空格或

33、制表符作为分隔符。如果变量个数与给定数据个数相同,则依次对应赋值;如果变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据;如果变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串。9、举例例 1 从控制台接收用户输入,并在标准输出设备上显示结果16echo “Are you girl?please answer Y or N”read sexif $sex = “Y” ;thenecho “Hello girl!”echo “How are you!”else echo “Hello boy!”echo “How do you do!”fiecho

34、 “ABC”exit 0例 2 echo “Are you girl?please answer Y or N”read sexif test $sex = “Y” then echo “Hello girl!”elif test $sex= “N”then echo “Hello boy!”else echo “sorry,$sex not recognized,please entey Y or N”exit 1fiexit 0例 3 for day in Mon Tue Wed Thu Fri Sat Sundoecho $daydone其执行过程是,变量 day 依次取值表中各字符串,

35、即第一次将“Mon” 赋给 day,然后进入循环体,执行其中的命令,显示出 Mon。第二次将“Tue”赋给 day,然后执行循环体中命令,显示出 Tue。依次处理,当 day 把值表中各字符串都取过一次之后,下面 day 的值就变为空串,从而结束 for 循环。因此,值表中字符串的个数就决定了 for 循环执行的次数。在格式上,值表中各字符串之间以空格隔开。例 4 while $1 doif -f $1 then echo “display : $1 “cat $1else echo “$1 is not a file name . “fishiftdone这段程序对各个给定的位置参数,首先判

36、断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,17利用 shift 命令可把后续位置参数左移。 测试条件部分除使用 test 命令或等价的方括号外,还可以是一组命令。根据其最后一个命令的退出值决定是否进入循环体执行。例 5 编写一个简单的删除程序#name: del#author: liangnian#this program to compress a file to the dustbinif test $# -eq 0 thenecho “Please specify a file!” elsegzip $1 /先对文件进行压缩mv

37、$1.gz $HOME/dustbin /移动到回收站echo “File $1 is deleted !”fi10、Shell 脚本的建立和执行(1)Shell 脚本的建立Shell 程序可以存放在文件中,这种被 Shell 解释执行的命令文件称为 Shell脚本 (Shell Script)。Shell 脚本可以包含任意从键盘键入的 Linux 命令。建立 Shell 脚本的步骤同建立普通文本文件的方式相同,利用任何编辑器(如 vi)进行程序录入和编辑加工。例如,要建立一个名为 ex1 的 Shell 脚本,可在提示符后输入命令:$ vi ex1 进入 vi 的插入方式后,就可录入程序行。

38、完成编辑之后,将编辑缓冲区内容写入文件中,返回到 Shell 命令状态。(2)执行 Shell 脚本格式:$ bash 脚本名 参数 例如:$ bash ex1 /usr/meng /usr/zhang Shell 从文件 ex1 中读取命令行,并执行它们。当 Shell 到达文件末尾时就终止执行,并把控制返回到 Shell 命令状态。若有参数,则将参数值传递给程序中的命令,使一个 Shell 脚本可以处理多种情况,就如同函数调用时可根据具体问题给定相应的实参。第 3 章 Linux 系统调用函数简介1、fork( ):创建一个新进程18格式:int fork()其中返回 int 值的意义如下

39、:0:创建子进程,从子进程返回0:从父进程返回,返回值为子进程的进程标识符-1:创建失败2、vfork( ) :创建一个新进程格式:int vfork()其中返回 int 值的意义如下:0:创建子进程,从子进程返回0:从父进程返回,返回值为子进程的进程标识符-1:创建失败vfork()和 fork()不同之处在于:在 fork 调用中,子进程复制父进程的数据区作为自己的数据区,能够继承已有的资源,从而对数据的操作不再影响父进程。vfork()函数在创建子进程后,先于父进程运行,父进程被阻塞,在子进程调用 exec 或 exit 之前,子进程与父进程共享数据段,此时可对父进程的数据进行操作。3、

40、execv():运行可执行文件格式:int execv(const char *file,char *argv,char *envp)其中返回 int 值的意义如下:0:正确返回-1:错误返回当一个进程调用 execv 函数执行另一个程序后,这个进程被新程序取代,包括代码段、数据段、堆栈段等等,并继承原进程的进程标识符。从自己的main()函数开始执行。新程序使用原进程的进程标识符和进程控制表里的一部分信息。该函数要用到 unistd.h 头文件,即在程序中要有#include4、wait():进程的等待Wait 函数常用来控制父进程与子进程的同步。在父进程中调用 wait 函数,则父进程被阻

41、塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出 SIGCHLD 信号。当接收到信号后,父进程提取子进程的终止状态字,从 wait 返回继续执行原程序。该函数适用的头文件如下:#include#include函数格式:pidt wait(int *statloc)子进程 ID:正确返回0:其他-1:错误返回可以使用系统提供的宏来获得子进程终止时的信息,这些宏定义在sys/wait.h 头文件中,具体含义如下:WIFEXITED(status):子进程正常终止,返回真。WEXITSTATUS(status):如果 WIFEXITED 返回真,则该宏返回子

42、进程的 exit 码。WIFSIGNALED(status):子进程非正常终止,返回真。19WTERMSIG(status):如果 WIFSIGNALED 返回真,则该宏返回引起子进程终止的信号值。WIFSTOPPED(status):子进程已结束,返回真。WSTOPSIG(status):如果 WIFSTOPPED 返回真,则该宏返回引起子进程结束的信号值。5、waitpid()如果父进程创建了多个子进程同时在运行,则父进程中 wait 函数会捕获它任一个子进程的结束信号,而无法让它确定地去捕获某一个进程的结束信号。Waitpid 函数则解决了这个问题。该函数适用的头文件如下:#includ

43、e#include函数格式:pidt waitpid(pidt pid,int *statloc,int options)子进程 ID:正确返回0:其他-1:错误返回参数 pid 的值决定要求父进程等待的不同特征的子进程,含义如下:0:与父进程组 ID 相同的子进程。0:进程 ID 为 pid 的子进程。-1:任意子进程。此时与 wait 函数功能相同。函数格式:void exit(int status)Status 为进程结束状态。在子进程调用 exit 后,子进程的结束状态会返回给系统内核,由内核根据状态字生成终止状态,供父进程在 wait 或 waitpid 函数中读取。如果子进程结束后

44、,父进程还没有读取子进程的终止状态,则系统就将子进程的状态置为“ZOMBIE” ,并保留子进程的进程控制块,里面记录着进程标识符、终止状态字、CPU 时间等信息,等父进程读取信息后,系统才彻底释放子进程的进程控制块。7、msgget():获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。该函数适用的头文件如下:#include#include#include函数格式:int msgget(key,flag)keyt key;int flag ;消息队列的标识符:正确返回20-1: 错误返回Key 是键值,这个键值要与已有的键值进行比较,已有的键值指在内核中已存在的其他消息队列

45、键值。当 key 的值为 IPCPRIVATE 时,创建一个新的消息队列;当 key 的值不为 IPCPRIVATE 时,对消息队列的打开或存取操作依赖于 flag 参数的取值。8、msgsnd():发送一条消息给一个消息队列该函数适用的头文件如下:#include#include#include函数格式:int msgsnd(id,smgp,size,flag)int id,size,flag;struct msgbuf* msgp;消息队列的标识符:正确返回-1:错误返回其中:id 是返回消息队列的标识符;msgp 是指向用户存储区的一个构造体指针,size 指示由 msgp 指向的数据结

46、构中字符数组的长度,即消息队列的长度;flag 规定当核心用尽内部缓冲空间时应执行的动作;若在标志 flag 中未设置IPCNOWAIT 位,则当该消息队列中的字节数超过一最大值时,或系统范围的消息数超过某一最大值时,则调用进程将被阻塞,进入等待队列;若设置IPCNOWAIT ,msgsnd 立即返回。9、msgrcv():从消息队列中接受消息, ,将该消息拷贝到消息缓冲区中,返回拷贝的字节数。该函数适用的头文件如下:#include#include#include函数格式:int msgsnd(id,smgp,size,type,flag)int id,size , type,flag;st

47、ruct msgbuf* msgp;接收到消息缓冲区的字节数:正确返回-1:错误返回其中,id 指定要接收的消息队列;msgp 是存放消息的消息缓冲区的地址指针;size 是消息缓冲区的大小;type 是用户要读的消息类型,取值有三种:(1)type0:查找消息队列中与该类型相匹配的第一条消息。(2)type=0:接收该队列的第一个消息。(3)typeint main(void)Printf(”Hello world!n”);该程序的文件名为:exam.c,用户可以使用 gcc 编译器对 exam.c 进行编译,gcc 的可执行文件在/usr/bin 目录下,/lib 和/usr/lib 目录

48、下是库文件,/usr/include 目录下是头文件。在 shell 提示符$下键入 gcc exam.c /编译 exam.c 程序gcc 将创建一个名叫 a.out 的文件,然后使用下面命令执行该程序。在shell 提示符下键入:./a.out“./”表示执行当前目录下的可执行文件或脚本程序。最后输出结果如下:Hello world!这就是 Linux 平台上编译的一个 c 语言程序。我们还可以通过使用选项-o 来改变编译后的目标文件名,例如可以使用下面的命令行把 a.out 改成 exam1.out。gcc o exam1.out exam.c这时可执行文件名就改变成 exam1.out

49、 了,而不是 a.out。如同运行 a.out一样可以运行 exam1.out。如下命令行所示$./exam1.out会得到同样的运行结果。二、gcc 选项简介gcc 的完整格式:gcc 选项 文件名gcc 命令行按“选项”指定的操作对给定的文件进行编译处理。在 gcc 后面可以有多个编译选项,同时进行多个编译操作。Gcc 的主要选项有:24-x language: 指定使用的语言(c、c+或汇编)-c :只对文件进行编译和汇编,但不进行连接-S :只对文件进行编译,但不汇编和连接-E :只对文件进行预处理,但不编译、汇编和连接-o file1 file2:将文件 file2 编译成可执行文件 file1-I library:用来指定所使用的库文件-I directory:为 include 文件搜索指定

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报