0%

OS_Lab0_实验报告

OS_Lab0_实验报告

PS:该实验报告作为个人感悟将同步至我的个人博客网站

一.思考题

Thinking 0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 1. 进入目录并创建 README.txt,输出状态到 Untracked.txt
cd ~/learnGit
touch README.txt
git status > Untracked.txt

# 2. 在文件中添加内容,添加到暂存区,并输出状态到 Stage.txt
echo "这是我的第一次 Git 测试" > README.txt
git add README.txt
git status > Stage.txt

# 3. 提交 README.txt
git commit -m "提交README.txt,学号:24371083"

# 4.
cat Untracked.txt
cat Stage.txt

# 5. 修改 README.txt 文件,输出状态到 Modified.txt
echo "这是新增的第二行内容" >> README.txt
git status > Modified.txt

# 6.
cat Modified.txt

README.txt的不同:

1.用 touch 创建时,README.txt 仅仅存在于硬盘目录中。Git 知道这里多了一个文件,但 Git 尚未接管它的版本控制,因此把它标记为 Untracked files。

2.执行git add后,README.txt 的当前快照被复制到了暂存区。Git 开始追踪这个文件,并将其标记为 new file。

catModified.txt其结果和第一次执行add命令之前的status不一样,第一次显示的是Untracked files,第二次显示的是Changes not staged for commit。这种差异是由Git 的追踪机制决定的。

Thinking 0.2

add the file:git add

stage the file:git add

commit:git commit

Thinking 0.3

1.git checkout – print.c
||git restore print.c

2.git reset HEAD print.c$$
git checkout HEAD – print.c

3.git reset HEAD hello.txt

Thinking 0.4

1.第三次提交的哈希值为836a01eeb8fd9cda9fdbac333fdd91f5d6e196e5

2.git reset --hard HEAD^后只有第一次和第二次的提交

3.git reset --hard <‘hash’>后只剩第二次提交的哈希值

4.再次执行git reset --hard <‘hash’>又回到了原先版本

Thinking 0.5

1.终端上输出first

2.自动在当前目录创建output.txt文件并且往其中加入了second

3.third覆盖了second,output.txt文件中只有third

4.forth追加到了third的下一行

Thinking 0.6

command文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
cat > test << 'EOF'
echo Shell Start...
echo set a = 1
a=1
echo set b = 2
b=2
echo set c = a+b
c=$[$a+$b]
echo c = $c
echo save c to ./file1
echo $c>file1
echo save b to ./file2
echo $b>file2
echo save a to ./file3
echo $a>file3
echo save file1 file2 file3 to file4
cat file1>file4
cat file2>>file4
cat file3>>file4
echo save file4 to ./result
cat file4>>result
EOF
bash test > result

result文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
Shell Start...
set a = 1
set b = 2
set c = a+b
c = 3
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

思考题:

  1. echo echo Shell Start 会在屏幕上输出echo Shell Start
  2. ehco 'echo Shell Start’会输出Shell Start,因为反引号代表命令替换,会在一个子Shell中优先被执行
  3. echo echo c>file1会将echoc>file1会将echo c转移到file1文件中
  4. echo 'echo c>file1则会将c>file1'则会将 c的值转移到file1中,但是对file1进行echo操作会输出空行,file1的内容被修改为3

二.难点分析

lab0作为OS的起点,课下实验主要和命令行操作有关。难点主要有两个,一是Makefile的构建,二是命令的实现。

作为一个对于shell等命令行0基础的小白,在Makefile的构建部分,会感觉到无从下手,摸不清Makefile写的顺序,难以理解它运行的底层逻辑,但是,后来通过练习发现,其实Makefile主要是以倒序为主,多练还是能大致掌握它的规则,对于命令的实现,主要是很难记得不同指令的格式,像上学期的co一样,需要不断查看指导书,不断使用man指令来学习对于某个指令的使用技巧,还有就是git部分,初学其实感觉很繁琐,因为git尤其是与reset,restore相关的部分,一次操作可能会影响全局,就像下象棋一样,每走一步要想三步,git同样如此,每个操作会带来对后续操作的巨大影响。

三.实验体会

体会与难点对应,对于Makefile的体会,我认为这种功能性的文件,尤其是为便利性服务的(其实也包括bash,shell)都是以练为主,多用自然就能熟悉,就像我的某位大佬室友,将笔记本装成了Linux系统,天天写命令行,这次Lab0不到一个小时就全部写完了,所以这次实验我感觉其实不涉及到什么灵感上的问题,不涉及到智商,主要是看课下作业的完成情况,自己完成课下,那么课上exam部分肯定没问题,对命令行再理解深刻一些,便能完成extra。

还有一个惨痛的教训,指导书上的思考题一定要在第一遍看的时候就思考出答案指导书上说读者课下自行查找的内容一定要去看,因为很可能extra就出这些内容,这一次就是awk指令,我没有自行学习,导致考试时无从下手,翻指导书也看不出来什么。哎!苦也苦也。