BUAAOS-Lab0实验报告

LAB0——初始操作系统

  • 一、Note & Exercise & Thinking
    • Exercise 0.1 echo & bash & ls
    • Thinking 0.1 Shell简析
    • Exercise 0.2 > & >>
    • Thinking 0.2 文件的操作
    • Exercise 0.3 初识git
    • Note 0.4 git status
    • Note 0.5.6 git add
    • Thinking 0.3 箭头与指令
    • Thinking 0.4 小明的困境
    • Exercise 0.4 git时光机
    • Thinking 0.5 克隆命令
    • Note 0.5.8 git checkout
    • Exercise 0.5 git branch
    • Exercise 0.6 综合运用
  • 二、问题及思考
    • 1.ehco
    • 2.文件操作
    • 3.批处理
    • 4.变量
    • 5.单引号、双引号与反引号
    • 6.可执行文件的理解
    • 7.fork函数
    • 8.Makefile的编写
    • 9.参数的传递

一、Note & Exercise & Thinking

Exercise 0.1 echo & bash & ls

BUAAOS-Lab0实验报告_第1张图片

<编写过程>

BUAAOS-Lab0实验报告_第2张图片

<回显结果的思考>

  1. echo命令回显双引号中的文本内容,可类比为C语言中的printf
  2. bash是Linux中的默认shell,该命令显示bash的版本信息
  3. ls命令,显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)

Thinking 0.1 Shell简析

在这里插入图片描述

CLI Shell:
优点:
1、功能强大,编写效率高;2、稳定、不占用过多的资源;3、只需键盘
缺点:1、使用复杂;2、用户友好性低
GUI Shell:
优点:1、易于操作,直观
缺点:1、需编写展示界面的代码;2、程序运行受到界面大小和硬件配置的影响

Exercise 0.2 > & >>

<结果内容>
BUAAOS-Lab0实验报告_第3张图片

Thinking 0.2 文件的操作

在这里插入图片描述BUAAOS-Lab0实验报告_第4张图片

BUAAOS-Lab0实验报告_第5张图片
result文件内容
BUAAOS-Lab0实验报告_第6张图片
<解释说明>

定义了三个变量a、b、c,a赋值为1,b赋值为2,c赋值为a+b即为3。将a、b、c分别存入file1、file2、file3中,再依此定向写入file4中,最后将file4中结果存入result

<过程代码>
BUAAOS-Lab0实验报告_第7张图片

Exercise 0.3 初识git

BUAAOS-Lab0实验报告_第8张图片
< Untracked.txt内容>
BUAAOS-Lab0实验报告_第9张图片

< Stage.txt内容>
BUAAOS-Lab0实验报告_第10张图片

< Modififed.txt内容>
BUAAOS-Lab0实验报告_第11张图片

<编写过程>
BUAAOS-Lab0实验报告_第12张图片BUAAOS-Lab0实验报告_第13张图片

Note 0.4 git status

在这里插入图片描述

Note 0.5.6 git add

在这里插入图片描述

Thinking 0.3 箭头与指令

BUAAOS-Lab0实验报告_第14张图片
在这里插入图片描述

add the file–>git add
Stage the file–>git add
commit–>git commit

Thinking 0.4 小明的困境

BUAAOS-Lab0实验报告_第15张图片

①git checkout printf.c
②git reset HEAD printf.c
git checkout printf.c
③在仓库根目录下创建.gitignore文件 touch .gitigore
在其中写入 /mtk/Tucao.txt (vim .gitigore进入)

Exercise 0.4 git时光机

BUAAOS-Lab0实验报告_第16张图片

①第三次提交日志消失
②只保留到该哈希值的提交日志,第二次提交日志消失

Thinking 0.5 克隆命令

BUAAOS-Lab0实验报告_第17张图片

错误。若执行不带参数的git clone命令时,只会克隆远程库的master分支
若克隆后不执行git checkout命令,分支无法被检出
若想克隆指定分支应使用参数 -b
正确。
p.s. 但若执行git push命令就会将本地版本库提交到远程仓库master分支
正确。
在这里插入图片描述
正确。
在这里插入图片描述

Note 0.5.8 git checkout

BUAAOS-Lab0实验报告_第18张图片

Exercise 0.5 git branch

BUAAOS-Lab0实验报告_第19张图片
在这里插入图片描述
BUAAOS-Lab0实验报告_第20张图片

Exercise 0.6 综合运用

BUAAOS-Lab0实验报告_第21张图片
BUAAOS-Lab0实验报告_第22张图片

BUAAOS-Lab0实验报告_第23张图片

在这里插入图片描述

在这里插入图片描述
<复制操作>
BUAAOS-Lab0实验报告_第24张图片

二、问题及思考

由于是初次接触Linux与Git,在完成lab0的过程中遇到了许多困难,下面进行简要的说明(实际操作中困惑的地方多于报告中列出,对指导书的摘抄和归纳也不在此列出)

1.ehco

输出中有字母和符号(不包含变量)时需要用引号包含

2.文件操作

当用vim命令创建文件时会直接进入文件编辑界面

编辑完成后,按 ESC,左下角进行输入:

:w 保存但不退出

:wq 保存并退出

:q 退出

:q! 强制退出,不保存

:e! 放弃所有修改,从上次保存文件开始再编辑命令历史

3.批处理

linux批处理脚本,就是可以把多个linux处理的命令封装到一个以 .sh 结尾的文件中

最简单的脚本书写方法为:

1)新建一个文件(filename为test)

touch test.sh

2)在里面编写脚本

程序必须以下面的行开始(必须方在文件的第一行):

#!/bin/sh (符号#!用来告诉系统它后面的参数是用来执行该文件的程序 )

(能写一些shell普通命令,命令用分号隔开)

3)执行

查看文件权限: ll test.sh

(若权限不足,则附予权限chmod +x test.sh)

./test.sh 或source test.sh 或bash/sh test.sh

4.变量

定义与使用

例如:定义:temp=”Linux”
使用:echo $ temp (”$”引用变量符)

变量名命名规范

变量名后面的等号左右不能有空格
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线“_”。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)

5.单引号、双引号与反引号

1)双引号能够识别变量;单引号是不能识别变量,只会原样输出

2)双引号能够实现转义(类似于“\*”);只会原样输出,单引号是不能转义的

3)当在脚本中需要执行一些指令并且将执行的结果赋给变量的时候需要使用“反引号”

6.可执行文件的理解

c语言的编译过程分为:预处理,编译,汇编,链接

所处阶段 执行操作 生成文件
预处理 展开头文件/宏替换/去掉注释/条件编译 .i
编译 检查语法,生成汇编 .s
汇编 汇编代码转换机器码 .o
链接 链接到一起生成可执行程序 .out

练习中要求生成可以编译链接的文件,即生成.o文件

7.fork函数

在操作系统中,某个进程调用fork()之后,将会以此为分叉分成两个进程运行。
一个进程被分为父子进程后,两个进程均会将函数后的代码执行一遍
区别是,子进程中fork函数的返回值是0,而父进程则为子进程的进程编号

<实例>
阅读以下代码,选择可能的输出结果
BUAAOS-Lab0实验报告_第25张图片

这里需要注意的是,进程的执行顺序是随机的,取决于CPU的调度,所以父进程与子进程不确定谁会先执行,可能会穿插着执行

(指导书中未给出答案,我认为没有正确答案)

8.Makefile的编写

Makefile的编写规则为:

#target : prerequisites
command1

command2

command3

例如,现在有一个test.c文件,目标是生成test.out文件

则Makefile编写如下:

test.out:test.o
[tab键]gcc -o test.out test.o
test.o:test.c
[tab键]gcc -c -o test.o test.c

【注意】
out文件的生成依赖于o文件,当执行时发现没有.o文件则向下寻找

指导书的写法是
在这里插入图片描述

这里将第一个规则命名为all,也就是构建整个项目的意思

9.参数的传递

向shell脚本传递参数,例如
bash test.sh msg1 msg2
那么在test.sh中,我们就可以用$1来获取到msg1,$2=msg2

【注意】$0为命令,即bash tesh.sh

你可能感兴趣的:(笔记,bash,linux,开发语言)