操作系统实验指导书自编Word文件下载.docx
- 文档编号:16810994
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:22
- 大小:25.50KB
操作系统实验指导书自编Word文件下载.docx
《操作系统实验指导书自编Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书自编Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
口令
输入超级用户名root,出现提示符:
输入普通用户名,出现提示符:
在提示符后就可以输入各种Linux命令了。
3、创建和删除用户
必须在超级用户下完成。
创建新用户:
#useradd用户名
创建/修改口令:
#passwd口令
删除用户:
#userdel–r用户名
4、用户切换
普通用户切换到超级用户:
$su
password:
超级用户切换到普通用户:
#su普通用户名
5、退出
为避免其他用户非法盗用自己的用户名,停止使用系统时要退出。
退出系统有很多方法:
可以在命令提示符下键入exit或logout命令,也可以使用组合键Ctrl+d。
6、关机
普通用户没有关机权限,只有超级用户才能关闭系统。
关机方式有命令方式和组合键Ctrl+Alt+Del两种方式,可以使用halt或shutdown命令:
#halt
(显示Systemhalted时才可以关闭电源)
#shutdown(系统默认2分钟后关机)
shutdown–hnow(系统立即关机)
shutdown–rnow(系统立即重新开机)
shutdown–h20:
25(系统将在20:
25分关机)
shutdown–h+10(系统在10分钟后关机)
(二)基本的常用命令
Linux命令格式说明:
1、Linux的文件名长度不超过256个字符,且不能使用如下字符:
!
@#$^&
*()[]{}‘“、/;
<
>
空格
2、Linux文件区分大小写;
3、文件名中如有多个圆点,则最右边一个为分隔符,且多表示文件类型;
4、Linux使用“/”为根目录、目录分隔符和目录与文件的分隔符。
命令介绍:
1、ls命令
功能:
查看指定目录下的文件和目录。
格式:
ls[options][filename/dirname…]
常用选项说明:
-a显示所有文件和目录,包括隐含文件
-l显示文件的完整信息
-f对文件添加一特定后缀字符指出其类型
/子目录
*可执行文件
无普通文件
.开头隐含文件
-r将文件以相反次序显示
-t将文件以建立时间先后列出
-R若目录下有文件,则文件也依序列出
示例:
ls–ltrs*
将当前目录下所有以s开头的文件按建立时间的逆序列出完整信息
ls–lR\bin
将\bin目录下所有目录及文件的详细信息列出
ls–alf
将当前目录下包括隐含文件在内的所有文件信息完整列出,并在文件名后添加特殊后缀以表示文件类型
2、man命令
查看某个命令的使用方法。
man命令名
3、clear命令
清屏。
clear
4、cat命令
显示或链接ASCALL文件。
cat文件名
cattext
显示text的文件内容
catfile1file2
依次显示file1和file2的内容
catfile1>
>
file2
将file1的内容附加到file2后面,但file1仍存在
cat>
file1
将键盘输入(以Ctrl+c结束)的内容输出到file1
5、pwd命令
显示当前目录。
pwd
6、cd命令
进入或修改指定的目录。
cd目录名
7、mkdir命令
建立新的目录。
mkdir新的目录名
8、rmdir命令
删除空目录。
rmdir空目录名
9、rm命令
删除指定的文件或目录。
rm[options][filename/dirname…]
-i删除前逐一询问确认
-f即使文件属性为只读,也直接删除无需确认
-r将指定目录下的所有文件及子目录一并删除
-v显示指令执行过程
rm–i*.c
删除C语言程序文件,删除前逐一询问确认
rm–rfinished
删除finished子目录及子目录中的所有文件
10、du命令
显示当前目录所占用的硬盘空间。
du–abC目录/文件名称
选项说明:
-a表示要显示所有目录及每个目录所占用的空间,单位是Kb
-b表示显示空间大小的单位是byte
-C表示显示一个目录的总空间的大小
不加任何参数,则显示当前目录下各目录占用的空间及所有文件所占总空间
11、df命令
查看硬盘目前所剩的空间。
df
12、cp命令
复制文件或目录。
cp–r源文件/目录名目标文件/目录名
cpfile1.cfile2.doc
将file1.c复制为file2.doc
cp–r/tmp//abc/
将tmp子目录中的文件及下属子目录一同复制到abc子目录
13、mv命令
移动文件或目录。
mv源文件/目录名目标文件/目录名
14、more命令
按页查看指定的文件。
more[options][filename…]
-num一次显示的行数
+num从第num行开始显示
-d在屏幕下方显示提示信息[Pressspacetocontinue,qtoquit.]
-l取消遇见特殊字符^L时会暂停的功能
-f计算行数时按实际的行数,而非自动换行的行数记数
-p不以卷动的方式显示每一页,而是先清屏后显示
-c先显示内容再清除旧资料
-s将连续两行以上的空白行代换为一行空白行
filenames欲显示内容的文件,可为复数个数
more–stestfile
逐页显示文件testfile的内容,如有连续两行以上空白行则以一行空白行显示
more+20testfile
从第20行开始显示文件testfile的内容
15、find命令
将符合组合条件expression的文件列出来。
find[path][expression]
常用参数说明:
命令中第一个“-”之前的部分为path,之后的部分为expression。
如果path是空字符串则使用目前路径,如果expression是空字符串则使用-print为默认expression。
常用expression:
-group<
群组名称>
查找符合指定之群组名称的文件或目录
-help在线帮助
-print假设find命令的返回值为true,就将文件或目录名称在标准输出设备输出。
格式为每列一个名称,每个名称前皆有“./”字符串
-user<
拥有者名称>
查找符合指定的拥有者名称的文件或目录
find.–name“*.c”
将当前目录及其子目录下所有后缀名为c的文件列出
find.–ftypef
将当前目录及其子目录下所有一般文件列出
find.–ctime-20
将当前目录及其子目录下所有最近20分钟内更新过的文件列出
(三)其他命令介绍
1、ps命令
显示正在执行的进程信息。
ps[options][pids]
-l以长列表的形式列出
-a显示其它用户的进程
-e显示环境
-r只显示正在运行的进程
栏目说明:
UID用户标识符
PID进程标识符
PPID父进程标识符
PRI进程优先级
SIZE虚拟内存大小
RSS驻留空间大小
STAT进程状态:
R—进程正在运行;
S—睡眠;
D—不可中断睡眠;
T—停止或跟踪;
Z—僵尸进程;
W—没有驻留页
TTY进程所在的虚拟终端号
TIME该进程已经运行的时间
COMMAND该进程的名称
2、jobs命令
列出当前正在运行的作业信息。
jobs
3、kill命令
终止(或撤消)一个进程(或作业)。
kill[options]pid/jid
-l输出信号名列表
-p指kill只输出已命名pid,而且不送信号给它
-s<
信号名>
指出欲发出的信号,信号是以信号名或数字给出的
4、nice命令
通过修改调度优先级来运行一个程序。
nice[options][COMMAND[arg…]]
-n<
adjustment>
加上由<
指定的优先级而不是默认值10
--version输出版本信息
5、&
命令
将进程放到后台运行。
在要运行的命令最后加上“&
”符号
yes>
/dev/null&
yes命令标准输出一串无穷尽的“y”;
/dev/null象一个黑洞,任何被送入这个黑洞的数据都会消失
6、前后台作业切换
bg命令
将前台作业放到后台运行。
bg%作业号
bg%2
将2号作业放到后台运行
或者:
用Ctrl+Z终止该作业,在shell提示符下键入命令bg。
fg命令
将后台作业放到前台运行。
fg%作业号
fg%2
将2号作业放到前台运行
7、top命令
显示系统动态的进程控制和进程调度,还可察看内存动态使用的实时信息。
top[options]
空格键立即更新显示
-i不显示空闲的或僵尸进程信息
-n或#改变显示的进程数量
-q退出top
-r重新调整一个指定进程的优先级
-f或F在显示时加上或移去字段
-o或O改变显示字段的顺序
-m切换内存信息的显示
-t切换进程和CPU状态的显示
(四)常用工具介绍
1、vi编辑器
vi编辑器的三种工作模式:
1命令模式(Commandmode):
控制屏幕光标的移动、字符的插入或删除、字符的移动或复制、进入插入模式或底线命令模式;
2插入模式(Insertmode):
完成字符的输入;
3底线命令模式(Lastlinemode):
存储文件或退出编辑器,也可设置编辑环境。
vi工作模式的切换:
1进入命令模式:
在命令提示符后输入:
vi<
文件名>
;
2切换到插入模式:
在命令模式下按键i、a、o进入插入模式
i(插入):
在当前光标位置输入字符;
a(增加):
从当前光标的前一个位置开始输入字符;
o(插入新行):
从新行行首开始输入字符。
3切换到命令模式:
在插入模式下按Esc键;
4切换到底线命令模式:
在命令模式下按“:
”进入底线命令模式。
命令模式功能键:
1移动光标
k、j、h、l:
上、下、左、右移动光标;
Ctrl+b:
向后移动一页;
Ctrl+f:
向前移动一页;
Ctrl+u:
向后移动半页;
Ctrl+d:
向前移动半页;
G:
移到文件最后一行;
1G:
移到文件第一行;
$:
移到该行的行尾;
O:
移到该行的行首;
#|:
移到该行的第#个位置。
2删除命令
x:
删除光标所在位置一个字符;
#x:
删除光标所在位置后面#个字符;
X:
删除光标所在位置前一个字符;
#X:
删除光标所在位置前面#个字符
dd:
删除光标所在的行;
#dd:
删除光标所在行后面的#行;
?
3修改命令
r:
取代光标所在处的字符;
R:
取代字符直到按Esc键为止;
cw:
更改光标所在处的字符到字尾;
c#w:
更改光标所在处后#的个字符。
4复制命令
yw:
复制光标所在处到字尾的字符;
p:
粘贴yw复制的字符到光标后。
yy:
复制光标所在行;
粘贴yy复制的行到光标后。
#yy:
复制光标所在行后面的#行;
粘贴#yy复制的若干行到光标后。
5跳转命令
Ctrl+g:
列出光标所在行的行号;
#G:
移动光标到第#行行首。
底线命令简介:
1列出行号
:
setnu在每一行前面列出行号;
2跳至某一行
#光标跳至第#行;
3查找字符串
/关键词查找指定的关键词,按n继续向下找;
关键词查找指定的关键词,按n继续向下找;
4存盘命令
:
wfilename将文件存入指定的文件filename中;
#,#wfilename截取文件的某些行存成另一个文件filename;
5退出命令
wq按原文件名存盘并退出vi;
q!
强制退出并放弃编辑的文件。
2、调试程序gdb
gdb(GNUDeBugger)是GNU的调试器,一般和GCC(GNUCompilerCollection)配搭使用。
要使用GDB进行调试,编译程序时要指定-g或-ggdb的编译选项,这样,gcc就会在生成可执行文件时产生调试信息。
gcc–gmain.c
-g用于产生一般的调试信息
gcc–ggdbmain.c
-ggdb则用于产生gdb特有的调试信息;
使用-ggdb时,可执行文件的尺寸会大大增加
gdb的基本指令:
f(ile):
指定一个可执行文件进行调试,gdb将读取这些文件的调试信息,如fa.exe
l(ist):
列程序出源文件
r(un):
装载完要调试的可执行文件后,可以用run命令运行可执行文件
b(reak):
设置断点(breakpoint),如b25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;
也可以使用bfuncname,funcname为函数的名称,当程序调用些函数时,则产生中断
c(ontinue):
c命令可以另中断的程序继续执行,直到下一个中断点或程序结束
p(rint):
输入某个变量的值,如程序定义了一个intaa的就是,paa就会输出aa的当前值
n(ext):
程序执行到断点时中断执行,可以用n指令进行单步执行
s(tep):
程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数
q(uit):
退出gdb
3、编译程序gcc
在提示符下利用工具gcc对c或c++源程序进行编译:
gcc–o目标文件源文件
其中,目标文件为可执行文件,扩展名为.exe;
源文件名为c语言文件,扩展名为.c。
4、运行可执行程序
在提示符下输入:
./目标文件名,运行编译后的目标程序。
5、编译命令make
利用命令make编译形成工程文件。
6、在线帮助man
man命令名查看命令详细信息。
四、思考题
1、如何查看文件目录?
如何查看文件内容?
2、如何创建子目录?
进入指定的子目录?
以及删除子目录及其下的文件?
3、如何查看硬盘空间?
4、如何复制或移动文件?
5、如何使用vi编辑器进行源程序的编辑?
如何编译和运行程序?
实验项目二进程管理
一、实验目的
1、加深对进程概念的理解,明确进程与程序的区别;
2、进一步认识并发进程的实质;
3、分析进程竞争资源的现象,学习解决进程互斥的方法;
4、了解Linux系统中进程通信的基本原理。
二、预备知识
1、阅读Linux的sched.c源码文件,加深对进程管理概念的理解;
2、阅读Linux的fork.c源码文件,分析进程的创建过程。
三、实验内容
1、进程的创建
任务:
编写一段程序,利用fork()创建两个子进程,其中父进程显示字符“a”,两个子进程分别显示字符“b”和“c”。
观察和记录屏幕上的显示结果,并分析原因。
程序:
#include<
stdio.h>
main()
{
intp1,p2,i;
while((p1=fork())==-1);
if(p1==0)
putchar(“b”);
else
{
while((p2=fork())==-1);
if(p2==0)
putchar(“c”);
putchar(“a”);
}
}
结果:
bca(有时会出现bac)
分析:
理论分析看,输出bac,acb等情况都有可能。
因为fork()创建进程所需的时间多于输出一个字符需要的时间,故在父进程创建子进程2的同时,子进程1输出了字符“b“;
而子进程2和父进程的输出次序是随机的,所以出现上述可能的输出顺序。
2、进程的控制
将以上程序的输出由一个字符分别改为一句话,观察和分析结果;
如果利用系统调用lockf()给每个进程加锁实现进程间的互斥,再观察和分析结果。
程序1:
/*创建子进程p1*/
if(p1==0)/*子进程1创建成功*/
for(i=0;
i<
5;
i++)
printf(“son%d\n”,i);
/*输出500个字符串“son“*/
/*创建子进程p2*/
if(p2==0)/*子进程2创建成功*/
printf(“daughter%d\n”,i);
/*输出500个字符串“daughter“*/
i++)/*父进程执行*/
printf(“children%d\n”,i);
/*输出500个字符串“children“*/
son……
daughter……
children……
或
son…
….son…
等等
由于函数printf()输出的字符串之间不会被中断,故字符串内部的顺序不变;
但由于进程并发执行时的调度顺序和处理机分配的问题,输出字符串的先后顺序随执行的不同而不同。
程序2:
while((p1=fork())==-1);
if(p1==0)/*子进程1创建成功*/
lockf(1,1,0);
for(i=0;
50;
i++)printf(“son%d\n”,i);
lockf(1,0,0);
while((p2=fork())==-1);
if(p2==0)/*子进程2创建成功*/
lockf(1,1,0);
i++)printf(“daughter%d\n”,i);
lockf(1,0,0);
}
i++)printf(“children%d\n”,i);
大致与程序1的执行结果相同,但不会出现同一组字符串间隔出现的情形。
由于lockf()函数锁定标准输出设备屏幕,故不可能出现一个字符串序列还没有显示完,就被其他进程抢占输出的情形;
各组字符串的输出顺序可能不同,但必定连续输出500次。
四、思考题
1、系统是怎样创建进程的?
2、当首次调用新创建进程时,其入口在哪里?
3、进程的互斥是如何实现的?
实验项目三进程通信
1、了解和熟悉管道通信机制;
2、理解消息通信机制的工作原理。
1、阅读Linux的msg.c、sem.c、shm.c等源码文件;
2、熟悉Linux的几种通信机制的工作原理。
1、进程的管道通信
编制程序,实现进程的管道通信:
利用系统调用pipe()创建管道,利用write()向管道写入消息,利用read()从管道读出消息。
两个子进程p1和p2分别向管道各写一句话:
Child1issendingmessage!
Child2issendingmessage!
而父进程则从管道分别读出来自两个子进程的消息并显示。
#include<
unistd.h>
signal.h>
main()
in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导书