BUAA_2023_os_lab0实验报告

lab0实验报告

思考题

thinking 1

image-20230306170526455

这是第一次add之前的status.

image-20230306170258814

这是最终的status.

如图所示,这两个status显然是不一样的。在用add之前,README.txt还属于“未跟踪的文件”,到了最后的便属于“修改”的文件了。根据指导书的状态图:

image-20230306171203523

该文件经过了这样的变化过程: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

  1. git checkout -- print.c 即可,因为这个命令可以将工作区恢复为原来的样子
  2. 先执行这个git reset HEAD print.c

​ 然后执行这个:git checkout -- print.c

  1. git rm --cached hello.txt该命令是从暂存区中删除文件

thinking 4

image-20230306231836418

执行一次回退后使用git log的结果

image-20230306231944187

执行git reset --hard <hash1>后的结果

image-20230306232223953

在执行完git reset --hard 3的hashcode 之后,三个提交版本重新出现

image-20230306232344566

thinking 5

image-20230306232610405

实验现象如上,只要理解了重定向(> 不覆盖,>> 覆盖),就很容易理解这个现象了。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`就是输出引号里面的这个字符串,故结果不同。

image-20230306235216621

在这里我意识到原来c=1直接就是一个命令,即便不在shell文件中也可以执行,如下所示:

image-20230307000517543

难点分析

其实lab0看起来都是很基础,不需要多么高的思维难度的题目,但是作为初学者在做的时候也会有一些相对来讲较为棘手的东西,这里列举如下:

  1. 跨目录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删除
  1. 文件处理三剑客命令:

    由于grep/sed/awk这三个命令的用法比较多,比较灵活,所以可能在刚开始就不是那么得得心应手,需要参看相关教程才得以慢慢实现。

实验体会

体会的话就是,lab0相比于计组的pre,oo的Unit 1.1相对来讲还是比较容易的,基本都是会背就行的难度,但是问题就在于知识点比较多比较碎,包括linux命令,makefile文件的语法规则,git的一些用法,shell脚本文件的编写,C语言相关知识等。

在不断查阅指导书或其他教程的同时一边做着题,学会了不少东西,但是深感这些琐碎的知识点掌握地并不够熟练与踏实,这还是因为缺乏练习所导致的,希望以后这些知识能掌握地更加牢固灵活。

posted @ 2023-03-07 10:51  buaa_nr  阅读(311)  评论(0)    收藏  举报