OS-Lab0

Lab0 实验报告
思考题
Thinking 0.1
执行命令 cat Modified.txt,观察其结果和第一次执行 add 命令之前的 status 是否一样,并思考原因。


不一样。
第一次执行 add 命令之前,README.txt 属于未跟踪的文件。
修改 README.txt 之后,README.txt 属于已跟踪,但修改未加入到暂存区中的文件。
Thinking 0.2
仔细看看0.10,思考一下箭头中的 add the file 、 stage the file 和 commit 分别对应的是 Git 里的哪些命令呢?
add the file: git add
stage the file: git add
commit : git commit
Thinking 0.3
1. > 代码文件 print.c 被错误删除时,应当使用什么命令将其恢复?
1 | git checkout -- print.c |
2. > 代码文件 print.c 被错误删除后,执行了 git rm print.c 命令,此时应当使用什么命令将其恢复?
1 | git reset HEAD print.c |
3. > 无关文件 hello.txt 已经被添加到暂存区时,如何在不删除此文件的前提下将其移出暂存区?
1 | git rm --cached hello.txt |
Thinking 0.6
使用你知道的方法(包括重定向)创建下图内容的文件(文件命名为 test),将创建该文件的命令序列保存在 command 文件中,并将 test 文件作为批处理文件运行,将运行结果输出至 result 文件中。给出 command 文件和 result 文件的内容,并对最后的结果进行解释说明(可以从 test 文件的内容入手) . 具体实现的过程中思考下列问题: echo echo Shell Start 与 echo
echo Shell Start效果是否有区别; echo echo $c>file1与 echoecho $c>file1效果是否有区别.
command 文件内容:
1 | { |
把 command 作为批处理文件运行得到 test:
1 | bash command > test |
test 文件内容:
1 | echo Shell Start... |
把 test 作为批处理文件运行得到 result:
1 | Shell Start... |
echo echo Shell Start 与 echo
echo Shell Start效果是否有区别
在实际效果上,二者并无区别,都是输出Shell Start到标准输入。
但前者是直接通过echo命令输出,后者是先执行` `内的命令echo Shell Start,并将标准输出的结果Shell Start作为参数传给` `外的命令echo。
echo echo $c>file1 与 echo
echo $c>file1效果是否有区别
有区别:
前者是将echo与变量c的值拼接起来,输出到文件file1当中;
后者是先执行echo $c>file1命令,即将变量c的值输出到文件file1中,同时将标准输出的结果作为参数传给` `外的命令echo,而标准输出的结果实际上为空,` `外的命令echo将没有任何效果。
难点分析
Exercise 0.1
0.1.1
对于回文数判断,最直接的思路应该是得到整数对应的高位和低位,依次进行比较,但这样未免繁琐,需要考虑整数的位数。这种思路只关注了回文数形式上的特征。
而另一种简洁的思路是不关注单独的每一位,而是尝试把整数倒转过来,通过对判断前后是否相等直接得到结果。这种思路无疑是把握了回文数的本质。
1 | while(n){ |
0.1.3
通过 shell 脚本实现对文本的处理,能够按行选择性读取文本的 sed 指令显然是个很好的选择,把输出重定向即可按照要求创建文件(注意覆盖写即可)
1 | sed -n '8p; 32p; 128p; 512p; 1024p' "$1" > "$2" |
Exercise 0.2
0.2.1
注意取变量的值时需要加上 $ 符号,对变量赋值时可采用 let(不用加 $ ) 或 (())(需要加 $ 取值),但都要注意 = 两边不能有空格。
Exercise 0.3
0.3.1
使用 grep 命令来在文件中匹配字符串,通过 -n选项使输出的行带上行号(行号与行之间以 : 分隔)。
通过管道 | 将输出的结果作为参数传给 awk 指令。
使用 -F: 选项将传入的字符串按照 : 分隔,同时使用 {print $1} 方法打印分割后的第一个字符串(即行号)。
通过输出重定向将结果输出到文件中。
Exercise 0.4
0.4.1
使用 sed 指令时,注意加上 -i 选项使得可以直接修改文件。使用正则表达式进行替换时,注意加上 /g 使得可以匹配全部的项(否则只是每行第一个)
0.4.2
使用 gcc 编译时,应注意到 fibo.c 和 main.c 引用的头文件并不在标准库中,应使用 -I 选项指定头文件目录。同时注意到 main.c 作为程序的入口调用了 fibo.c 中的函数,应把二者放在一起编译链接。
实验体会
熟能生巧!熟能生巧!熟能生巧!
lab0实验作为 OS 实验的铺垫环节,旨在帮助我们掌握深入理解基本概念,灵活运用各种工具,其本身并无多大难度。
面对繁杂的指令,可能会认为有参考就不需要太多的记忆。但事实上对各种指令的记忆正是灵活运用的一部分。
在需要时去查看指导书固然不错,但这种情况下我们往往只会机械地照搬示例指令,而不能以更好地方式去运用指令,同时会消耗大量时间在不必要的事情上(记忆错误debug、提笔忘字查refer)。
熟稔于心是灵活运用的前提。从某种程度上说,指令就是一个个穴位,只有打通任督二脉,才能练就绝世武功。