BUAA_2023_os_lab0实验报告
lab0实验报告
思考题
thinking 1
这是第一次add之前的status.
这是最终的status.
如图所示,这两个status显然是不一样的。在用add之前,README.txt还属于“未跟踪的文件”,到了最后的便属于“修改”的文件了。根据指导书的状态图:
该文件经过了这样的变化过程:Untracked(new building)->Staged(add)->Unmodified(commit)->Modified(change)。这也是思考题中所谓的“原因”。
thinking 2
0.10的图放在了thinking1中,对应命令如下:
Add the file -> git add file_name
stage the file -> git add file_name (新建文件和修改文件后都要git add一下)
commit -> git commit -m message
thinking 3
git checkout -- print.c即可,因为这个命令可以将工作区恢复为原来的样子- 先执行这个
git reset HEAD print.c
然后执行这个:git checkout -- print.c
git rm --cached hello.txt该命令是从暂存区中删除文件
thinking 4
执行一次回退后使用git log的结果
执行git reset --hard <hash1>后的结果
在执行完git reset --hard 3的hashcode 之后,三个提交版本重新出现
thinking 5
实验现象如上,只要理解了重定向(> 不覆盖,>> 覆盖),就很容易理解这个现象了。echo 命令的作用是将其后面的字符串打印到stdout(不需要加双引号)
thinking 6
command文件的内容很简单,只需要将test文件的每一行的最开头加上echo 即可完成。
result文件的内容也很简单,就是:
Shell Start...
set a = 1
set b = 1
set c = a+b
save c to ./file1
save b to ./file2
save a to ./file3
save file1 file2 file3 to file4
save file4 to ./result
3
2
1
有区别(如下图),用这是因为第二种方式的话会先执行反引号内的命令,然后第一个echo的对象是反引号内的命令的返回值(每条命令都有自己的返回值),然后就导致这条指令其实是echo 返回值,因此输出一个test。
echo $c>file 是指输出c变量的值然后重定向输出到file中,然而echo `\$c>file1`就是输出引号里面的这个字符串,故结果不同。
在这里我意识到原来c=1直接就是一个命令,即便不在shell文件中也可以执行,如下所示:
难点分析
其实lab0看起来都是很基础,不需要多么高的思维难度的题目,但是作为初学者在做的时候也会有一些相对来讲较为棘手的东西,这里列举如下:
- 跨目录makefile的实现:(思考在注释中体现)
all:
cd code && $(MAKE) # 这cd命令更让我感觉到makefile本质上可能也和shell一样,都是一群命令的集合,这句代码表示首先用cd 进入下一级的code目录,用&&表示并列的操作,$(MAKE)应该表示的是在“当前所在的目录”下执行make命令。
.PHONY clean
clean:
rm -f code/*.o # 这code/*.o便是一个跨目录操作,先由当前目录进入到code目录,然后再找到code目录下的所有(*表示“所有”).o文件,然后由rm命令将所有code删除
-
文件处理三剑客命令:
由于grep/sed/awk这三个命令的用法比较多,比较灵活,所以可能在刚开始就不是那么得得心应手,需要参看相关教程才得以慢慢实现。
实验体会
体会的话就是,lab0相比于计组的pre,oo的Unit 1.1相对来讲还是比较容易的,基本都是会背就行的难度,但是问题就在于知识点比较多比较碎,包括linux命令,makefile文件的语法规则,git的一些用法,shell脚本文件的编写,C语言相关知识等。
在不断查阅指导书或其他教程的同时一边做着题,学会了不少东西,但是深感这些琐碎的知识点掌握地并不够熟练与踏实,这还是因为缺乏练习所导致的,希望以后这些知识能掌握地更加牢固灵活。

浙公网安备 33010602011771号