20135219洪韶武——信息安全系统设计基础第二周学习总结
信息安全系统设计基础第二周学习总结
一、vim编辑器
1.实验楼——vim编辑器
(1)vim的六种模式
普通模式、插入模式、可视模式、选择模式、命令行模式、Ex模式
(2)三种模式常用切换
vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。
(3)命令行模式下保存文档
从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下
2.vimtutuor练习
第一讲小结
注意:第一讲的内容是一些基本的vim编辑器操作,按照讲解步骤练习,很好掌握,但需要多练多用才能牢记各个操作指令。
第二讲小结
注意:第二讲需要分清楚dw d$ dd三个操作分别删除的内容,尤其要记住dw和dd具体进行重复删除的方法,dw是在中间加上重复删除次数,而dd是在前面加数字。
接下来的几讲内容也都是vim编辑器的一些操作,跟着做一遍感觉没有什么大问题。
二、实验楼——深入理解计算机系统
1.Linux基础
(1)Linux命令
命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数
解释:
可以在#或$符后面去输入命令。
options是选项,选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同。
arguments是参数,参数是指命令的作用对象。
(2)man命令
man是manul的缩写,可以通过man man来查看man的帮助
帮助文档包含:
1 Executable programs or shell commands(用户命令帮助) 【是普通的Linux命令 】
2 System calls (系统调用帮助) 【是系统调用,操作系统的提供的服务接口】
3 Library calls (库函数调用帮助) 【是库函数, C语言中的函数】
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd(配置文件帮助)【是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义】
6 Games 【是给游戏留的,由各个游戏自己定义 】
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)【是附件还有一些变量,比如向environ这种全局变量在这里就有说明 】
8 System administration commands (usually only for root)【是系统管理用的命令,这些命令只能由root使用,如ifconfig】
9 Kernel routines [Non standard]
相关操作练习:
体会:man printf与man 1 printf没有区别但man 3 printf有,另外使用man -k sort命令搜索查找C库函数中有没有sort这个功能的函数,比较方便好用
(3)cheat命令
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
(4)其他命令
和查找相关的核心命令还有find,locate,grep,whereis,which,其中:
find查找一个文件在系统中的什么位置
locate是神速版本的find
grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识
whereis,which告诉你使用的命令工具装在什么地方
2.Linux下C语言开发基础
(1)需要掌握以下几点
熟悉Linux系统下的开发环境
熟悉vi的基本操作
熟悉gcc编译器的基本原理
熟练使用gcc编译器的常用选项
熟练使用gdb调试技术
熟悉makefile基本原理及语法规范
掌握静态库和动态库的生成
(2)vi基本操作
注意:vi快捷键操作,vimtutuor练习见vim编辑器部分
几个快捷键提示:
:set nu 显示行号
:set ai 自动缩行
:set ts=4 设置一个 TAB 键等于几个空格
移动光标:
[[ 转到上一个位于第一列的"{"
]] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
(3)gcc编译(此处一并学习课本第1章,重点学习第7章7.6、7.10)
gcc编译过程可分为四个步骤:
hello.c->预处理器hello.i->编译器hello.s->汇编器hello.o->链接器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
其中:hello.c叫做源程序,hello叫做可执行目标程序,编译具体过程课本P3有详细讲解
此处学习博客Linux gcc常用命令 地址:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html
操作练习:
体会:
在gedit中编写测试程序,然后使用gcc test.c -o test命令进行编译,然后使用./test命令执行程序。
(4)gdb调试(此处学习博客GDB详解 地址:http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2288004.html)
输入gcc -g test.c -o test进行编译
输入gdb test启动gdb
执行设置断点【b】执行程序等操作【run】
操作练习:
常用命令:
gdb programm(启动GDB)
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行
s 单步运行
quit 退出GDB
(5)makefile
不知道为什么我的实验楼中没有关于makefile部分的讲解与示例,此处学习参考同学博客中的笔记与百度搜索完成
(1)进入
vim Makefile
(2)需要由make工具创建的目标体,通常是可执行文件和目标文件,也可以是要执行的动作,如‘clean’;
要创建的目标体所依赖的文件,通常是编译目标文件所需要的其他文件。
创建每个目标体时需要运行的命令,这一行必须以制表符tab开头
示例:
test(目标文件): prog.o code.o(依赖文件列表)
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
三、作业
1.练习vimtutuor至少一遍;
2.使用vim 输入代码,联系使用“K”查找帮助文档:
3.练习gcc编译运行代码;
4.练习gdb调试代码;
5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;
6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。
练习步骤:
使用vim输入代码保存文件,使用gcc编译
编译出错,从上图中可以看出add.c文件有错,重新打开vim add.c,检查错误并改正
找到错误,return a+b 后忘记加;,改正后重新编译
编译成功后运行程序,并用gdb进行调试
建立静态库并进行链接
出错