




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 Linux基本命令一实验目的 1掌握图形化用户界面和字符界面下使用Shell命令的方法。 2掌握1s、cd等Shell命令的功能。 3掌握重定向、管道、通配符、历史记录等的使用方法。 4掌握手工启动图形化用户界面的设置。二实验内容 1图形化用户界面下的Shell命令操作 操作要求1显示系统时间,并将系统时间修改为2005年12月17日零点。 操作步骤 (1)启动计算机,以超级用户身份登录图形化用户界面。 (2)依次单击“主菜单”“系统工具”“终端”,打开桌面环境下的终端工具。 (3)输入命令“date”,显示系统的当前日期和时间。 (4)输入命令“date 121700002005”,屏幕显示新修改的系统时间。 操作要求2查看2008年8月23日是星期几。 操作步骤 输入命令“cal 2008”,屏幕上显示出2008年的日历,由此可知2008年8月23日是星期六。 操作要求3查看ls命令中-s选项的帮助信息。 操作步骤 方法一: (1)输入 “man ls” 命令,屏幕显示出手册页中1s命令相关帮助信息的第一页,介绍ls命令的含义、语法结构以及-a、-A、-b和-B等选项的意义。 (2)使用PageDown键、PageUp键以及上、下方向键找到-s选项的说明信息。 (3)由此可知,ls命令的-s选项等同于-size选项,以文件块为单位显示文件和目录的大小。 (4)在屏幕上的“:”后输入“q”,退出ls命令的手册页帮助信息。 方法二: 输入命令ls -help,屏幕显示中文的帮助信息,由此可知1s命令的-s选项等同于-size选项,以文件块为单位列出所有文件的大小。 操作要求4查看etc目录下所有文件和子目录的详细信息。 操作步骤 (1)输入命令“cd etc”,切换到etc目录。(2)输入命令“1s -al”,显示etc目录下所有文件和子目录的详细信息。 2字符界面下的Shell命令操作 操作要求1查看当前目录。 操作步骤 (1)启动计算机后默认会启动图形化用户界面,按下Ctrl+Alt+F2键切换到第2个虚拟终端。 (2)输入命令“pwd”,显示当前目录。 操作要求2用cat命令在用户主目录下创建一名为f1的文本文件,内容为:Linux is useful for us a11You can never imgaine how great it is操作步骤(1)输入命令“cat fl”,屏幕上输入点光标闪烁。(2)依次输入上述内容。使用cat命令进行输入时,而且只能用退格键(Backspace)来删除光标前一位置的字符。并且一旦按下回车键,该行输入的字符就不可修改。(3)上述内容输入后,按Enter键,让光标处于输入内容的下一行,按Ctrl+D键结束输入。(4)要查看文件是否生成,输入命令“ls”即可。(5)输入命令“cat f1”,查看f1文件的内容。操作要求3向f1文件增加以下内容:Why not have a try?操作步骤(1)输入命令“catf1”,屏幕上输入点光标闪烁。(2)输入上述内容后,按Enter键,让光标处于输入内容的下一行,按Ctrl+D键结束输入。(3)输入“cat f1”命令,查看f1文件的内容,会发现f1文件增加了一行。操作要求4统计f1文件的行数,单词数和字符数,并将统计结果存放在countfl文件。操作步骤(1)输入命令“wc count f1”,屏幕上不显示任何信息。(2)输入命令“cat countfi”,查看coumfi文件的内容,其内容是n文件的行数、单词数和字符数信息,即f1文件共有3行,19个词和87个字符。操作要求5分页显示etc目录中所有文件和子目录的信息。操作步骤(1)输入命令“ls etclmore”,屏幕显示出“1s”命令输出结果的第一页,屏幕的最后一行上还出现“-More-”字样,按空格键可查看下一页信息,按Enter键可查看下一行信息。(2)浏览过程中按q键,可结束分页显示。操作要求6仅显示etc目录中前15个文件和子目录。操作步骤输入命令“ls etc| head n 15”,屏幕显示出“1s”命令输出结果的前面15行。操作要求7清除屏幕内容。操作步骤输入命令“clear,则屏幕内容完全被清除,命令提示符定位在屏幕左上角。3通配符的使用操作要求1显示bin目录中所有以c为首字母的文件和目录。操作步骤输入命令“1s binc* ”,屏幕将显示bin目录中以c开头的所有文件和目录。操作要求2显示bin目录中所有以c为首字母,文件名只有3个字符的文件和目录。 操作步骤 (1)按向上方向键,Shell命令提示符后出现上一步操作时输入的命令“1s binc*”。 (2)将其修改为“1s binc?”,按下Enter键,屏幕显示bin目录中以c为首字母,文件名只有3个字符的文件和目录。 操作要求3显示bin目录中所有的首字母为c或s或h的文件和目录。 操作步骤 输入命令“ls binc,s,h*”,屏幕显示bin目录中首字母为c或s或h的文件和目录。 操作要求4显示bin目录中所有的首字母不是a、b、c、d、e的文件和目录。 操作步骤 输入命令“1s bin!a-e*”,屏幕显示bin目录中首字母不是a、b、c、d、e的文件和目录。 操作要求5重复上一步操作 操作步骤输入命令“!”,自动执行上一步操作中使用过的“1s bin!a-e*命令。 4设置手工启动图形化用户界面 操作要求1修改etcinittab文件。 操作步骤 (1)按下Alt+F7键,切换回到图形化用户界面。 (2)依次单击“主菜单”“附件”“文本编辑器”,打开gedit文本编辑器。 (3)单击工具栏上的“打开”按钮,从“打开文件”对话框中选择etc目录中的inittab文件。 (4)将文件中的“id:5:initdefault:”所在行的“5”修改为“3”。 (5)单击工具栏上的“保存”按钮,并关闭gedit。 (6)单击“主菜单”“注销”,弹出对话框,选择“重新启动”,并单击“确定”按钮,重新启动计算机。 操作要求2手工启动图形化用户界面。 操作步骤 (1)计算机重启后显示字符界面,输入用户名和相应的口令后,登录Linux系统。 (2)输入命令“startx”,启动图形化用户界面。 (3)单击“主菜单”“注销”,弹出对话框,单击“确定”按钮,返回到字符界面。 操作要求3切换到KDE桌面环境。 操作步骤 (1)输入命令“switchdesk kde”,切换为启动KDE桌面环境。(2)输入命令“startx,启动KDE桌面环境。三实验总结 要求写出试验体会,包括整个试验过程。下表列出的是部分常用命令的列表,请课后练习。命令动词简要说明cd directory进入指定的目录cd .进入上一级目录cd /directory进入目录cd进入用户自己的目录cp file_from file_to拷贝文件ln -s source linkname为一个文件建立连结ls directory查看指定目录下的文件ls l directory查看指定目录下文件的详细ls a directory查看指定目录下的所有文件mkdir new_directory建一个新目录more file查看一个文本文件的内容rm file删除一个文件rm r directory删除一个目录rmdir directory删除一个目录find . -name file从当前目录开始查找指定的文件adduser创建新用户Alias设置别名或替代名bg fg使挂起的进程继续运行ps ax查询当前进程mount连接文件系统more less浏览文件内容chown chgrp改变文件的拥有者chmod改变文件属性halt关闭系统man显示手册页passwd改变用户口令grep查找字符串find查找文件dd复制磁盘或文件系统kill杀掉一个进程killall杀掉进程实验二 Linux进程、线程及编程一实验目的 1通过编写一个完整的守护进程,使读者掌握守护进程编写和调试的方法,并且进一步熟悉如何编写多进程程序。二实验内容在该实验中,读者首先创建一个子进程1(守护进程),然后在该子进程中新建一个子进程2,该子进程2暂停10s,然后自动退出,并由子进程1收集子线程退出的消息。在这里,子进程1和子进程2的消息都在系统日志文件(例如“/var/log/messages”,日志文件的全路径名因版本的不同可能会有所不同)中输出。在向日志文件写入消息之后,守护进程(子进程1)循环暂停,其间隔时间为10s。三实验步骤1分析下面的代码,这个程序能得到我们所希望的结果吗?它的运行会产生几个进程?请读者回忆一下fork()调用的具体过程。 /* multi_proc_wrong.c */#include #include #include #include #include int main(void)pid_t child1, child2, child;/*创建两个子进程*/child1 = fork();child2 = fork();/*子进程1的出错处理*/if (child1 = -1)printf(Child1 fork errorn);exit(1);else if (child1 = 0) /*在子进程1中调用execlp()函数*/ printf(In child1: execute ls -ln);if (execlp(ls, ls, -l, NULL) 0)printf(Child1 execlp errorn); if (child2 = -1) /*子进程2的出错处理*/ printf(Child2 fork errorn); exit(1); else if( child2 = 0 ) /*在子进程2中使其暂停5s*/ printf(In child2: sleep for 5 seconds and then exitn); sleep(5); exit(0); else /*在父进程中等待两个子进程的退出*/ printf(In father process:n); child = waitpid(child1, NULL, 0); /* 阻塞式等待 */ if (child = child1) printf(Get child1 exit coden); else printf(Error occured!n); do child = waitpid(child2, NULL, WNOHANG);/* 非阻塞式等待 */ if (child = 0) printf(The child2 process has not exited!n); sleep(1); while (child = 0); if (child = child2)printf(Get child2 exit coden);elseprintf(Error occured!n);return 0;编译和运行上面代码,并观察其运行结果,它的结果是我们所希望得到的吗?2看完前面的代码之后,再观察下面的代码,它们之间有什么区别,会解决哪些问题?/* multi_proc.c */#include #include #include #include #include int main(void)pid_t child1, child2, child;/*创建两个子进程*/child1 = fork();/*子进程1的出错处理*/if (child1 = -1)printf(Child1 fork errorn);exit(1);else if (child1 = 0) /*在子进程1中调用execlp()函数*/printf(In child1: execute ls -ln);if (execlp(ls, ls, -l, NULL) B):主机A向主机B发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号; 第二步(B-A):主机B在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。 第三步(A-B):主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。 C. 套接字(socket)概述(1) 套接字类型 流式套接字(SOCK_STREAM)流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的可靠性和顺序性。 数据报套接字(SOCK_DGRAM)数据报套接字定义了一种无可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP 原始套接字(SOCK_RAW)原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。(2) 地址及顺序处理地址结构处理struct sockaddr unsigned short sa_family; /*地址族*/ char sa_data14; /*14字节的协议地址,包含该socket的IP地址和端口号。*/;struct sockaddr_in short int sa_family; /*地址族*/ unsigned short int sin_port; /*端口号*/ struct in_addr sin_addr; /*IP地址*/ unsigned char sin_zero8; /*填充0 以保持与struct sockaddr同样大小*/;这两个数据类型是等效的,可以相互转化,通常sockaddr_in数据类型使用更为方便。在建立socketadd或sockaddr_in后,就可以对该socket进行适当的操作了。D. 套接字编程(1)函数说明 socket()创建套接字 bind()绑定本机端口 connect()建立连接 listen()监听端口 accept()接受连接 recv(), read(), recvfrom()数据接收 send(), write(), sendto()数据发送 close(), shutdown()关闭套接字(2)使用TCP时Socket编程(3)使用UDP时Socket编程四实验代码分析1.分析下面代码完成的工作A服务器端代码/*server.c*/#include #include #include #include #include #include #include #include #define PORT4321#define BUFFER_SIZE1024#define MAX_QUE_CONN_NM5int main()struct sockaddr_in server_sockaddr,client_sockaddr;int sin_size,recvbytes;int sockfd, client_fd;char bufBUFFER_SIZE;/*建立socket连接*/if (sockfd = socket(AF_INET,SOCK_STREAM,0)= -1)perror(socket);exit(1);printf(Socket id = %dn,sockfd);/*设置sockaddr_in 结构体中相关参数*/server_sockaddr.sin_family = AF_INET;server_sockaddr.sin_port = htons(PORT);server_sockaddr.sin_addr.s_addr = INADDR_ANY;bzero(&(server_sockaddr.sin_zero), 8);int i = 1;/* 允许重复使用本地地址与套接字进行绑定 */setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i);/*绑定函数bind()*/if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr) = -1)perror(bind);exit(1);printf(Bind success!n);/*调用listen()函数,创建未处理请求的队列*/if (listen(sockfd, MAX_QUE_CONN_NM) = -1)perror(listen);exit(1);printf(Listening.n);/*调用accept()函数,等待客户端的连接*/if (client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size) = -1)perror(accept)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电力安全常识知识测试题及答案
- 2025年事业单位招聘考试化工类专业能力测试试卷答案与解析
- 多语言布局优化方法-洞察与解读
- 2025年事业单位招聘考试综合类无领导小组讨论面试真题模拟试卷答案详解
- 2025年事业单位招聘考试新闻类综合专业能力测试试卷真题模拟训练
- 2025年青海省事业单位招聘考试综合类公共基础知识真题模拟试卷
- 项目预算编制及成本管控工具包
- 恒大足校考试题目及答案
- 网上教学安全知识培训课件
- 2025国考大庆市行政执法岗位申论题库含答案
- (2025)营养指导员考试真题库(含答案)
- 2025年全国成人高等学校招生考试(高等数学二-专升本)历年参考题库含答案详解(5套)
- 消化内科临床科室发展规划与实施方案
- Revit参数化族课件
- 民间借贷法律知识讲座
- 学堂在线 现代生活美学-插花之道 章节测试答案
- 供货周期保证措施
- 基于人工智能的个性化学习路径研究
- 麻醉气道痉挛处理
- 学前卫生考试试题及答案
- 2025春季学期国开电大专科《液压与气压传动》一平台在线形考(形考任务+实验报告)试题及答案
评论
0/150
提交评论