20144303 《信息安全系统设计基础》第二周学习总结
20144303 《信息安全系统设计基础》第二周学习总结
教材学习内容总结
vim:
vim键盘图:
光标移动:
- h-←,j-↓,k-↑,l-→,方向键也可以控制相应的光标移动方向;
- w-移动到下一个单词,b-移动到上一个单词。
- [[ 转到上一个位于第一列的"{";
- ]] 转到下一个位于第一列的"{";
- { 转到上一个空行;
- } 转到下一个空行
插入模式:
- i 在当前光标处进行编辑
- I 在行首插入
- A 在行末插入
- a 在光标后插入编辑
- o 在当前行后插入一个新行
- O 在当前行前插入一个新行
- cw 替换从光标所在位置后到一个单词结尾的字符
保存和退出vim:
- w 保存文档
- :q! 强制退出,不保存
- :q 退出
- :wq! 强制保存并退出
- :w <文件路径> 另存为
- :saveas 文件路径 另存为
- :x 保存并退出
- :wq 保存并退出
删除文本:
- x 删除游标所在的字符
- X 删除游标所在前一个字符
- Delete 同x
- dd 删除整行
- dw 删除一个单词(不适用中文)
- d$或D 删除至行尾
- d^ 删除至行首
- dG 删除到文档结尾处
- d1G删至文档首部
行内跳转:
- w 到下一个单词的开头
- e 到下一个单词的结尾
- b 到前一个单词的开头
- ge 到前一个单词的结尾
- 0或^ 到行头
- $ 到行尾
- f<字母> 向后搜索该字母并跳转到第一个匹配的位置
- F<字母> 向前搜索该字母并跳转到第一个匹配的位置
复制粘贴和剪切:
- 普通模式中,yy复制游标所在的整行(3yy表示复制3行)
- 普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。
- 普通模式中,y$ 复制至行尾。含光所在处字符。
- 普通模式中,yw 复制一个单词。
- 普通模式中,y2w 复制两个单词。
- 普通模式中,yG 复制至文本末。
- 普通模式中,y1G 复制至文本开头。
- 普通模式中使用p粘贴
- 普通模式中,p(小写)代表粘贴至光标后(下)
- 普通模式中,P(大写)代表粘贴至光标前(上)
查找替换:
- r+<待替换字母> 将游标所在字母替换为指定字母
- R 连续替换,知道按下ESC
- cc 替换整行,即删除游标所在行,并进入插入模式
- cw 替换一个单词,即删除一个单词,并进入插入模式
- C 替换游标以后至行末
- ~ 翻转游标所在字母的大小写
- u{n} 撤销一个或n次操作
- U 撤销当前所有的修改
- 快速查找:普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。 ?与/功能相同,只不过?是向上而/是向下查找。 进入查找之后,输入n和N可以继续查找 n表示继续查找,N反向查找
- 高级查找:
- 普通模式下输入*寻找游标所在处的单词
- 普通模式下输入#同上,但 * 是向前(上)找,#则是向后(下)找
- 普通模式下输入g*同* ,但部分符合该单词即可
- 普通模式下输入g#同# ,但部分符合该单词即可
视窗操作:
- 命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt
- 命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt
- 普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口
- 普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口
- 普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
- 普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
- 普通模式下Ctrl-w j 移至下面视窗
- 普通模式下Ctrl-w k 移至上面视窗
- 普通模式下Ctrl-w h 移至左边视窗
- 普通模式下Ctrl-w l 移至右边视窗
- 普通模式下Ctrl-w J 将当前视窗移至下面
- 普通模式下Ctrl-w K 将当前视窗移至上面
- 普通模式下Ctrl-w H 将当前视窗移至左边
- 普通模式下Ctrl-w L 将当前视窗移至右边
- 普通模式下Ctrl-w 减小视窗的高度
- 普通模式下Ctrl-w + 增加视窗的高度
gcc:
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。
GCC编译代码的过程:
- 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
- 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
- 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
- 链 接:gcc hello.o –o hello ;gcc -o 调用ld
用gcc编译一个经典的c程序:
gdb:
- gdb programm(启动GDB)
- b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
- run 开始运行程序
- bt 打印函数调用堆栈
- p 查看变量值
- c 从当前断点继续运行到下一个断点
- n 单步运行
- s 单步运行
- quit 退出GDB
熟悉gdb的操作:
Makefile 使用:
-
make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系
-
之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格),执行以上Makefile后就会自动化编译
-
一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:
一个目标,即make最终需要创建的文件,如可执行文件和目标文件;
目标也可以是要执行的动作,如‘clean’;
一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。
学习中遇到的问题及解决过程:
问:在使用“x”删除光标所在位置的字符时,错删了字符,不会撤回。
答:使用u键可以撤销。
问:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?
答:next是单步跟踪程序,当遇到函数调用时,也不进入此函数体;而step遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。
Step命令,如果step命令将要运行的源代码行上有函数调用,那么step命令将导致GDB进入到被调用函数的内部。
(都是通过百度解决的)
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | |
第二周 | 300/300 | 1/2 | 20/40 |
其他(感悟、思考等,可选)
这周学习任务较多,还没有完全消化理解。vim的学习过程,让我更加深刻体会到了什么叫“做中学”,那么多的命令符号,通过游戏式的学习,就能轻松理解、掌握,整个学习过程也没有感觉到丝毫的疲惫,学习效率极高。希望以后能有更多这样的学习机会。