首页 > 技术文章 > 20145230 《信息安全系统设计基础》期中总结

kobe20145230 2016-11-06 15:49 原文

教材学习内容总结

Linux常用指令的复习

  • man命令:man是manul的缩写,我们可以通过man man来查看man的帮助。知道printf 命令也好,printf函数也好,查找帮助文档都很容易。man有一个-k 选项用起来非常好,这个选项让你学习命令,编程时有了一个搜索引擎,可以举一反三。 数据结构中学过排序(sort),我不知道C语言中有没有完成这个功能的函数,可以通过“man -k sort”来搜索,因为是找C库函数,我们关注带3的。

  • cheat命令:man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。

  • find命令:查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个Everything工具和locate类似)。

  • grep命令:grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识。

  • whereis和which:告诉我们使用的命令工具装在什么地方。

Linux下C语言编程基础的复习

  • vim:VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码。VIMTUTOR是个实践教程,通过实践30分钟让你对VIM编辑器入门,只要在命令行中输入vimtutor,然后跟着教程练习就可以了。

  • i → Insert 模式,按 ESC 回到 Normal 模式。

  • x → 删当前光标所在的一个字符。

  • :wq → 存盘 + 退出 (:w 存盘, :q 退出) (注::w 后可以跟文件名)

  • dd → 删除当前行,并把删除的行存到剪贴板里

  • p → 粘贴剪贴板

  • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。

  • :help → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(注:退出帮助需要输入:q)

  • Ctrl键就好像功能键一样,当你按下了功能键Ctrl后,C就不在是C了,而且就是一个命令或是一个快键键了,在VIM的Normal模式下,所有的键就是功能键了。

  • 各种插入模式:a → 在光标后插入
    o → 在当前行后插入一个新行
    O → 在当前行前插入一个新行
    cw → 替换从光标所在位置后到一个单词结尾的字符

  • 简单的移动光标:

0 → 数字零,到行头
^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ → 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
/pattern → 搜索 pattern 的字符串(注:如果搜索出多个匹配,可按n键到下一个)

  • 拷贝/粘贴 (注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)

P → 粘贴
yy → 拷贝当前行当行于 ddP

  • Undo/Redo

u → undo
→ redo

  • 打开/保存/退出/改变文件(Buffer)
    :e <path/to/file> → 打开一个文件 :w → 存盘 :saveas <path/to/file> → 另存为 <path/to/file> :x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车) :q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。 :bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。

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

  • 预处理: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”,这样记忆起来就容易多了。

  • gdb:建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。

  • GDB最基本的命令有:

  • gdb programm(启动GDB)

  • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)

  • run 开始运行程序

  • bt 打印函数调用堆栈

  • p 查看变量值

  • c 从当前断点继续运行到下一个断点

  • n 单步运行

  • s 单步运行

  • display 跟踪变量值的改变

  • until 跳出循环

  • finish 跳出函数

  • help 帮助

  • make和makefile:一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。

  • makefile文件编写规则:

  • 目标文件:由make创建,通常是目标文件或可执行文件

  • 依赖文件:创建目标体所依赖的文件

  • 运行命令:创建每个目标体时需要的运行命令,必须以tab键开头

  • 格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)

  • 使用make的格式:make 目标文件

  • makefile变量的定义:

  • 递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容

  • 格式定义:VAR = var

  • 展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用

  • 格式定义:VAR := var

  • make中变量的使用格式: $(变量名)

  • 变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感

期中收获

  1. 最大的感觉就是不像上学期学java时那样吃力,那样极其不适应,感觉现在每周都能将自己的任务尽量完成好,能跟上教学进程的节奏。最具体的事情就是考试时对于题目在书上或者博客中的位置更加熟悉,应该是自己每周花时间看书的原因吧。
  2. 安装了虚拟机,在ubantu下用Linux操作系统进行了编程,在以前根本不会想到自己的电脑还能运行其他的系统,但虚拟机就完美的实现了这个想法。当第一次用vim敲写hello world代码时,当用gcc编译了hello world代码时,当运行的代码能在ubantu中显示出来时,自己还是很开心的,不管简单与否,自己算是学到了一点知识吧。
  3. 还有一个收获就是再一次接触到了汇编语言,这应该是我们为数不多的接触汇编语言的机会了吧。上学期我选修了汇编语言,但自己学得一点儿也不好,甚至还没有及格。在本学期的学习中,我们再一次接触了汇编语言,感觉通过第五周的学习,能让自己更加了解汇编语言这门课程吧。
  4. 了解了存储器的一些基本结构,不知道存储器的层次分为这么多种,而且每层之间的联系居然这么密切。上面每一层都是其下一层的缓存。容量越大的存储器花费的时间就越长,容量越的存储器花费时间就较短,要是有容量大且时间短的存储器那该有多好啊!
  5. 最后一点儿收货就是git了,娄老师强调了一学期的git使用,自己还是没能掌握,甚至在这学期的开始还将代码在码云的网页上一个一个上传。现在我算是弄明白了,配置好git以后,每敲一个代码,git commit一下进行注释,不要全部一堆弄上去,那样会显得杂乱无章。当每个星期末的时候,最后git push一下就可以了。

自己的不足

  1. 不足之处就是还是太懒,有拖延症,喜欢把一星期的内容拖到一两天去完成,这样就显得很累,而且效率一点儿都不高,改进措施就是克服自己拖延症,每周的内容分段学习,一天学一段,不把任务全部累积到最后周末。
  2. 还有就是自己敲代码还是不够积极主动,有些能不敲的地方自己就不会去验证一下代码,感觉还是因为懒惰吧,本来这种计算机语言就需要代码来推动学习,如果我们不去编译运行代码,我们就不知道自己的错误在哪。
  3. 不肯问问题,改进措施就是争取自己主动一点,好学一点,躲在答疑小组问问题吧,不然一个问题一个问题堆积下来就是无数个问题。

课程建议和意见

感觉这学期的课和上学期java课比起来要好了那么一些,娄老师也在课堂上给我们讲解了很多知识和问题,虽然大部分还是自己学习,但有些东西娄老师还是讲得很到位。建议就是希望娄老师能把我们做的试卷发下来给我们看看,那样和题目解析对照起来看效果要好一点儿吧!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 2000行 20篇 400小时
第一周 2/2 20/20 初步了解Linux的一些基本命令
第二周 1/3 15/35 了解vim编辑器
第三周 86/86 1/4 25/60 了解了信息的表示和处理
第五周 79/79 1/5 30/90 了解了程序的机器级表示
第七周 84/305 1/7 20/140 了解存储器的层次结构
第八周 0/305 2/9 30/170 期中总结

推荐阅读