lab0 实验报告
思考题
Thinking 0.1
不一样。通过分析可知:
第一次的 README.txt 没有add,其状态没有被git跟踪,为Untracked即“未被跟踪”;
第二次的状态为文件已入库,但工作区文件已被修改,与版本库中的文件不同,显示为Modified。
两者主要的区别在于之前是否有被提交过。
Thinking 0.2
add the file : git add
和 git commit
stage the file : git add
commit : git commit
Thinking 0.3
使用git checkout -- printf.c
将文件从index从恢复至工作区
使用git reset HEAD
将index恢复至最近的一次commit
使用git rm --cached Tucao.txt
将暂存区中的文件删除,同时不影响工作区中的文件
Thinking 0.4
git reset --hard <hash-code>
会将工作区和暂存区都清除并与hash-code
对应的版本库保持一致。- 为什么可以回到未来? 其本质是通过移动HEAD指针来实现的变化,所以实际上“未来”的版本还是存在的,没有被删除,所以还是可以“回到未来”的。
- 为什么
git log
看不到“未来”的提交? 指令git log
会将HEAD及之前的commit信息都输出,当“回到过去”后,HEAD指针前移,自然便看不到“未来”的提交信息了。
Thinking 0.5
-
克隆时只会克隆master分支。 克隆时默认HEAD指向的分支被检出,其它分支需要用git checkout检出分支。
-
正确,在git push之前本地版本库没有与远程本本库更新。
-
正确
-
正确
Thinking 0.6
操作过程如图所示。以上操作涉及重定向,各种重定向操作如图所示:
"<" :修改输入
">" :完全修改一个文件为标准输出
">>":将标准输出追加到文件中
Thinking 0.7
command文件内容:
result文件内容:
对于最后result文件内容的解释:
test文件被作为批文件在处理,等价于在终端中输入相应的命令,由于我在调用test时进行了重定向bash test > result
,使得输出都到了result文件中。
test文件中所有的echo结果以及cat结果都到了文件result中。
两种echo
命令效果的区别:
几条命令之间的区别为单引号的有无。单引号内不允许任何变量、元字符、通配符、转义符的解析,均被原样输出。
由于指导书和mooc网站显示效果不同,mooc网中$前有\(网页不支持markdown造成的问题??),此处对三种情况进行讨论。
- 对于
echo echo Shell Start
与echo 'echo Shell Start'
,由于命令并不涉及变量、元字符、通配符、转义符,所以两条命令没有区别。 - 对于
echo echo \$c>file1
与echo 'echo \$c>file1'
,前者虽然存在变量$c
但是由于其前面存在\
,$视为普通字符,失去对变量的控制,所以也没有区别。 - 对于
echo echo $c>file1
与echo 'echo \$c>file1'
,前者存在变量$c
,echo命令会尝试对其进行解析,此时两条命令效果不同。
实验难点
体会和感想
实际在实验上花费的时间:约一小时做完exam和extra。
难度评价:因为各个任务已经将实验分割成了很多的小任务,本次实验的Exam和Extra总体来看并不难。因为是第一次上机,做题做的非常谨慎,做一步就验证一步,耗费了很多时间。如果是同样的题目作为作业,可能30多分钟就解决了。
体会和感想:Linux真不愧是让人拥有对计算机极大控制权的系统。图形界面在方便了平常生活中对计算机的使用的同时也限制了个人对计算机的控制能力。 通过lab0的学习和上机,我知道了grep
、sed
、|
等结合起来可以实现非常复杂的功能,计算机的底层系统非常强大且有趣。
反馈
建议让os的mooc网站支持markdown格式(也许是支持的,但是显示效果不好?),在看网站教程时因为常规文件对代码的显示效果不佳,看的不是很舒服,另外还存在着如'
显示成’
的情况。
残留难点
主要不理解的地方还是在git的使用上,对于git各种版本、分支相关的操作不是很熟悉。特别是涉及到远程仓库时,工作区与版本库比较时的具体情况。
git push,git pull时各分支的情况。