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)。
熟稔于心是灵活运用的前提。从某种程度上说,指令就是一个个穴位,只有打通任督二脉,才能练就绝世武功。