Linux大作业 2文档格式.docx
《Linux大作业 2文档格式.docx》由会员分享,可在线阅读,更多相关《Linux大作业 2文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
;
//输入y或者yes返回
n|no)return1;
//输入n或者no返回x的值
*)
echo“Answeryesorno”;
//如果输入的不是以上几项就提示
esac
done
}echo“Originalparametersare$*”//输出ifyes_or_no
then
echo“Hi$1,nicename”//输出经过判断的名字,是你的名字
else
echo“Nevermind”//不是你的名字
fiexit0//退出
1.2U盘的卸载与挂载
/bin/sh
#mountusb.sh
quit()
{
clear//退出程序函数
echo“*******************************************************************”
echo“***thankyoutouse,Goodbye!
****”
exit0
}
mountusb()
{//加载U盘函数
clear
mkdir/mnt/usb//在/mnt下创建usb目录
/sbin/fdisk–l|grep/dev/sd//查看U盘设备名称
echo–e“PleaseEnterthedevicenameofusbasshownabove:
\c”
readPARAMETERmount/dev/$PARAMETER/mnt/usb
}
umountusb()//卸载U盘函数
ls-la/mnt/usb
display()//显示U盘信息函数
umount/mnt/usb
cpdisktousb()//拷贝硬盘文件到U盘函数
echo–e“PleaseEnterthefilenametobeCopide(underCurrentdirectory):
\c”
readFILE
echo“Copying,pleasewait!
...”
cp$FILE/mnt/usb
cpusbtodisk()//拷贝U盘函数到硬盘文件
echo-e“PleaseEnterthefilenametobeCopideinUSB:
echo“Copying,Pleasewait!
cp/mnt/usb/$FILE.//点(.)表示当前路径
whiletrue
do
echo“=====================================================================”
echo“***LINUXUSBMANAGEPROGRAM***”
echo“1-MOUNTUSB”
echo“2-UNMOUNTUSB”
echo“3-DISPLAYUSBINFORMATION”
echo“4-COPYFILEINDISKTOUSB”
echo“5-COPYFILEINUSBTODISK”
echo“0-EXIT”
echo“=====================================================================”
echo–e“PleaseEnteraChoice(0-5):
readCHOICE//读取输入数据
case$CHOICEin//case条件跳转
1)mountusb;
2)unmountusb;
3)display;
4)cpdisktousb;
5)cpusbtodisk;
0)quit;
*)echo“InvalidChoice!
CorrentChoiceis(0-5)”
sleep4
clear;
esac
done
二、Linux操作系统配置实例
查阅资料结合实际使用情况,写出Linux操作系统使用中的一个配置的详细过程;
具体配置目标不限(自选)。
2.1NFS服务配置
2.1.1服务器端
(1)查看ip地址为192.168.1.103。
(2)先查找一下系统是否安装了nfs的软件包,使用rpm-qa来查看。
rpm–qa|grepnfs
(3)编辑/etc/exports文件来设置服务器端的共享目录(此处共享/shareA目录)
vi/etc/exports输入如下内容:
/shareA192.168.1.103(rw,no_root_squash)*(ro)
表示允许192.168.1.103主机读写,
其他所有的主机都可以访问此目录,权限是只读。
no_root_squash:
不将root用户及其所属的用户组映射为匿名用户和用户组,默认选项是root_squash,将root用户及其所属的用户组映射为匿名用户和用户组。
(4)启动NFS服务,使用servicenfsstart命令
2.1.2客户端
(1)使用showmount–e192.168.1.200命令来查看nfs服务器上共享的目录
如果出现如下情况
则需关掉服务端的防火网
然后在客户端重新输入命令
(2)使用mount命令讲nfs服务器上共享的目录挂接到本地的Linux计算机上
如:
mount192.168.1.200:
/shareA/tmp/nfs将192.168.1.200计算机上共享的/shareA目录挂接过来,挂接到自己的计算机上,接下来我们就可以像使用自己的硬盘一样来使用对方的共享目录
(3)使用mount命令来查看我们的挂接目录
Mount
(4)切换到挂载目录下,查看NFS服务器共享目录的内容。
cd/tmp/nfs
ls
mkdirbb
验证客户端是否可写NFS服务器导出的目录
。
(5)如果想解除挂接,我们可以使用umount命令
umount/tmp/nfs
2.2Samba服务配置
2.2.1Samba服务器配置
(1)配置以太网接口
设置网卡IP地址为192.168.1.200。
(2)Samba服务器的配置文件,vi/etc/samba/smb.conf
workgroup=MYGROUP
serverstring=SambaServer
security=share(只需修改此句)
说明:
上面的security是为Samba服务器设置安全等级的,选项的后面有几个等级如:
Share:
若采用此等级,用户不需要帐号和密码即可登录Samba服务器
User:
这是Samba服务器默认的安全等级,由Samba服务器检查帐号和密码
Server:
在此等级下,检查帐号和密码的工作可指定另一台WindowsNT/2000/XP或Samba服务器负责
Domain:
在此等级下,需要指定一台WindowsNT/2000/XP服务器,以验证用户所输入的帐号和密码
(3)在====ShareDefinitions====================的提示目录下可以设置共享目录,在配置文件最后添加如下内容:
[share1]
comment=stuff
path=/var/samba/share
public=yes
writable=yes
(4)重启Samba服务:
servicesmbrestart
(5)创建/var/samba/share,并设置权限,使所有用户都可访问。
mkdir–p/var/samba/share
chmod777/var/samba/share
2.2.2配置客户端,测试Samba服务器
(1)在Windows网络连接中选择VMnet1,设置ip地址为192.168.1.100。
检查客户端和linux服务器是否能ping通。
(2)打开网上邻居>
整个网络>
MicrosoftWindows网络,此时可以看到有两个工作组,Mygroup(我们刚才建的)和Workgroup,双击Mygroup,看到Linux计算机,双击它,查看共享目录。
验证是否可读写目录。
第二种方法:
选择[开始]菜单中的[运行],输入:
\\192.168.1.200\share1
2.2.3配置Samba服务器(需要口令)
前两个步骤如上例
(1)vi/etc/samba/smb.conf在配置文件中修改security=user
(2)在======ShareDefinitions=============的提示目录下可以设置共享目录,在配置文件最后添加如下内容:
[fredsdir]
comment=fred’sservice
path=/var/samba/fred
validusers=fred
public=no
(3)设置Samba密码文件,可以在主配置文件中看到Samba服务器所指定的密码文件/etc/samba/smbpasswd,它与Linux计算机的密码文件不同,他自己有自己的密码文件。
(4)此时可以为smbpasswd文件中的用户创建Samba口令,若无fred用户,需先创建用户。
(输入两条命令:
useraddfredpasswdfred)
给上面的fred用户设置口令,使用:
smbpasswd–afred命令(此时用户的口令可以和系统口令不同)
(5)创建共享目录并更改目录属主。
mkdir/var/samba/fred
chownfred.fred/var/samba/fred
(6)重启Samba服务:
(7)下面使用Windows计算机来测试一下,打开网上邻居>
MicrosoftWindows网络,此时可以看到有两个工作组,Mygroup(我们刚才建的)和Workgroup,双击Mygroup,看到Linux计算机.
(8)双击它,此时系统提示输入用户名和密码,输入刚才的用户名fred,密码123456。
(9)单击确定,发现共享目录有一个叫做fredsdir的文件夹。
\\192.168.1.200\fredsdir
2.2.4为一个组配置Samba共享
基本的实验步骤如下:
groupaddstaff
useradd–Gstaffuser1
passwduser1
useradd–Gstaffuser2
passwduser2
smbpasswd–auser1
smbpasswd–auser2
mkdir/var/samba/staff
chownstaff.staff/var/samba/staff
chmod770/var/samba/staff
vi/etc/samba/smb.conf
修改security=user
在配置文件最后添加如下内容:
[staffdir]
comment=staff’sservice
path=/var/samba/staff
writable=yes
writelist=@staff读写权限的用户或组
然后重启服务,挂载NFS导出的目录,测试user1和user2是否可读写,参考任务一和二。
2.2.5关于Samba服务器的其它命令
(1)可以使用其它命令如:
smbclient–L//IP地址/共享名–U用户名来访问windows或linux提供的共享,如:
使用命令查看并访问共享,smbclient–L//192.168.1.200/fredsdir–Ufred
(2)可以使用smbstatus命令查看Samba服务器的资源使用情况
(3)可以输入testparm来检查smb.conf配置文件的正确性
要求:
编写Linux下的一个应用程序。
开发语言和工具不限;
给出源代码和运行结果。
关键代码部分要给出注释。
3.1计算学生的总成绩和平均成绩
3.1.1功能
要求输入学生数和成绩,然后求出这几个学生的总成绩和平均成绩。
3.1.2代码
/*main.c程序:
计算学生的总成绩和平均成绩*/
#include<
stdio.h>
/*文件预处理,包含标准输入输出库*/
floatfun_sum(intvar[],intnum);
/*自定义函数声明,也可以把声明放在main中*/
floatfun_avg(intvar[],intnum);
intmain()
{
intn,i;
floataverage,sum;
printf(“请输入需要统计的学生数:
”);
scanf(“%d”,&
n);
intarray[n];
for(i=0;
i<
n;
i++)
printf(“请输入第%d个学生的成绩:
”,i+1);
array[i]);
}
sum=fun_sum(array,n);
printf(“输入的%d个学生的总成绩是:
%6.2f\n”,n,num);
average=fun_avg(array,n);
printf(“输入的%d个学生的平均成绩是:
%6.2f\n”,n,average);
floatfun_sum(intvar[],intnum)
floatavrg=0.0;
inti;
num;
avrg+=var[i];
return(avrg);
floatfun_avg(intvar[],intnum)
avrg/=num;
四、Linux内核源码解读
任选Linux内核源码,写出该模块运行过程;
在每行内核源码后注释说明;
解读源码不少于三十行。
4.1sys.c程序
4.1.1功能描述
sys.c程序主要包含有很多系统调用功能的实现函数。
其中,若返回值为-ENOSYS,则表示本版的linux还没有实现该功能,可以参考目前的代码来了解它们的实现方法。
所有系统调用的功能说明请参见头文件nclude/linux/sys.h。
4.1.2代码注释
列表4.1linux/kernel/sys.c程序
1/*
2*linux/kernel/sys.c
3*
4*(C)1991LinusTorvalds
5*/
6
7#include<
errno.h>
//错误号头文件。
包含系统中各种出错号。
(Linus从minix中引进的)。
9#include<
linux/sched.h>
//调度程序头文件,定义了任务结构task_struct、初始任务0的数据,还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。
10#include<
linux/tty.h>
//tty头文件,定义了有关tty_io,串行通信方面的参数、常数。
11#include<
linux/kernel.h>
//内核头文件。
含有一些内核常用函数的原形定义。
12#include<
asm/segment.h>
//段操作头文件定义了有关段寄存器操作的嵌入式汇编函数。
13#include<
sys/times.h>
//定义了进程中运行时间的结构tms以及times()函数原型。
14#include<
sys/utsname.h>
//系统名称结构头文件。
15//返回日期和时间。
16intsys_ftime()
17{
18return-ENOSYS;
19}
20
21intsys_break()
22{
23return-ENOSYS;
24}
25//用于当前进程对子进程进行调试(degugging)。
26intsys_ptrace()
27{
28return-ENOSYS;
29}
4.2sys.h文件
4.2.1功能描述
sys.h头文件列出了内核中所有系统调用函数的原型,以及系统调用函数指针表。
4.2.2代码注释
列表4.2linux/include/linux/sys.h文件
1externintsys_setup();
//系统启动初始化设置函数。
(kernel/blk_drv/hd.c,71)
2externintsys_exit();
//程序退出。
(kernel/exit.c,137)
3externintsys_fork();
//创建进程。
(kernel/system_call.s,208)
4externintsys_read();
//读文件。
(fs/read_write.c,55)
5externintsys_write();
//写文件。
(fs/read_write.c,83)
6externintsys_open();
//打开文件。
(fs/open.c,138)
7externintsys_close();
//关闭文件。
(fs/open.c,192)
8externintsys_waitpid();
//等待进程终止。
(kernel/exit.c,142)
9externintsys_creat();
//创建文件。
(fs/open.c,187)
10externintsys_link();
//创建一个文件的硬连接。
(fs/namei.c,721)
11externintsys_unlink();
//删除一个文件名(或删除文件)。
(fs/namei.c,663)
12externintsys_execve();
//执行程序。
(kernel/system_call.s,200)
13externintsys_chdir();
//更改当前目录。
(fs/open.c,75)
14externintsys_time();
//取当前时间。
(kernel/sys.c,102)
15externintsys_mknod();
//建立块/字符特殊文件。
(fs/namei.c,412)
16externintsys_chmod();
//修改文件属性。
(fs/open.c,105)
17externintsys_chown();
//修改文件宿主和所属组。
(fs/open.c,121)
18externintsys_break();
//(-kernel/sys.c,21)
19externintsys_stat();
//使用路径名取文件的状态信息。
(fs/stat.c,36)
20externintsys_lseek();
//重新定位读/写文件偏移。
(fs/read_write.c,25)
21externintsys_getpid();
//取进程id。
(kernel/sched.c,348)
22externintsys_mount();
//安装文件系统。
(fs/super.c,200)
23externintsys_umount();
//卸载文件系统。
(fs/super.c,167)
24externintsys_setuid();
//设置进程用户id。
(kernel/sys.c,143)
25externintsys_getuid();
//取进程用户id。
(kernel/sched.c,358)
26externintsys_stime();
//设置系统时间日期。
(-kernel/sys.c,148)
27externintsys_ptrace();
//程序调试。
(-kernel/sys.c,26)
28externintsys_alarm();
//设置报警。
(kernel/sched.c,338)
29externintsys_fstat();
//使用文件句柄取文件的状态信息。
(fs/stat.c,47)
30externintsys_paus