20145210《信息安全系统设计基础》期中总结

20145210《信息安全系统设计基础》期中总结

自己新学到的知识点总结

本学期学习Linux,感觉自己学到的基本都是新的知识点,我在此对感触比较深,收获比较大的几个方面进行总结:
首先,本学期我第一次接触到虚拟机,ubuntu系统。因为种种原因,我安装了好多次的虚拟机,对于虚拟机的安装我还是很有印象的。在学习的过程中,我也对ubuntu系统越来越熟悉,越来越会用,感觉ubuntu系统还是很方便的,不过可能是因为计算机的原因,我的虚拟机速度很慢

Linux命令:

•Ubuntu快捷键

    •CTRL+ALT+T:打开终端;
    •CTRL+SHIFT+T:新建标签页;
    •ALT+数字N:终端中切换到第N个标签页;
    •Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成;
    •上下键盘:切换命令历史,刚输入一个很长的命令,按上键就可以恢复;
    •CTRL+C:中断程序运行。

•Linux命令(系统调用)

    •命令格式:command [options] [arguments]; 
    •括号是可选的,有些命令不需要选项也不需要参数;
    •选项(option)是调整命令执行行为的开关,选项不同决定了命令的显示结果不同,参数(arugment)是指命令的作用对象。

•ls命令(库函数)

    •ls或ls .是两条等价的命令,显示当前目录的内容。这里“.”就是参数,表示当前目录,这个参数缺省可以省略;
    •ls -a .命令表示显示当前目录中的所有内容,包括隐藏文件和目录

•man命令
•man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。
•常用选项:

      •-a:在所有的man帮助手册中搜索
      •-k:根据关键字搜索联机帮助,是一种模糊搜索
      •-f:关键字精确搜索,等价于whatis指令,显示给定关键字的简短描述信息
      •-P:指定内容时使用分页程序
      •-M:指定man手册搜索的路径
•参数:
  •数字:指定从哪本man手册中搜索帮助
  •关键字:指定要搜索帮助的关键字
•多关键字查找:man -k key1 | grep key2 | grep key3 | 
      •man -k 等价的命令apropos,使用man -k找到命令后,可以用man -f cmd查看命令的基本功能。
      •man -f等价于whatis

•cheat 命令
•cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
•cheat命令简单来说,就是告诉你一个命令如何使用。它没有提供其他额外多余的信息,只通过使用实例告诉你一个命令如何使用
•grep命令
•grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
•命令格式:grep [options]
•[options]主要参数:

        •-c:只输出匹配行的计数
        •-I:不区分大小写(只适用于单字符)
        •-h:查询多文件时不显示文件名
        •-l:查询多文件时只输出包含匹配字符的文件名
        •-n:显示匹配行及行号
        •-s:不显示不存在或无匹配文本的错误信息
        •-v:显示不包含匹配文本的所有行
  •正则表达式主要参数:
        •:忽略正则表达式中特殊字符的原有含义
        •^:匹配正则表达式的开始行
        •$:匹配正则表达式的结束行
        •<:从匹配正则表达式的行开始
        •>:到匹配正则表达式的行结束
        •[ ]:单个字符,如[A]即A符合要求
        •[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求
        •。:所有的单个字符
        •*:有字符,长度可以为0

•其他核心命令

    •find:查找一个文件在系统中的什么位置,可以通过cheat find学习find命令。
    •locate:神速版本的find(Windows下有个神器Everything和locate功能类似)。
    •grep :可以对文件全文检索。通过grep -n main *.c可以快速找到main在哪个C文件中并指出在第几行。grep支持正则表达式,可以通过cheat grep学习grep命令。
    •whereis、which:告诉你使用的命令工具装在什么地方。我们在Linux下上网使用firefox浏览器,大家可以使用whereis firefox或更精确的使用which firefox来看看结果。
    •apt-cache:可以在使用apt-get install安装一个程序时先找找软件源的库里有没有这个程序,有才可以安装。

vim

•vim有6种基本模式,常用的是普通模式、插入模式和命令行模式

    •普通模式:在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
    •插入模式:在插入模式中,可以按ESC键回到普通模式。
    •可视模式:命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
    •选择模式:这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
    •命令行模式:在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
    •Ex模式:这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令
•三种常用模式的切换
      •vim启动进入普通模式;
      •处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;
      •普通模式中按i(插入)或a(附加)键都可以进入插入模式;
      •普通模式中按:进入命令行模式;
      •命令行模式中输入wq回车后保存并退出vim
•退出vim(常用):
      •命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
      •普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim

gcc

•编译

    •预处理: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编译一个c程序

    •打开的gvim环境中输入i进入编辑模式,输入代码,保存为hello.c文件
    •在XfceTerminal打开后的界面中输入:gcc hello.c -o hello,编译成功,将会在当前目录生成一个可执行文件 hello
    •继续输入:./hello 就会运行该程序

•gcc编译常用选项

    •-E:只预编译
    •-S:只编译不汇编
    •-o:将file文件指定为输出文件
    •-c:只编译不链接
    •-I dir:在头文件的搜索路径列表中添加dir目录
    •-g:在可执行程序中包含标准调试信息

•库选项

    •-static:进行静态编译,即链接静态库、禁止使用动态库
    •-shared:生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库
    •-L dir:在库文件的搜索路径列表中添加dir目录
    •-lname、-fPIC:生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件
•共享库
    •共享库的生成:gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o;
    •共享库的使用:gcc -o main main.c -L. -lxxx
    •注册共享库的方法:
      •修改/etc/ld.so.conf文件
      •修改LD_LIBRARY_PATH环境变量
      •将库文件直接复制到/lib或者/usr/lib目录下:cp (lib+name).so /lib
•静态库
    •链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。
    •静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o;
    •静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;
    •注意:-L:在库文件的搜索路径列表中添加dir目录,-l: 在头文件的搜索路径列表中添加dir目录。

gdb

•gdb调试c程序

1.打开的gvim环境中输入i进入编辑模式,输入代码,保存为gdb.c文件

2.在XfceTerminal打开后的界面中输入:gcc –g gdb.c -o testgdb,生成一个可执行文件testgdb

3.输入gdb testgdb 启动gdb

4.键入 l命令(gdb) l相当于list命令,从第一行开始列出源码

5.设置断点:(gdb) break 16:设置断点,在源程序第16行处;(gdb) break func :设置断点,在函数func()入口处。

6.输入(gdb) info break 查看断点信息。

7.输入(gdb) r 运行程序,run命令简写

8.输入(gdb) n单条语句执行,next命令简写。

9.输入(gdb) c 继续运行程序,continue命令简写。

10.输入(gdb) p i打印变量i的值,print命令简写。

11.输入(gdb) bt查看函数堆栈。

12.输入(gdb) finish退出函数。

13.输入(gdb) q退出gdb

•gdb基本命令

    •gdb programm:启动GDB)
    •b:设断点,在b后加入相对应的行号,例:b 6
    •run:开始运行程序
    •bt:打印函数调用堆栈
    •p:查看变量值。例:p n
    •c:从当前断点继续运行到下一个断点
    •n:单步运行
    •s:单步运行(s会进入函数,n不会进入函数)
    •quit:退出GDB
    •display:跟踪变量值的改变
    •until:跳出循环
    •finish:跳出函数
    •help:帮助

•断点的设置:

    •函数:b 文件名.c:函数名
    •行:b 行数
    •条件:b 行数 if 表达式(例如:b 9 if == 12)
    •临时:tb [文件名:]行号或函数名 <条件表达式>

makefile

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。

•makefile 基本规则

1.打开的gvim环境中输入i进入编辑模式,输入代码,保存为prog.c、 code.c、 code.h文件
2.输入vim Makefile,输入i进入编辑模式,输入代码并保存
3.输入make,进行自动化编译
4.执行./test查看结果

•makefile文件编写规则:

    •目标文件:由make创建,通常是目标文件或可执行文件
    •依赖文件:创建目标体所依赖的文件
    •运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
    •格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)
    •使用make的格式:make 目标文件

•makefile变量的定义:

    •递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容
    •格式定义:VAR = var
    •展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用
    •格式定义:VAR := var
    •make中变量的使用格式: $(变量名)
    •变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感

教材知识点

教材里的知识对于我来讲有一些还是比较抽象的,但是在学习的过程中我也有很多的收获,对于计算机信息的表示与存储、计算机中汇编代码的具体意义还有计算机存储结构、存储流程还是有了一定的了解。按照书上的说明、表格、例子,我做了相应的练习题,觉得计算题的准确率还是比较高的,对于代码题,有一部分是能够理解,一次就能做对的,有些是做错了,需要自己思考、请教同学才能理解的,有一些就是比较抽象,不是很理解的。
总体来说教材上的知识很多很全很丰富,自己看一遍也能有很大的收获,不过感觉相较于教材上的内容,能真正装进脑子的并不是很多,还需要多加练习,多看书才能真正地学会。

自己的收获

本学期的学习模式和上学期是一样的,说起我最大的收获,可能是一种坚持看书的学习方法和生活方式吧。现在的学习大部分是依靠操作计算机来完成的,本学科让我们能够回归教材,锻炼我们自省自学的能力,让我们能够在每天抱着电脑学习的同时不忘学习书本上的知识,这是一种很好的学习方式,也是能够让我们真正踏实地、一步一个脚印地学习的机会。

自己的不足

我觉得我在动手操作这部分可能还需要加强,在刚开始学习的时候安装配置虚拟机真的占用了很多的时间,可能有客观因素的影响,但我觉得还是我的动手能力不强,学的东西表面化,没有真正理解命令里每一个部分的真正含义,在以后的学习过程中,我还需要踏踏实实地学习,多动脑,多动手,多操作,多问问题。

课程建议和意见

我们这门课每周的学习任务包括:看书、到实验楼看实验要求,做实验、看老师给的一些学习链接等等,个人觉得学习的内容太分散,不仅需要学习教材上纸质版的内容,还需要点很多链接,看很多网页版的内容,如果能够把学习的内容整合到一起的话,学习的效率会更高一些。
可能每个人的学习习惯和学习方法都不一样,我就还是比较喜欢看书,看一些纸质版的材料,笔记的话也比较喜欢写在本子上或者教材上,对于我来讲,写字还是比打字更快,在书上标注的话也更加直观。

原文地址:https://www.cnblogs.com/20145210ysy/p/6024680.html