zoukankan      html  css  js  c++  java
  • 20145215《信息安全系统设计基础》第二周学习总结

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

    教材学习内容总结

    vim编辑器

    常用操作

    • vim可以仅仅通过键盘在任意模式之中进行切换,这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率。vim有6种基本模式(常用的是普通模式、插入模式和命令行模式):

      1. 普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
      2. 插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
      3. 可视模式(Visual mode):命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
      4. 选择模式(Select mode):这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
      5. 命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
      6. Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。
    • 三种常用模式的切换:

      1. vim启动进入普通模式;
      2. 处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;
      3. 普通模式中按i(插入)或a(附加)键都可以进入插入模式;
      4. 普通模式中按:进入命令行模式;
      5. 命令行模式中输入wq回车后保存并退出vim。
    • 进入vim:

      1. 在终端中输入 vim 文件名;
      2. 在终端中输入vim,进入vim界面中,进入命令行模式输入:e 文件路径(文件名)
    • vim编写代码:

    • 游标移动(在普通模式下,按Esc进入普通模式):

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

    • 退出vim(常用):

      1. 命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
      2. 普通模式下退出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的操作
    • 快速缩进(缩进操作均在普通模式下有效):

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

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

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

    高级功能(部分)

    • 使用vim编辑多个文件:

      1. 编辑多个文件有两种形式:一种是在进入vim前使用的参数就是多个文件;另一种就是进入vim后再编辑其他的文件。同时创建两个新文件并编辑$ vim 1.txt 2.txt
      2. 默认进入1.txt文件的编辑界面:命令行模式下输入:n编辑2.txt文件,可以加!:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件;命令行模式下输入:N编辑1.txt文件,可以加!:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件。
    • 进入vim后打开新文件:

      1. 命令行模式下输入:e 3.txt打开新文件3.txt
      2. 命令行模式下输入:e#回到前一个文件
      3. 命令行模式下输入:ls可以列出以前编辑过的文档
      4. 命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑
      5. 命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
      6. 命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
      7. 命令行模式下输入:f显示正在编辑的文件名
      8. 命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt
    • 恢复文件:vim -r进入文档后,输入:ewcover 1.txt来恢复。

    • 创建加密文档:$ vim -x file1

    GCC 使用

    • gcc 编译程序的流程(参数是ESc,文件的后缀是iso):

      1. 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp,产生预处理过的C原始程序
      2. 编译:gcc –S hello.i –o hello.s;gcc –S调用ccl,产生汇编语言原始程序
      3. 汇编:gcc –c hello.s –o hello.o;gcc -c调用as,产生目标文件
      4. 链接:gcc hello.o –o hello;gcc -o调用ld,产生可执行文件
      5. 运行:./hello

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

    • 库选项:-static(进行静态编译,即链接静态库、禁止使用动态库)、-shared(生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库)、-L dir(在库文件的搜索路径列表中添加dir目录)、-lname-fPIC(生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件)

    • 静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。

      1. 静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
      2. 静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;
      3. 注意:-L:在库文件的搜索路径列表中添加dir目录,-l: 在头文件的搜索路径列表中添加dir目录。
    • 静态库示例:

    • 共享库的生成:gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o;共享库的使用:gcc -o main main.c -L. -lxxx

    • 注册共享库的方法:

      1. 修改/etc/ld.so.conf文件
      2. 修改LD_LIBRARY_PATH环境变量
      3. 将库文件直接复制到/lib或者/usr/lib目录下:cp (lib+name).so /lib
    • 动态库示例:

    • gcc警告和出错选项列表:

      1. -w:关闭所有告警
      2. -Wall:允许发出gcc提供的所有有用的报警信息
      3. -werror:把所有的告警信息转化为错误信息,并在告警发生时终止编译过程

    GDB 使用

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


    Makefile 使用

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

    • makefile文件编写规则:

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

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

    课后作业中的问题和解决过程

    • 进行GDB调试时,出现错误:

      • 原因及解决:原因是生成的二进制可执行文件没有使用-g选项。
        gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件
    • 在进行git时,弹出错误:

      • 原因及解决:ssh-keygen之间不能有空格,把他们之间的空格去掉就好了
    • make clean`命令无法执行

    本周代码托管


    心得体会

    本周主要的学习内容就是vim,gcc,gdb以及makefile。这些对于我们去深入理解C语言的编译过程都有非常大的帮助,单单就说学习vim,我觉得学习的主要目的不是为了让我们以后只用这一种编辑器,而是让我们去学习这种纯用键盘的一种方式,vim只是一个工具,学好vim能提高写代码或者写文章的速度,但是不会提高代码或文章本身的质量。vim提供了一种优雅的编辑处理文本的方式,但不是唯一的方式;完全可能有其他编辑器能更快更好的完成你要做的任务,所以我觉得vim不应该是你学习编辑器的终点。学习其他东西也是一样,最重要的是要掌握它的精髓,然后学会融会贯通,最终找到适合自己的。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/2 25/45 学习了几个Linux核心命令
    第二周 55/55 2/4 27/72 学会了vim,gcc以及gdb的基本操作

    参考资料

  • 相关阅读:
    Jmeter索引贴
    Jenkins Jmeter Tomcat Html实施方案
    转载:几种方法来实现scp拷贝时无需输入密码
    Jenkins Jmeter Ant Email Html实施方案
    zabbix3.4 zabbix-server zabbix-agent zabbix-java-gateway安装 配置
    shell () {}
    Vuser中常用的C语言函数
    loadrunner C语言循环for while do...while
    loadrunner C语言switch case
    linux系统扫描技术及安全防范--------待补全
  • 原文地址:https://www.cnblogs.com/lxm20145215----/p/5906439.html
Copyright © 2011-2022 走看看