• 20145221 《信息安全系统设计基础》第2周学习总结


    20145221 《信息安全系统设计基础》第2周学习总结

    教材学习内容总结

    Linux系统下的开发环境

    • Teiminal终端(Bash环境)
    • vim编辑器
    • git托管工具
    • gcc,gdb,makefile等编译调试工具

    vim概述

    vim编辑器

    vim概述:

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

    vim三种常用模式介绍:

    • 普通模式(Normal mode)
      • 在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。
      • Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。
      • 在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
    • 插入模式(Insert mode)
      • 在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
      • 在插入模式中,可以按ESC键回到普通模式。
    • 命令行模式(Command line mode)
      • 在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
    • 三种模式的切换
      • vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。

    基本操作

    • 游标移动(在普通模式下,按Esc进入普通模式)
    按键 说明
    h
    l
    j
    k
    w 移动到下一个单词
    b 移动到上一个单词
    • 进入插入模式(在普通模式下进入)
    命令 说明
    i 在当前光标处进行编辑
    I 在行首插入
    A 在行末插入
    a 在光标后插入编辑
    o 在当前行后插入一个新行
    O 在当前行前插入一个新行
    cw 替换从光标所在位置后到一个单词结尾的字符
    • 命令行模式下保存文档从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下。

    • 退出vim(常用)

      • 命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
      • 普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim。
    • 普通模式下删除文本

    命令 说明
    x 删除游标所在的字符
    x 删除游标所在前一个字符
    Delete 同x
    dd 删除整行
    dw 删除一个单词(不适用中文)
    d$或D 删除至行尾
    d^ 删除至行首
    dG 删除到文档结尾处
    d1G 删至文档首部
    ndd 删除n行
    • 替换和撤销(Undo)命令(只针对普通模式
    命令 说明
    r+<待替换字母> 将游标所在字母替换为指定字母
    R 连续替换,直到按下Esc
    cc 替换整行,即删除游标所在行,并进入插入模式
    cw 替换一个单词,即删除一个单词,并进入插入模式
    C 替换游标以后至行末
    ~ 反转游标所在字母大小写
    u{n} 撤销一次或n次操作
    U 撤销当前行的所有修改
    Ctrl+r redo,即撤销undo的操作
    • 快速缩进(普通模式

      • 使用命令进行快速调整缩进操作:通模式下输入15G,跳转到15行;普通模式下输入>>整行将向右缩进(使用,用于格式化代码超爽);普通模式下输入<<整行向左回退;普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数。
      • shiftwidth命令:shiftwidth命令是指>>命令产生的缩进(可以简写成sw) 普通模式下输入:进入命令行模式;对shiftwidth值进行设置可以控制缩进和回退的字符数。 获取目前的设定值:set shiftwidth?;设置缩进为10个字符:set shiftwidth=10
    • 调整文本位置

      • 命令行模式下输入:ce(center)命令使本行内容居中
      • 命令行模式下输入:ri(right)命令使本行文本靠右
      • 命令行模式下输入:le(left)命令使本行内容靠左
    • 查找:

      • 普通模式下输入/向下查找,输入向上查找,n表示继续查找,N反向查找
      • 普通模式下输入*寻找游标所在处的单词
      • 普通模式下输入#同上,但*是向前(上)找,#则是向后(下)找
      • 普通模式下输入g**,但部分符合该单词即可
      • 普通模式下输入g##,但部分符合该单词即可

    GCC 使用

    GCC 概述

    • GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。
    • 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
    • 在.c->.i的时候不会进行语法检查,在.i->.o的时候才会进行

    GCC 实践

    • 使用gcc进行编译

    • 使用gcc进行模块化编译

    GDB 使用

    GDB 概述

    • 程序的运行状态有“运行”、“暂停”、“停止“三种
    • 主要基本操作
      • 查看文件:l
      • 设置断点:在b后加入相对应的行号。例b 6
      • 查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt查询调用函数的情况
      • 运行代码:默认从首行开始运行代码,键入rr+行号:从该行号开始运行
      • 查看变量值:p变量。例:p n
      • 单步运行:nss会进入函数,n不会进入函数
      • 恢复程序运行:c
      • 帮助信息:h
    • 断点的设置
      • 函数:b 文件名.c:函数名
      • 行:b 行数
      • 条件:b 行数 if 表达式(例如:b 9 if == 12)
      • 临时:tb [文件名:]行号或函数名 <条件表达式>

    GDB 实践

    Makefile 使用

    Makefile 概述

    • 一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。
    • makefile文件编写规则:
      • 目标文件:由make创建,通常是目标文件或可执行文件
      • 依赖文件:创建目标体所依赖的文件
      • 运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
      • 格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)
      • 使用make的格式:make 目标文件
    • makefile变量的定义:
      • 递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容
      • 格式定义:VAR = var
      • 展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用
      • 格式定义:VAR := var
      • make中变量的使用格式: $(变量名)
      • 变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感

    Makefile 实践

    • Makefile文件
    test: prog.o code.o
            gcc prog.o code.o -o test
    prog.o: prog.c code.h
            gcc -c prog.c -o prog.o
    code.o: code.c code.h
            gcc -c code.c -o code.o
    clean:
            rm -f *.o test
    

    教材学习中的问题和解决过程

    Ubuntu中git的配置

    • 刚开始在纠结虚拟机中的代码怎样拖到实体机中进行git,又不会设置共享文件。最后,我觉得这种想法是很幼稚的。它之所以叫虚拟机,就是因为它可以虚拟实体的计算机。所以我干嘛不就在ubuntu中git呢?
    • 依据上学期配置git的经验,在Linux Bash中对git进行配置,相关博文可参考:开源中国的代码托管

    本周代码托管截图

    其他(感悟、思考等,可选)

    • 这周主要学习的内容就是vim,gcc,gdb以及makefile,学习环境为Linux。Linux系统下的开发环境不同于windows那样图形化可视化,对于C的调试编译都是基于Terminal终端Bash环境下操作的,是以指令的形式实现的。虽然看似没有VC6.0点2个按钮那样方便,但在gcc/gdb的使用过程中,更加能体会实现一个C代码的完整周期。
    • 这周比较全面的接触到了Vim编辑器,学习之后觉得,他的强大在于丰富的键盘操作,不需要鼠标,仅需一个键盘,各种快捷键就可实现对文本的编辑。不过快捷键过多,刚开始学习过程中肯定很麻烦,记不住快捷键,所以我在实验楼中找到了一个键盘布局图,希望能在今后使用的过程中熟悉Vim的操作。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20 学习了Linux常用命令
    第二周 79/279 1/3 30/50 了解vim,gcc,gdb基本操作

    参考资料

  • 相关阅读:
    怎样快速缩小问题的排查范围
    Android Activity启动模式图解
    只有理解了部分是怎么组合到整体上的,才能理解元素的真正功能
    aop收口要寻找最窄的切面
    错误的本质是不一致
    代理:接口一致、创建混入(替代)、消息转发
    分解与组合是终极方法论(还原论)
    OC之NSURLsession
    一个高频问题:异步操作会创建线程吗?
    关于Chrome跨域The request client is not a secure xxx相关提示的解决
  • 原文地址:https://www.cnblogs.com/20145221GQ/p/5907481.html
Copyright © 2020-2023  润新知