2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > linux实验报告山东科技大学 -linux程序设计实验报告

linux实验报告山东科技大学 -linux程序设计实验报告

时间:2023-06-21 10:06:26

相关推荐

linux实验报告山东科技大学 -linux程序设计实验报告

-linux程序设计实验报告

(31页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

29.9 积分

实 验 报 告课程名称: Linux程序设计 学 院: 信息科学与工程学院 专 业: 13计算机 班 级: -1 姓 名: 学 号: 6 月 28 日山 东 科 技 大 学 教 务 处 制实 验 报 告组别姓名同组实验者实验项目名称实验一熟悉linux命令实验日期第12周周四9,10节教师评语实验成绩指导教师廉文娟1.登录和退出Linux系统 用户登录系统时为了使系统能够识别自己必须输入用户名和密码经系统验证无后方能进入系统。用户登录分两步进行,第一步输入用户的登录名,系统根据该登录名来识别用户,第二步输入用户的口令,该口令是用户自己选择的一个字符串对其他用户是保密的,是在登录时系统用来辨别真假用户的关键字。 必须输入用户的账号,分为1)root——系统管理员账号,该账号可以进行任意操作。2)普通用户——拥有一定的权限 2.其他命令三、实验内容 常用操作命令。1、 在Linux系统中打开终端,利用快捷键ctrl+alt+T,打开,结果如下: 2、 退出:不论是root用户还是普通用户,需要退出系统,在shell提示符下,键入exit命令即可。3、 关机与重启: Linux中提供了命令shutdown,可以安全地关机或重启系统,该命令只能是超级用户可以使用,命令格式:shutdown [选项][时间][警告信息]其中警告信息是向其他用户发布的信息,时间指定关机或是重启的时间,选项的意义如下:-h 关机,关机前关闭相关进程,执行fsck命令(文件系统的一致性检查)-r 系统重新启动-f 快速关机,系统关机前不执行fsck命令-n 快速关机, 系统关机前不执行init命令-k 不关机,只是将警告信息向其他用户发布-c 终止执行正在运行的shutdown命令举例:1.系统立即关机 shutdown –h now2.两分钟后重启系统,发布信息System will be down in 2 minutes!给其他终端用户。Shutdown –r +2 “System will be down in 2 minutes!”除了可以使用shutdown命令来关机和重启系统外,Linux还有专门用于关机和重启系统的命令poweroff和reboot, reboot用于重启系统(相当于shutdown –r now),命令poweroff则用于关机(相当于shutdown –h now)4、 添加新用户、修改文件属性1.添加新用户(在root下,按默认值回答)adduser 用户名;如adduser s2001 ; 以新用户登录到系统2.修改用户口令 passwd 用户名3.控制文件属性使用ls –l 查看文件属性改变用户的所有权:chown 用户名 文件名改变文件权限:chmod g+w 文件名;chmod o-r 文件名或使用数字方式修改:如chmod 644文件名;chmod 755文件名u (user用户),g ( group组),o (other其他); w 写访问权限,r 读访问权限, x 执行权限4.查看相关命令的帮助:man 命令名5.显示当前系统中已注册的用户信息:who6.显示当前注册的用户信息:whoami 5、文件显示命令显示指定工作目录中所包含的内容的指令是ls,要说明的是ls命令列出文件的名字,而不是文件的内容。该命令的使用方式如下: ls [选项] [文件目录列表] ls命令中的常用选项如下: -a:显示所有文件及目录 (ls规定将文件名或目录名中开头为 "."的视为隐藏档,不会列出) -c:按列输出,纵向排序 -x:按行输出,横向排序 -l:除文件名外,也将文件状态、权限、拥有者、文件大小 等信息详细列出 -t:根据文件建立时间的先后次序列出 -A:同-a,但不列出"." (目前目录)及".." (父目录) -X:按扩展名排序显示 -R:递归显示下层子目录 --help:显示帮助信息 --version:显示版本信息6、查找文件#find [目录列表] [匹配标准]1)通过文件名查找# find / -name httpd.conf –print2)根据部分文件名查找#find / –name *http* -print7、显示文本文件内容cat [选项]文件列表-b 计算所有非空输出行,开始为1。 -e 在每行末尾显示$符号。 -n 计算所有输出行,开始为1。 -s 将相连的多个空行用单一空行代替。 8、查找文件内容grep [选项] 匹配字符串 文件列表-v 列出不匹配串或正则表达式的行。 -c 对匹配的行计数。 -l 只显示包含匹配的文件的文件名。 -h 抑制包含匹配文件的文件名的显示-n 每个匹配行只按照相对的行号显示。 -i 产生不区分大小写的匹配,缺省状态是区分大小写。 9、文件复制命令 Linux下的cp命令用于复制文件或目录,该命令是最重要的文件操作命令,其命令格式如下: cp [选项] 源文件 目标文件 cp [选项] 源文件组 目标目录-a 在备份中保持尽可能多的源文件结构和属。-b 作将要覆盖或删除文件的备份。-f 删除已存在的目标文件。-i 提示是否覆盖已存在的目标文件。-p 保持原先文件的所有者,组权限和时间标志-r 递归拷贝目录,把所有非目录文件当普通文件拷贝。-R 递归拷贝目录。10、文件的删除命令rm命令可从文件系统中删除文件及整个目录。rm命令所使用的命令格式如下: rm [选项] 文件列表-r 删除文件列表中指定的目录,若不用此标志则不删除目录-i 指定交互模式。在执行删除前提示确认。任何以Y开始的响应都表示肯定;其他则表示否定。-f 指定强行删除模式。通常,在删除文件权限可满足时rm提示。本标志强迫删除,不用提示。四、实验步骤1、以root用户身份登陆,并使用ls,cat,cd等命令来实现基本的文件操作并观察Linux文件系统的特点,并记录实验结果;2、在/home下新建一个以自己名字命名的子目录,在这个子目录中创建一个文件mytest,为这个文件建立一个软链接文件mylink,用ls –l查看该子目录有什么变化,并记录下来。3、在2的基础上,为mytest文件更改访问权限,分别用字符串方法和数值方法,将mytest文件的写访问权限都加上,记录过程和结果。4、使用重定向。查看/home下的文件及子目录,并将结果输出到mytest文件中,并查看mytest文件的内容,记录下来。5、利用gzip命令为/home下面的mytest文件创建一个压缩文件,然后查看/home下面的文件,有什么变化,记录下来。6、利用tar命令将/home下面所有文件打包为一个文件,命名为mytar,并做记录。 7、利用命令删除/home下你自己新建的所有的文件或目录,记录下来.4、 实验体会 通过本次实验,了解了Linux系统的一些操作,熟悉了该系统的命令工作。实 验 报 告组别姓名同组实验者实验项目名称实验二shell程序设计实验日期第13周周四9,10节教师评语实验成绩指导教师廉文娟1、 实验目的1、 了解和熟悉创建并使用脚本的步骤2、 深入理解shell概念3、 学会简单的shell编程2、 实验内容1. 编写一个简单的回显用户名的shell程序2. 使用if-then语句创建简单的shell程序3. 使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序4. 使用for语句创建简单的shell程序5. 使用while语句创建一个计算1-5的平方的shell程序三、实验过程1.编写一个简单的回显用户名的shell程序#vi dat#!/bin/bash#filename:datecho "Mr.$USER,Today is:"echo `date`echo Wish you a lucky day!#chmod +x dat#./dat2. 使用if-then语句创建简单的shell程序#vi bbbb#!/bin/bash#filename:bbbbecho -n "Do you want to continue: Y or N"read ANSWERif [ $ANSWER = N -o $ANSWER = n ]then echo "your answer is quit! "fi#chmod +x bbbb#./bbbb3. 使用if-then-else语句创建一个根据输入的分数判断是否及格的shell程序#vi ak#!/bin/bash#filename:akecho -n "please input a score:"read SCOREecho "You input Score is $SCORE"if [ $SCORE -ge 60 ];then echo -n "Congratulation!You Pass the examination."elseecho -n "Sorry!You Fail the examination!"fiecho -n "press any key to continue!"read $GOOUT#chmod +x ak#./ak4. 使用for语句创建简单的shell程序#vi mm#!/bin/bash#filename:mmfor ab in 1 2 3 4do echo $abdone#chmod +x mm#./mm5. 使用while语句创建一个计算1-5的平方的shell程序#vi zx#!/bin/bash#filename:zxint=1while [ $int -le 5 ]do sq=`expr $int \* $int`echo $sqint=`expr $int + 1`doneecho "Job completed"#chmod +x zx#./zx四、实验体会通过这次实验,我懂得了定义SHELL程序设计中的变量,掌握了SHELL程序中LINUX基本命令的使用,理解了Shell程序的设计方法,并且熟悉了Shell程序编辑、运行、调试方法与过程。这为我日后继续深入学习Linux课程打下基础。实 验 报 告组别姓名同组实验者实验项目名称实验三文件系统程序设计实验日期第14周周四9,10节教师评语实验成绩指导教师廉文娟1、 实验目的: 1.掌握Linux文件系统的基本原理,结构和实现的方法 2.掌握Linux文件系统中文件的建立,打开,读写,执行,属性等系统调用的使用。2、 实验要求 1.掌握Linux文件系统的架构及目录结构。 2.掌握有关Linux文件系统的常用命令。3.了解有关文件安全方面的知识。三、实验准备知识:文件及其分类 文件是Linux用来存储信息的基本结构。一个文件就是被命名的一组信息。 Linux文件通常分为普通文件、目录文件、特别文件(设备文件)、链接文件。 特别文件分为块特别文件(如磁盘、磁带、CD-ROM等)和字符特别文件(如终端、打印机等)。块特别文件与字符特别文件的类型标志分别是“b”和“c”。 例如: 普通文件 -rw-rw-r-- 目录文件 drwxrwx--- 块特别文件 brw-rw----字符特别文件 crw-rw-rw-4、 实验内容 1.浏览文件系统 (1)运行pwd命令,确定你当前的工作目录。 (2)利用以下命令显示当前工作目录下的所有文件的文件属性: ls -l对照屏幕上的现实信息,理解各字段的含义。(3)输入以下命令: ls -ai 观察显示的信息。注意列出的前两项,它们分别表示当前目录和父目录。看一下是否还有其他的隐藏文件? 使用不带-a选项的ls命令,注意,不再显示隐藏文件了。使用不带-i选项的ls命令,注意,文件的I节点号(inode)不再出现。(4) 用mkdir命令建立一个子目录subdir。(5) 使用cd命令,将当前目录改到根目录(/)上。利用绝对路径和相对路径两种方式。利用pwd命令确认你的工作目录。6) 使用ls命令列出根目录的内容,再分别列出各子目录的内容。体会各子目录的作用以及访问权限。(7) 使用ls -l命令列出/dev的内容,注意各行第一个字符b和c的含义以及规定的访问权限。 (8) 使用不带参数的命令cd,然后用pwd命令确认你当前的工作目录。 2.查看你的文件 (1)利用cd命令,将工作目录改到你自己的用户目录(你的主目录)上。(2)将工作目录改到你新建的子目录subdir,然后运行命令: date>file1 将当前日期和时间存放到新建文件file1中。(3)使用cat命令查看file1文件的内容。 (4)利用man命令显示date命令的用法: man date (5)将date命令的用法附加到文件file1的后边: man date>>file1 此时,你在屏幕上看不到有关date命令用法的信息。 (6)利用cat或more命令显示文件file1的内容。你会看到,前面date命令的输出和有关date命令用法的信息都在这个文件中。 (7)利用ls -l file1命令列出文件file1的较详细的信息,注意其中第二字段(链接计数)的值。 (8)利用ln file1 ../fa命令进行文件连接。然后运行ls -l file1,查看显示的第二个字段的值发生了什么变化。 (9)现在想利用cat fa命令显示文件fa的内容,应该如何改动工作目录? (10)设你的主目录是/home/helen,利用ln –s /home/helen/subdir/filel slink进行符号链接。然后,利用ls -l file1 slink显示有关file1和slink的信息。注意各自链接计数值的差别。 (11)将工作目录移到你的主目录下的subdir。利用head命令显示file1前10行(这是默认值)的内容: head filel (12)利用tail file1命令显示file1后10行(这是默认值的内容)的内容。 (13)运行ls –l /bin命令显示/bin目录的内容。你在屏幕上看到什么?能够看到/bin下命令的所有信息吗? (14)利用ls –l /bin|more命令行分屏显示/bin目录的内容。一次显示一页。首先显示第一页。按回车键,只显示该文件的下一行;按Space键,显示该文件的下一屏。 连续按几次Space键,到达该文件的末尾。回到shell环境下。 (15)利用cp file1 file2命令生成文件file1的副本。然后再利用cp file1 file1bak命令生成文件file1的另一个副本。利用ls -1命令查看当前工作目录的内容有什么变化。 (16)利用cat file*命令列出当前工作目录中以file开头的所有文件。(17)运行cat file?命令,与上面结果相比有何差别? (18) 利用删除命令rm file1bak命令将文件file1bak删除,再利用ls -l命令查看工作目录的内容。 (19) 运行mv file2 fa 命令,然后利用ls命令查看两个文件是否还在工作目录中。 3.文件操作 (1)查找文件和目录。 利用find命令可以查找文件和目录的位置。你要告诉系统所要查找的文件名和从哪个目录开始查找。其常用使用格式是: find pathname-name filename -print 其中,pathname是指定开始查找的目录,filename是所要查找的文件或目录。-name和-print是find命令的选项。 例如:find . -name file1 –print (请看清楚中间那个小点“.”代表当前目录) 在当前目录和所有下面的子目录中查找名为filel的文件,并且把找到的文件的路径名显示在屏幕上。 find .. -name 'f*' –print (“..”代表当前目录的父目录) 在当前目录的父目录的所有子目录中查找名字以f开头的文件名。要查找的文件名模式‘f*’必须用引号括起来,因为其中用到shell的通配字符(*)。 (2)查找文件中指定的模式。grep命令常用于在文本文件中查找给定的词或短语,包含给定模式字符串的行在标准输出(即显示器)上显示出来。 例如:$grep user3/etc/passwd 在口令文件/etc/passwd中查找字符串“user3”。 4.文件存取权限 (1)存取权限。Linux系统对所有文件设置了存取权限。存取权限让你确定谁可以对你的个人文件和目录进行访问以及可以进行什么操作。§ 把所有用户分为三类: ----文件主(user),即文件的所有者。 ----组用户(group),即文件组的成员。 ----其他用户(other),即能对系统进行访问的所有其他用户。§ 对一个文件的存取权限分为3种: ----读(r) ----写(w) ----执行(x)§ 一组存取权限以及相应的文件类型统称为文件模式。 如:rw- r-- r--:表示文件主有读和写的权限,同组用户和其他用户只有读权限。 (2)文件存取权限。 1)读权限(r):允许指定的用户可以打开文件并阅读其内容。存取文件的内容作为输入的命令都需要有读权限。例如:cat,more,file和cp命令等。 2)写权限(w):允许指定的用户可以打开文件并修改其内容。用于打开文件、写文件或修改其内容的命令有vi,mail,cp等。3)执行权限(x):允许指定的用户运行(即执行)一个二进制文件或者把一个shell脚本文件当作命令来运行。当通过输入命令名来调用命令时,必须具有该命令文件的执行权限。例如,ls命令是/bin/ls可执行文件的名字。当在命令行方式下输入ls时,就是在执行这个文件。 (3)目录存取权限。 1)读权限(r):允许列出相应目录中所存放的文件的名字(即目录的内容表)。该权限也允许shell使用文件名扩展字符(通配符)来匹配文件名。 2)写权限(w):允许从目录中删除已有文件或者把新文件添加到目录中。由于写权限允许删除数据,所以,通常只有目录所有者才有写权限。 3)查询权限(x):允许在目录中进行查找和使用cd命令把工作目录改到它这里。如果没有这一权限,就不能将此目录作为路径名的一部分。这一方式可以有效地阻止对层次文件系统的子分支的访问。 一般说来,为了在实际中使用目录,你需要有读和查询的权限。如果没有查询权限,那么,通常也不会具有对目录的其他权限。 使用ls -l命令,列出当前工作目录中各文件的类型和权限。 (4)修改文件权限。 文件主或root用户可以使用chmod命令来修改文件或目录的权限。 修改文件权限的方式有两种:符号模式和绝对模式。 1)符号模式。使用chmod命令修改当前权限设置的一般形式是: chmod key file [file…] 其中,key由以下成分组成:[who][+|-|+][mode】 · who这一部分可以由下面的一个和多个字符组成:u,g,o或a,它们分别表示文件主、组用户、其他用户或所有3种用户。默认值是a(all)。 · 第二部分必须是以下3个字符中的一个:+,-,或者=,分别表示增加、删除或者设定。 · mode成份可以由以下字符任意组合:r,w,或x,分别表示读、写或者执行/查询的权限。 以上3个部分必须依次输入,而且它们之间没有空格。在一个命令行中可以指定多个key,彼此之间用逗号隔开,中间没有空格。 例如:设文件file1原来的权限是rw-rw-r--,现在想让所有用户都具有执行权限,则可使用以下命令: chmod a+x file1 该命令执行后,文件file1的权限将变成rwxrwxr-x。 练习: · 首先使用ls -1命令查看文件file1的存取权限。 · 然后是用以下命令: chmod g-r,o-r file1 修改file1的权限——组用户和其他用户都被取消对该文件的读权限。 · 最后,使用命令: ls -1 file1核查文件filel存取权限的变化情况。 2)绝对模式。在chmod命令中可以使用数字表示不同的权限。 · key这一部分可由3个或多个数字组成,其中每一个数字表示一类用户(文件主、组用户、其他用户)的权限。 · 每个数字都表示不同的权限,如:r=4(100),w=2(010),x=(001)l。 如果某种权限被禁用,则对应的值为0。 表示权限值的数字范围从0到7。 key部分可以形成一个3位数字,其中第一位表示文件主权限,第二位表示组用户权限,第三位表示其他用户权限。 例如:符号模式 rw- rw- r-- 绝对模式 6(110) 6(110) 4(100) 例如: 运行一下命令,把文件filel的权限改为对所有用户都有读和写的权限: chmod 666 file1 用ls -1命令和查文件file1的权限。 (9) 使用命令cd ../..,你将工作目录移到了什么地方?5、 实验体会通过本次实验,了解了文件的一些相关操作,收获颇丰。实 验 报 告组别姓名同组实验者实验项目名称实验四进程编程实验日期第15周周四9,10节教师评语实验成绩指导教师廉文娟1、 实验目的及要求 掌握Linux进程编程的基本方法。2、 实验内容步骤:1、 启动一个新进程#include #include voidmain(){ intresult_code; printf("Runningpswithsystem\n"); result_code=system("psax&"); if(result_code==127){printf("can'tstartashell");} if(result_code==-1){printf("starterror");} else{printf("runningsuccess");} }运行结果如图:2、 exec系列函数#include #include #include voidmain(){ printf("execseriesfunctionstest\n"); printf("execve\n"); char*constps_argv[]={"ps","ax",0}; char*constps_envp[]={"PATH=/bin:/usr/bin","TERM=console",0}; execv("/bin/ps",ps_argv); printf("Done.\n"); }运行结果如下:3、 复制进程映像,folk()#include #include #include #include intmain(){ pid_tpid; char*message; intn; printf("fork\n"); pid=fork(); switch(pid){ Case -1:perror("forkerror"); break; case0:message="thisischild"; n=8; break; default:message="thisisparent"; n=3; break; } for(;n>0;n--){ puts(message); sleep(1); } exit(0); }运行结果如图:分裂后父子进程是彼此相互独立运行的,所以要想让父进程等待子进程,只需使用wait()系统调用:#include#include#include#include#includeintmain(){Pid-t pid;char*message; intn; intexit_code; printf("waittest\n"); pid=fork(); switch(pid){ case-1:perror("forkfailed"); exit(1); case0:message="thisischild"; n=8; exit_code=37; break; default:message="thisisparent"; n=5; exit_code=0; break; } for(;n>0;n--){ puts(message); sleep(1); } if(pid!=0){ intstat_val; pid_tchild_pid; child_pid=wait(&stat_val); printf("waitingforchildtofinish\n"); if(WIFEXITED(stat_val)){ printf("childexitcodeis%d\n",WEXITSTATUS(stat_val)); }Else{ printf("childexitfailed\n");} } exit(exit_code); }运行结果如下:4、 僵尸进程所谓僵尸进程,子进程先于父进程结束,但是因为父子进程间依然有关系,那么子进程实际上不会真正意义上终结,如果查看当前进程表,会发现该进程依然存在,且会被标记为/。人为产生僵尸进程也并不那么轻松,但是在上面那个等待例子中,如果让子进程先于父进程退出,在父进程结束前调用ps -al命令后就会发现有这么一个僵尸进程,实现方法如下:#include #include #include #include #include intmain(){ pid_tpid; char*message; intn; intexit_code; printf("waittest\n"); pid=fork(); switch(pid){ case-1:perror("forkfailed"); exit(1); Case 0:message="thisischild"; n=3; exit_code=37; break; default:message="thisisparent"; n=12; exit_code=0; break; } for(;n>0;n--){ puts(message); if(n==1){printf("childfinished\n");system("ps-al");} sleep(1); } if(pid!=0){ intstat_val; pid_tchild_pid; child_pid=wait(&stat_val); printf("waitingforchildtofinish\n"); if(WIFEXITED(stat_val)){ printf("childexitcodeis%d\n",WEXITSTATUS(stat_val)); }Else{ printf("childexitfailed\n"); } } exit(exit_code); }运行结果如图:实 验 报 告组别姓名同组实验者实验项目名称实验五套接字编程实验日期第16周周四9,10节教师评语实验成绩指导教师廉文娟1、 实验目的 掌握Socket编程方法,学会UDP Socket和TCP Socket编程。二、实验内容及其结果 1、Linux上两个进程间的通信 Server端:调用socket函数创建一个socket,然后用bind函数语气本机地址及口号绑定,收到client端消息后,打印出来。 Client端:接收server端发来的字符串,打印出来Server和client通信截图:UDPSever:#include#include#include#include#include#include#include#include#include#include#definePORT7000intmain(void){intsockfd,pktlen;charbuf[300],buf1[300];structsockaddr_inserver,client;sockfd=socket(AF_INET,SOCK_DGRAM,0);memset((char*)&server,sizeof(server),0);//将已开辟内存空间server的全部字节的值设为值0.server.sin_port=htons(PORT);//端口号server.sin_addr.s_addr=INADDR_ANY;//设置网络地址,INADDR_ANY表示机器的IP地址bind(sockfd,(structsockaddr*)&server,sizeof(structsockaddr_in));for(;;){/*recv接受client发送的数据,recv函数仅仅是copy数据,真正的接收数据是协议来完成的),第一个参数指定接收端套接字描述符;第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;第三个参数指明buf的长度recv函数返回际cop*/intl=sizeof(structsockaddr_in);pktlen=recvfrom(sockfd,buf,sizeof(buf),0,(structsockaddr_in*)&client,&l);if(pktlen==0)break;printf("Receivedline:%s\n",buf);printf("Enteraline:");fgets(buf1,300,stdin);/*并不是send把ns的发送缓冲中的数据传到连接的另一端的,而是协议传的,send仅仅是把buf中的数据copy到ns的发送缓冲区的剩余空间里返回实际copy的字节数*/sendto(sockfd,buf1,sizeof(buf1),0,(structsockaddr_in*)&client,l);}close(sockfd);}UDP 关键词: linux 程序设计 实验 报告

天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。