BUAA OS——Lab0实验报告
Lab0实验报告
一、思考题部分
思考0.1
关于GUI Shell的优势的地方是:拥有好看的用户界面,并且很大程度上方便用户进行简易的操作,具有很好的用户体验。相对劣势的地方:对于程序员或者系统开发人员,对深入理解计算机系统原理没有很大的帮助。
关于CLI Shell的优势的地方是:对于系统设计需求简介,简化系统开发,并且让开发人员能够通过命令行语句方便其理解操作系统的工作原理。相对劣势的地方:不能够满足普通大众对计算机功能的需求。
思考0.2
command文件内容
echo 'echo Shell Start...' > test
echo 'echo set a = 1' >> test
echo 'a=1' >> test
echo 'echo set b = 2' >> test
echo 'b=2' >> test
echo 'echo set c = a+b' >> test
echo 'c=$[$a+$b]' >> test
echo 'echo c = $c' >> test
echo 'echo save c to ./file1' >> test
echo 'echo $c>file1' >> test
echo 'echo save b to ./file2' >> test
echo 'echo $b>file2' >> test
echo 'echo save a to ./file3' >> test
echo 'echo $a>file3' >> test
echo 'echo save file1 file2 file3 to file4' >> test
echo 'cat file1>file4' >> test
echo 'cat file2>>file4' >> test
echo 'cat file3>>file4' >> test
echo 'echo save file4 to ./result' >> test
echo 'cat file4>>result' >> test
result文件内容如下:
3
2
1
通过批处理test文件中的echo命令可以在shell中输出后续参数,a=1等语句不输出但结果保留至本shell,echo c = $c语句将输出$c在本shell中的值。echo Shell Start在shell中输出Shell Start,而echo 'Shell Start'同样输出Shell Start。echo \$c>file1会将$c重定向至file1文件,而echo '\$c>file1'在shell中输出\$c>file1
思考0.3
add the file对应的是git add filename指令。stage the file对应的也是git add filename指令,其中filename文件已被add过且在commit之前发生修改。commit对应的就是git commit -m "file description"指令。
思考0.4
1.使用git checkout -- printf.c可以将删除的文件从版本库中恢复。2.在小红使用git rm printf.c后,使用git reset HEAD printf.c可以将暂存区中的操作恢复。3.使用git rm --cached Tucao.txt可以将暂存区的Tucao删除而不会影响工作区。
思考0.5
1.正确。克隆时会克隆整个仓库的所有分支,但只有HEAD指向的分支被检出checkout
2.正确。git log等操作均为对本地仓库访问,而本地仓库已经从远程仓库中拉取,git log等信息是继承自远程仓库。
3.错误。所有分支均被克隆,但只有HEAD所指分支被检出,需要其他分支内容需调用git branch -r查看远程分支列表,再通过git checkout <branch>检出所需分支。
4.正确。由git bash状态可知。
二、实验难点图示
本次实验总体来说比较简单,但需要掌握并熟悉较多的命令操作。主要为熟悉Linux的bash基本命令,还有使用vim编辑文本,gcc命令行,编写Shell脚本、make文件。对于笔者来说,本次实验的主要难度在于编写Shell脚本和make文件,主要原因是第一次接触。遇到的困难就是make文件的复合调用,即实验八。
笔者最开始认为,只考虑本次实验的需求,可以不需要在code文件夹中运行make指令,可以直接在csc文件夹目录下中的Makefile文件中编写如下:
all:
gcc -c ./code/fibo.c
gcc -c ./code/main.c
gcc ./code/fibo.o ./code/main.o -o fibo
.PHONY:clean
clean:
rm ./code/*.o
尝试过后,发现运行报错未发现fibo.h文件,仔细查看fibo.c main.c文件查看发现引用了非标准库的头文件,而在Windows环境下执行IDE并不会报此错误,笔者百度后发现原来确实gcc命令行参数-I。这是本次笔者遇到的小问题。
但实验所想实现的应该是通过外层make调用内层make完成操作。于是笔者自行百度了解更加详细的makefile文件的编写,包括依赖关系以及调用make或make clean指令是如何触发的,并且咨询了好友大佬知道了可以通过cd <path> && make来调用特定目录的makefile。于是笔者更新了写法如下:
#外层makefile
path=./code
all:
cd $(path) && make
gcc $(path)/fibo.o $(path)/main.o -o fibo
.PHONY:clean
clean:
cd $(path) && make clean
#内层makefile
all:
gcc -I ../include -c fibo.c
gcc -I ../include -c main.c
.PHONY:clean
clean:
rm *.o
同时值得注意的是,Shell脚本以及Makefile文件中的赋值语句中,参数与=之间不应有空格,若有空格系统会判定空格为分隔符,从而语句非法,平时习惯编写C、java、Python之类的高级编程语言时,运算符与参数之间添加空格的同学需要注意,不要像笔者一样踩坑还不知道哪里出问题。
三、体会与感想
本次实验实战时间为4小时左右,但直至目前依旧在学习更多Linux命令行的具体操作以及参数作用,包括sed、grep、awk等本次实验所用到的命令的更多用法。主要困难还是因为未提前接触Linux系统,命令行使用的不熟练,界面不适应等原因导致学习过程中充满难度。
但总的来说此次实验是一个熟悉环境的过程,难度并不高,只是需要多花时间,在后面的实验才能更加的游刃有余。

浙公网安备 33010602011771号