




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux操作系统实验教程第1章 Linux系统概述一、 Linux系统结构从操作系统的角度来分析Linux,它的体系结构总体上属于层次结构如下图所示: 从内到外包括三层:最内层是系统核心,中间是Shell、编译编辑实用程序、库函数等,最外层是用户程序,包括许多应用软件。从操作系统的功能角度来看,它的核心有五大部分组成:进程管理、存储管理、文件管理、设备管理、网络管理。各子系统实现其主要功能,同时相互之间是合作、依赖的关系。进程会管理是操作系统最核心的内容,它控制了整个系统的进程调度和进程之间的通信,是整个系统合理高效运行的关键;存储管理为其他子系统提供内存管理支持,同时其他子系统又为内存管理提供了实现支持,例如要通过文件管理和设备管理实现虚拟存储器和内外存的统一管理。二、 配置一个双引导系统如果计算机中已经安装了其他操作系统,并想创建一个引导系统以便兼用Red Hat Linux和另外的操作系统,需要使用双引导。机器启动时,可以选择其中之一,但不能同时使用两者。每个操作系统都从自己的硬盘驱动器或硬盘分区中引导,并使用自己的硬盘驱动器或硬盘分区。如果计算机上还没有安装任何操作系统,可以使用专门的分区及格式化软件给Windows创建指定大小的分区,Windows的文件系统为FAT,再为Linux系统创建所需要大小的分区(4G或更大),另外再给Linux留100MB左右的交换分区,Linux的文件系统为ext2。然后就可以安装系统了。应首先安装Windows,然后再安装Red Hat Linux。如果只进行了分区而没有格式化各分区,在安装时可以使用Windows自带的格式化程序和Linux 自带的格式化程序进行各自分区的格式化。当Windows已经被安装,而且已为Linux准备了足够的磁盘空间,就可以安装Linux了。Red Hat Linux安装程序通常会检测到Windows并自动配置引导程序来引导Windows或Red Hat Linux。安装完成之后,无论在什么时候启动计算机,都能够在引导装载程序屏幕中指明想启动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,安装程序检测用户系统并试图识别光驱。如果找到了,会进入安装进程的下一个阶段。这时若要终止安装进程,应取出光盘,重新引导机器。步骤3,欢迎使用Red Hat Linux,欢迎屏幕并不提示做任何输入。可阅读左侧面板内的帮助文字来获得附加的说明,以及关于如何注册Red Hat Linux产品的信息。单击next继续步骤4,语言选择。使用鼠标选择要使用的语言。选择恰当的语言会在稍后的安装中帮助定位时区配置。安装程序将会根据这个屏幕上所指定的信息来定义恰当的时区。选择恰当的语言(例如简体中文)后,单击next继续。步骤5, 键盘配置。用鼠标选择要在今后用作系统默认的键盘布局类型(例如U.S.English),选定后,单击next继续。如果要在安装结束以后,想改变键盘类型,可在系统启动后窗口中单击屏幕左下角的,弹出主菜单,选择“系统设置/键盘”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-keyboard命令,如果不是根用户,系统会提示输入根口令再继续。步骤6,鼠标配置。为系统选择正确的鼠标类型。如果找不到一个能确定与系统兼容的鼠标,可以根据鼠标的键数和它的接口,选择“通用”项目中的一个。选定鼠标型号以后,单击next继续。如果在安装结束以后改变鼠标配置,可在系统启动后窗口中单击屏幕左下角的,弹出主菜单,选择“系统设置/鼠标”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-mouse命令,如果不是根用户,系统会提示输入根口令再继续。步骤7,选择安装还是升级。如果安装程序在系统中检测到从前安装的Red Hat Linux版本,则“升级检查”屏幕就会自动出现。这里考虑在系统上执行Red Hat Linux的新安装,选择“执行Red Hat Linux的新安装”,然后单击next继续。步骤8,选择要执行的安装类型。Red Hat Linux的安装类型选项有“个人桌面”、“工作站”、“服务器”、“定制” 和“升级”。选择“个人桌面”,单击next继续。步骤9,网络配置。安装程序会自动检测到机器中拥有的任何网络设备,并把它们显示在“网络设备”列表中。选择默认选项后,单击next继续。要在安装结束以后改变网络配置,可在系统启动后窗口中单击屏幕左下角的“红帽子”,弹出主菜单,选择“系统设置/网络”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-network命令,如果不是根用户,系统会提示输入根口令后再继续。步骤10,为系统选择恰当的安全级别。l “高级”:系统不会接受那些没有被具体制定的连接(除了默认设置,例如DNS回应、DHCP之外)。如果要把系统连接到互联网上,但是并不打算运行服务器,这是最安全的选择。如果需要额外的服务,可以选择“定制”来具体指定允许通过防火墙的服务。l “中级”:防火墙将不准系统访问某些资源。可以选择“定制”来具体指定允许通过防火墙的服务。l “无防火墙”:给予完全访问权,且不做任何安全检查。l “信任的设备”:选择“信任的设备”中的任何一个可使系统接受来自这一设备的全部通信而不受防火墙规则的限制。l “允许进入”:启用这些选项,将允许具体指定的服务穿过防火墙。防火墙配置完毕,单击next继续。要在安装完毕后改变安全级别配置,可在系统启动后的窗口中单击屏幕左下角的,弹出主菜单,选择“系统设置/安全级别”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-securitylevel命令,如果不是根用户,系统会提示输入根口令后再继续。步骤11,选择时区。可以通过选择计算机的物理位置,或指定时区和通用协调时间(UTC)之间的偏移来设置时区。时区选定后,单击next继续。要在安装完成以后改变时区配置,可在系统启动后的窗口中单击屏幕左下角的“红帽子”,弹出主菜单,选择“系统设置/日期&时间”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-date命令,如果不是根用户,系统会提示输入根口令后再继续。步骤12,设置根口令。设置根账号(即超级用户帐号)及其口令是安装过程中最重要的步骤之一。根账号是用来安装软件包、升级RPM以及执行多数系统维护工作。作为根用户登录可获得对系统的完全控制权。安装程序会提示为系统设置一个根口令。如果不输入根口令,安装程序将不允许继续。根口令必须至少包括6个字符,所输入的口令不会在屏幕上显示,口令是区分大小写的。根口令设置完毕,单击next继续。要在安装以后改变根口令,可在系统启动后的窗口中单击屏幕左下角的,弹出主菜单,选择“系统设置/根口令”,如果不是根用户,系统会提示输入根口令再继续;或者在shell提示符下输入redhat-config-rootpassword命令,如果不是根用户,系统会提示输入根口令后再继续。步骤13,个人桌面的默认设置。安装程序会自动选择多数软件包。单击next继续。步骤14,选择软件包组。在“其他”栏(组件列表的结尾处)选择“全部”以安装包括在Red Hat Linux中的所有软件包。也可以在选择软件包组后,用鼠标选择或取消选择单个软件包。要了解某一指定软件包的详情,可单击该软件包的名称,关于它的信息将会在屏幕底部出现。某些软件包(例如内核和某些库)是每个系统所必需的,被系统默认选定,他们不能被选择或取消选择。软件包设置完成后,单击next继续。步骤15,至此,应该可以看到为安装Red Hat Linux而准备好的屏幕。如果由于某种原因希望中断安装进程,此处是可以安全取消安装并重新引导系统的最后机会。一旦按下了“next”按钮,分区将会被写入,系统将会被安装。注意:如果想中止安装,应该在信息被写入硬盘驱动器之前重新引导系统。继续安装,单击next继续。步骤16,安装软件包。在所有软件包安装完成之前,将不能进行任何其它操作。安装的快慢取决于所选择软件包的数量和计算机的运行速度。依据安装程序的提示,一次插入第1、第2、第3张Red Hat Linux系统光盘。步骤16,创建引导盘。要创建一张引导盘,可在软驱中插入一张空白的、格式化了的磁盘,然后单击next继续。步骤17,视频卡配置。安装程序给出一个视频卡列表供选择。选定后(或接受系统的默认选择),单击next继续。步骤18,显示器配置。安装程序给出一个显示器列表供选择。选定后(或接受系统的默认选择),单击next继续。步骤19,定制图形化配置。设置屏幕“色彩深度”和“屏幕分辨率”(或接受系统的默认选择),单击next继续。步骤20,安装完成。至此,安装完成。取出软驱中的软盘和光驱中的光盘。单击“退出”按钮,来重新引导系统。一份完整的安装日志可在/root/install.log中找到,已备今后参考。四、登录和退出Red Hat Linux系统 1、登录系统打开计算机,选择Red Hat Linux,Linux系统开始启动,之后出现如下登录界面:输入用户名,按回车,系统要求输入口令,输入口令后按回车。如果输入的用户名和口令正确,就会出现以下窗口至此,已经进入Linux系统。2、退出系统单击窗口左下角的打开主菜单,选择其中的“注销”命令,在弹出的对话框中选择“关闭系统”,单击“确定”按钮。系统将关闭,等出现“power down”字样时,可以关闭电源。还可使用其他方法退出系统,这里不再介绍。五、Linux系统的shell使用Linux系统时,用户多数时间是通过shell与系统进行对话的。Shell是一个接受用户输入命令并将其转换成指令的程序,是用户与Linux系统之间的界面之一。shell 提示看起来类似你熟悉的其它命令行界面。用户在 shell 提示下键入命令,shell 解释这些命令,然后告诉 OS 该怎么做。有经验的用户可以编写 shell 脚本来进一步扩展这些功能。要打开shell,可在启动后的窗口中,单击屏幕左下角的即主菜单,选择“系统工具/终端”即可进入shell。 还可以右击桌面并从菜单中选择新建终端来启动 shell。Shell的界面如下:要退出 shell 提示,点击 shell 提示窗口右上角的X 按钮,或在提示中键入 exit,或按 Ctrl-D。Linux系统中可以使用的shell有:bash:Bourne Again Shell。由GNU(自由软件基金会)开发。是Linux系统中最常用的shell,也是Red Hat Linux9x中默认的shell。合乎POSIX标准且与Bourne Shell兼容,提供了编辑命令行的功能。csh:c shell。由Berkeley(伯克利大学)开发,与Bourne Shell在交互式使用上很多是兼容的,但在程序设计界面上却有很大的不同。不提供命令行编辑功能。ksh:Korn Shell。在UNIX系统下得到普遍应用,提供了命令行编辑功能。sh: Bourne Shell。是原始的shell,不提供命令行编辑功能。tcsh:c shell的加强版,提供了命令行编辑功能。zsh:z shell。最新的shell,与Bourne Shell兼容,提供了命令行编辑功能。六、Linux系统文件、目录和权限Linux文件名没有标准格式。通常文件名可以包含任何字符(“/” 字符除外,“” 字符不能作为文件名的第一个字符),文件名的长度限制在256个字符以内。Linux文件名也提供了强大的通配符:l 星号(*):可以匹配任何字符串。l 问号(?):可匹配任何单个字符。Linux系统中文件的权限有3种l Read(可读)权限:可以读取文件内的数据。l Write(可写)权限:可以改变或删除该文件。l Execute9(可执行)权限:可以把该文件当成程序执行。拥有root口令的用户称为超级用户,超级用户有权访问整个系统,包括建立普通帐号、修改口令、安装及卸载软件等。超级用户的提示符为#,普通用户的提示符为$。在Linux文件系统根目录下,有如下子目录:bin、dev、etc、home、install、lib、mnt、proc、root、tem、user、var(不同版本,目录会略有不同)。/bin目录:该目录中存放许多基本的系统程序。/dev目录:该目录中存放的是设备驱动程序,用来访问系统设备和资源。/home目录:用户主目录,存放各用户的子目录。七、加载USB存储设备1.在插入U盘或硬盘之前,以超级用户的身份,在命令行窗口运行:fdisk -l 命令,系统将显示目前所能识别到的硬件存储设备;即:# fdisk -l显示内容如:sda sda1 sda2 sdb sdb1 sdb2 等信息,其中,sda与sdb表示目前系统有两个硬盘,后面带有数字表示各个硬盘下的各区目录;硬盘或存储设备一般都是以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盘或移动硬盘若要显示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盘即可。#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 该命令一次可以删除多个目录,删除目录时要求目录为空。另外,Linux系统还提供了rm命令删除目录和文件。Rm名令常用的选项有:-f:如果文件不存在则忽略,并且不提示。-r:递归地删除目录下的内容,rm只有加了这个参数才可以删除目录。3、改变工作目录(cd)改变工作目录命令与PC-DOS的改变工作目录命令一样。注意,当转到别的用户目录时,能执行的操作取决于该用户赋予的权利。格式:cd 路径名当不给出路径名时,cd命令的执行就转到用户的注册目录(home)中,即由环境变量$HOME指定的目录,否则,转到按路径名指定的目录。例如:$cd d1进入到当前目录下的d1目录中$cd /home/y/d2按路径名转到d2目录下。$cd 转到y目录下。指定路径时,可以使用相对路径,也可以用绝对路径,这一点和PC-DOS一样。注:要转到某个目录时,必须对那个目录有执行权,否则出错。4、确定当前目录所在的位置(pwd)格式:pwd例如:$pwd/home/y/d1当前目录路径为:/home/y/d15、列出某目录下的内容(ls)该命令与PC-DOS中的dir命令类似,列出目录下的各文件名。格式:ls 选择项常用的选择项有:-l:按长格式列出每个文件的全部属性信息(如文件名、文件大小、文件的存取方法等)。-a:列出所有的文件名,包括以“.”开始的隐含文件。-s:对每个文件按块给出大小。-i:在第1列给出每个文件的i节点号。-t:按文件最后修改时间排序列出。-R:列出包括子目录下的文件名。6、目录、文件改名和移动目录、文件(mv)格式1:mv 源目录名 目标目录名功能:如果目标目录不存在,则将源目录名改为目标目录名。如果目标目录名已经存在,则将源目录移到目标目录之下,作为它的子目录。此时要求使用该命令的用户对目标目录有写权限。格式2:mv 源文件名 目标文件名功能:将源文件名改为目标文件名。格式3:mv 文件名1 文件名2 目录名功能:将文件1 文件2 传送到指定的目录中。常用的选项有:-f:如果目标文件存在,则覆盖目标文件而不提示。-u:只复制目标中不存在的文件或更新过的文件。7、复制目录或文件(cp)cp命令既可以复制目录也可以复制文件格式1:cp 选择项 源目录名 目标目录名功能:将一个或多个源目录中的文件复制到目标目录下。格式2:cp 选择项 源文件名 目标文件名功能:把一个文件复制到另一个文件中。格式3:cp 选择项 文件名1 文件名2 目录名功能:把一个或多个文件复制到一目录中。 说明:(1)当源目录或源文件为多个时,各目录名或各文件名之间用空格分开。(2)将一个文件复制到目录时,该目录必须是可写的,否则复制失败。当把一个文件复制到另一个文件时,若目标文件已经存在,则覆盖之,但覆盖文件的所有者的存取权限保持不变。常用的选择项有:-i:当目标已经存在时,在覆盖之前,先提示是否覆盖;-f:如果目标文件存在,则覆盖目标文件而不提示;-r:递归地复制源目录到目标目录;-u:只复制目标中不存在的文件或者更新过的文件;-R:递归地复制当前目录及子目录下的文件;-p:复制时保持文件的属性;-d:复制时保持链接关系;8、显示目录所占磁盘空间的大小(du)格式:du 选择项 目录名常用的选择项有:-a:递归地显示所有目录下的文件占用的空间;-h:以可读形式列出各文件大小;-s:只显示该目录的大小,目录中的各文件占用的空间不显示二、文件管理1、显示文件内容命令(cat和more)(1)连接和显示文件(cat)格式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键退出该命令。常用的选择项有:+行号:从文件的指定行号开始显示。+/字符串:从文件中指定的字符串前两行开始显示。-s:把文件中的多个空行压缩成一个空行。2、删除文件命令(rm)格式:rm 选择项 文件名1 文件名2常用的选择项有:-f:如果文件不存在则忽略,并且删除前不提示。-r:递归地删除目录下的内容,只有加了该参数才可以删除目录。3、统计文件中的行、字和字符数(wc)格式:wc 选择项 文件名常用的选择项有:-l:只对指定文件中的行进行统计。-w:只对指定文件中的字进行统计。-c:只对指定文件中的字符进行统计。如果没有选择项,wc的统计顺序为,先统计行,再统计字,然后统计字符。最后给出被统计的文件名。三、其它1、检查磁盘剩余空间(df)2、echo格式: echo -n word/string此命令把每个单词或字符串写入shell的标准输出.四、变量和参数在shell程序中,共有6种类型的变量1、变量的定义定义变量的格式:变量名=表达式用$可以取得变量的值,如:$num为num的值。2、位置变量位置变量是在调用shell程序的命令行中按照确定的位置决定的变量。位置变量用来存储Shell程序后面所跟的参数。第一个参数存储在变量1中,第二个参数存储在变量2中,依次类推。在程序名之后输入的每个参数之间用空格分隔。$0是当前该命令文件的名字。例如,编写一个Shell程序reverse,执行时带两个参数。输出时,将两个参数的位置颠倒。reverse的内容为:#program reverse, prints the command line parameters out in reverse orderecho $2 $1在Shell下执行此Shell程序:reverse hello there其输出为:there hello3、shell预定义变量有些变量在执行Shell程序时系统就设置好了,并且不能加以修改:$# 存储运行Shell程序时输入的位置参数的个数。$? 存储上一个执行命令的返回值。$* 存储从第一个位置参数开始的所有位置参数的内容。$ 存储所有命令行输入的参数,分别表示为“$ 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 -L filename 如果 filename为符号链接,则为真 -L /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比 filename2旧,则为真 /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 != 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 在脚本程序中可以用运算符将运算对象连接起来构成的式子称为表达式。六、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、for循环语句 格式1: for 变量 in 值表do命令表done格式2: for 变量 in 文件正则表达式do命令表done 其执行过程是,变量的值依次取当前目录下(或给定目录下)与正则表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直至所有匹配的文件名取完为止,退出for循环。 格式3: for i in $* 或者 for i do do命令表 命令表done done 这两种形式是等价的。其执行过程是,变量i 依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。 3、while循环语句格式:while条件表达式 do命令表done 其执行过程是,先进行条件测试,如果结果为真,则进入循环体(dodone之间部分), 执行其中命令;然后再做条件测试直至测试条件为假时才终止while语句的执行。4、until语句格式:until 条件表达式do命令表done 它与while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。5、break语句和continue语句break语句可以使我们从循环体中退出来。格式: break n 其中,n表示要跳出几层循环。默认值是1,表示只跳出一层循环。 continue语句跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。格式: continue n 其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环。默认值为1。循环层数是由内向外编号。 6、case语句case语句允许进行多重条件选择。格式:case 字符串 in模式字符串1) 命令序列1; ;模式字符串2) 命令序列2; ;模式字符串n) 命令序列n; ;esac 其执行过程是用“字符串”的值依次与各模式字符串进行比较,如果发现同某一个匹配,那么就执行该模式字符串之后的各个命令,直至遇到两个分号为止。如果没有任何模式字符串与该字符串的值相符合,则不执行任何命令。 在使用case语句时应注意:(1)每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;)结束。(2)模式字符串中可以使用通配符。(3) 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。(4)各模式字符串应是惟一的,不应重复出现。并且要合理安排它们的出现顺序。例如,不应将“*”作为头一个模式字符串,因为“*”可以与任何字符串匹配,它若第一个出现,就不会再检查其它模式了。(5)case语句以关键字case开头,以关键字esac(是case倒过来写!)结束。(6)case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。7、expr语句 虽然shell并不精于数值计算,但还是提供了有关的计算语句。格式:expr 表达式1 表达式2 表达式中只允许整数,合法的运算符有+、-、*、/和%(取余),在*(乘号)和/(除号)之前必须冠以(反斜杠),以防这些运算符由expr获得之前被shell解释。例如:$expr 3 * 5 + 2 / 2 16注意:运算符两侧要留有空格。8、read语句利用read语句命令可以从键盘上读取数据,然后赋给指定的变量格式:read 变量1 变量2 例如:read x y z输入数据时,数据间以空格或制表符作为分隔符。如果变量个数与给定数据个数相同,则依次对应赋值;如果变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据;如果变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串。9、举例例1 从控制台接收用户输入,并在标准输出设备上显示结果echo “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 “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依次取值表中各字符串,即第一次将“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 这段程序对各个给定的位置参数,首先判断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,利用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 $1.gz $HOME/dustbin /移动到回收站echo “File $1 is deleted !”fi10、Shell脚本的建立和执行(1)Shell脚本的建立Shell程序可以存放在文件中,这种被Shell解释执行的命令文件称为Shell脚本 (Shell Script)。Shell脚本可以包含任意从键盘键入的Linux命令。建立Shell脚本的步骤同建立普通文本文件的方式相同,利用任何编辑器(如vi)进行程序录入和编辑加工。例如,要建立一个名为ex1的Shell脚本,可在提示符后输入命令:$ viex1 进入vi的插入方式后,就可录入程序行。完成编辑之后,将编辑缓冲区内容写入文件中,返回到Shell命令状态。(2)执行Shell脚本格式:$ bash脚本名参数 例如:$ bashex1 /usr/meng/usr/zhang Shell从文件ex1中读取命令行,并执行它们。当Shell到达文件末尾时就终止执行,并把控制返回到Shell命令状态。若有参数,则将参数值传递给程序中的命令,使一个Shell脚本可以处理多种情况,就如同函数调用时可根据具体问题给定相应的实参。第3章 Linux系统调用函数简介1、fork( ):创建一个新进程格式:int fork()其中返回int值的意义如下: 0:创建子进程,从子进程返回0:从父进程返回,返回值为子进程的进程标识符-1:创建失败2、vfork( ):创建一个新进程格式:int vfork()其中返回int值的意义如下:0:创建子进程,从子进程返回0:从父进程返回,返回值为子进程的进程标识符-1:创建失败vfork()和fork()不同之处在于:在fork调用中,子进程复制父进程的数据区作为自己的数据区,能够继承已有的资源,从而对数据的操作不再影响父进程。vfork()函数在创建子进程后,先于父进程运行,父进程被阻塞,在子进程调用exec或exit之前,子进程与父进程共享数据段,此时可对父进程的数据进行操作。3、execv():运行可执行文件格式:int execv(const char *file,char *argv,char *envp)其中返回int值的意义如下:0:正确返回-1:错误返回当一个进程调用execv函数执行另一个程序后,这个进程被新程序取代,包括代码段、数据段、堆栈段等等,并继承原进程的进程标识符。从自己的main()函数开始执行。新程序使用原进程的进程标识符和进程控制表里的一部分信息。 该函数要用到unistd.h头文件,即在程序中要有#include4、wait():进程的等待Wait函数常用来控制父进程与子进程的同步。在父进程中调用wait函数,则父进程被阻塞,进入等待队列,等待子进程结束。当子进程结束时,会产生一个终止状态字,系统会向父进程发出SIGCHLD信号。当接收到信号后,父进程提取子进程的终止状态字,从wait返回继续执行原程序。该函数适用的头文件如下:#include#include函数格式:pidt wait(int *statloc)子进程ID:正确返回 0:其他 -1:错误返回可以使用系统提供的宏来获得子进程终止时的信息,这些宏定义在sys/wait.h头文件中,具体含义如下:WIFEXITED(status):子进程正常终止,返回真。WEXITSTATUS(status):如果WIFEXITED返回真,则该宏返回子进程的exit码。WIFSIGNALED(status):子进程非正常终止,返回真。WTERMSIG(status):如果WIFSIGNALED返回真,则该宏返回引起子进程终止的信号值。WIFSTOPPED(status):子进程已结束,返回真。WSTOPSIG(status):如果WIFSTOPPED返回真,则该宏返回引起子进程结束的信号值。5、waitpid()如果父进程创建了多个子进程同时在运行,则父进程中wait函数会捕获它任一个子进程的结束信号,而无法让它确定地去捕获某一个进程的结束信号。Waitpid函数则解决了这个问题。该函数适用的头文件如下:#include#include函数格式:pidt waitpid(pidt pid,int *statloc,int options)子进程ID:正确返回 0:其他 -1:错误返回参数pid的值决定要求父进程等待的不同特征的子进程,含义如下:0:与父进程组ID相同的子进程。0:进程ID为pid的子进程。-1:任意子进程。此时与wait函数功能相同。-1:进程组ID为pid绝对值的子进程。Statloc所指的地址用于存放子进程的终止状态字。Options控制waitpid的执行,常用的参数如WNOHANG:若waitpid函数没得到指定子进程的结束信号,则立即返回零,不会阻塞。6、exit():结束进程 进程结束最常用的方法是调用exit函数,在main函数中调用的return,最终也是调用exit,这些都属于进程的正常终止。该函数适用的头文件如下:#include函数格式:void exit(int status)Status为进程结束状态。在子进程调用exit后,子进程的结束状态会返回给系统内核,由内核根据状态字生成终止状态,供父进程在wait或waitpid函数中读取。如果子进程结束后,父进程还没有读取子进程的终止状态,则系统就将子进程的状态置为“ZOMBIE”,并保留子进程的进程控制块,里面记录着进程标识符、终止状态字、CPU时间等信息,等父进程读取信息后,系统才彻底释放子进程的进程控制块。7、msgget():获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。该函数适用的头文件如下:#include#include#include函数格式:int msgget(key,flag) keyt key; int flag ;消息队列的标识符:正确返回 -1: 错误返回Key是键值,这个键值要与已有的键值进行比较,已有的键值指在内核中已存在的其他消息队列键值。当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指向的数据结构中字符数组的长度,即消息队列的长度;flag规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中未设置IPCNOWAIT位,则当该消息队列中的字节数超过一最大值时,或系统范围的消息数超过某一最大值时,则调用进程将被阻塞,进入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具设计师管理制度
- 应完善日常管理制度
- 应急库防火管理制度
- 彩钢板厂房管理制度
- 微信群规定管理制度
- 心理沙盘室管理制度
- 快递件投送管理制度
- 总工办工作管理制度
- 总部精细化管理制度
- 慕凯莎公司管理制度
- 2025年中考英语考前冲刺卷(北京卷)(解析版)
- 2025年物业安全管理专家考试试题及答案
- 2025年医保知识考试题库及答案(医保政策宣传与解读)综合测试
- “临床营养科建设与管理指南”实施细则-I级标准化临床营养科建设示范基地
- 结直肠癌分子病理检测临床实践指南(2025版)解读
- 安全生产管理的技术规范与操作要求试题及答案
- GB/T 34110-2025信息与文献文件(档案)管理核心概念与术语
- 年地理中考热点6银发经济课件
- 中考生物复习专题训练:传染病及其预防(含真题及答案)
- 云南省昆明市盘龙区2023-2024学年四年级下学期语文期末质量检测卷(含答案)
- Unit 7 Outdoor fun 单元教案 2024-2025学年译林版(2024)七年级英语下册
评论
0/150
提交评论