Thinking

Thinking 0.1

Q: 对于README.txt文件,在初次创建并提交后与再次修改之后git status的状态的不同
A: 二者git status之后的结果不同。第一次add之前显示的是未跟踪的文件,属于Untractked状态,原因是我们的文件没有被add过,没有提交到暂存区过。而commit之后再做修改,显示尚未暂存以备提交的变更,属于Modified状态,原因是我们已经commit到暂存区且之后又做了修改。

Thinking 0.2

Q: Add the filestatge the filecommit分别对应哪条命令?
A: Add the file对应 git add <文件>命令
stage the file 对应的也是git add <文件>命令
commit对应是 git commit -m "comment"

Thinking 0.3

Q1: 代码文件print.c被错误删除时,应当使用什么命令将其恢复?
A1: git checkout -- print.c
Q2: 代码文件print.c被错误删除后,执行了git rm print.c命令,此时应当
使用什么命令将其恢复?

A2: 先执行git reset HEAD print.c,再执行git checkout -- print.c
Q3: 无关文件hello.txt已经被添加到暂存区时,如何在不删除此文件的前提下将其移出暂存区?
A3: git rm --cached hello.txt

Thingking 0.4

Q: 对于git reset --hard的用法理解
A:使用git reset --hard指令,我们可以将当前仓库状态变为任意一次commit之后的状态,可以实现版本回退,也可回到最新。主要有以下两种用法:

  • 利用HEAD, git reset --hard HEAD^回退到上个版本,git reset --hard HEAD^^回退到上上个版本,回退到前num个版本,可以使用git reset --hard HEAD~num,num为合法数字
  • 利用hash值,git reset --hard <hash>可以切换到任意版本,hash值可以通过git log查看

注意添加--hard选项之后命令效果无法撤销

Thinking 0.5

Q:执行如下命令,并查看结果

1
2
3
4
- echo first
- echo econd > output.txt
- echo third > output.txt
- echo forth >> output.txt

A:执行结果如下:
lab0_Thinking0.5

>是将输出重定向到文件中,如果该文件存在,则原内容被覆盖,否则新建文件
>>是将输出追加到源文件内容之后

Thinking 0.6

Q 使用你知道的方法(包括重定向)创建下图内容的文件(文件命名为test),将创建该文件的命令序列保存在command文件中,并将test文件作为批处理文件运行,将运行结果输出至result文件中。给出command文件和result文件的内容,并对最后的结果进行解释说明(可以从test文件的内容入手). 具体实现的过程中思考下列问题: echo echo Shell Startecho echo Shell Start 效果是否有区别; echo echo $c>file1与echo echo $c>file1 效果是否有区别
test

A command文件的内容如下
command
result文件内容如下
result

结果说明 在test中将 a,b依次赋值为1和2,然后令c=a+b,此时c为3,接着将c,a,b依次写入file1,file2,file3,然后将file1,file2,file3依次追加写入file4,将file4的内容又写入了result
echo echo Shell Startecho 'echo Shell Start'没有区别;但是echo echo $c>file1echo 'echo $c>file1由区别,前者将echo $c重定向到file1,但是后者会在终端显示echo $c>file1字符串。

实验难点

Linux命令

  1. cp [选项] 源文件 目标路径 && mv [选项] 源文件 目标路径

前者为将源文件(或者为目录)复制为目标路径对应的文件(如果目标路径是文件)或者复制到目标路径(如果目标路径是目录),后者是移动(也可以实现重命名)
注意目标路径是目录还是文件的判断

  1. 查找命令grepfind
  • find -name <文件名>
  • grep [选项] pattern [file/dictionary] (选项:-n:显示行号 -r: 从目录递归查找)
    注意:如果是在目录中查找,需要加上-r选项
    不加目录或者文件参数时,默认在当前目录查找,此时不要忘记加-n
    如果模式串中含有空格,最好用引号引起来

Shell编程中括号的使用

  • $()或者将括号改为反引号:运行括号中的命令并将其返回
  • (()) 双小括号用于数值计算,前面加上$符号表示将值返回。此外,(())也用于整数大小的判断,例如 if (( $1 > $2 ))
  • $var_name 或者${var_name} 一般表示取变量的值
  • [] 用于判断条件是否成立
  • [[]] 用于判断条件是否成立,同时可以在条件间进行逻辑运算

Git使用与理解

  1. git status与文件的四种状态
    熟练使用git status命令与git log查看文件状态和提交日志
  2. Git三棵树–工作区、暂存区、HEAD
    三棵树
  3. Git版本回退以及分支

Git学习参考https://git-scm.com/book/zh/v2

其他

  1. ctags使用
    对于通过#include "filename"定义变量,在命令行中执行命令ctags-R *,便可以建立映射表tags,将光标定位到调用处,使用ctrl+]便可以定位到定义处,按下ctrl + T或者ctrl + O便可以回到跳转前位置

实验体会与感想

lab0 主要学习了如何在Linux终端进行文件以及目录的操作,实验整体难度不大。主要的不适应可能来源于从图形化界面转为命令行界面,不过这可以通过多加练习来习惯。此外,各种命令的正确使用可能也存在一点难度,例如参数以及选项的正确设置等。