Lab0实验报告

Lab0实验报告

思考题

Q1

Untracked.txt

1
2
3
4
5
6
7
8
9
10
位于分支 master

尚无提交

未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
README.txt
Untracked.txt

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

Stage.txt,我只addREADME.txt 这一个文件。

1
2
3
4
5
6
7
8
9
10
11
12
位于分支 master

尚无提交

要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: README.txt

未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
Stage.txt
Untracked.txt

Modified.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改: README.txt

未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
Modified.txt
Stage.txt
Untracked.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

不一样。

在刚开始创建这个文件时,并没有add到工作区,因此git对这个文件是未跟踪状态,并提示使用git add建立跟踪。

add commit一次后,因为git对文件已经跟踪,因此得到了修改状态。但是因为文件并未提交因此显示“尚未加入提交”。


Q2

add the file 对应命令为 git add

stage the file 对应的命令为 git add

commit 命令队应为 git commit


Q3

  1. git checkout -- printf.c

  2. git reset HEAD printf.c

    git checkout -- printf.c

  3. git rm --cached hello.txt


Q4

提交三次后的哈希值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
commit f3be5781f85bd88784d95abd40c47f0b6ccb3d19 (HEAD -> master)
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:57:31 2023 +0800
3

commit 78e9c55534e8188525c842a59ceae3e744a40244
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:56:53 2023 +0800
2

commit 97b5856f4460429e557000f2b71a1a1d4df5da9d
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:56:37 2023 +0800
1

执行git reset --hard HEAD^后,切换到测试2:

1
2
3
4
5
6
7
8
9
commit 78e9c55534e8188525c842a59ceae3e744a40244
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:56:53 2023 +0800
2

commit 97b5856f4460429e557000f2b71a1a1d4df5da9d
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:56:37 2023 +0800
1

执行 git reset --hard 97b5856f4460429e557000f2b71a1a1d4df5da9d后,切换到测试1:

1
2
3
4
commit 97b5856f4460429e557000f2b71a1a1d4df5da9d
Author: name <21371240@buaa.edu.cn>
Date: Mon May 8 23:56:37 2023 +0800
1

执行 git reset --hard f3be5781f85bd88784d95abd40c47f0b6ccb3d19后,切换到测试3,输出与提交三次后相同。


Q5

  1. 正确。“Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。”
  2. 正确。因为全部拉取下来了,因此不需要访问远程仓库。
  3. 错误。均被克隆了。
  4. 正确。

Q6

运行结果为:

能够证明>是重定向输出,对覆盖原始内容;而>>是换行追加输出,即forththird的下一行。


Q7

command文件代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 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 file4 to ./result >> test
echo 'cat file4>>result' >> test

得到的输出为:

再次运行test,得到的控制台输出与result文件内容为:

在实现过程中,如果echo xxx不加引号的话,那么echo后面的参数依旧有效,即本身有特殊的意义。

直接执行echo echo Shell Startecho 'echo Shell Start'效果没有区别,但echo echo \$c>file1 是把echo $c的内容写入file1,echo 'echo \$c>file1'是把echo $c>file1输出到屏幕。

加了引号后,echo后面的内容统一变成字符串,任何内容都可输出。此时运用> >>输出到文件即可。



难点分析

Ex0.1.3:

通过指令 bash hello_os.sh AAA BBB.c,在 hello_os.sh 所处的文件夹新建一个名 为 BBB.c 的文件,其内容为 AAA 文件的第 8、32、128、512、1024 行的内容提取。

核心代码为:

1
2
sed 	-n 			-e '8p;32p;128p;512p;1024p'    $1 		 > 		 $2
命令 仅显示处理后结果 指定 对应处理行数 被处理文件 重定向 目标文件

考量sed的综合用法。


Ex0.3

核心代码为:

1
grep -n $2 $1 | awk -F: '{print $1}' > $3

在这里运用了管道方法,将第一个指令的输出作为第二个的输入进行处理。

前一条指令grep用来查找,-n将查找的内容行号也输出,从第一个参数文件中查找第二个参数。

第二个指令输入的格式每一行为number: xxxxx,能注意到,行号与内容通过冒号隔开,因此只需提取冒号分割的第一个参数即可达到要求。

awk用来将刚刚得到的文本数据进行处理,-F来制定分隔符,在这里即是:,后期的指令就是将分割的第一个部分打印出来,对应着'{print $1}',最后重定向到目标文件即可。


Ex04

  1. 本任务的难点一我认为在于通过子目录调用make命令。

    我的解决方法为:

    1
    make -C ./code

    在这里-C起到的作用就是切换make的文件夹,实现我们的make目标。在起初我的实验中,如果不加-C,即使格式为make ../code即在后面给号目标路径,最后并不会成功,无法成功make

  2. 本任务难点二在于.c文件的编译链接。

    1
    gcc -o main.o -c main.c -I ../include/

    在编译过程中,除去将.c编译为.o,要注意此时头文件信息再上一级目录。因此为了能够成功编译,要使用-I来调取所需的include

    若想要得到可执行文件,需要将两个文件链接起来。这里我直接一起编译来解决这个问题。

    1
    gcc -o main.o -c main.c -I ../include/

    此处更好的选择是在上一层目录来进行编译链接。



体会与感想

本次实验对一些Linux指令进行了一些学习,能够进行简单的操作。但在进行复杂的操作时,我依旧需要查找资料,对参数进行进一步学习理解才能使用。

对重定向有一定学习,此处内容十分常用且操作相对简单。

gcc中,我学到了部分参数:跨文件编译、仅编译、链接、指定输出文件名称等等。

初步学会了Makefile的编写,体会到其便利程度。同时尝试运用bash批量处理文件,让我感受到其快捷预方便。

总体来说Lab0是对基础工具的运用,整个任务都能在指导书以及网络搜索渠道来完成。我认为最大的困难不是实现,而是要知道用什么指令才能实现

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
Runtime Display
  • Copyrights © 2023-2024 Lucas
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信