天天看点

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

第三周(9.21-9.27):

   20135321 余佳源

学习计时:共8小时

读书:1

代码:3

作业:3

博客:1

一、学习目标

1. 熟悉Linux系统下的开发环境   

2. 熟悉vi的基本操作   

3. 熟悉gcc编译器的基本原理   

4. 熟练使用gcc编译器的常用选项   

5 .熟练使用gdb调试技术   

6. 熟悉makefile基本原理及语法规范   

7. 掌握静态库和动态库的生成

vim编辑器

vim模式介绍

从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。

Vim具有6种基本模式和5种派生模式,我们这里只简单介绍下6种基本模式:

  • 普通模式(Normal mode)

在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。

  • 插入模式(Insert mode)

在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

在插入模式中,可以按ESC键回到普通模式。

  • 可视模式(Visual mode)

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。

  • 选择模式(Select mode)

这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

  • 命令行模式(Command line mode)

在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

  • Ex模式(Ex mode)

这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

这其中我们常用到就是普通模式、插入模式和命令行模式,本课程也只涉及这三个常用模式的内容

2.三种常用模式的切换

vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。

三、进入vim

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

vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开Xfce终端,输入以下命令

$ vim practice_1.txt

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

$ vim

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

2.游标移动

在进入vim后,按下i键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息:

12345678

abcdefghijk

shiyanlou.com

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

按键 说明
h
l 右(小写L)
j
k
w 移动到下一个单词
b 移动到上一个单词

请尝试在普通模式下使用方向键移动光标到shiyanlou这几个字母上面。

四、进入插入模式

1.进入插入模式

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

命令
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符

请尝试不同的从普通模式进入插入模式的方法,在最后一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

五、保存文档

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行

我们来做如下练习:

$ cp /etc/protocols .

$ vim protocols

练习截图:

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

Vim practice_1.txt并编辑

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

尝试强制退出

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

尝试退出

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

尝试保存并退出

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

尝试另存为practice_2.txt

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

练习:8dd

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

d$

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

 Linux基础

1 Linux命令

如果使用GUI,Linux和Windows没有什么区别。Linux学习应用的一个特点是通过命令行进行使用。

登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments)。即Linux中命令格式为:

command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数

选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同。

参数是指命令的作用对象。

如ls命令,ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的内容,如下图所示:

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

以上简要说明了选项及参数的区别,但具体Linux中哪条命令有哪些选项及参数,需要我们靠经验积累或者查看Linux的帮助了。

2 man命令

不论学习编程还是Linux命令,掌握帮助文档的使用都是很重要的,是举一反三的重要途径。 man是manul的缩写,我们可以通过man man来查看man的帮助,如下图:

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

帮助文档包含:

1 Executable programs or shell commands(用户命令帮助)

2 System calls (系统调用帮助) 

3 Library calls (库函数调用帮助) 

4 Special files (usually found in /dev) 

5 File formats and conventions eg /etc/passwd(配置文件帮助) 

6 Games 

7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 

8 System administration commands (usually only for root) 

9 Kernel routines [Non standard] 

解释一下:

1是普通的Linux命令 

2是系统调用,操作系统的提供的服务接口

3是库函数,  C语言中的函数

5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义 

6是给游戏留的,由各个游戏自己定义 

7是附件还有一些变量,比如向environ这种全局变量在这里就有说明 

8是系统管理用的命令,这些命令只能由root使用,如ifconfig

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

结合后面学习的grep 命令和管道,可以多关键字查找:

man -k key1 | grep key2 | grep key3 | ...

3 cheat 命令

man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。 cheat 命令不是Linux自带的,大家参考这篇文章(英文版)安装,实验楼课程实验系统中已经安装了。

cheat是作弊,小抄的意思。

cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。

使用cheat命令作弊是可以的。:)

4 其他核心命令

和查找相关的核心命令还有find,locate,grep,whereis,which,其中:

  • find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个Everything工具和locate类似).
  • grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识。
  • whereis,which告诉你使用的命令工具装在什么地方。

上面的命令包括man -k有一个共同特点就是基于“搜索”,学好了可以举一反三,大家重点学习,掌握了他们,其他命令就可以自学了。你用 “man find”, “cheat find”试试。

5 课程相关Linux命令

练习及操作图片:

Man man指令

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

找函数

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

 Linux下C语言编程基础

VIMTUTOR

一、实验目的

1. 熟悉Linux系统下的开发环境

2. 熟悉vi的基本操作

3. 熟悉gcc编译器的基本原理

4. 熟练使用gcc编译器的常用选项

5 .熟练使用gdb调试技术

6. 熟悉makefile基本原理及语法规范

二、实验步骤

1. 快捷键

Ubuntu中:

2. vim

VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人的编辑利器——Vim。

VIM学习曲线非常陡峭,各种编辑器学习曲线如下图(有调侃的意思):

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

VIMTUTOR是个实践教程,通过实践30分钟让你对VIM编辑器入门,只要在命令行中输入vimtutor,然后跟着教程练习就可以了。如下图:

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

程序员有几个键提示一下:

·        

大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。

几个设置

:set nu 显示行号

:set ai 自动缩行

:set ts=4 设置一个 TAB 键等于几个空格

移动光标

[[ 转到上一个位于第一列的"{"

]] 转到下一个位于第一列的"{"

{ 转到上一个空行

} 转到下一个空行

gd 转到当前光标所指的局部变量的定义

深入学习参考:

简明 Vim 练级攻略

七个高效的文本编辑习惯(以Vim为例)(视频)

所需即所获:像 IDE 一样使用 vim

VIM教程与学习资料汇总

3. gcc

GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。

GCC编译代码的过程如下:

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

我们可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例,如下图:

信息安全系统设计基础第三周学习总结
  • 预处理: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的参数连起来是“ESc”,相应输入的文件的后缀是“iso”,这样记忆起来就容易多了。

学习GCC的另外一个重点是:参考教材《深入理解计算机系统》 7.6,7.10节,学习静态库,动态库的制作。

4. gdb

建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

  • gdb programm(启动GDB)
  • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
  • run 开始运行程序
  • bt 打印函数调用堆栈
  • p 查看变量值
  • c 从当前断点继续运行到下一个断点
  • n 单步运行
  • s 单步运行
  • quit 退出GDB

问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

其他几个我认为应该掌握的调试命令有:

  • display 跟踪变量值的改变
  • until 跳出循环
  • finish 跳出函数
  • help 帮助

学习参考:

  • 陈皓的GDB教程用GDB调试程序
  • 软件调试的艺术(电子版)

5. make与makefile

三、练习

1.练习vimtutuor至少一遍;

2.使用vim 输入以下代码,联系使用“K”查找帮助文档:

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

3.练习gcc编译运行代码;

4.练习gdb调试代码;

5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。

作业以及操作截图:

删除文本

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

成功删除

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

文本编辑之插入

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

成功插入

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

文本编辑之添加

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

添加完成

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

编辑文件

Vim 【文件名】进行编辑,:wq保存退出

第一讲小结  

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

删除类命令

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

删改成功

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

运用d$删除到行末

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

更多的删除命令

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

使用计数指定动作

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

使用计数删除更多

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

撤销类命令

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

指令撤销

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

完成修改之后撤销

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

第二讲小结

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

置入类命令

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

成功归位

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

替换类命令

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

修改完毕

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

更改类命令

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

成功修改

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

使用c更改更多

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

第三讲小结

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

定位及文件状态

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

搜索类命令

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

成功查找

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

逆向查找用?

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

配对括号的查找:按%进行括号配对的查找

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

替换命令

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

成功替换

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

全部替换

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

第四讲小结

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

在VIM执行外部命令的方法

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

尝试!dir

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

关于保存文件的更多信息

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

新建一个TEST

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

删除TEST

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

成功删除TEST

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

一个具有选择性的保存命令

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

提取和合并文件

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

:r TEST + :r !ls

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

第五讲小结

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

打开类命令

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

小o下方插入

大O上方插入

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

附加类命令

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

插入完成:先e找单词末尾 再小a进入下一个字符的插入

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

另一个置换类命令的版本

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

复制粘贴文本

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

成功复制粘贴

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

注意yw可以复制一个单词

设置类命令的选项

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

Hlsearch即highlightsearch

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

关闭高亮

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

第六讲小结

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

获取帮助信息

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

创建启动脚本

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

补全功能

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

第七讲小结

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

练习操作以及截图:

打入代码

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

建议多加一项:加载实验楼虚拟环境所花费的时间