《Uni操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《Uni操作系统实验报告.docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Unix 操作系统试验报告计算机科学与技术学院试验一、Linux 根本命令一试验目的把握 linux 平台下的根本命令40 个二试验说明在介绍全部的命令之前,先介绍一下 Linux 的在线帮助 man。在 Linux 下, 当你要查找一个命令的用法的,你可以通过 man 命令名 来源得命令的具体说明。由于每个 Linux 都有一份 man 文档,所以介绍命令的时候我们只是简直介绍一下命令的学用选项。假设想查看命令的具体说明,请自己看 man。下面是man 各小节的内容:1 用户命令。2 系统调用。3 库函数。4 特别文件(设备和网络接口)。5 文件格式。6 玩耍和演示。7 系统环境、表格和宏。
2、8 系统治理和相关命令。三命令说明1. apropos依据所给关键字查找相关的命令和系统调用格式:apropos keyword例:查找与 ftp 相关的命令和系统调用$apropos ftp注:类似的命令有 man -k。man -k 其实就是执行 apropos2. at在某一特定时间执行指定的命令格式:at -V-q 队列-f 文件-m time选项说明:-V显示标准的错误输出。-f可将作业存在一个文件中,用这个选项指定文件。例如一个shell 文件。-q指定队列名称,默认为 c。-m执行后给用户发邮件。time 指定开头执行的时间。时间格式为: HH:MM,日期格式:MM/DD/YY
3、或MM.DD.YY或MMDDYY。 下面的例子演示了在 2004 年 3 月 11 日 21 点 34 分执行一个 at 命令。$at 21:34 03/11/04执行这条命令后会得到一条 warning:commands will be executed using (in order) a)$SHELL b) login shell c)/bin/sh。然后就消灭“at”的提示符。这时你就可以输入你要执行的命令了,完毕后按 Ctrl+d。你就可以去喝茶了,到时间后系统会自动执行它。相关配置文件:/etc/at.allow 假设这个文件存在,仅允许这个文件里列出的用户使用at。/etc/at
4、.deny 假设这个文件存在,该文件列出的用户都不能使用 at 效劳。当 这个文件为空时,任何用户都可以使用 at,这是默认配置。当运行 at 命令时,先检查/etc/at.allow 文件是否存在,假设不存在, 再检查 /etc/at.deny 文件是否存在。不管这两个文件是不是存在, root 用户都可以执行 at 命令。相关命令:atq:列出用户待执行的任务,除了 root 用户的外,每个用户的任务都将被列出。atrm:通过任务号删除 at 任务。batch:当系统负载允许的时候执行命令。比方当负载低于 0.8 或者一个指定的值时,指行 atrun。3. cat查看文件内容,从键盘读取数
5、据,合并文件等格式:cat -b-A-E-T-n-s-v 文件名选项说明:-b不显示文件中的空行。-A相当于 -v -E -T (-vET)。-E在文件的每一行行尾加上“$”字符。-T将文件中的 Tab 键用字符“I”来显示。-n在文件的每行前面显示行号。-s将连续的多个空行用一个空行来显示。-v显示除 Tab 和 Enter 之外的全部字符。下面的命令演示了如何显示 file 文件中的行号$cat -n file4. chmod修改文件权限格式:chmod 选项 文件或名目名选项说明:u文件全部者g文件所属组o其它用户+增加权限-取消权限=赋给权限a全部用户r读权限w 写权限x 执行权限下面
6、的命令演示了如何使全部用户都可以读写 file 文件$chmod a+rw file5. chown转变文件全部者格式:chown -R-c用户名组名 文件或名目名选项说明:-c文件属主转变时显示说明。-R/r转变名目下的文件及其子名目下全部文件的属主。下面的命令演示了如何转变 dir 名目下的文件及其子名目下的文件的属主为 bugboy$chown -R bugboy dir6. cp复制文件格式:cp 选项 源文件名 目标文件名选项说明:-R复制整个名目。-f删除己存在的目标文件。-i使用-f 遇到删除文件时给出提示。下面的命令演示了如何把 file 文件复制到当前用户的根名目下$cp f
7、ile /7. crontab制定打算任务crontab 通过 cron 效劳使用户能够在指定的时间执行某些程序,它通过cron 复制,创立列出,删除 crontab 文件来治理用户权限和打算。命令格式:crontab -u username -l -e -r选项说明:-e编辑当前用户的 crontab 文件,或者当一个 crontab 文件不存在时, 创立一个 crontab 文件。编辑并保存后文件被当前用户的 crontab 安装。-l列出当前 crontab 文件内容。-r删除当前用户的 crontab 文件。-u username指定用户名。crontab 文件格式:crontab 文
8、件有六个域,每个域之间用空格或者Tab 键分开,前五个域都是整数或者*,格式如下(括号里面是取值范围):分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-6)要执行的命令其中星期取值 0 指星期日,其它取值递推。前面五个域,每个域都可以用*表示全部合法的值,或者用一个列表列出合法的值,各值之间用“,”隔开,也可以用“-”表示一个范围。下面的命令演示每个星期, 星期日到星期四晚上 23:30 分关机。30 23 * * 0-4 halt -p下面的例子示出每星期星期一到星期五 3:15 分去除用户名目下的 core文件15 3* * 1-5 find $HOME -n
9、ame core 2/dev/null|xargs rm -f下面是一个 crontab 文件的例子,请用 crontab -e 命令编辑。SHELL=/bin/bash PATH=/usr/bin:/bin:/usr/sbin:/sbin MAILTO=bugboyHOME=/home/bugboy30 23 * * 0-4 halt -p前面四行定义环境变量,最终一行是执行的命令,你可以定义要执行多个命令。假设你的 crontab 文件已经正确编辑,保存退出后会得到一条“crontab:installing new crontab“ 的信息。相关文件:/etc/cron.d/cron.al
10、low假设这个文件存在,文件中包含的用户名可以使用 crontab。/etc/cron.d/cron.deny假设这个文件存在,文件中包含的用户不能使用 crontab。你可以自己编辑这两个文件,留意每个用户名占一行。8. df查看磁盘剩余空间格式:df -t-x-k-p-a-mfilename选项说明:-t只输出类型列在 fstype 中的文件系统。-x只输出类型没有列在 fstype 中的文件系统。-k显示空间以 K 为单位。-m显示空间以 M 为单位。-a将空间为 0 的文件系统也输出。filename指定要查看的文件的大小。9. fdisk/sfdisk查看硬盘分区信息10. 格式:f
11、disk -l -u device .11. fdisk -s partition选项说明:-u列出分区表的时候以扇区的大小代替柱面大小。-l列出给定设备的分区表,假设没有给定设备,则列出/proc/partions 中设备的分区表。-s partition给出 partition 分区的大小(以块为单位)。12. file识别文件类型格式:file 文件名13. find查找文件格式:find 路径匹配表达示其中匹配表达示有几种类型:-name filename查找指定名称的文件。-user username查找指定用户名的文件。-group grpname查找指定级名的文件。-print
12、显示查找的结果。-size n 查找大小为 n 块的文件,一块等于 512 字节。符号“+n”表示查找大小大于 n 块的文件;符号“nc”表示查找大小为 n 个字符的文件,同样的也有符号“+nc”。-inum n查找索引结点号(i-node)为 n 的文件。-atime n查找 n 天前被访问的文件。“+n”表示超过 n 天前被访问的文件;“-n”表示不超过 n 天前被访问的文件。-mtime n类似于 atime,但是检查的是文件内容被修改的时间。-ctime n类似于 atime,但检查的是文件索引结点被转变的时间。-perm mode查找与给定权限匹配的文件,必需以八进制的形式给出访问权
13、限。-newer file查找比指定文件的文件,即最终修改时间离现在较近。-exec command对匹配文件执行 command 命令,command 后用了个大括号包括文件名。command 必需以反斜杠和一个分号结尾。-ok command执行 command 的时候恳求用户确认。其它与-exec 一样。例:查找当前名目下全部以.bak 结尾的文件,并删除它们$find . -name “*.bak“ -exec rm ;注:这里 *.bak 必需要用单引号或者双引号引起来,或者可以写成*.bak。14. head输出文件内容前面的局部格式:head 选项文件 选项说明:-n输出文件的前
14、 n 行,默认输出 10 行。-c指定输出文件的大小,单位为 byte。15. kill终止进程格式:kill -s|p-a PID选项说明:-s指明发送给进程的信号。例如-9(强行终止),默认发送 TERM 信号。-p显示进程的 ID,不发送信号。-a终止全部进程。0给全部在当前进程组中的进程发送信号。-1给全部进程号大于 1 的进程发送信号。16. less交互式显示文件内容格式:less 文件名说明:可以通过 C-v(-Down)、C-b(-Up)向后向前翻页,C-p、C-n 向后向前移一行。这个命令和后面要说的 more 命令都可以按 q 键退出。17. ln在文件之间建立链接格式:l
15、n -b-d-F-f-i-n-s-v 源文件 名目文件或名目选项说明:-b为删除的文件建立备份。-d允许 root 用户建立硬链接。-F与 b 一样。-f强行删除目标文件。-i在删除文件时给出提示。-n当目标文件是名目的符号链接时,替代该符号链接。-s用符号链接代替硬链接(建立符号链接)。-v输出被链接文件的文件名。18. ls用于扫瞄名目,查看当前名目下的文件和文件名格式:ls 选项选项说明:-a显示全部文件(包括隐蔽文件)。-l显示文件的具体信息。-k显示文件大小,以 K 为单位。-color显示文件时用不同颜色加以区分文件类型。-d将根名目作为文件显示。19. more一页一页地显示文件
16、内容格式:more 选项 文件名选项说明:+n由第 n 行开头显示+/str由含有 str 字符串的地方开头显示。20. mount加载文件系统格式:mount 磁盘或分区的设备文件 载入点 选项选项说明:-t文件系统类型(fat32 为 vfat)-o选 项常 用 的 选 项 有 code,iocharset( 对 于 中 文code=936,iocharset=gb2312)-loop挂载 ISO 文件时用举个例子,挂载/dev/hda5 到/mnt/wind 名目下并且名目支持中文,命令如下:#mount-tvfat/dev/hda5/mnt/wind-o code=936,iochar
17、set=gb231221. mv重命名文件或移动文件格式:mv -b-f-i-u-v 源文件 目标文件或文件夹选项说明:-b为源文件作备份-f文件重命名时强制掩盖己有文件。-i掩盖文件时给出提示。-u目标文件比源文件时不掩盖。-v移动文件时给出相应的提示。22. oggenc压缩音乐文件为.ogg 格式格式:oggenc 文件名把*.wav 文件压缩为*.ogg 格式$oggenc *.wav同等条件下,ogg 会比 mp3 获得较好的音乐效果23. ps查看进程状态格式:ps 选项选项说明:-e/A列出全部进程。-u选择有效的用户 ID。-p选择指定终端下的进程。-C选择指定的文件名。-f列
18、出全部具体信息。-l按长格式显示。-j按 job 格式显示。-x选择没有掌握终端的进程。24. quota显示磁盘的使用状况,一般用户可以查看自己使用磁盘的权限格式:quota -g-u-v-p 用户名或组名选项说明:-g显示用户所在组使用磁盘的权限。-u显示用户自己使用磁盘的权限。-p使显示信息简洁化。25. rename批量修改文件名格式:rename from to file.选项说明: from源字符。to目标字符。file要改名的文件下面的命令演示了把全部文件的后辍由 rm 改为 rmvb$rename .rm .rmvb *下面的命令把全部文件名中的大写改为小写$rename ”t
19、r/A-Z/a-z/” *26. rpmredhat 软件包治理工具格式:rpm 选项 文件名|软件包名选项说明:-version获得 rpm 程序的版本信息。-vv获得具体的帮助信息。-v打印冗长的信息,常与-i 选项合用,获得安装进度。-i安装软件包。-U升级软件包,假设没有旧版的软件包就安装它。-F更软件包,当有旧的软件包的时候。-force相当于-replacepkgs,-repalcefiles,-oldpackage。-nodigest不验证软件包的独立性。-nosignature不验证软件包或者页眉签名。-nodeps不检查软件包的安装路径。-oldpackage用软件包替换旧软
20、件包。-prefix PATH指定软件包的安装路径。-relocateOLDPATH=NEWPATH把原来安装在 “OLDPATH”下的软件包重安装到“NEWPATH”去。-replacefiles安装软件包,即使它们替换掉其它的文件。-replacepkgs替换掉已经安装的同名软件包。-e|-erase软件包名 删除软件包。-allmatches删除软件包的全部版本。-q查询已经安装的软件包。-a选择全部软件包。-h当解开软件包时,打印 50 个标记,通常与 iv 选项一起用。特别说明:在删除软件包时,软件包的名称不等于安装时的文件名。通常一个 rpm 包由软件包名称+版本号+发行号+发行平
21、台+后辍构成。比方有个文件名为 bugboy-1.01-1.i386.rp,m那么它的软件包名称是 bugboy,版本号是 1.0.1,发行号是 1,发行平台是 intel 386。27. rm 删除文件或者名目格式:rm -d-i-r-v-f 文件名或名目名选项说明:-d使用这个选项后,rm 大体想当于 unlink。-i删除每个文件时给用户提示。-r删除整个名目,包括文件和子名目。-v删除每个文件时给出提示。-f强制删除,并且不给提示。28. sox转换音频文件格式:sox 选项 from 选项 to选项说明:-t文件格式。-r采样频率。例:把 file1.wav 转换成 file1.au
22、 文件$sox file1.wav file1.au把 file1.wav 转换成 file1.voc 文件,并把采样频率由 10000 Hz 降为5000 Hz$sox -r 10000 file1.wav -r 5000 file1.voc减小文件噪音,让文件通过低通滤波器$sox file1.wav file1.voc lowp 2200注:对于一些没有许可授权的文件格式,sox 不支持29. su转变当前用户的 ID。30. tail输出文件内容后面的局部格式:tail 选项 文件名选项说明:-n只显示后面的 n 行。-f动太显示,常用于跟踪消息文件。31. tar解压或压缩文件格式:
23、tar 选项 文件文件 1 名目名目 1选项说明:-A将一个 tar 文件追加到一个存档中。-c生成一个的存档文件。-delete从存档中删除。-r将文件添加到一个存档的末尾。-l列出一个存档的内容。-u仅将些存档中内容较的文件添加到存档中。-x从存档中解压缩文件。-v具体地列出处理过的文件的信息。-z用 gzip 来处理文件。-remove-files将文件解压之后就删除它们。-Z用 compress 来处理文件。留意:选项中必需包含有 A c d r t u x 中的一个或多个。32. top查看 CPU 的使用率,修改进程运行优先级格式:top 选项选项说明:-d delay指定刷的秒数
24、。-p pid查看指定 pid 的 CPU 使用率。默认状况下进程按CPU 使用率排序,可按PID(N),时限(A),常驻内存使用率(M),时间(T),和 CPU 使用率(P)来排序。33. type查看一个命令所在路径格式:type command例:查找 ls 命令所在路径$type ls34. umount卸载系统格式:umount 磁盘或分区的设备文件(也可以是载入点)35. useradd添加用户或更创立用户的默认信息格式:useradd 选项选项说明:-c comment描述用户帐号,通常为用户全名。-d home_dir设置用户主名目,默认值为用户的登录名,并放在/home 名目
25、下。-D创立帐号后保存为帐号设置的默认信息。-e expire_date用 MM/DD/YYYY 格式设置帐号过期日期。-f inactivity设置口令失效时间,该值为 0 使口令失效后帐号马上失效, 为-1 使该选项失效。-g设置根本组。-k skel_dir设置框架名目,该名目包含用户的初始配置文件,创立用户时该名目下的文件都被复制到用户主名目下。-m自动创立用户主名目,并把框架名目(默认为/etc/skel)下的文件复制到用户主名目下。-M不创立用户主名目。-r允许保存的系统帐号使用用户 ID 创立一个帐号。-s shell指定用户的登录 shell。-u user_id设置用户 ID
26、。例:#useradd -m -g users -G Wheel,student -s /bin/sh -c “Yan Dingcheng“ bugboy例用 usermod 修改用户帐号时各选项与 useradd 命令相像。36. userdel删除用户帐号格式:userdel username选项说明:-r删除帐号时连同帐号主名目一起删除。留意:删除用户帐号时非用户主名目下的用户文件并不会被删除,治理员必需以find 命令搜寻删除这些文件。下面这条命令删除bugboy 用户的全部文件:#find / -user bugboy -exec rm ;37. whatis查看可以使用的 man
27、和命令的根本功能介绍例:$whatis top38. whereis定位可执行文件、源代码文件、帮助文件在文件系统中的位置格式:whereis -bmsu BMS 名目名 -f 文件名选项说明:-b定位可执行文件。-m定位帮助文件。-s定位源代码文件。-u搜寻默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。-B指定搜寻可执行文件的路径。-M指定搜寻帮助文件的路径。-S指定搜寻源代码文件的路径。39. w查看登录用户和他们正在做什么格式:w -hsfV user选项说明:-h不打印信息头。-s使用短格式显示信息。-f打印用户来源。-V显示版本信息。40who查看当前用户的便当状况格式
28、:who -i-u-m选项说明:-i显示用户的活动状况。-u与-i 一样。-m显示用户自身的状况。四补充说明本次试验很难完成全部命令的操作,建议参考Linux 命令大全(修改版), 把握 linux 平台下的全部命令。五试验结果六试验体会经过本次试验,我对 linux”的命令有了肯定的了解,使我使用 linux 系统更加的便利。为下次 shell 编程打下了肯定的根底。试验二、shell 编程一试验目的娴熟把握 Shell Script 编程,加深对 linux 系统的理解二试验要求1. 知道如何执行 shell 程序2. 在 shell 脚本中要表达条件掌握如 if 构造和条件分支 3在 s
29、hell 脚本中要表达循环for,while 和 until 循环 4把握 shell 程序的调试三Shell 脚本举例1) 赶走一些你不期望进入的用户while true dokill -9 $(ps -aux |grep bigman | awk ” print $2 ” ) done2) 一个简洁的名目菜单#!/bin/bashwhile true doecho List Directory.1echo Change Directory.2echo Edit File.3echo Remove File.4echo Exit Menu.5read choicecase $choice i
30、n1) ls;2) echo Enter target directory read dircd $dir;3) echo Enter file name read filevi $file;4) echo Enter file name read filerm $file;5) break; esacdone3. 函数调用#!/bin/bashfunction func echo $1echo $2 return 1func “Hello“ “function“4 Shell 脚本的感染for file in *doif test -f $file thenif test -x $file
31、thenif test -w $file thencp $file .$file head -n 15 $0$file cat .$file$file fifi fi done四试验结果五试验体会经过本次试验,我对 shell 脚本编程有了肯定的了解,但是了解的还是很少, 以后肯定要在这方面多多加强才行。试验三、进程掌握一、试验目的了解与进程掌握相关的各种系统调用,加深对进程的状态变迁与进程调度的理解。二、试验要求1. 把握进程的创立 fork 系统调用的原理。2. 把握 exec 系统调用的原理。3. 把握 exit 系统调用的原理。4. 把握 wait 系统调用的原理。三、代码范例1. F
32、orkmainint pid;printf(Just 1 process now.n); printf(Calling forkn); pid=fork;if(pid = = 0)/*子进程 */ printf(Im the child.n);else if pid0/*父进程*/ printf(Im the parent.n);else print(fork failed.n); print(Program end.n);2. exec 调用main( )int pid;printf(Just 1 process now.n); printf(Calling fork( ). . . n);
33、 pid=fork( );If(pid = = 0)/* 子进程*/printf(Im the child. n);execl(/bin/ ls,ls,1,fork_test.c,0); perror(exec error)exit(1)/*子进程终止*/else if(pid 0)/*父进程 */ printf(Im the parent.n );else/*pid0,fork 失败 */printf(fork failed.n);wait(0);printf (programe end.n); /*父进程等待进程终止*/3. wait 调用# include main( )int i,j,
34、status; i= fork ( );if( i = 0)/子进程 */execlp(“ysh”, “ysh”, “c”, “expr.sh 1st 2st 3rd 4th”,NULL);/ * 执行失败,错误返回* / perror(“exec error”); exit(5);wait (&status);/ * 父进程接收子进程返回状态度* /printf(“status returned : %xH n”,status);printf(“that is %x in exit . n”,status8);四、试验结果五、试验体会:由于这次是用 C 环境来做的,所以相对而言比较得心应手,
35、但是对于进程的编程还是遇到了不少问题的的,经过不停的调试和努力之后还是顺当的完成了此次任务。试验四、网络编程 试验目的了解与 linux 下 socket 编程相关的各种系统调用,加深对 tcp/udp 协议的理解。二 试验要求1. 把握 linux 下 socket 编程相关的各种系统调用n socketn bindn connectn listenn acceptn read, recvfromn write, sendton close2. 理解 tcp 与 udp 通讯机制的区分三 代码范例1一个简洁的TCP Server #include #include #include #inc
36、lude #include #include #include #include #define MYPORT3490/* 监听端口 */#define BACKLOG 10/* listen 的恳求接收队列长度 */void mainint sockfd, new_fd;/* 监听端口,数据端口 */ struct sockaddr_in my_addr;/* 自身的地址信息 */ struct sockaddr_in their_addr;/* 连接对方的地址信息 */ int sin_size;if (sockfd = socket(AF_INET, SOCK_STREAM, 0) =
37、-1) perror(“socket“);exit(1);my_addr.sin_family = AF_INET;my_addr.sin_port = htons(MYPORT);/* 网络字节挨次 */ my_addr.sin_addr.s_addr = INADDR_ANY; /* 自动填本机IP */ bzero(&(my_addr.sin_zero), 8); /* 其余局部置 0 */if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr) = -1) perror(“bind“); exit(1);
38、if (listen(sockfd, BACKLOG) = -1) perror(“listen“);exit(1);while(1) /* 主循环 */ sin_size = sizeof(struct sockaddr_in);new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size) if(new_fd = -1) perror(“accept“); continue;printf(”Got connection fronm“, %inset_ntoa(their_addr.sin_addr);if (!fork)
39、 /* 子进程 */if (send(new_fd, “Hello, world! n“, 14, 0) = -1) perror(“send“); close(new_fd);exit(0);close(new_fd);/* 无法生成子进程时有用 */while(waitpid(-1,NULL,WNOHANG) 0);/*去除全部子进程 */2tcp Client 局部#include #include #include #include #include #include #include #include #define PORT 3490/* Server 的端口 */#define
40、MAXDATASIZE 100/*一次可以读的最大字节数 */int main(int argc, char *argv)int sockfd, numbytes;char bufMAXDATASIZEstruct sockaddr_in their_addr;/* 对方地址信息 */if (sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) perror(“socket“);exit(1);their_addr.sin_family = AF_INET;their_addr.sin_port = htons(PORT);/* short, NBO */ thei
41、r_addr.sin_addr = inet_addr(“202.119.193.52”); bzero(&(their_addr.sin_zero), 8);/* 其余局部设成 0 */if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr) =-1) perror(“connect“); exit(1);if (numbytes=recv(sockfd,buf,MAXDATASIZE,0)=-1) perror(“recv“);exit(1);bufnumbytes = ”0”; printf(“Received: %s“,buf); close(sockfd);return 0;四 试验结果五 试验体会网络编程这局部相比照较困难,在试验中遇到了很多的问题,尽管试验中自己解决了很多,但在以后的学习、工作中中还有很多需要我去学习的。