BUAA-OS-2023-Lab0-Report

写这一篇的时候还没准备要开博客,所以也就没想就直接截图了

算了盒了就盒了吧

Thinking 0.1

  • git中的status信息提示
  • 工作区、暂存区与文件树

首先使用git checkout -b learnGit,在本地创建并检出一个新的分支 然后再根据Thinking中给出的要求对README.txt文件进行一系列操作,并在操作后进行提交

image-20230305153053676

然后观察目录中的Untracked.txtStage.txt,其区别在于把README.txt移动到了暂存区,git显示的说明不同

image-20230305152953421

提交后再次修改文件,最终的Modified.txt内容如下:

image-20230305153714706

  • add前,README.txt文件不处于仓库跟踪范围内,在“未跟踪的文件:”分类中;add后被git追踪到修改记录,提示有修改、暂未提交

 

Thinking 0.2

  • 常见git指令:addcommit
  • add the file:使git开始追踪某个文件,即git add filename指令
  • stage the file:把修改过的文件加入暂存区,即git add filename指令
  • commit:提交本次暂存区里保存的内容,回到初始状态,即git commit指令

 

Thinking 0.3

  • 使用git rm进行工作区文件删除
  • git checkout使得暂存区文件回退至工作区
  • 使用git checkout <版本> filename进行其他版本的文件拉取
  1. 当本地文件被删除,但还没有提交时,可以使用git checkout print.c指令,把暂存区中的print.c文件拉到工作区
  2. 执行git rm print.c后,不仅删除了工作区的文件,还把这次删除add到了暂存区,此时工作区和暂存区都不存在需要的文件了,可以使用git restore --staged print.c再把print.c的修改拉回工作区 (如果commit了还可以使用git checkout HEAD^ <filename>从上一个提交版本处把删除前的文件拉回本地)
  3. 执行git rm --cached <filename>指令,可以只删去暂存区的文件内容,而不对本地的文件进行删除(与不加--cached对比)。可以使用这条指令,把文件从跟踪目录里移出

image-20230305160023353

进行实验时的部分操作

 

Thinking 0.4

  • 使用git reset --hard进行git版本回退
    • 可以回退HEAD^^^^HEAD~4,也可以根据已知的hash值进行任意的跳转
    • --hard会强制把工作目录中未提交的文件数据删除,并不做保留,使用前注意暂存区、工作区内容
  • git log信息与git reset
  1. 先进行三次文件修改与commit操作:

image-20230305160255454

  1. 记录下的git log如下:提交3的hash值为8974e1e6e98f726886103a13cba43fcd4fa08acf

image-20230305160406404

  1. 版本回退后查看log发现最近一次提交记录消失了:

image-20230305160621703

  1. 使用git reset --hard <hashcode>(hashcode填入提交“1”时的)回到了版本”1”;再把hashcode换成版本”3”的值,会切换回版本”3”

image-20230305160955957

 

Thinking 0.5

  • 重定向与管道
  1. 操作指令执行后显示如下:

image-20230305161546400

  1. echo指令向标准输出中输出后续内容,使用>可把输出定向到符号后的文件(重写);使用>>符号可把输出追加到目标文件中

 

Thinking 0.6

  • 重定向与文件
  • echo指令与输出转义
  1. command文件使用了echo指令将每一行指令都输出到标准输出,再使用>>把输出重定向到test文件中,文件内容如下:

image-20230305163906756

使用echo指令输出时需要注意转义字符的使用,如$>等字符都需要转义,否则会起到错误的效果 转义字符是\,不是$(后者是取值的意思)

  1. test执行后的result文件内容如下:

image-20230305163845452

  1. 结果说明:
    1. test文件中的所有没有重定向输出的echo语句都是提示性信息,并输出至控制台界面
    2. 文件创建了三个变量,并分别对其进行赋值(其中变量c的值来自ab两变量的值之和)
    3. 三个变量的值在有重定向的echo命令下被输出到对应的文件(file1file2file3)中,最终结果被连接并借助file4存入result
  2. echo echo Shell Startecho `echo Shell Start` 效果是否有区别
    1. 没有区别,效果都是向控制台输出echo Shell Start
  3. echo echo $c>file1echo`echo $c>file1` 效果是否有区别
    1. 有区别,前者向file1中写入了echo \$c信息;后者在控制台中输出了echo \$c>file1

 

难点分析

  • git上,如果只按照最简单的操作去做的话目前还能正常使用,但如果出现版本选择、文件回退等操作就会因为许多指令不易区分而犯难,之后需要把各指令意义进行划分,匹配在图中便于记忆
  • awk指令的使用,正则表达式该如何在awk中使用也是指令实现的一大难点

心得体会

在lab0的课下实验中,我不仅复习了在pre阶段学到的知识:如git、makefile、文本处理、重定向,还对它们的具体实现有了更深的了解。在刚开始的学习过程中,CLI的使用、Linux基础命令、命令行参数的选取都是学习路上的困难,也是后面lab的基础。这些点需要勤练常用才能更好地运用在之后的实验中,便利之后的实验。