
学生姓名: 王颢
学 号: 20091001928
专 业: 通信工程
专业班级: 07509413
指导教师: 沈永珞
一、实验要求
1、熟悉linux操作系统的基础命令及VI 编辑器的使用,上机操作命令及vi编辑器。
2、掌握基础的Bash Shell编程操作,能够编写出实验要求中的程序。
3、掌握GCC及调试工具GDB的使用,能够编写简单的Makefile文件。按要求完成实验内容。
二、实验内容
1、Linux基础操作及VI 编辑器的使用
① 系统启动后,新建“terminal”,进入命令交互模式。
Ubuntu-server 11.10为无图形界面系统,登陆后直接进入终端模式。
② 分别运行命令“date”“cal”“pwd”“whoami”“uname”“ls -a”,观察结果。
结果如图:
③ 在当前登录用户根目录下新建工作目录“mywork”。
命令为$ mkdir mywork
演示结果如下图:
④ 拷贝当前登录用户根目录下的隐藏文件“.profile”到目录“mywork”中,并用自己的学号重新命名拷贝后的文件。
命令为$ cp ./profile ./mywork/075094
演示如下:
⑤ 进入工作目录“mywork”,并使用vi编辑器打开步骤4中已拷贝的文件075094,完成以下编辑操作:
a)复制5遍该文档第一行内容
用vi打开文件;复制命令为$ yy ;粘贴命令为$ p ;
演示如下:
b)然后新起一行并添加文字“TodayIsMonday”
命令为在命令模式下输入o新起一行添加内容。演示如下:
c)在该文档所有行首添加内容“#MyViFile#”。
ctrl-v选中所有行首进行插入。或者在命令模式下输入:%S/^/#MyViFile#/
现采用第二种方法,演示如下:
d)将该文本中所有内容为“file”的文字替换为“CUG”
命令为:%s/file/CUG/g
演示如下:
e)存档并退出
命令为:wq
⑥ 观察文档的不同用户的读写执行属性,然后修改成“-rw-rw-rw-”
查看命令为$ ls –l
计算可知rw权限转换成数字为6,所以修改权限的命令为$ sudo chmod 666
075094
演示如下:
⑦ 利用tar命令中的gzip功能将MyWork目录压缩打包为压缩文件MyWork.tar.gz,然后解压该压缩文件。
压缩命令为$ tar -zcvf MyWork.tar.gz ./MyWork
演示如下:
解压命令为$ tar -zxvf MyWork.tar.gz
演示如下:
2、Bash Shell 编程操作
1. 由于操作系统平台纵多,比如Linux,FreeBSD,Solaris等,编写shell脚本判断当前操作系统平台,并给与用户良好的文字提示。提示:使用`uname`命令。
程序如下:
#!/bin/sh
echo "This systerm is `uname`.";
演示如下:
2. 输入任意个整数数字(单个数字小于1000),求他们的平均值,数值总和,最大数,最小数。并给与用户良好的文字提示。要求使用位置参数的shift操作。
程序如下:
#!/bin/sh
n=$#
max=0
min=1000
sum=0
avrg=0
while [ 0 -lt $# ] #使用while循环
do
if [ $max -lt $1 ]; #使用if判断
then
max=$1;
fi
if [ $min -gt $1 ];
then
min=$1;
fi
let "sum=($sum+$1)"
let avrg=$sum/$n
shift
done
echo "==============="
echo "the max is $max"
echo "the min is $min"
echo "the sum is $sum"
echo "the avrg is $avrg"
echo "==============="
演示如下:
3. 计算并显示1到n的平方,其中n为用户输入的整数数值。
显示结果为:
1
4
9
16
程序如下:
#!/bin/sh
echo Please input a number:
read n
echo -----------------------
for i in `seq $n` #使用for循环
do
let 'b=i*i'
echo $b
done
echo -----------------------
演示如下:
4. 设计一个Shell程序,在当前目录下建立50个目录,即user1~user50
a) 目录user1下生成10个文件,分别为Myfile1-1,Myfile1-2,…, Myfile1-10
目录user2下生成10个文件,分别为Myfile2-1,Myfile2-2,…, Myfile2-10
以此类推……
程序如下:
#!/bin/sh
for i in `seq 50`#使用for循环创建50个目录
do
mkdir usr$i
cd usr$i
touch Makefile$i-{1..10}#使用touch创建10个文件
cd ..
done
演示如下:
b) 并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
执行命令$ sudo chmod o=r,u=rwx,ug=rxusr*
3、GCC及makefile练习
①使用gcc编译命令编译下面的“optimize.c”文件。并根据设置不同的优化级别编译,通过”.time 执行文件”来观察执行时间的开销。
#include int main(void) { double counter; double result; double temp; for(counter=0;counter<2000.0*2000.0*2000.0/20.0+2020; counter+=(5-1)/4) { temp=counter/1979; result=counter; } printf("Result is ""%lf\\n",result); return 0; } 执行命令$ gcc –o optimize optimize.c编译程序: 执行命令$ ./optimize 运行编译的结果,并用time命令来观察时间开销: ②将“optimize.c”文件拷贝为“optimize-1.c”文件,并在“optimize-1.c”文件中的main函数中增加3个子函数(在 rerurn 0 之前),分别为fun1(),fun2(),fun3()。 该三个子函数的功能分别为打印“This is function 1”,“This is function 2”,“This is function 3”.其中,fun1() 中还要求包含运算数字10的算术平方根,即包含sqrt() 函数。 a)编写在此目录结构下的makefile文件,编译成功后重新命名为MyMakeFile-a 执行$ sudo make –f MyMakeFile-a进行编译并执行$ ./optimize-1 执行观察结果。 演示如下: b)编写在此目录结构下的makefile文件,编译成功后重新命名为MyMakeFile-b 将文件按要求存放后,执行$ sudo make –f MyMakeFile-b进行编译并执行$ ./optimize-1 执行观察结果。 演示如下: c)编写在此目录结构下的makefile文件, 编译成功后重新命名为MyMakeFile-c 将文件按要求存放后,执行$ sudo make –f MyMakeFile-c进行编译并执行$ ./optimize-1 执行观察结果。 演示如下: 三、实验总结 这学期学到的LINUX可以说是第一次接触到,从刚开始的陌生到现在有了一定的了解和认识,在老师的耐心讲解下,对于LINUX有了一个从摸索到了解的过程,最后的实验,是将所学到的课堂知识通过实践动手来让我们对于LINUX这样一个操作系统的操作更为熟练,其实在实验中很多同学都能慢慢做出老师所提的实验,但是在验收的时候很多同学就是因为操作不够熟练而被老师指出,所以说对于任何新的知识,新的操作系统,只有学好并且加以实际动手操作,才能真正的掌握它,最后你也会喜欢上它。最后,不得不说LINUX这门课对我们今后的工作也是很有益处,我们应该好好掌握。
