沈阳航空航天大学Linux实习报告.docx
《沈阳航空航天大学Linux实习报告.docx》由会员分享,可在线阅读,更多相关《沈阳航空航天大学Linux实习报告.docx(14页珍藏版)》请在冰豆网上搜索。
沈阳航空航天大学Linux实习报告
沈阳航空航天大学
Linux系统操作实习报告
院(系):
计算机学院
专业:
计算机科学与技术(物联网技术方向)
班级:
24010107
学号:
?
?
?
?
?
?
?
姓名:
?
?
?
?
?
?
?
指导教师:
董燕举李晓明毕静
完成日期:
2015年7月17日
1.Linux基本命令
1.了解linux所提供的用户界面中的键盘命令操作界面;
2.熟练掌握常用的键盘命令。
具体内容:
(1)man显示联机Linux手册
[格式]$man[oprion][chapter]title...
(2)ls显示当前工作目录下内容
[格式]$ls[-ltr]
[描述]ls命令根据文件名按字母顺序列出文件目录及子目录名称。
[选择项]ls命令有多个选择项,下面列出几个重要的选择项:
-l|more以长[格式]列出文件,其中包括文件中的字符个数,以及最近修改的日期和时间。
-t以最近修改的时间顺序列出文件。
-r将-t选择的列表顺序变反。
-a显示隐藏文件。
(3)cd切换工作目录----在目录树中移动
[格式]$cd[路径]
[描述]cd(changedirectory)命令建立指定的目录,并把它作为工作目录。
[格式]:
cd返回用户主目录,并把它作为工作目录。
cd目录名称改变现行目录到指定目录。
cd..返回到工作目录的父目录,并把它作为工作目录。
cd/进到根目录
(4)mkdir在当前工作目录下建立子目录
[格式]$mkdir目录名称
[描述]mkdir(makedirectory)命令建立1个或多个指定目录。
(5)rmdir删除当前工作目录下子目录
[格式]$rmdir目录名称...
[描述]rmdir(removedirectory)命令删除指定目录,而目录必须为空。
如果目录不为空,LINUX将显示适当的报错信息。
[注释]要删除含有文件的目录,你可使用带有危险性的rm-r命令。
(6)rm删除文件
[格式]$rm文件名...
[描述]rm命令删除一个或多个指定文件。
[选择项]-i选择项使LINUX问是否要删除指定文件。
如果是这样,则键入y(表示yes),否则键入n(表示no).
(7)rm-r删除目录及其文件
[格式]$rm-r目录名称
[描述]rm-r(removerecursively)命令删除指定目录及其内容。
(8)cp复制文件
[格式]$cp文件名1文件名2
[描述]cp命令进行文件“文件名1”的复制拷贝,拷贝件称为“文件名2”
(9)mv移动或重新命名文件和目录
[格式]$mv文件名1文件名2
[描述]mv命令的
(10)cat直接显示文件内容
[格式]$cat文件名
[描述]cat命令将文件名作为其自变量显示文件的内容。
2.Linux服务器配置与管理
(1)DNS服务器配置与管理
A.使用编辑器,编辑配置文件/etc/bind/named.conf.local;
配置信息如下:
zone""{
typemaster;
file"/etc/bind/db.bijing";
};
zone"102.168.192.in-addr.arpa"{
typemaster;
file"/etc/bind/db.192";
};
B.创建区资源文件/etc/bind/db.bijing;
db.bijing内容如下:
;BINDdatafileforlocalloopbackinterface
$TTL604800
$ORIGIN.
@INSOA..(
2006080401;Serial
604800;Refresh
86400;Retry
2419200;Expire
604800);NegativeCacheTTL
@INNSns
@INMX0.
@INA192.168.102.47
nsINA192.168.102.47
wwwINA192.168.102.47
webserverINCNAMEwww
mailINA192.168.102.47
ftpINA192.168.102.48
ns2INA192.168.102.48
ns3INA192.168.102.49
C.创建该区的反向映射资源文件/etc/bind/db.192;
db.192内容如下:
;BINDreversedatafileforlocalloopbackinterface
$TTL604800
@INSOA..(
2006080401;Serial
604800;Refresh
86400;Retry
2419200;Expire
604800);NegativeCacheTTL
@INNS.
47INPTR.
47INPTR.
47INPTR.
48INPTR.
48INPTR.
49INPTR.
D.重启DNS服务sudo/etc/init.d/bind9restart,并查看系统日志:
#tail/var/log/syslog,了解BIND的启动情况,验证是否引导正常;
E.DNS服务器连接到本地的局域网,设置IP为192.168.102.47,修改系统网络配置文件/etc/network/interfaces。
用命令sudo/etc/init.d/networkingrestart使网络设置生效;
F.在客户机Linux的设置,验证网络连接或配置;
G.测试DNS服务器,在客户端使用nslookup测试,是否能正确解析所设置域名。
3.Linux多进程与多线程程序设计与开发
(1)设计题目
题目要求:
Linux平台下设计和开发一个多进程或多线程程序
编程语言可以用C、C++或Java。
应用范畴:
内容不限,如信息处理、信息管理、多媒体、网络类等均可。
用户界面:
推荐图形用户界面,命令行界面也可
(2)题目内容
1、多进程程序设计:
仿照Linux多进程编程PPT中的日期服务程序,编写一个多进程程序,能够创建至少3个进程。
每个进程执行不同的任务。
例如:
第一个进程打印一个小房子,第二个进程启动音乐播放器,第三个进程显示杨辉三角。
要求:
(1)理解Linux下面多进程系统调用方法:
fork(),execl(),wait()
(2)每个进程的任务尽量有趣,有一定代码量和难度
(3)能够读懂代码,改代码
2、多线程程序设计:
仿照Linux多线程编程PPT中的创建多线程程序(在Linux多线程编程.pptx第12页),编写一个多线程程序。
根据你们组的同学人数,创建线程,每个线程的任务是输出一个同学的名字3遍和线程id,主程序显示自己组号和人数。
例如:
30组有4名同学(赵子阳王莉,刘思孟,陈琛),则程序产生如下四个线程(例子中的id号为虚构的):
第一个线程输出:
赵子阳赵子阳赵子阳id:
2348976591
第二个线程输出:
王莉王莉王莉id:
2348976592
第三个线程输出:
刘思孟刘思孟刘思孟id:
2348976593
第四个线程输出:
陈琛陈琛陈琛id:
2348976594
主程序输出:
42组有5名同学
(3)设计思路
1、多进程程序设计:
利用fork函数创建子进程返回id,根据id值判断父子进程,对子进程调用execl函数使用外部已经写好的程序文件进行替换。
使用switch实现不同功能子进程的选择。
2、多线程程序设计:
Linux系统下的多线程遵循POSIX线程接口,称为pthread。
编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。
通过三个系统下的函数:
pthread_create函数、pthread_exit函数、pthread_self函数。
实现线程的创建,线程的退出,线程id的提取。
(4)算法
1、多进程程序设计:
开始运行主进程,主进程中提供多个功能选择,当用户选择某一功能,主进程调用进程创建函数fork(),创建一个具有与父进程相同代码的子进程,判断fork函数返回的进程ID,若ID=0则当前执行进程为子进程,调用进程替换函数execl替换子进程的程序并执行;若ID>0则当前执行进程为父进程,父进程要调用wait()函数等待子进程运行结束,自己才能结束;
多进程算法流程图:
图1多进程程序算法流程图
2、多线程程序设计:
通过pthread_create函数创建线程,定义线程启动函数thrd_func函数,在函数创建成功后,调用启动函数,执行线程所要完成的工作,打映小组成员和提取线程id,最后输出。
多线程算法流程图:
图2多线程程序算法流程图
(5)测试用例与测试结果
1、多进程程序设计:
表1多进程测试用例
测试用例号
输入数据
期望输出
1
4
>【4】阶环方阵如下:
1111
1221
1221
1111
2
3
>【3】阶杨辉三角如下:
1
11
121
2、多线程程序设计:
表2多线程测试用例
测试用例号
输入数据
期望输出
1
无
name:
袁芹袁芹袁芹TID:
3555813120.
name:
宁新浩宁新浩宁新浩TID:
3564205824.
name:
李昂李昂李昂TID:
3572598528.
name:
徐晓龙徐晓龙徐晓龙TID:
3580991232.
name:
赵堃赵堃赵堃TID:
3589383936.
(7)程序运行
1、多进程程序运行:
图3多进程程序运行图
2、多线程程序运行:
图4多线程程序运行图
实习总结
(1)小组分工
本人在小组承担任务,及完成情况
××××××××
(2)收获与体会
写实话、真话
××××××××××××××××
(2)Linux实习方式不足与改革建议
这部分所提问题和建议写得好、有价值,我们将在评定成绩时加分
××××××××××××××××
附录(源程序代码)
1、多进程程序:
#include
main(){
int matrix0[2][2]={0,0,0,0};
int matrix1[2][2]={0,0,0,0};
int matrix[2][2]={0,0,0,0};
printf("< 2*2 > Matrix Multip,Please input two matrix:
\n ");
int i,j,k;
printf("\nplease input four number into matrix0:
\n");
for(j=0;j<2;j++){
for(k=0;k<2;k++){
scanf("%d",&matrix0[j][k]);
}//for 2
}//for
printf("\nplease input four number into matrix1:
\n");
for(j=0;j<2;j++){
for(k=0;k<2;k++){
scanf("%d",&matrix1[j][k]);
}//for 2
}//for
matrix[0][0]=(matrix0[0][0]*matrix1[0][0])+(matrix0[0][1]*matrix1[1][0]);
matrix[0][1]=(matrix0[0][0]*matrix1[0][1])+(matrix0[0][1]*matrix1[1][1]);
matrix[1][0]=(matrix0[1][0]*matrix1[0][0])+(matrix0[1][1]*matrix1[1][0]);
matrix[1][1]=(matrix0[1][0]*matrix1[0][1])+(matrix0[1][1]*matrix1[1][1]);
printf("\n the result is :
\n");
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf(" %d ",matrix[i][j]);
}
printf("\n");
}
}
2、多线程程序:
#include
#include
#include
void*thrd_funca(void*arg);
void*thrd_funcb(void*arg);
void*thrd_funcc(void*arg);
void*thrd_funcd(void*arg);
void*thrd_funce(void*arg);
pthread_ttida,tidb,tidc,tidd,tide;
intmain(){
//创建线程tid,且线程函数由thrd_func指向,是thrd_func的入口点,即马上执行此线程函数
if(pthread_create(&tida,NULL,thrd_funca,NULL)!
=0){
printf("Createthreaderror!
\n");
exit
(1);
}
if(pthread_create(&tidb,NULL,thrd_funcb,NULL)!
=0){
printf("Createthreaderror!
\n");
exit
(1);
}
if(pthread_create(&tidc,NULL,thrd_funcc,NULL)!
=0){
printf("Createthreaderror!
\n");
exit
(1);
}
if(pthread_create(&tidd,NULL,thrd_funcd,NULL)!
=0){
printf("Createthreaderror!
\n");
exit
(1);
}
if(pthread_create(&tide,NULL,thrd_funce,NULL)!
=0){
printf("Createthreaderror!
\n");
exit
(1);
}
sleep(5);//race
printf("42group5people\n");
return0;
}
Void*thrd_funca(void*arg){
//printf("Iamnewthread!
\n");
inti,j;
chara[10]={"赵堃"};
printf("name:
");
for(i=0;i<3;i++){
for(j=0;j<10;j++)
printf("%c",a[j]);}//whypthread_self
printf("TID:
%u.\n",pthread_self());//whypthread_self
pthread_exit(NULL);//退出线程
//return((void*)0);
}
void*thrd_funcb(void*arg){
//printf("Iamnewthread!
\n");
inti,j;
chara[10]={"徐晓龙"};
printf("name:
");
for(i=0;i<3;i++){
for(j=0;j<10;j++)
printf("%c",a[j]);}//whypthread_self
printf("TID:
%u.\n",pthread_self());//whypthread_self
pthread_exit(NULL);//退出线程
//return((void*)0);
}
void*thrd_funcc(void*arg){
//printf("Iamnewthread!
\n");
inti,j;
chara[10]={"李昂"};
printf("name:
");
for(i=0;i<3;i++){
for(j=0;j<10;j++)
printf("%c",a[j]);}//whypthread_self
printf("TID:
%u.\n",pthread_self());//whypthread_self
pthread_exit(NULL);//退出线程
//return((void*)0);
}
void*thrd_funcd(void*arg){
//printf("Iamnewthread!
\n");
inti,j;
chara[10]={"宁新浩"};
printf("name:
");
for(i=0;i<3;i++){
for(j=0;j<10;j++)
printf("%c",a[j]);}//whypthread_self
printf("TID:
%u.\n",pthread_self());//whypthread_self
pthread_exit(NULL);//退出线程
//return((void*)0);
}
void*thrd_funce(void*arg){
//printf("Iamnewthread!
\n");
inti,j;
chara[10]={"袁芹"};
printf("name:
");
for(i=0;i<3;i++){
for(j=0;j<10;j++)
printf("%c",a[j]);}//whypthread_self
printf("TID:
%u.\n",pthread_self());//whypthread_self
pthread_exit(NULL);//退出线程
//return((void*)0);
}