完整word版太原理工大学Linux实验报告.docx
《完整word版太原理工大学Linux实验报告.docx》由会员分享,可在线阅读,更多相关《完整word版太原理工大学Linux实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
完整word版太原理工大学Linux实验报告
实验名称
实验一Linux虚拟机的定制安装
实验地点
计算机学院
实验楼308
实验时间
2017。
4。
18
一、实验目的和要求
1.通过对Linux操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台。
2.掌握Linux操作系统的虚拟机定制安装。
3.熟悉Linux文件目录结构
二、实验内容和原理
实验内容:
利用虚拟机软件定制安装Linux操作系统,熟悉安装过程中各个选项的意义。
实验原理:
虚拟机可以说是一种软件,也可以说是一种技术,它允许用户在一台主机上虚拟出多台计算机,每台虚拟的计算机都可以有自己的硬件及软件配置
三、主要仪器设备
PC机、VMWorkstation、Redhat5。
0
四、操作方法与实验步骤
1.安装VMwareWorkstation,并汉化
2.在VMwareWorkstation当中创建一个新的虚拟机,指定安装包的路径。
3.安装定制RedhatEnterpriseLinux5。
0安装说明:
(1)对软件开发和和网络服务包进行定制.
(2)选择samba服务、nfs服务、tftp服务、Telnet服务和FTP服务
(3)关闭系统防火墙、禁用SELinux服务
(4)手动设置系统分区
五、实验数据记录和处理
(1)点击VMware主界面上的图标“NewVirtualMachine",创建一个新的虚拟机。
(2)在弹出来的对话框中选择“Custom”对虚拟机进行定制安装,然后点击“下一步”
(3)选择OS的名称:
“Linux”,版本:
“RedHatEnterpriseLinux5”,然后点击“下一步”
(4)选择虚拟机在硬盘上的安装位置,然后点击“下一步”
(5)选择CPU的类型是否为双核,然后点击“下一步"
(6)选择虚拟机的虚拟内存大小,若物理内存较大,可适当增加其值,然后点击“下一步"
(7)选择网络联机模式,局域网用户选择桥接模式:
“Usebridgednetworking",然后点击“下一步”
(8)选择“创建一个虚拟硬盘",然后点击“下一步”
(9)选择硬盘类型,PC机一般选择“IDE",服务器一般选择“SCSI”,然后点击“下一步"
(10)选择硬盘类型,PC机一般选择“IDE”,服务器一般选择“SCSI",然后点击“下一步”
(11)选择虚拟硬盘容量,若硬盘空间较大可适当增加其值,然后点击“下一步",根据提示完成操作,并返回虚拟机主界面
(12)在虚拟机主界面点击如图所示的图标,编辑虚拟机设置
(13)选择系统安装文件(ISO)的位置
(14)在虚拟机主界面启动虚拟机
六、实验结果与分析
完成了安装VMwareWorkstation,并汉化,在VMwareWorkstation当中创建一个新的虚拟机,指定安装包的路径,安装定制RedhatEnterpriseLinux5。
0.
七、讨论、心得
本实验通过对Linux操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台,掌握了Linux操作系统的虚拟机定制安装,熟悉了Linux文件目录的结构,在实验中遇到了一些问题,但是通过网上搜索和同学帮助最终还是完成了。
实验名称
实验二熟悉Linux基本命令和GCC编译器
实验地点
计算机学院
实验楼308
实验时间
2017.4。
18
一、实验目的和要求
1.掌握Linux常用命令
2.学会如何获取命令帮助信息
3.熟练掌握Linux常用命令
4.掌握GCC命令的使用及其常用参数的含义
二、实验内容和原理
实验内容:
系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、软件的安装与卸载、文件挂载、管道与重定向命令、GCC命令的使用
三、主要仪器设备
PC机、VMWorkstation、Redhat5.0
四、操作方法与实验步骤
1.练习以下常用命令的使用shutdown、reboot、logout、exit、useradd、userdel、su、cd、ls、touch、mkdir、cp、rm、rmdir、mv、more、less、man、du、find、clear、grep、cat、history、tar、unzip、chmod、管道命令|以及重定向命令命令练习步骤如下:
⑴显示当前目录
⑵进入到当前用户的主目录
⑶查看ls的手册
⑷查看当前目录的所有文件,并显示每个文件的详细信息
⑸在根目录下创建test目录
⑹在test目录下创建user1/user2目录结构
⑺在user2下创建文件myfile
⑻将myfile复制到user1下
⑼用tar命令将test打包
⑽将打包好的文件改名为myfile.tar.gz
⑾将myfile.tar.gz移动到home目录下
⑿查找root用户下主目录中使用名为myfile的文件
⒀删除test子目录下的所有文件
⒁利用rmdir删除test
⒂显示系统的时间日期,显示一个日历
⒃查看内存使用情况、显示系统进程
⒄运行cat,利用kill将cat进程杀死
⒅在/var/lib目录下查找所有大小超过1000000B的文件,并以长格式显示
⒆利用rpm查询是否安装了squid软件包,如果已安装则卸载该软件
⒇将squid—2。
6。
STABLE21-3.el5。
i386。
rpm安装
2.举例说明重定向命令<、<〈、〉、〉>的使用
3。
编写一个C的源程序,并用gcc进行编译,练习使用gcc的各个参数,理解每个参数的意义
五、实验数据记录和处理
1.实验中的具体指令如下:
(1)ls
(2)cd/
(3)ls--help
(4)ls-al
(5)mkdir/root/test
(6)cd/root/testmkdiruser1/user2
(7)touchuser1/user2/myfile
(8)cpmyfile/root/test/user1
(9)(10)tarcvzfmyfile.tar。
gz/root/test
(11)mvmyfile。
tar。
gz/home
(12)find/—namemyfile
(13)rm—r/root/test
(14)rmdir/root/test
(15)显示系统时间date显示日历cal
(16)psaux
(17)cat1.txt
psaux(查看cat的进程号,假设为x)kill-sSIGKILLx
(18)find/var/lib/-size+1000000c
(19)rpm-qsquid
(20)rpm—ivhsquid—2。
6.STABLE6—4。
el5。
i386。
rpm
2.cat>a。
txt(键盘输入的内容保存在a。
txt中,覆盖之前的内容)
cat〉b。
txttxt中的内容输入到文件b.txt中)
grep0b。
txt〈〈a.txt(把a.txt的内容输入到b。
txt中)
3.gcchello.c(程序文件)—ohello(目标执行文件)
—ofile:
指定生成的可执行文件名为file,若省略次选项,系统给出默认文件为a。
out?
—c:
只进行预处理、编译,不生成可执行文件。
即:
编译器只是把.c的源文件生成。
o的目标文件.?
—g:
产生调试工具(GNU的GDB)所必要的符号信息,要想对编译出的程序进行调试,必须加入此选项
六、实验结果与分析
通过一系列的Linux命令来熟悉linux,系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、软件的安装与卸载、文件挂载、管道与重定向命令、GCC命令的使用.
七、讨论、心得
通过本实验,对之前学过的Linux基本操作命令进行了深化了解,包括系统设置命令、文件及文件夹操作命令、压缩与解压缩命令、自动补全与历史命令、软件的安装与卸载、文件挂载、管道与重定向命令、GCC命令的使用,在实验当中有些问题,铜鼓查找书籍进行了深入的了解,这些命令都是基础,需勤加练习.
实验名称
实验三VI编辑器的使用
实验地点
计算机学院
实验楼308
实验时间
2017。
4。
18
一、实验目的和要求
1.熟练掌握VI编辑器的三种工作模式
2。
掌握Vi编辑器每种模式下的命令
二、实验内容和原理
利用Vi编辑器完成文本的编辑
三、主要仪器设备
PC机、VMWorkstation、Redhat5。
0
四、操作方法与实验步骤
⑴在/root目录下建立一个名为vi的目录.
⑵进入vi目录
⑶将文件/etc/inittab复制到vi目录下
⑷使用vi打开vi目录下的inittab文件
⑸设定行号,指出id:
5:
initdefault所在行号
⑹将光标移动到该行
⑺复制该行内容
⑻将光标移动到最后一行行首
⑼粘贴复制行的内容
⑽撤销上一步的所做动作
⑾将光标移动到最后一行行尾
⑿粘贴复制行的内容
⒀光标移动到”si:
:
sysinit:
/etc/rc。
d/rc。
sysinit”
⒁删除该行
⒂存盘但不退出
⒃将光标移动到首行
⒄插入模式下输入“Hello,thisisviworld”
⒅返回命令行模式
⒆向下查找字符串“0:
wait”
⒇再向上查找字符串“halt”,强制退出vi,不存盘
五、实验数据记录和处理
对应的命令如下:
1。
mkdir/root/vi
2.cd/root/vi
3.cp/etc/inittab/root/vi/
4.viinittab
5.在底行模式下:
setnu(设定行号)
在命令行模式下键入[ESC]退入到命令行模式/id:
5:
initdefault(查找内容)
6。
enter
7。
yy
8。
G
9。
p
10。
u
11。
Gshrift+4
12。
p
13.命令行模式下:
/si:
:
sysinit:
/etc/rc.d/rc。
sysinit
14.dd
15。
底行模式下:
:
w
16。
1+G
17。
插入模式下输入:
hello,thisisviword
18.键入[ESC]退入到命令行模式
19./0:
wait
20.?
halt
底行模式下:
:
q!
六、实验结果与分析
利用Vi编辑器完成文本的编辑和一系列常用的指令,包括三种编辑模式和三种模式之间的切换,以及各种模式下的命令.
通常vi编辑的流程如下:
1.vi文件名
2.键入i进入插入模式
3.编辑
4。
键入[ESC]退入到命令行模式
5。
键入:
wq!
保存退出
七、讨论、心得
通过本实验熟练并掌握了VI编辑器的三种工作模式,掌握了Vi编辑器每种模式下的命令,利用vi编辑器来写一些程序很方便,只需要最后通过编译就可以直接运行,这是一个Linux比Windows系统操作下执行C语言程序方便之处吧,在实验过程,还有一些老师没有讲过的命令,通过上网XX还是解决了。
实验名称
实验四Shell编程和Makefile文件
实验地点
计算机学院
实验楼308
实验时间
2017。
4.20
一、实验目的和要求
1.了解什么是脚本
2.掌握shell编程方法
3。
掌握makefile的编写规则
二、实验内容和原理
1编写一个Shell脚本,要求:
显示当前目录的所有内容,并统计可执行文件(.sh)的数量,将统计结果输入到指定的文件当中;
2编写一个Shell脚本,
要求:
2。
1在屏幕上显示一行提示信息
2。
2读入一行命令
2.3判断此命令是否为“exit",若是则退出
2.4如果不是,分析并执行这行命令
3.假定一个程序由以下5个文件组成,其源代码如下,请编写一个Makefile文件,并运行。
文件1:
main。
c
#include”mytool1。
h”
#include"mytool2.h”
intmain(){
Mytool1_print(”hellomytool1!
”);
mytool2_print("hellomytool2!
");
return0;}
文件2:
mytool1.c
#include”mytool1.h”
#include〈stdio。
h〉
voidmytool1_print(char*print_str){
printf("Thisismytool1print:
%s”,print_str);}
文件3:
mytool1。
h
#ifndef_MYTOOL_1_H
#define_MYTOOL_1_H
voidmytool1_print(char*print_str);
#endif
文件4:
mytool2.c
#include”mytool2.h"
#include〈stdio.h>
voidmytool2_print(char*print_str){
printf(”Thisismytool2print:
%s",print_str);}
文件5:
mytool2.h
#ifndef_MYTOOL_2_H
#define_MYTOOL_2_H
voidmytool2_print(char*print_str);
#endif
三、主要仪器设备
PC机、VMWorkstation、Redhat5.0
四、操作方法与实验步骤
对应的具体程序代码如下:
1。
#!
/bin/bash
ls*sh
find.—name”*.sh”|wc-l>〉1。
txt
2.#!
/bin/bash
echo"Enteraorder!
"
readname
$name
3。
appexam:
main.omytool1.omytool2.o
$(CC)-o$@$^
main.o:
main。
cmytool1。
hmytool2.h
mytool1。
o:
mytool1。
cmytool1。
h
mytool2.o:
mytool2。
cmytool2。
h
clean:
rm-f*.o
五、实验数据记录和处理
对应的实验结果如下(截图):
1.在运行了1.sh这个脚本之后,会执行脚本中的命令。
2。
在运行之后,输入的内容会被2.sh脚本读入并以命令的形式输出
六、实验结果与分析
七、讨论、心得
通过本实验了解了什么是脚本,Shell就是UNIX提供用户的使用界面,Shell为用户提供了输入命令和参数并可得到命令执行结果的环境,Shell本身并不神秘,只是一个普通的应用程序,用户将多个命令按语法规则写在文本文件中,该文本文件就是Shell脚本。
掌握了shell编程方法,#!
具有特定的含义,表示Shell脚本解释器的版本,#开始表示注释,定义变量var,并复制,命令恶臭显示变量var的值.掌握了makefile的编写规则。
有个要注意的地方就是要在sh文件执行之前给sh文件增加可执行权,具体命令为:
$chomdu+xxx.sh
实验名称
实验五网络编程-设计并发服务器
实验地点
计算机学院
实验楼308
实验时间
2017。
4.20
一、实验目的和要求
1.了解TCP/IP协议
2。
掌握Socket编程,熟悉基于TCP和UDP的传输模型
3.掌握多线程编程
4。
掌握基于TCP的并发服务器设计
二、实验内容和原理
实验内容:
编写C程序,利用多线程构建TCP并发服务器,并实现客户端和服务器的传输(多个并发用户同时访问服务器)
实验原理:
TCP的传输模型和线程的并发执行
三、主要仪器设备
PC机、VMWorkstation、Redhat5.0
四、操作方法与实验步骤
1.线程并发客户端
#include〈netinet/in.h> //forsockaddr_in
#includeh〉 //forsocket
#include〈sys/socket.h> //forsocket
#include〈stdio.h> //forprintf
#include#includeh> //forbzero
#include#include〈sys/errno。
h> //forerrno
#defineHELLO_WORLD_SERVER_PORT 6666
#defineBUFFER_SIZE1024
char*server_IP=NULL;
void*talk_to_server(void*thread_num)
{
//设置一个socket地址结构client_addr,代表客户机internet地址,端口
structsockaddr_inclient_addr;
bzero(&client_addr,sizeof(client_addr));//把一段内存区的内容全部设置为0
client_addr。
sin_family=AF_INET; //internet协议族
client_addr。
sin_addr.s_addr=htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址
client_addr。
sin_port=htons(0); //0表示让系统自动分配一个空闲端口
//创建用于internet的流协议(TCP)socket,用client_socket代表客户机socket
intclient_socket=socket(AF_INET,SOCK_STREAM,0);
if(client_socket<0)
{
printf("CreateSocketFailed!
/n”);
exit
(1);
}
//把客户机的socket和客户机的socket地址结构联系起来
if(bind(client_socket,(structsockaddr*)&client_addr,sizeof(client_addr)))
{
printf(”ClientBindPortFailed!
/n”);
exit
(1);
}
//设置一个socket地址结构server_addr,代表服务器的internet地址,端口
structsockaddr_inserver_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr。
sin_family=AF_INET;
if(inet_aton(server_IP,&server_addr.sin_addr)==0)//服务器的IP地址来自程序的参数
{
printf("ServerIPAddressError!
/n”);
exit
(1);
}
server_addr.sin_port=htons(HELLO_WORLD_SERVER_PORT);
socklen_tserver_addr_length=sizeof(server_addr);
//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接
if(connect(client_socket,(structsockaddr*)&server_addr,server_addr_length)〈0)
{
printf("CanNotConnectTo%s!
/n",server_IP);
exit
(1);
}
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
//从服务器接收数据到buffer中
intlength=recv(client_socket,buffer,BUFFER_SIZE,0);
if(length<0)
{
printf("RecieveDataFromServer%sFailed!
/n",server_IP);
exit
(1);
}
printf("FromServer%s:
/t%s”,server_IP,buffer);
bzero(buffer,BUFFER_SIZE);
sprintf(buffer,”Hello,World!
FromClientThreadNUM:
/t%d/n”,(int)thread_num);
//向服务器发送buffer中的数据
send(client_socket,buffer,BUFFER_SIZE,0);
//关闭socket
close(client_socket);
pthread_exit(NULL);
}
intmain(intargc,char**argv)
{
if(argc!
=2)
{
printf("Usage:
。
/%sServerIPAddress/n",argv[0]);
exit
(1);
}
server_IP=argv[1];
pthread_tchild_thread;
pthread_attr_tchild_thread_attr;
pthread_attr_init(&child_thread_attr);
pthr