BUAA-OS-2023-Lab0-Report
BUAA-OS-2023-Lab0-Report
写这一篇的时候还没准备要开博客,所以也就没想就直接截图了
算了盒了就盒了吧
Thinking 0.1
git
中的status
信息提示- 工作区、暂存区与文件树
首先使用git checkout -b learnGit
,在本地创建并检出一个新的分支 然后再根据Thinking
中给出的要求对README.txt
文件进行一系列操作,并在操作后进行提交
然后观察目录中的Untracked.txt
、Stage.txt
,其区别在于把README.txt
移动到了暂存区,git显示的说明不同
提交后再次修改文件,最终的Modified.txt
内容如下:
-
add
前,README.txt
文件不处于仓库跟踪范围内,在“未跟踪的文件:”分类中;add
后被git追踪到修改记录,提示有修改、暂未提交
Thinking 0.2
- 常见
git
指令:add
、commit
-
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
进行其他版本的文件拉取
- 当本地文件被删除,但还没有提交时,可以使用
git checkout print.c
指令,把暂存区中的print.c
文件拉到工作区 - 执行
git rm print.c
后,不仅删除了工作区的文件,还把这次删除add
到了暂存区,此时工作区和暂存区都不存在需要的文件了,可以使用git restore --staged print.c
再把print.c
的修改拉回工作区 (如果commit
了还可以使用git checkout HEAD^ <filename>
从上一个提交版本处把删除前的文件拉回本地) - 执行
git rm --cached <filename>
指令,可以只删去暂存区的文件内容,而不对本地的文件进行删除(与不加--cached
对比)。可以使用这条指令,把文件从跟踪目录里移出
进行实验时的部分操作
Thinking 0.4
- 使用
git reset --hard
进行git版本回退
- 可以回退
HEAD^^^^
或HEAD~4
,也可以根据已知的hash
值进行任意的跳转--hard
会强制把工作目录中未提交的文件数据删除,并不做保留,使用前注意暂存区、工作区内容git log
信息与git reset
- 先进行三次文件修改与
commit
操作:
- 记录下的
git log
如下:提交3的hash值为8974e1e6e98f726886103a13cba43fcd4fa08acf
- 版本回退后查看log发现最近一次提交记录消失了:
- 使用
git reset --hard <hashcode>
(hashcode填入提交“1”时的)回到了版本”1”;再把hashcode换成版本”3”的值,会切换回版本”3”
Thinking 0.5
- 重定向与管道
- 操作指令执行后显示如下:
-
echo
指令向标准输出中输出后续内容,使用>
可把输出定向到符号后的文件(重写);使用>>
符号可把输出追加到目标文件中
Thinking 0.6
- 重定向与文件
echo
指令与输出转义
-
command
文件使用了echo
指令将每一行指令都输出到标准输出,再使用>>
把输出重定向到test
文件中,文件内容如下:
使用
echo
指令输出时需要注意转义字符的使用,如$
、>
等字符都需要转义,否则会起到错误的效果 转义字符是\
,不是$
(后者是取值的意思)
-
test
执行后的result
文件内容如下:
- 结果说明:
-
test
文件中的所有没有重定向输出的echo
语句都是提示性信息,并输出至控制台界面 - 文件创建了三个变量,并分别对其进行赋值(其中变量
c
的值来自ab
两变量的值之和) - 三个变量的值在有重定向的
echo
命令下被输出到对应的文件(file1
、file2
、file3
)中,最终结果被连接并借助file4
存入result
中
-
echo echo Shell Start
与echo `echo Shell Start`
效果是否有区别- 没有区别,效果都是向控制台输出
echo Shell Start
- 没有区别,效果都是向控制台输出
echo echo $c>file1
与echo`echo $c>file1`
效果是否有区别- 有区别,前者向
file1
中写入了echo \$c
信息;后者在控制台中输出了echo \$c>file1
- 有区别,前者向
难点分析
- 在
git
上,如果只按照最简单的操作去做的话目前还能正常使用,但如果出现版本选择、文件回退等操作就会因为许多指令不易区分而犯难,之后需要把各指令意义进行划分,匹配在图中便于记忆 -
awk
指令的使用,正则表达式该如何在awk
中使用也是指令实现的一大难点
心得体会
在lab0的课下实验中,我不仅复习了在pre
阶段学到的知识:如git、makefile、文本处理、重定向,还对它们的具体实现有了更深的了解。在刚开始的学习过程中,CLI
的使用、Linux基础命令、命令行参数的选取都是学习路上的困难,也是后面lab的基础。这些点需要勤练常用才能更好地运用在之后的实验中,便利之后的实验。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sin!