1、Linux 程序设计实验指导书实验类别: 课内实验 实验课程名称: Linux 程序设计实验室名称:软件工程专业实验室 实验课程编号: N03140112 总 学 时: 32 学 分: 2 适用专业: 软件工程 先修课程: Linux 操作系统、C 程序设计实验在教学培养计划中地位、作用:通过讲授 Linux 的操作使用、系统结构和 Linux 环境下的程序设计,使学生对 Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的基本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux 环境下工作,进一步熟悉 C 语言程序设计和数据结
2、构的知识,编写进行系统维护的脚本文件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程(如高级操作系统、Linux 内核源代码分析、嵌入式系统等)打下基础。Linux 程序设计实验大纲Linux Program Design课程类别:学科专业教育课程 课程名称:Linux 程序设计开课单位:软件学院 课程编号:N03140112总 学 时:32 学 分:2适用专业:软件工程先修课程:程序设计基础一、实验教学目标熟练掌握 shell 编程、熟练使用 linux 系统、掌握进程控制和进程间通信,学会编写网络程序,学会在 linux 环境中编写 web 程序。养成一种良
3、好的程序设计风格。二、实验环境Linux三、实验教材及参考书:1 实验指导书(自编讲义)2Linux 环境 C 程序设计 徐诚 高莹婷等 清华大学出版社 2010.13linux 入门到精通刘忆智 清华大学出版社 2010.1四、实验成绩评定方式根据学生在实验过程中的认真程度、上机结果验收情况以及实验报告撰写质量,进行综合评定。五、实验项目及学时分配序号 实验名称 实验类别 学时数 备注1 Linux 基本命令的使用 验证型 22 Shell 程序设计 设计型 23 文件操作与文件管理 验证型 24 Linux 下简单 C 程序设计 验证型 25 进程控制和进程间通信 设计型 26 网络程序设
4、计 验证型 2六、实验内容及要求实验一 Linux 基本命令的使用1、实验目的(1 )学习和掌握 Linux 的基本命令(2 )增强学生对 Linux 的学习兴趣2、实验内容(1 )linux 的登录操作(2 )常用基本命令的使用实验二 Shell 程序设计1、实验目的(1 ) Shell 程序设计中变量的使用; (2 ) 理解通道的概念并初步掌握它的使用方法; (3 ) 掌握算术操作、字符串操作、逻辑操作、文件操作; (4 ) 掌握 if then fi、if then elif fi、case、while、for 等控制语句;(5 ) 在 shell 脚本中使用函数;2、实验内容(1 )
5、通过对 shell 程序的调试,理解变量$#,$0,$1,$2,$3,$的含义; (2 ) Shell 顺序程序设计; (3 ) Shell 分支程序与多分支程序设计; (4 ) Shell 循环程序设计。实验三 文件操作与文件管理1、实验目的(1 ) 熟悉 Linux 下常用的操作指令。(2 ) 加深对文件,目录,文件系统等概念的理解。(3 ) 掌握 Linux 文件系统的目录结构。 (4 ) 掌握有关 Linux 文件系统操作的常用命令。 (5 ) 了解有关文件安全方面的知识。2、实验内容Linux 文件系统操作的常用命令。实验四 Linux 下简单 C 程序设计1、实验目的(1 )学习和
6、掌握 gcc 等 Linux 的开发调试环境。 (2 )学会在 Linux 下编写 C 程序。2、实验内容(1 )学习 GCC 编译程序(2 )学习并分别使用标准 C 的文件操作函数和 Linux 的系统调用创建一个对学生基本信息进行操作(插入、修改和删除)的 C 程序。实验五 进程控制和进程间通信1、实验目的为了理解和掌握 UNIX 和 Linux 进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。2、实验内容编写一个有名管道程序。一个(客户)进程从键盘循环读一系列字符,将这
7、些字符和发送者的 pid 发给服务器进程,让其统计输入的是字符还是数字,分别为多少个,完成后再向客户进程发回服务的结果,由客户进程输出。实验六 网络程序设计1、实验目的(1 ) 理解 Socket 概念; (2 ) 理解并掌握 Socket 模型下获得本机 IP 信息的方法; (3 ) 理解并发服务器模型,掌握通用套接字开发技术; (4 ) 掌握 Linux 平台数据结构的传送方法。2、实验内容(1 ) 编写获得本机 IP 信息的程序; (2 ) 编写基于并发服务器模式的网络通信原型系统; (3 ) 要求至少综合使用到实验目的中提到的三条或三条以上内容。Linux 程序设计实验指导书实验类别:
8、 课内实验 实验课程名称: Linux 程序设计实验室名称:软件工程专业实验室 实验课程编号: N03140112 总 学 时: 32 学 分: 2 适用专业: 软件工程 先修课程: 操作系统、C 程序设计实验在教学培养计划中地位、作用:通过讲授 Linux 的操作使用、系统结构和 Linux 环境下的程序设计,使学生对 Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的基本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux 环境下工作,进一步熟悉 C 语言程序设计和数据结构的知识,编写进行系统维护的脚本文件和实用化的大型应
9、用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程(如高级操作系统、Linux 内核源代码分析、嵌入式系统等)打下基础。实验一 Linux 基本命令的使用1、实验目的(1 )学习和掌握 Linux 的基本命令(2 )增强学生对 Linux 的学习兴趣2、实验内容(1 )linux 的登录操作(2 )常用基本命令的使用3、实验要求(1 )实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。(2 )填写完整的实验报告。4、实验步骤步骤 1:以 user_login 用户身份并使用 telnet 登录 Linux 服务器,按照提示创建自己的账户和口令。 步骤 2:使用新创建的
10、用户账户和口令登录 Linux 系统,察看登录后的界面。 步骤 3:使用 pwd 命令察看当前的工作目录,然后用 ls 命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF 等不同选项并比较不同之处。 步骤 4:在当前目录下建立一个名为 test 的新目录,然后将工作目录切换到 test 下,尝试将/etc 目录下的文件 passwd 拷贝到该目录下(cp 源文件 目的目录) 。察看当前目录下的 passwd 文件的属主和文件权限。步骤 5:尝试向当前目录下的 passwd 文件和/etc/passwd 文件分别写入一些新内容(可使用 echo “字符串 ” 文件的命令) ,看看操
11、作能否成功,如果不能成功,请说明原因。用 cat 命令浏览文件 password 的内容,用 more 命令进行浏览翻页操作,再用 less 命令浏览文件的内容。比较这几个命令的不同之处。步骤 6:用 ls 命令查看 test 下文件的权限,用 mv 命令更改文件 password 的文件名为test.txt,尝试用 chown 和 chgrp 更改文件的属主为 root、组为 root,看看能否成功,不成功,请说明原因。尝试用 chomd 将文件权限为“-rw-” 。看看能否成功,不成功,请说明原因。 步骤 7:用 rm 命令删除 test 目录下的所有文件,再用 rmdir 命令删除 te
12、st 目录。 (想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令) 步骤 8:使用 ps 命令查看当前系统内的进程,并利用 man 命令获取 ps 命令的参数,写出获取当前终端进程执行情况的 ps 命令。步骤 9:使用 df 命令查看当前系统已安装的文件系统的空间使用情况,记录结果。步骤 10:使用 du 命令查看用户的工作目录占用了多少空间,记录结果。 步骤 11:使用 free 命令查看内存资源的使用情况,记录结果。实验二 Shell 程序设计1、实验目的(1 ) Shell 程序设计中变量的使用; (2 ) 理解通道的概念并初步掌握它的使用方法; (3 ) 掌握算术操作、字
13、符串操作、逻辑操作、文件操作; (4 ) 掌握 if then fi、if then elif fi、case、while、for 等控制语句;(5 ) 在 shell 脚本中使用函数;2、实验内容(1 ) 通过对 shell 程序的调试,理解变量$#,$0,$1,$2,$3,$的含义; (2 ) Shell 顺序程序设计; (3 ) Shell 分支程序与多分支程序设计; (4 ) Shell 循环程序设计。3、实验要求(1 )实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。(2 )填写完整的实验报告。4、 实验步骤1 vi 的使用步骤 1: 以 root 用户身份登录进入 L
14、inux 系统。步骤 2:启动 Vi,切换到输入模式,输入一段英文:This ia an exercise! We use Vi to edit it. Left,down,up,right 步骤 3: 尝试匹配其中的一串字符,写出这命令及执行结果。匹配格式:/正则表达式元字符 说明. 匹配任意一个字符abc 匹配方括号中的任意一个字符。可以使用-表示字符范围,如a-z0-9匹 配小写字母和阿拉伯数字。abc 在方括号内开头使用符号,表示匹配除方括号中字符之外的任意字符。d 匹配阿拉伯数字,等同于0-9。D 匹配阿拉伯数字之外的任意字符,等同于0-9。x 匹配十六进制数字,等同于0-9A-Fa
15、-f。X 匹配十六进制数字之外的任意字符,等同于0-9A-Fa-f。w 匹配单词字母,等同于0-9A-Za-z_ 。W 匹配单词字母之外的任意字符,等同于0-9A-Za-z_。t 匹配字符。s 匹配空白字符,等同于 t。S 匹配非空白字符,等同于 t。* 匹配 * 字符。. 匹配 . 字符。/ 匹配 / 字符。 匹配 字符。 匹配 字符。* 匹配 0-任意个+ 匹配 1-任意个? 匹配 0-1 个n,m 匹配 n-m 个n 匹配 n 个n, 匹配 n-任意个,m 匹配 0-m 个$ 匹配行尾 匹配行首 匹配单词词尾代码:/w+s+w+$/w+s+w+/ias+步骤 4: 尝试替换其中的一串字符
16、,写出这命令及执行结果。替换命令: :s/正则表达式/ 替换字符串/选项代码::%s/ia/is 全局替换,%表示全局:1,4s/ia/is 只替换 1-4 行:s/ia/is 注意当前行的问题,如果在当前行进行替换会出现找不到模式的情况步骤 5: 尝试复制 /删除其中的一行或几行文本,写出命令及执行结果。按【Esc】然后输入 dd【连续两次 】删除一行文本步骤 6: 尝试复制 /删除其中的一个单词或几个字符,写出命令及执行结果。按【Esc】将光标移动到要替换的位置然后输入 r 再输入替换字符将第四行第一个字母 1 替换为 d步骤 7: 尝试使用鼠标复制文本,写出命令及执行结果。1. 选定文本
17、块。使用 v 进入可视模式,移动光标键选定内容。 2.复制的命令是 y,即 yank(提起) ,常用的命令如下: y 在使用 v 模式选定了某一块的时候,复制选定块到缓冲区用; yy 复制整行(nyy 或者 yny ,复制 n 行,n 为数字); y 复制当前到行头的内容; y$ 复制当前到行尾的内容; yw 复制一个 word (nyw 或者 ynw,复制 n 个 word,n 为数字); yG 复制至档尾(nyG 或者 ynG,复制到第 n 行,例如 1yG 或者 y1G,复制到档尾) 3. 剪切的命令是 d,即 delete,d 与 y 命令基本类似,所以两个命令用法一样,包括含有数字的
18、用法. d 剪切选定块到缓冲区; dd 剪切整行 d 剪切至行首 d$ 剪切至行尾 dw 剪切一个 word dG 剪切至档尾 4. 粘贴的命令式 p,即 put(放下) p 小写 p 代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面 P 大写 P 代表贴至游标前(上) 整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后)注: 在正则表达式中,表示匹配字符串的开始位置,$表示匹配字符串的结束位置。 命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。使用英文句号“.“可以重复上一个命令。 在复制粘贴时,另一组常用的命令是 u(撤销操作),U
19、 (撤销某一行最近所有修改),Ctrl+R(重做),这些功能主要是 vim 中的,vi 中略有差别代码:现在尝试将 1-3 行进行复制1.按【Esc 】键后按 【v】进入可视模式,使用 HJKL(左上下右)四个键选定 1-3 行2.按【y】复制选定的内容步骤 8: 尝试存盘退出操作,写出命令。:wq2.2 简单的 shell 程序步骤 1: 使用 Vi 将程序清单 2-1 的程序输入。程序清单 清单 2-1 menuMYDATE=date +%d/%m/%yTHIS_HOST=hostname -sUSER=whoamifile_run()echo “you must complete it“
20、uers()echo “there are who|wc -l users online“echo -e “who arenwho|awk print $1“ while :dotput clearcat “read CHOICEcase $CHOICE in1) ls -l|awk /d/ print $8 ;2) file_run ;3) uers;H|h)cat file1 将当前日期和时间存放到新建文件 file1 中。 Ls l 反馈信息中有新文件 file1。请注意并记下文件长度为:3 使用 cat 命令查看 file1 文件的内容。 4 利用 man 命令显示 date 命令的用
21、法(说明文件):5 将 date 命令的用法(说明文件内容)附加到文件 file1 的后面: 注意 file1 文件长度为 ,较前变长。 6 利用 ls -l file1 命令列出文件 file1 的较详细的信息。 ls -l file1 注意第二字段(链接记数)的值为 “1”。7 利用 ln file1 /fa 命令进行文件链接。然后运行 ls -l file1,查看显示的第二段的值发生了什麽变化。 8 现在想利用 cat fa 命令显示文件 fa 的内容,应该如何改动工作目录? 9 利用 cp file1 fa 命令生成文件 file1 的副本。然后利用 ls -l 命令查看工作目录的内容
22、。10 将文件 fa 删除。再利用 ls -l 命令查看工作目录内容。 11 运行 mv file1 file_a 命令,然后用 ls 命令查看这两个文件是否都还在工作目录中3.文件存取权限 1 存取权限 LINUX 系统对所有文件设置了存取权限。存取权限让你确定谁可以对你的个人文件和目录行访问,以及可以进行什麽操作。 把所有用户分为三类: 文件主(user ) ,即文件的属主。 组用户(group) ,即文件组的成员。 其他用户(other) ,即能对系统进行访问的所有其他用户。 对一个文件的存取权限分为三种: 读(r) 写(w) 执行(x) 一组存取权限以及相应的文件类型统称为文件模式。如
23、:rw-r-r-表示文件主有读和写的权限,组用户和其他用户只有读权限。 2 文件存取权限 读权限(r)允许指定的用户可以打开文件并阅读其内容。如 cat,more ,file 和 cp 命令等。 写权限(w )允许指定的用户可以打开文件并修改其内容。如 vi,mail,cp 等。 执行权限(x)允许指定的用户运行(即执行)一个二进制文件文件或者把一个 shell 脚文件当做命令来运行。当你通过输入命令名来调用命令时,你必须具有该命令文件的执行限。 3 目录存取权限 读权限(r)允许你列出相应目录中所存放的文件的名字(即目录的内容表) 。 写权限(w)允许你从目录中删除已有文件或者把新文件添加到
24、目录中。 查询权限(x)允许你在目录中进行查找和使用 cd 命令把工作目录放到它这里。 4 修改文件权限 文件主或 root 用户可以使用 chmod 命令来修改文件或目录的权限。修改文件权限的方式有两种:符号模式和绝对模式。这里主要介绍符号模式。使用 chmod 命令修改当前权限设置的一般形式是:chmod key file file. 其中,key 由以下成分组成:who +|-|= mode who 这一部分可以由下面的一个和多个字符组成:u,g ,o 或 a,它们分别表示文件主,组用户,其他用户或所有三种用户。默认值是 a。 第二部分必须是以下三个字符中的一个:+,- ,或者 =,分别
25、表示增加,删除或者设定。 mode 成分可以由以下字符任意组合:r ,w 或 x,分别表示读,写或者执行/ 查询的权限。 以上三个部分必须依次输入,而且它们之间没有空格。在一个命令行中可以指定多个key,彼此间用逗号隔开,中间没有空格。 如:设文件 f 原来的权限是 rw-rw-r-,现在想让所有用户都具有执行权限,则可使用以下命令:chmod a+x f ,该命令执行后,文件 f 的权限变成 rwxrwxr-x。练习:mv file_a file1 恢复文件 file1; ls l 显示文件 file1 的权限为 rw-rw-r; 1) 取消同组用户 g 和其他用户 o 对文件可读的权利;
26、2) 显示文件 file1 的权限。 3) 恢复同组用户 g 和其他用户 o 对文件可读的权利; 4 配额管理1 利用 fdisk 创建一个分区运行以下命令:sudo fdisk /dev/sda首先查看一下分区表的情况再输入 m 查看帮助,了解各个选项的作用:输入 n 创建新分区,全部采用默认值创建完成后输入 w 保存分区表此时应当重新启动来加载新分区,或者执行以下命令:partprobe看到新创建的分区及其所对应的设备名称:接下来使用相同的方法在扩展分区中分出一个逻辑分区:查看逻辑分区输入 w 保存分区表并退出,然后执行以下命令:partprobe2 格式化为 ext 3 文件系统查看命令
27、的格式:将刚创建的逻辑分区格式化为 ext3 文件系统,命令如下:mkfs -t ext3 -c /dev/sda53 将该分区设置为自动挂载为/home将 sda3 挂载到 /home 的命令如下:mount /dev/sda5 /home使用以下命令查看挂载情况:df -h如果想要实现开机自动挂载,需要添加一行到/etc/fstab 中开机自动挂载,执行以下命令:vim /etc/fstab插入一行:/dev/sda5 /home ext3 defaults 0 1保存退出即可。4 创建两个用户 hellen 和 jerry,组群为 student然后创建 Student 组群:group
28、add Student首先创建两个用户:useradd hallen -g Student -museradd jerry -g Student -m检查创建结果,使用 id 命令查看用户所在的组:id hallenid jerry4 对 /home 文件系统实施用户级和组群级的配额管理,普通用户 helen 和 jerry 的软配额为 150MB,硬配额为 200MB,student 组群的软配额为 800MB,硬配额为 900MB0软配额:宽限时间(grace time) ,可以在一定时间内超出磁盘配额的限制!硬配额:用户不能超出磁盘配额的限制!实现磁盘配额限制步骤:1. 内核里面打开了配
29、额的支持,绝大部分发行版都打开的2. 以配额方式加载文件系统3.安装配额软件:4.配置配额想要管理硬盘配额,需要安装 quota 和 quotatool 软件包。Ubuntu 系统中的硬盘配额管理是默认禁用的,可以被系统管理员启用和配置。使用以下命令可以安装 quota:apt-get install quota同理,使用如下方法设置 quotatool:apt-get install quotatool原/etc/fstab 的一项: /dev/sda5 /home ext3 defaults 0 1做如下修改:对用户限制是 usrquota,对组限制是 grpquota/dev/sda5
30、/home ext3 defaults,usrquota,grpquota 1 1对组限制就将 usrquota 改为 grpquota重新加载文件系统: mount -o remount,usrquota,grpquota /home加载内核模块,并让其开机的时候也会自动加载 modprobe quota_v2 echo quota_v2 /etc/modules使用 df -h 命令查看/home 是否已经被挂载(不出意外此时已被挂载) ,如果被挂载需要先将其解除挂载,命令如下:umount /home在启用配额的分区创建文件并且限制 root 才能读写,执行这一步操作时, /home 不
31、能被挂载,否则操作无法成功touch /home/aquota.user touch /home/aquota.group chmod 600 /home/aquota.user /home/aquota.group重新启动就可以打开磁盘配额,运行以下命令检查配额是否启动:quotacheck -vagum现在到最后一步了,假设我们要对系统里的 hallen 用户和 jerry 用户进行限制配额,软配额为 150MB,硬配额为 200MB,student 组群的软配额为 800MB,硬配额为 900MB0: quotatool -u hallen -bq 150M -l 200M /home 软限制 150M 硬限制为 200Mbquotatool -u jerry -bq 150M -l 200M /home 软限制 150M 硬限制为 200Mbquotatool -g Student -bq 800M -l 900M /home 软限制 800M 硬限制为 900Mb系统管理员可以用如下命令看到 磁盘配额 repquota -u -g /home实验四 Linux 下简单 C 程序设计1、实验目的(1 )学习和掌握 gcc 等 Linux 的开发调试环境。 (2 )学会在 Linux 下编写 C 程序。2、实验内容(1 )学习 GCC 编译程序