linux实验指导书Word文档格式.docx
- 文档编号:20488658
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:28
- 大小:30.94KB
linux实验指导书Word文档格式.docx
《linux实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《linux实验指导书Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
dump备份文件系统
gzip/gunzip.gz文件的压缩/解压缩程序
gzexe压缩可执行文件
restore还原由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)
tar将若干文件存档或读取存档文件
unarj解压缩.arj文件
zip/unzip压缩/解压缩zip文件
磁盘操作:
cd/pwd切换目录/显示当前工作目录
df显示磁盘的相关信息
du显示目录或文件的大小
e2fsck检查ext2/ext3文件系统的正确性
fdisk对硬盘进行分区
fsck检查文件系统并尝试修复错误
losetup设置循环设备
ls列出目录内容
mkdir创建目录
mformat对MS-DOS文件系统的磁盘进行格式化
mkbootdisk建立目前系统的启动盘
mke2fs建立ext2文件系统
mkisofs制作iso光盘映像文件
mount/umount加载文件系统/卸载文件系统
quota显示磁盘已使用的空间与限制
sync将内存缓冲区内的数据写入磁盘
tree以树状图列出目录的内容
系统操作:
alias设置指令的别名
chkconfig检查,设置系统的各种服务
clock调整RTC时间
date显示或设置系统时间与日期
dmesg显示开机信息
eval重新运算求出参数的内容
exit退出目前的shell
export设置或显示环境变量
finger查找并显示用户信息
free显示内存状态
hostid显示主机标识
hostname显示主机名
id显示用户标识
kill删除执行中的程序或工作
last列出目前与过去登入系统的用户相关信息
logout退出系统
lsmod显示已载入系统的模块
modprobe自动处理可载入模块
passwd设置用户密码
psprocessstatus报告程序状况
reboot重启计算机
rhwo查看系统用户
rlogin远程登入
rpm管理Linux各项套件的程序
shutdown关机
suswitchuser变更用户身份
top显示,管理执行中的程序
uname显示系统信息
useradd/userdel添加用户/删除用户
userinfo图形界面的修改工具
usermod修改用户属性,包括用户的shell类型,用户组等,甚至还能改登录名
w显示目前注册的用户及用户正运行的命令
whereis确定一个命令的二进制执行码,源码及帮助所在的位置
who列出正在使用系统的用户
whois查找并显示用户信息
网络通信:
arp网地址的显示及控制
ftp文件传输
lftp文件传输
mail发送/接收电子邮件
mesg允许或拒绝其他用户向自己所用的终端发送信息
muttE-mail管理程序
ncftp文件传输
netstat显示网络连接、路由表和网络接口信息
pine收发电子邮件,浏览新闻组
ping向网络上的主机发送icmpechorequest包
ssh安全模式下的远程登录
telnet远程登录
talk与另一用户对话
traceroute显示到达某一主机所经由的路径及所使用的时间
wget从网络上自动下载文件
write向其他用户的终端写信息
文件操作:
cat显示文件内容和合并多个文件
clear清屏
chattr改变文件属性
chgrp改变文件组权
chmod改变文件或目录的权限
chown改变文件的属权
comm比较两个已排过序的文件
cp将文件拷贝至另一文件
dd从指定文件读取数据写到指定文件
df报告磁盘空间使用情况
diff比较两个文本文件,列出行不同之处
du统计目录/文件所占磁盘空间的大小
file辨识文件类型
emacs功能强大的编辑环境
find搜索文件并执行指定操作(find2)
grep按给定模式搜索文件内容
head显示指定文件的前若干行
less按页显示文件
ln创建文件链接
locate查找符合条件的文件
more在终端屏幕按帧显示文本文件
mv文件或目录的移动或更名
rm/rmdir删除文件/目录
sed利用script来处理文本文件
sort对指定文件按行进行排序
tail显示指定文件的最后部分
touch创建文件
tr转换字符
vi全屏编辑器
wc显示指定文件中的行数,词数或字符数
which在环境变量$PATH设置的目录里查找符合条件的文件mv文件或目录的移动或更名
实验二进程管理
验证型、设计型
一、实验目的
加深对进程概念的理解,明确进程与程序的区别;
进一步认识并发执行的实质。
二、实验内容
(1)进程创建
编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:
父进程显示“a“;
子进程分别显示字符”b“和字符“c”。
试观察记录屏幕上的显示结果,并分析原因。
(2)进程控制
修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
(3)进程的管道通信
编写程序实现进程的管道通信。
使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:
Child1issendingamessage!
Child2issendingamessage!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
三、实验要求
四、实验报告要求
●实验目的
●实验内容
●实验要求
●实验设计(功能设计、数据结构、程序框图)
●实验结果及分析
●运行结果
●感想
●参考资料
五、补充材料
管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。
无名管道由pipe()函数创建:
#include<
unistd.h>
intpipe(intfiledis[2]);
参数filedis返回两个文件描述符:
filedes[0]为读而打开,filedes[1]为写而打开。
filedes[1]的输出是filedes[0]的输入。
下面的例子示范了如何在父进程和子进程间实现通信。
#defineINPUT0
#defineOUTPUT1
voidmain(){
intfile_descriptors[2];
/*定义子进程号*/
pid_tpid;
charbuf[256];
intreturned_count;
/*创建无名管道*/
pipe(file_descriptors);
/*创建子进程*/
if((pid=fork())==-1){
printf("
Errorinfork\n"
);
exit
(1);
}
/*执行子进程*/
if(pid==0){
inthespawned(child)process...\n"
/*子进程向父进程写数据,关闭管道的读端*/
close(file_descriptors[INPUT]);
write(file_descriptors[OUTPUT],"
testdata"
strlen("
));
exit(0);
}else{
/*执行父进程*/
inthespawning(parent)process...\n"
/*父进程从管道读取子进程写的数据,关闭管道的写端*/
close(file_descriptors[OUTPUT]);
returned_count=read(file_descriptors[INPUT],buf,sizeof(buf));
%dbytesofdatareceivedfromspawnedprocess:
%s\n"
returned_count,buf);
实验三一个进程启动另一个程序的执行
设计
编写Linux环境下,fork()与exec()的结合使用实现一个进程启动另一个程序的执行的基本方法,掌握exec()的几种调用方法。
父进程从终端读取要执行的命令,并交给子进程执行。
父进程等待子进程结束,并打印子进程的返回值。
提示:
从终端读取要执行的命令可用fgets()实现。
四、实验报告要求
一个进程如何来启动另一个程序的执行?
在Linux中要使用exec()类的函数实现在一个进程来启动另一个程序。
exec类的函数不止一个,但大致相同,在Linux中,它们分别是:
execl,execlp,execle,execv,execve和execvp,下面以execlp为例,其它函数究竟与execlp有何区别,请通过manexec命令来了解它们的具体情况。
一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。
如果你的程序想启动另一程序的执行但自己仍想继续运行的话,怎么办呢?
那就是结合fork与exec()的使用。
下面一段代码显示如何启动运行其它程序:
#include<
stdio.h>
charcommand[256];
intmain()
{
intrtn;
/*子进程的返回数值*/
interrorno;
while
(1){
/*从终端读取要执行的命令*/
printf("
>
"
);
fgets(command,256,stdin);
command[strlen(command)-1]=0;
if(fork()==0){
/*子进程执行此命令*/
errorno=execlp(command,command,NULL,NULL);
/*如果exec函数返回,表明没有正常执行命令,打印错误信息*/
perror(command);
exit(errorno);
}
else{
/*父进程,等待子进程结束,并打印子进程的返回值*/
wait(&
rtn);
printf("
childprocessreturn%d\n"
rtn);
}
return0;
表1exec()族调用
execl(执行文件)
相关函数
fork,execle,execlp,execv,execve,execvpFxhLinux联盟
表头文件
#include<
FxhLinux联盟
定义函数
intexecl(constchar*path,constchar*arg,....);
函数说明
execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
返回值
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
范例
main()FxhLinux联盟
{FxhLinux联盟
execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);
}FxhLinux联盟
执行
/*执行/bin/ls-al/etc/passwd*/FxhLinux联盟
-rw-r--r--1rootroot705Sep313:
52/etc/passwdFxhLinux联盟
FxhLinux联盟execlp(从PATH环境变量中查找文件并执行)
fork,execl,execle,execv,execve,execvpFxhLinux联盟
intexeclp(constchar*file,constchar*arg,……);
execlp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
错误代码
参考execve()。
/*执行ls-al/etc/passwdexeclp()会依PATH变量中的/bin找到/bin/ls*/FxhLinux联盟
{FxhLinux联盟execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);
FxhLinux联盟}FxhLinux联盟
FxhLinux联盟execv(执行文件)
fork,execl,execle,execlp,execve,execvpFxhLinux联盟
intexecv(constchar*path,char*constargv[]);
execv()用来执行参数path字符串所代表的文件路径,与execl()不同的地方在于execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。
请参考execve()。
/*执行/bin/ls-al/etc/passwd*/FxhLinux联盟
{FxhLinux联盟char*argv[]={“ls”,”-al”,”/etc/passwd”,(char*)}};
execv(“/bin/ls”,argv);
FxhLinux联盟execve(执行文件)
fork,execl,execle,execlp,execv,execvpFxhLinux联盟
intexecve(constchar*filename,char*constargv[],char*constenvp[]);
execve()用来执行参数filename字符串所代表的文件路径,第二个参数系利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。
范例
main()
{
char*argv[]={“ls”,”-al”,”/etc/passwd”,(char*)0};
char*envp[]={“PATH=/bin”,0}
execve(“/bin/ls”,argv,envp);
执行
52/etc/passwd
execvp(执行文件)
相关函数
fork,execl,execle,execlp,execv,execve
intexecvp(constchar*file,char*constargv[]);
execvp()会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
/*请与execlp()范例对照*
{char*argv[]={“ls”,”-al”,”/etc/passwd”,0};
execvp(“ls”,argv);
实验四基于消息队列和共享内存的进程间通信
Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。
本实验的目的是了解和熟悉:
1.Linux支持的消息通信机制及其使用方法
2.Linux系统的共享存储区的原理及使用方法。
1.消息的创建、发送和接收
使用消息调用msgget()、msgsnd()、msggrev()、msgctrl()编制长度为1K的消息的发送和接收程序。
2.共享存储取得创建、附接和断接
使用系统调用shmget()、shmat()、shmctl()、shmctl(),编制一个与上述功能相同的程序。
五、设计提示
为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,server和client,进行通信;
server端建立一个key为75的消息队列,等待其他进程发来的消息。
当遇到类型为1的消息时,则作为结束信号,取消该队列,并退出Server。
Server每收到一个消息后显示一句“(Server)received”;
Client端使用key为75的消息队列,先后发送类型为10到1的消息,然后退出。
最后一个消息即server端需要的结束信号。
Client每发送一条消息,显示一句“(Client)sent”;
父进程在server和client均退出后结束。
六、相关系统调用
1、共享内存
(1)共享存储区的建立
shmid=shmget(key,size,flag):
建立(获得)一块共享存储区,返回该共享存储区的描述符shmid;
若尚未建立,便为进程建立一个指定大小的共享存储区。
(2)共享存储区的控制
shmctl(id,cmd,buf)
对共享存储区的状态信息进行查询,如其长度、所连接的进程数、创建者标识符等;
也可设置或修改其属性,如共享存储区的许可权、当前连接的进程计数等;
还可用来对共享存储区加锁或解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 实验 指导书