OS-lab0

OWPETER Lv3

思考题

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
touch README.txt
git init
git status > Untracked.txt

# 生成Untracked.txt,记录当前git status 的输出内容

# 向README.txt中添加内容

git add README.txt
git status > Stage.txt
cat Untracked.txt

# 位于分支 master

# 尚无提交

# 未跟踪的文件:
# (使用 "git add <文件>..." 以包含要提交的内容)
# README.txt
# UNTRACKED.txt

cat Stage.txt

# 位于分支 master

# 尚无提交

# 要提交的变更:
# (使用 "git rm --cached <文件>..." 以取消暂存)
# 新文件: README.txt

# 未跟踪的文件:
# (使用 "git add <文件>..." 以包含要提交的内容)
# Stage.txt
# UNTRACKED.txt

git commit -m "23373193"

# 修改 README.txt
git status > Modified.txt

# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <文件>..." 更新要提交的内容)
# (使用 "git restore <文件>..." 丢弃工作区的改动)
# 修改: README.txt

# 未跟踪的文件:
# (使用 "git add <文件>..." 以包含要提交的内容)
# Modified.txt
# Stage.txt
# Untracked.txt

Answer: 不一样。add命令之前,README.txt的状态为Untracked,经过暂存、提交操作后,文件被加入版本库,修改操作之后,文件的状态变为Modified

Thinking 0.2

Add the file对应git add

Stage the file对应git add

Commit对应git commit

Thinking 0.3

  1. 如果print.c在删除前被添加到暂存区,可以由git checkout -- print.c命令,将暂存区的文件恢复到工作区。

    如果删除print.c后执行了git add命令,可以使用git reset HEAD print.c命令,撤销暂存区的修改。

  2. 这种情况与第一题的第二种情况类似,使用git reset HEAD print.c命令,撤销暂存区的修改

  3. git rm --cached hello.txt

Thinking 0.4

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
sed -i '$a Testing 1'
git add README.txt
git commit -m "1"

sed -i '$a Testing 2'
git add README.txt
git commit -m "2"

sed -i '$a Testing 3'
git add README.txt
git commit -m "3"

git log

# commit 3ce0b84e86f6389bcb54df89db172f9d56c542d1 (HEAD -> master)
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:42:16 2025 +0800

# 3

# commit bbe88b1947481b86176f5bd50f2ef9b136257260
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:41:33 2025 +0800

# 2

# commit 09b75a9ad911d93cbdc587acf18fcf7884ea2313
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:40:58 2025 +0800

# 1

# commit 6ca9d963c54785d85d185b11d71f58c9f6475a20
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:05:38 2025 +0800

git reset --hard HEAD^

# commit bbe88b1947481b86176f5bd50f2ef9b136257260 (HEAD -> master)
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:41:33 2025 +0800

# 2

# commit 09b75a9ad911d93cbdc587acf18fcf7884ea2313
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:40:58 2025 +0800

# 1

# commit 6ca9d963c54785d85d185b11d71f58c9f6475a20
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:05:38 2025 +0800

git reset --hard 6ca9d963c54785d85d185b11d71f58c9f6475a20

# commit 09b75a9ad911d93cbdc587acf18fcf7884ea2313 (HEAD -> master)
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:40:58 2025 +0800

# 1

# commit 6ca9d963c54785d85d185b11d71f58c9f6475a20
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:05:38 2025 +0800

git reset --hard 3ce0b84e86f6389bcb54df89db172f9d56c542d1

# commit 3ce0b84e86f6389bcb54df89db172f9d56c542d1 (HEAD -> master)
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:42:16 2025 +0800

# 3

# commit bbe88b1947481b86176f5bd50f2ef9b136257260
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:41:33 2025 +0800

# 2

# commit 09b75a9ad911d93cbdc587acf18fcf7884ea2313
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:40:58 2025 +0800

# 1

# commit 6ca9d963c54785d85d185b11d71f58c9f6475a20
# Author: 王天一 <23373193@buaa.edu.cn>
# Date: Mon Mar 10 16:05:38 2025 +0800

可以看到,git reset --hard HEAD^让我们能够回退到上个版本,而使用哈希值可以让我们去到任意被提交的版本。但是需要注意的是,--hard命令会让Git销毁未被提交的文件,并且无法恢复。

Thinking 0.5

1
2
3
4
5
6
7
8
9
10
11
git@23373193:~/learnGit (master)$ echo first
first
git@23373193:~/learnGit (master)$ cd ..
git@23373193:~ $ echo first
first
git@23373193:~ $ echo second > output
git@23373193:~ $ echo third > output
git@23373193:~ $ echo fourth >> output
git@23373193:~ $ cat output
third
fourth

由此可以看到,>符号会将标准输出内容重定向到文件中,且覆盖文件内容。>>符号将标准输出内容追加到文件末尾。

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
#!/bin/bash

echo echo Shell Start...
echo echo set a = 1
echo a=1
echo echo set b = 2
echo b=2
echo echo set c =a+b
echo 'c=$[$a+$b]'
echo echo save c to ./filel
echo echo '$c>file1'
echo echo save b to ./file2
echo echo '$b>file2'
echo echo save a to ./fille
echo echo '$a>file3'
echo echo save filel file2 files to file
echo cat 'file1>file4'
echo cat 'file2>>file4'
echo cat 'file3>>file4'
echo echo save file to ./result
echo cat 'file4>>result'

随后执行:

1
2
3
4
chmod +x command
./command > test
chmod +x test
./test > result

result文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
Shell Start...
set a = 1
set b = 2
set c =a+b
save c to ./filel
save b to ./file2
save a to ./fille
save filel file2 files to file
save file to ./result
3
2
1

思考:echo ...会直接输出...的内容,而echo '...'会先执行引号内的指令,然后输出指令执行的结果。

实验难点

个人认为Makefile文件的使用与编写以及gcc工具的使用有一定的难度。这两样东西对我来说是完全陌生的,以前从来没有使用过,需要进行一定程度的理解与记忆。

实验体会

本次实验提升了我对于Linux环境的熟悉程度,掌握了更多诸如vimsed等linux工具的使用技巧,为之后的OS实验打下基础。

  • Title: OS-lab0
  • Author: OWPETER
  • Created at : 2025-03-05 15:37:09
  • Updated at : 2025-04-12 14:53:04
  • Link: https://owpeter.github.io/2025/03/05/OS-lab0/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments