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

第三周(9.21-9.27):

 

学习计时:共xxx小时

读书:

代码:

作业:

博客:

一、学习目标

1. 熟悉Linux系统下的开发环境   
2. 熟悉vi的基本操作   
3. 熟悉gcc编译器的基本原理   
4. 熟练使用gcc编译器的常用选项   
5 .熟练使用gdb调试技术   
6. 熟悉makefile基本原理及语法规范   
7. 掌握静态库和动态库的生成

二、学习资源

1. 教材:第一章,第七章

2. 《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5

3. 课程资料:https://www.shiyanlou.com/courses/413   实验二,课程邀请码:W7FQKW4Y

4. Vim编辑器:https://www.shiyanlou.com/courses/2
5. 教学视频:http://pan.baidu.com/s/1kTHxOFl ,可以参考第十个视频

三、学习方法

 

1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/

3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习

4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第二周学习总结”

 

 

四、学习任务

(提示:请将要求学生完成的任务、测验或思考题列在此处)

1.教材第一章,第七章学习:阅读并消化教材内容(有部分考试内容)

2.《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5的学习(本周大部分考试内容都从这出,特别是与教材重复内容)

3.完成实验并发Blog

  • 练习vimtutuor 至少一遍 
  • 使用vim 输入以下代码,联系使用“K”查找帮助文档:
  • 练习gcc编译运行代码。 
  • 练习gdb调试代码 。
  • 把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so。 
  • 编写makefile,让代码编译,上述静态库和共享库的使用自动化。

 

、后续学习预告(可选):

教材第二章《信息的表示和处理》

、学习过程

(提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)

 

 

1. 重要知识点总结梳理:

实验楼中vim相关命令总结

进入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<command>,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语言风格缩进

 

书本内容总结

嵌入式Linux:

第三章 Linux下c编程基础:

3.1 Linux下c语言编程概述

C语言特点:中级语言,结构化,功能齐全

所用工具:

*编辑器:完成对所录入文字的编辑功能。Vim和emacs。

*编译连接器:源代码转化为可执行代码。Gcc编译器。

*调试器:gdb

*项目管理器:控制编译或者重复编译软件的工具。

3.2常用编辑器

行编辑器(Ed,Ex):每次只能对一行进行操作。

和全屏幕编辑器(vi,emacs):对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上。

Vi:(因为通过实验已经做出了全面的总结,所以这里不加赘述)

命令行模式:一般模式  上下移动光标  删除、复制、粘贴

插入模式:文字编辑 【esc】退回命令行模式

底行模式:光标位于屏幕底行,文件保存退出 ,设置编辑环境(寻找字符串、列出行号)

流程:进入vi(在命令行下键入“vi hello”文件名),命令行模式,光标在屏幕上方->在命令行模式下键入i进入插入模式(在屏幕底部显示有“插入”表示插入模式中的输入状态,可以输入文字)->在插入模式下esc,变为命令行模式,在底行行中输入“:wq”存盘退出进入底行模式。

emacs:

功能:编辑、编译、调试。只有一种编辑模式。

启动:emacs【文件名】

相关功能键(p58)

编译调试功能:为gdb调试器提供了一个功能齐全的接口。

3.3 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

3.4GDB调试器:

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

gdb基本命令:(p71)

help

工作环境相关命令

设置断点与恢复命令

源码查看相关命令

查看运行数据相关命令

修改运行参数相关命令

3.5 make工程管理器

功能:自动编译管理器

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

格式:target:dependency_files

       command  

         再make target

makefile变量:(p78)

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

隐含规则

模式规则

深入理解计算机系统(感觉内容太多了,而且不容易看懂,只能结合另一本书看):

静态链接:以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。输入的可重定位文件由各种不同的代码和数据节组成。

两个主要任务:符号解析和重定位

与静态库链接:

静态库:将所有相关的目标模块打包成为一个单独的文件。可以用作链接器的输入。当链接器构造一个输出的可执行文件时,只拷贝静态库中被应用程序引用的目标模块。更多的我认为还是另一本书比较详细,这本书提供的理论知识太多,命令代码没有另一本一目了然。

2. 教材代码编译运行

  • 练习vimtutuor 至少一遍 
  • 使用vim 输入以下代码,联系使用“K”查找帮助文档:
  • 练习gcc编译运行代码。 
  • 练习gdb调试代码 。
  • 把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so。 
  • 编写makefile,让代码编译,上述静态库和共享库的使用自动化。

代码:信息安全系统设计基础第二周学习总结_第1张图片信息安全系统设计基础第二周学习总结_第2张图片

gcc能够顺利编译,并掌握了方法。

gdb:gcc -g add.c -o add,gdb add这是我所运用的命令,但是之后界面上显示add:找不到那个文件或目录。经过了许多次尝试并且在网上搜寻了方法后依旧没有解决。

在实现静态库、动态库和makefile时遇到了不少难题。

 

静态库:

信息安全系统设计基础第二周学习总结_第3张图片

动态库:

 信息安全系统设计基础第二周学习总结_第4张图片

makefile:

 信息安全系统设计基础第二周学习总结_第5张图片

 

 

七、遇到的问题及解决

1. 由于与浏览器快捷键冲突,无法在实验楼中进行vim视窗操作的练习。

2.不能注册动态库的路径名。一共出现两种问题,在老师所提供的深入理解计算机系统的实验楼中shiyanlou没有被加入用户组,所以没有cp的授权,没有办法执行文件。之后我将shiyanlou加入sudo后,也一直无法将libmath.so拷贝到环境变量所指定的路径当中。

3.gdb:gcc -g add.c -o add,gdb add这是我所运用的命令,但是之后界面上显示add:找不到那个文件或目录。经过了许多次尝试并且在网上搜寻了方法后依旧没有解决。

4.在链接静态库的时候一开始不知道怎么能够同时编译多个.c文件,我所用的方法是将每一个.c文件进行编译后在ar打包,这样速度效率都很低,后来联系到《深入理解计算机》这本书上的示例,发现可以同时编译多个.c文件后再一起进行打包。

5.makefile模仿书上代码编写后无法实现

 

 

八、其他

这个星期的实验量比较适中,能够每天进行一些学习。由于自己学的太过死板,有很多命令没有办法举一反三,在练习过程中遇到很多问题也最终没有能够解决,但是通过这一周的学习,我已经能够基本掌握要领,虽然暂时还不能脱离书本单独进行实验,也能够有所领悟。

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