(没有上传图片)
实验一Linux命令与编程基础实验
实验目的:了解远程登录,学习putty这个软件,会运用它进行远程登录。学习和掌握Linux命令,了解GCC编译器及VI文字编辑器的运用,会简单的编程语言。
实验内容:
一.Linux命令实验:
使用putty用ssh方式登录172.23.204.90服务器。登录后,
1.更改自己的用户口令(复杂些,字母数字的组合);
直接输入账号,然后提示输入密码,输入密码(密码不显示),直接回车即可。如果要修改密码的话,用passwd口令进行修改。将自己的密码改成字母数字的组合。
2.①查看自己的主目录(登录时自动进入的目录)是什么目录;
输入pwd口令,会显示你所在的主目录名字。我的目录是:/home/sj0703
②以长格式查看主目录下有哪些目录和文件(所有的);
输入ls –l口令,会显示主目录下所有的文件,包括文件的属性,大小,创建时间等。
3.①新建一个空文件,查看其属性信息;
输入touch wxh口令,再输入ls -l口令。显示文件,查看刚刚所建文件的属性,属性值为-rw-rw-r--。
②用chmod 777更改该文件属性,更改后再查看属性信息;
输入chmod 777 wxh口令,再输入ls -l口令。显示文件,查看刚刚所建文件的属性,属性值为-rwxrwxrwx。
③最后删除该文件。
输入rm wxh口令,删除wxh文件。用ls -l口令查看,确认删除成功。
4.①在主目录下新建一子目录vivi;
输入mkdir vivi口令,创建vivi目录。用ls -l口令查看,确认创建成功。
②将/tmp目录下的vivi-br-release.tar.gz拷贝至自己主目录下的vivi子目录;
在主目录下输入cp –a/tmp/vivi-br-release.tar.gzvivi口令,拷贝该文件。输入cd vivi口令,进入vivi目录,用ls -l口令查看,确认拷贝成功。
③将该vivi打包文件解开。
在vivi目录下输入tar –zxvfvivi-br-release.tar.gz口令,进行解压。用ls -l口令查看,确认解压成功。
5.①查看passwd命令的权限:ll /usr/bin/passwd,完整解释其权限特征。
输入ll /usr/bin/passwd口令,看到/usr/bin/passwd的权限为-r-s—x—x,说明passwd命令的权限被设置为SUID特殊权限,如果所有者是root的话,那么执行人就有超级用户的特权了。
②查看临时文件目录/tmp权限:ll -d /tmp,完整解释其权限特征。
输入ll –d /tmp口令,看到/tmp的权限为drwxrwxrwt,说明tmp目录的权限被设置为sticky-bit特殊权限,存放在该目录的文件仅准许其属主执行删除、 移动等操作。
二.Linux编程基础实验:
1.用vi编辑器建立以下文件:
在主目录下输入vi,进入vi文本编辑器。首先进入的是编辑模式,输入i,进入插入模式才能编写代码,将下面的程序1直接复制。然后点ESC键,再输入ZZ,退出vi编辑器。
程序1:hello.c
#include
int main(void)
{
printf ("Hello world, Linux programming!/n");
return 0;
}
然后执行命令编译这段程序:
# gcc hello.c -o hello
查看可执行文件hello是否生成。
执行:
# ./hello
查看记录执行结果。
结果为:Hello world,Linux programming!
2.分步编译hello.c:
执行:
# gcc -E hello.c -o hello.i
观察hello.i的内容。
执行
# gcc -c hello.i -o hello.o
观察hello.o是否生成
生成hello.o文件
# gcc hello.o -o hello
观察hello是否生成
生成hello文件
3.用vi编辑器建立以下文件:(步骤参考1)
程序2:illcode.c
#include
void main(void)
{
long long int var = 1;
printf("It is not standard C code!/n");
}
执行:
# gcc -Wall illcode.c -o illcode
观察记录输出结果。
4.用vi编辑器建立以下文件:(步骤参考1)
程序3:optimize.c
#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 -Wall optimize.c -o optimize
再使用time命令,大致统计出该程序在运行时所需要的时间:
# time ./optimize
接着使用优化选项来对代码进行优化处理:
# gcc -Wall -O optimize.c -o optimize
在同样的条件下再次测试一下运行时间:
# time ./optimize
对比分析两次执行的性能的差异。
5.自己编写一个使用了Makefile内部变量和隐含规则的的Makefile文件,并要求使用伪目标all和clean。
使用Make工具编译前面的hello.c文件,并查看编译结果和执行结果。
用Make clean清掉上次的编译结果,更改编译器为arm-linux-gcc,重新make.
程序1:
H=hello.o
CC=gcc
all:hello
hello:${H}
${CC} $^ -o $@
hello.o:hello.c
clean:
rm -f *.o hello
程序2:
H=hello.o
CC=arm-linux-gcc
all:hello
hello:${H}
${CC} $^ -o $@
hello.o:hello.c
clean:
rm -f *.o hello
实验总结:
通过该实验熟悉了linux命令,开始学习一个新知识的时候不要着急,慢慢来,而且linux命令不是一种死记硬背的东西,要通过动手操作才能真正的理解。每当将一个一个linux命令输入到电脑中时,它会真真实实的将结果给你显示在屏幕上,这样能更好的加深你所学的知识,这就是实验课的目的。有了linux命令学习的奠基,学习GCC编译器更容易上手,马上就都理解了。按照老师说的一步一步地完成了。可当做到最后一个实验时,有点困难了。这个需要自己编一个Makefile程序,上课的时候并没有好好听这,脑子里一片空白。不过自己坚持把课件从新看了一遍,再加上自己的动手操作。开始慢慢理解了,可遇到一个问题当我自定义的一个变量C等于gcc时,结果显示cc –c –o hello.ohello.c而不是gcc –c –o hello.o hello.c。在这想了半天,老师上课的变量是CC难道和这个名字有关系?自己在想,可又一想变量名肯定没问题。又看了看课件,发现这么一句话“如果用户在Makefile中定义了同名的变量,用户自定义变量将覆盖同名的环境变量”突然恍然大悟的感觉,难道CC是环境变量?自己把变量名改成了CC,果真结果对了。肯定了自己的猜想。成功的解决了这个问题。也终于完成了该实验。