信息安全系统设计基础第八周学习总结

学习目标:
复习LInux命令,特别是man -k,cheat,grep -nr xxx/usr/include
复习vi,gcc,gdb,make的使用
复习教材内容1-4,6,7
复习前面的考题

知识点总结

Linux命令

man -k

格式:man -k keyword。
举例:man -k ad 显示man手册中所有包含ad的命令或说明文件并列条显示

cheat:查看常用Linux命令的备忘录,提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。

格式:cheat 命令
举例:
信息安全系统设计基础第八周学习总结_第1张图片

grep -nr xxx/usr/include用于查找宏定义的位置

格式:grep -nr 宏/usr/include
举例:

vi的使用

进入vim

1.使用vim命令进入vim界面

vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。

直接使用vim也可以打开vim编辑器,但是不会打开任何文件。

进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

2.游标移动

在进入vim后,按下i键进入插入模式。

按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。

按键

说明

h

l

右(小写L)

j

k

w

移动到下一个单词

b

移动到上一个单词

进入插入模式

1.进入插入模式

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

命令

说明

i

在当前光标处进行编辑

I

在行首插入

A

在行末插入

a

在光标后插入编辑

o

在当前行后插入一个新行

O

在当前行前插入一个新行

cw

替换从光标所在位置后到一个单词结尾的字符

注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

保存文档

1.命令行模式下保存文档

从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下

退出vim

1.命令行模式下退出vim

从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。

命令

说明

:q!

强制退出,不保存

:q

退出

:wq!

强制保存并退出

:w <文件路径>

另存为

:saveas 文件路径

另存为

:x

保存并退出

:wq

保存并退出

2.普通模式下退出vim

普通模式下输入Shift+zz即可保存退出vim

删除文本

1.普通模式下删除vim文本信息

进入普通模式:

命令

说明

x

删除游标所在的字符

X

删除游标所在前一个字符

Delete

同x

dd

删除整行

dw

删除一个单词(不适用中文)

d$或D

删除至行尾

d^

删除至行首

dG

删除到文档结尾处

d1G

删至文档首部

除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

2dd表示一次删除2行

vim重复命令

1.重复执行上次命令

在普通模式下.(小数点)表示重复上一次的命令操作

普通模式下输入x,删除第一个字符,输入.(小数点)会再次删除一个字符,除此之外也可以重复dd的删除操作

2.执行指定次数相同的命令

进入普通模式输入N,N表示重复后面的次数,

在普通模式下,可以使用dw或者daw(delete a word)删除一个单词,到dnw表示删除n个单词

游标的快速跳转

1.行间跳转

命令

说明

nG(n Shift+g)

游标移动到第 n 行(如果默认没有显示行号,请先进入命令模式,输入:set nu以显示行号)

gg

游标移动到到第一行

G(Shift+g)

到最后一行

使用Ctrl+o快速回到上一次(跳转前)光标所在位置

2.行内跳转

普通模式下使用下列命令在行内按照单词为单位进行跳转

命令

说明

w

到下一个单词的开头

e

到下一个单词的结尾

b

到前一个单词的开头

ge

到前一个单词的结尾

0或^

到行头

$

到行尾

f<字母>

向后搜索<字母>并跳转到第一个匹配的位置(非常实用)

F<字母>

向前搜索<字母>并跳转到第一个匹配的位置

t<字母>

向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)

T<字母>

向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

复制粘贴和剪切

1.复制及粘贴文本

普通模式中使用y复制

普通模式中,yy复制游标所在的整行(3yy表示复制3行)

普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。

普通模式中,y$ 复制至行尾。含光所在处字符。

普通模式中,yw 复制一个单词。

普通模式中,y2w 复制两个单词。

普通模式中,yG 复制至文本末。

普通模式中,y1G 复制至文本开头。

普通模式中使用p粘贴

普通模式中,p(小写)代表粘贴至光标后(下)

普通模式中,P(大写)代表粘贴至光标前(上)

2.剪切及粘贴

使用p来粘贴

交换上下行:ddp

字符的替换及撤销(Undo操作)

1.替换和撤销(Undo)命令

替换和Undo命令都是针对普通模式下的操作

命令

说明

r+<待替换字母>

将游标所在字母替换为指定字母

R

连续替换,直到按下Esc

cc

替换整行,即删除游标所在行,并进入插入模式

cw

替换一个单词,即删除一个单词,并进入插入模式

C(大写)

替换游标以后至行末

~

反转游标所在字母大小写

u{n}

撤销一次或n次操作

U(大写)

撤销当前行的所有修改

Ctrl+r

redo,即撤销undo的操作

快速缩进

1.使用命令进行快速调整缩进操作

普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽)

普通模式下输入<< 整行向左回退

普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数

2.shiftwidth命令

设置可以控制缩进和回退的字符数 获取目前的设定值:

:set shiftwidth

设置缩进为10个字符:

:set shiftwidth=10

3.调整文本位置

命令行模式下输入:ce(center)命令使本行内容居中

命令行模式下输入:ri(right)命令使本行文本靠右

命令行模式下输入:le(left)命令使本行内容靠左

查找

1.快速查找

普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。 ?与/功能相同,只不过?是向上而/是向下查找。 进入查找之后,输入n和N可以继续查找n表示继续查找,N反向查找

2.高级查找

普通模式下输入*寻找游标所在处的单词

普通模式下输入#同上,但 * 是向前(上)找,#则是向后(下)找

普通模式下输入g*同* ,但部分符合该单词即可

普通模式下输入g#同# ,但部分符合该单词即可

以上查找n,N 的继续查找命令依然可以用

多文件编辑

1.使用vim编辑多个文件

编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑

$ vim 1.txt 2.txt

默认进入1.txt文件的编辑界面

命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件

命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件

2.进入vim后打开新文件

命令行模式下输入:e 3.txt 打开新文件3.txt

命令行模式下输入:e# 回到前一个文件

命令行模式下输入:ls可以列出以前编辑过的文档

命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑

命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目

命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件

命令行模式下输入:f 显示正在编辑的文件名

命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt

3.恢复文件

如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入:ewcover 1.txt来恢复

$ vim -r 1.txt

可视模式

1.可视模式命令简介

在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。

在普通模式下输入Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。

在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。

在普通模式下输入d删除选取区域内容

在普通模式下输入y复制选取区域内容

2.可视模式命令练习

Shift+v(小写V),进入可视模式进行行选择

在普通模式下输入 Ctrl+v(小写v),进入可视模式进行矩形区域选择

视窗操作

1.视窗操作简介

命令行模式下输入: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 + 增加视窗的高度

文档加密

1.创建加密文档

Vim –x file1

在vim执行外部命令

在命令行模式中输入!可以执行外部的shell命令

:!ls 用于显示当前目录的内容

:!rm FILENAME用于删除名为 FILENAME 的文件

:w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件

帮助系统

1.vim中的查看帮助

普通模式下按F1打开vim自己预设的帮助文档

命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件

命令行模式下输入:ver 显示版本及参数

功能设定

1.vim的功能设定

可以在编辑文件的时候进行功能设定,要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc

2.获取目前的设定

命令行模式下输入:set或者:se显示所有修改过的配置

命令行模式下输入:set all 显示所有的设定值

命令行模式下输入:set option? 显示option的设定值

命令行模式下输入:set nooption 取消当期设定值

3.set功能的说明

命令行模式下输入:set autoindent(ai) 设置自动缩进

命令行模式下输入:set autowrite(aw) 设置自动存档,默认未打开

命令行模式下输入:set background=dark或light,设置背景风格

命令行模式下输入:set backup(bk) 设置自动备份,默认未打开

命令行模式下输入: set cindent(cin) 设置C语言风格缩进

gcc的使用

全称GNU CC ,符合ANSI C标准,可编译语言:c,c++,object c,java,Fortran,Pascal,Modula-3,Ada.

GCC的编译流程:

预处理:对包含的头文件(#include)和宏定义(#define、#ifdef)等进行处理。编译器将包含的头文件stdio.h编译进来,并且用户可以使用gcc的选项-E进行查看。例:gcc –E hello.c –o hello.i.选项-o 是指目标文件,“.i”文件为已经过预处理的C程序。

编译:将代码翻译成汇编语言。例:gcc -S hello.i –o hello.s

汇编:将编译阶段生成的.s文件转成目标文件。例:gcc –c hello.s –o hello.o

链接:函数库。静态库.a,动态库(默认.so)

gcc编译选项分析中体现了静态库、动态库的创建和使用,由于字数过多,在这里不一一打出,只体现一些关键的选项:

静态库:

创建静态库:gcc -c unsgn_pow.c //unsgn_pow为函数名

    ar rcsv libpow.a unsgn_pow.o

    a - unsgn_pow.o

    编译主程序:gcc -o pow_test pow_test.c -L. -lpow。

动态库:

为动态库构造目标文件:gcc -fpic -Wall -C unsgn_pow.c

生成动态可:gcc -shared -o libpow.so unsgn_pow.o

链接到刚生成的动态库:gcc -o pow_test pow_test.c -L. -lpow

gdb的使用

Vim编写,gcc编译:gcc –g test.c –o test, gdb调试:gdb test

查看文件:l

设置断点:在b后加入相对应的行号。例b 6

查看断点情况:设置完断电后键入info b,在gdb中可以设置多个断点。bt 查询调用函数的情况。

运行代码:默认从首行开始运行代码,键入r

查看变量值:p 变量。例:p n

单步运行:n或s。若有函数调用的时候,s会进入函数但是n不会进入函数。

恢复程序运行:c
功能:自动编译管理器

make的使用

makefile的基本结构(make读入的唯一配置文件):

格式:target:dependency_files

     command

     再make target

makefile变量:(p78)

makefile规则:包括了目标体、依赖文件及其之间的命令语句

隐含规则

模式规则

教材内容难点

第一章

对计算机系统的大致介绍,是全书的梗概。

第二章

1.截断数字。
2.整数运算(包括无符号加法和补码加法)的溢出问题:加法逆元的计算,补码加法溢出条件。乘以常数部分不是看得很懂。
3.有符号数和无符号数之间的转换。
总结:最重要的是公式。很多复杂的等式都是由多个公式嵌套形成的,需要记住顺序和名称。

第三章

1.这章前面基本没有难点,与之前学过的汇编即为相同,很多指令的用法能够烂熟于心。但是尽管这样,我们目前的水平仍然无法独立地编写一个较大的汇编文件。
2.本章运用较多的操作是汇编与反汇编。
3.难点:栈帧分析。指令都是熟悉的,但是汇编文件并没有c语言那样直接明了,如果要看懂一个汇编文件需要进行大量的分析来确定该文件的功能。由于本章后面的内容没有过多学习,所以目前主要是针对函数嵌套的汇编文件进行分析。

第四章

1.一个更简单的指令集Y86,可以实现与IA32相同的功能。书上有一些题要求仿照IA32的程序写一个Y86程序,所以要注意两个指令集的区别。
2.硬件描述语言HCL。
3.组合和时序逻辑元素。
4.对我而言,重难点Y86顺序实现的5个过程,有些混杂,原理无法理解。

第六章

1.最新学的一章,需要实践的部分很少,但是大篇幅的文字更加缺乏理解性。
2.高速缓存处理器的部分对我来说不是很好理解,会做题但是不知道为什么。例如,标记位,有效位,偏移位,块和组这几者之间的关系。

第七章

这章是配合另一本书学习的,这本书讲得更深入,但总感觉没有另一本形象,更容易理解。对于相关概念讲述得很详细,类似于百科全书。
在这块学习的时候,遇到的比较难以操作的一部分是makefile。gcc和gdb比较好学,容易操作。

曾经出错或有疑问的考题

填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键)。
判断:Linux Bash中,强制删除test文件的命令是(rm -f test )。
填空:Linux Bash中,查找home目录中前天创建的文件的命令是(find ~ -ctime 2)。
填空:Linux Bash中,使用wc统计hello.c共有几行代码的的命令是( wc -l hello.c )
填空:Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)
填空:Linux Bash中,(tee )命令可以同时重定向到多个文件。
man -k 填空: 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)
cheat 填空:To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )
find 填空:查找当前目录下所有目录的find命令是(find . -type d)
grep 填空:查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
man -k 填空:Linux中显示文件(file )属性(status)的命令是( stat )
cheat 填空:使用du命令对当前目录下的目录或文件按大小排序 的命令是( du -sk | sort -rn )
gdb 判断: gdb中next和step都可以单步跟踪,根据自顶向下原则应该优先选用step. (X )
regex 判断: 正则表达式r.t可以匹配rt. (x)
regex 判断:正则r表达式zo
可以匹配z. (ok)
3.14 判断: 汇编代码不会记录程序值的类型。(ok)
CH04 判断:Y86中,有5个双字节指令。(x)
CH06 判断:存储器山中山脊代表空间局部性。(x)

收获

确实是本值得推荐的好书,基本上面面俱到,涉及到了目前所学习内容的方方面面,对任何一门专业课都能起到启蒙作用。其中最大的收获是提高实际操作能力的提高,能够将理论和实践形成统一。

不足

并不是弄懂了已经学过的每一个知识点,学习有些囫囵吞枣,对于老师布置过练习题的知识点掌握得更好,其他部分则有些似懂非懂,仅仅学完以后留下了残余的印象。

课程建议和意见

希望老师能够在大家自己看完书以后给大家先讲一讲再考试。大多情况下不是每一个知识点我们都能看懂,而且一旦书上讲得太深我们基本上就有点发蒙,如果老师能够在这种时候点拨一下那我们的效率应该会更高。如果问题太多的情况下,把所有问题都截图标注再发到小组提问中很费精力,而且师生之间的交互效率也不高,通常情况下在小组中一问一答就用了很长时间。

你可能感兴趣的:(信息安全系统设计基础第八周学习总结)