BUAA OS Lab0

思考题

Thinking 0.1

  1. Untracked.txt中保存了git status的输出,其中包含了master分支中未跟踪的文件,不止包含了创建的REANDME.txt,也有重定向目标Untracked.txt

  2. 修改了README文件后使用git add ./README.txt添加入暂存区供下次提交使用。执行git status 命令后Stage.txt中包含未跟踪的Stage.txt和Untracked.txt以及要提交的变更中新文件README.txt

  3. git commit -m "20375061"后显示如下,master分支的新commit中包含新加入的README.txt文件

    1
    2
    3
    4
    
    git@20375061:~/learnGit (master)$ git commit -m "20375061"
    [master e427c66] 20375061
     1 file changed, 1 insertion(+)
     create mode 100644 README.txt
    
  4. 在执行git add ./README.txt后,README.txt文件从未跟踪的文件变为了要提交的变更

  5. 修改README.txt后,git status中显示其属于尚未暂存已被提交的变更。与add前未跟踪的文件不同,因为现在的README.txt是modified状态的文件,而之前是Untracked状态的。这对于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来恢复
  2. 执行git rm print.c后,暂存区中没有print.c,只能通过版本库中恢复。可以使用git checkout HEAD -- print.c恢复工作区和暂存区中的文件。
  3. 使用git rm hello.txt

Thinking 0.4

提交三次后,git log输出如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
commit 5daa5b747a3e246c7e538b99635ae23d827378da (HEAD -> master)
Author: 鹿煜恒 <20375061@buaa.edu.cn>
Date:   Mon Mar 6 14:44:51 2023 +0800

    3

commit 96e1021ec3db6a3ff309921bd0bf3e981c095633
Author: 鹿煜恒 <20375061@buaa.edu.cn>
Date:   Mon Mar 6 14:44:37 2023 +0800

    2

commit 998f2b9e19282453de7361d9989c820f012b36b8
Author: 鹿煜恒 <20375061@buaa.edu.cn>
Date:   Mon Mar 6 14:44:18 2023 +0800

    1

第三次提交的hash值为5daa5b747a3e246c7e538b99635ae23d827378da

执行git reset --hard HEAD^后,回退到上一次提交,gitlog中只有第1,2次commit

找到提交说明为1的hash后,git reset --hard <hash>将版本回退到版本库中对应hash值的提交,既只有第1次commit

使用第三次提交的hash执行上述命令,git log中有1,2,3次提交,回到最新版。

Thinking 0.5

操作输出如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
git@20375061:~ $ echo first
first
git@20375061:~ $ echo second > output.txt
git@20375061:~ $ cat output.txt 
second
git@20375061:~ $ echo third > output.txt
git@20375061:~ $ cat output.txt 
third
git@20375061:~ $ echo forth >> output.txt
git@20375061:~ $ cat output.txt 
third
forth

可以发现,echo可以直接输出其后的信息。>会用重定向后覆写文件,>>会在文件最后添加回车并续写文件。

Thinking 0.6

command bash脚本如下

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

使用bash test > result后得到result文件内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  1 Shell Start ...
  2 set a = 1
  3 set b = 2
  4 set c = a+b
  5 c = 3
  6 save c to ./file1
  7 save b to ./file2
  8 save a to ./file3
  9 save file1 file2 file3 to file4
 10 save file4 to ./result
 11 3
 12 2
 13 1

command文件中echo命令会在stdout中输出之后的各项文本,而这本身是一条bash语句,其中如果遇到>,>>,$等会执行其中内容。如果使用单引号包裹可以按照其中的原始纯文本输入echo,如果用双引号则会正常解析变量。因此command中遇到$时用单引号包裹。

test 中设置输出"Shell Start ..."”set a = 1“后设置a=1,b=2,bash得到a和b的值后设置c=a+b,故echo语句得到c的值后输出"c = 3"。其后分别输出三个字符串并将c,b,a保存到file1,file2,file3,并将file1覆写到file4,file2、file3续写到file4末尾并输出一个字符串。截至此时,result中包含了重定向test输出的内容,最后通过cat file4>>result将file4内容添加到result末尾,最后得到如上内容。

echo echo Shell Start 与 echo `echo Shell Start` 有区别,`中的内容会被执行,故前者输出echo Shell Start,后者输出Shell Start。同理,echo echo $c>file1 会把echo 变量c的值输出到file1且无输出,而echo `echo $c>file1`会执行echo $c>file1,将变量c的值输出到file1且输出一个回车。

难点分析

一方面,难点在于bash命令的理解,特别是设计单引号,双引号,$符号等结合的时候。只需要注意$用来取值,取值运算需要套$[]就可以大概使用。

另一方面,难点在于对于各种命令的使用,这里需要结合菜鸟教程和man命令并配合联系来一步步熟练。

最后,git的概念理解也比较困难,特别是对于存储库和暂存区的区别的理解需要特别注意。

实验体会

经过本次实验,我感受到linux操作的迷雾被初步拉开。结合课程组的大量练习,我已经能够编写一些基本的脚本完成所需的操作了。但是,我同样感受到课程组指导书中内容的不完全,其中很多命令十分有用,需要进一步的学习才能够进一步掌握,这需要我们在linux系统中进一步联系。

Licensed under CC BY-NC-SA 4.0
京ICP备2021032224号-1
Built with Hugo
主题 StackJimmy 设计
vi ./themes/hugo-theme-learn/layouts/partials/footer.html