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

    第三周(9.21-9.27):

       20135321 余佳源

    学习计时:共8小时

    读书:1

    代码:3

    作业:3

    博客:1

    一、学习目标

    1. 熟悉Linux系统下的开发环境   
    2. 熟悉vi的基本操作   
    3. 熟悉gcc编译器的基本原理   
    4. 熟练使用gcc编译器的常用选项   
    5 .熟练使用gdb调试技术   
    6. 熟悉makefile基本原理及语法规范   
    7. 掌握静态库和动态库的生成

    vim编辑器

    vim模式介绍

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

    Vim具有6种基本模式和5种派生模式,我们这里只简单介绍下6种基本模式:

    • 普通模式(Normal mode)

    在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

    Vim强大的编辑能来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,2dd(重复dd两次),和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

    在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按a(append/追加)键或者i(insert/插入)键。

    • 插入模式(Insert mode)

    在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

    在插入模式中,可以按ESC键回到普通模式。

    • 可视模式(Visual mode)

    这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。

    • 选择模式(Select mode)

    这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

    • 命令行模式(Command line mode)

    在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

    • Ex模式(Ex mode)

    这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

    这其中我们常用到就是普通模式、插入模式和命令行模式,本课程也只涉及这三个常用模式的内容

    2.三种常用模式的切换

    vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模式中输入wq回车后保存并退出vim。

     

    三、进入vim

    1.使用vim命令进入vim界面

    vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 打开Xfce终端,输入以下命令

    $ vim practice_1.txt

    直接使用vim也可以打开vim编辑器,但是不会打开任何文件。

    $ vim

    进入命令行模式后输入:e 文件路径 同样可以打开相应文件。

    2.游标移动

    在进入vim后,按下i键进入插入模式。在该模式下您可以输入文本信息,下面请输入如下三行信息:

    12345678

    abcdefghijk

    shiyanlou.com

    按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。

    按键

    说明

    h

    l

    右(小写L)

    j

    k

    w

    移动到下一个单词

    b

    移动到上一个单词

    请尝试在普通模式下使用方向键移动光标到shiyanlou这几个字母上面。

    四、进入插入模式

    1.进入插入模式

    在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

    命令

    说明

    i

    在当前光标处进行编辑

    I

    在行首插入

    A

    在行末插入

    a

    在光标后插入编辑

    o

    在当前行后插入一个新行

    O

    在当前行前插入一个新行

    cw

    替换从光标所在位置后到一个单词结尾的字符

    请尝试不同的从普通模式进入插入模式的方法,在最后一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切换成以不同的方式进入插入模式

    五、保存文档

    1.命令行模式下保存文档

    从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下

    六、退出vim

    1.命令行模式下退出vim

    从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑

    以下为其它几种退出方式:

    命令

    说明

    :q!

    强制退出,不保存

    :q

    退出

    :wq!

    强制保存并退出

    :w <文件路径>

    另存为

    :saveas 文件路径

    另存为

    :x

    保存并退出

    :wq

    保存并退出

    2.普通模式下退出vim

    普通模式下输入Shift+zz即可保存退出vim

    七、删除文本

    1.普通模式下删除vim文本信息

    进入普通模式,使用下列命令可以进行文本快速删除:

    命令

    说明

    x

    删除游标所在的字符

    X

    删除游标所在前一个字符

    Delete

    同x

    dd

    删除整行

    dw

    删除一个单词(不适用中文)

    d$或D

    删除至行尾

    d^

    删除至行首

    dG

    删除到文档结尾处

    d1G

    删至文档首部

    除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:

    2dd表示一次删除2行

    我们来做如下练习:

    $ cp /etc/protocols .

    $ vim protocols

     

    练习截图:

     

    Vim practice_1.txt并编辑

    尝试强制退出

    尝试退出

    尝试保存并退出

    尝试另存为practice_2.txt

    练习:8dd

    d$

    d^

    dG

     Linux基础

    1 Linux命令

    如果使用GUI,Linux和Windows没有什么区别。Linux学习应用的一个特点是通过命令行进行使用。

    登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments)。即Linux中命令格式为:

    command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数

    选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同。

    参数是指命令的作用对象。

    如ls命令,ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的内容,如下图所示:

    以上简要说明了选项及参数的区别,但具体Linux中哪条命令有哪些选项及参数,需要我们靠经验积累或者查看Linux的帮助了。

    2 man命令

    不论学习编程还是Linux命令,掌握帮助文档的使用都是很重要的,是举一反三的重要途径。 man是manul的缩写,我们可以通过man man来查看man的帮助,如下图:

    帮助文档包含:

    1 Executable programs or shell commands(用户命令帮助)

    2 System calls (系统调用帮助) 

    3 Library calls (库函数调用帮助) 

    4 Special files (usually found in /dev) 

    5 File formats and conventions eg /etc/passwd(配置文件帮助) 

    6 Games 

    7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 

    8 System administration commands (usually only for root) 

    9 Kernel routines [Non standard] 

    解释一下:

    1是普通的Linux命令 

    2是系统调用,操作系统的提供的服务接口

    3是库函数,  C语言中的函数

    5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义 

    6是给游戏留的,由各个游戏自己定义 

    7是附件还有一些变量,比如向environ这种全局变量在这里就有说明 

    8是系统管理用的命令,这些命令只能由root使用,如ifconfig

    结合后面学习的grep 命令和管道,可以多关键字查找:

    man -k key1 | grep key2 | grep key3 | ...

    3 cheat 命令

    man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。 cheat 命令不是Linux自带的,大家参考这篇文章英文版)安装,实验楼课程实验系统中已经安装了。

    cheat是作弊,小抄的意思。

    cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。

    使用cheat命令作弊是可以的。:)

    4 其他核心命令

    和查找相关的核心命令还有find,locate,grep,whereis,which,其中:

    • find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个Everything工具和locate类似).
    • grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识。
    • whereis,which告诉你使用的命令工具装在什么地方。

    上面的命令包括man -k有一个共同特点就是基于“搜索”,学好了可以举一反三,大家重点学习,掌握了他们,其他命令就可以自学了。你用 “man find”, “cheat find”试试。

    5 课程相关Linux命令

    练习及操作图片:

    Man man指令

    找函数

     Linux下C语言编程基础

    VIMTUTOR

    一、实验目的

    1. 熟悉Linux系统下的开发环境

    2. 熟悉vi的基本操作

    3. 熟悉gcc编译器的基本原理

    4. 熟练使用gcc编译器的常用选项

    5 .熟练使用gdb调试技术

    6. 熟悉makefile基本原理及语法规范

    7. 掌握静态库和动态库的生成

    二、实验步骤

    1. 快捷键

    Ubuntu中:

    2. vim

    VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人的编辑利器——Vim

    VIM学习曲线非常陡峭,各种编辑器学习曲线如下图(有调侃的意思):

     

    VIMTUTOR是个实践教程,通过实践30分钟让你对VIM编辑器入门,只要在命令行中输入vimtutor,然后跟着教程练习就可以了。如下图:

     

     

    程序员有几个键提示一下:

    ·         大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page

    ·         几个设置

    :set nu 显示行号

    :set ai 自动缩行

    :set ts=4 设置一个 TAB 键等于几个空格

    ·         移动光标

    [[ 转到上一个位于第一列的"{"

    ]] 转到下一个位于第一列的"{"

    { 转到上一个空行

    } 转到下一个空行

    gd 转到当前光标所指的局部变量的定义

    深入学习参考:

    3. gcc

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

     

    GCC编译代码的过程如下:

     

    我们可以把编译过程分成四步,以编译hello.c生成可执行文件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

    编译过程比较难记,我们简化一下,前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”,这样记忆起来就容易多了。

    学习GCC的另外一个重点是:参考教材《深入理解计算机系统》 7.6,7.10节,学习静态库,动态库的制作。

    4. gdb

    建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

    • gdb programm(启动GDB)
    • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    • run 开始运行程序
    • bt 打印函数调用堆栈
    • p 查看变量值
    • c 从当前断点继续运行到下一个断点
    • n 单步运行
    • s 单步运行
    • quit 退出GDB

    问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

    其他几个我认为应该掌握的调试命令有:

    • display 跟踪变量值的改变
    • until 跳出循环
    • finish 跳出函数
    • help 帮助

    学习参考:

    5. make与makefile

    三、练习

    1.练习vimtutuor至少一遍;

    2.使用vim 输入以下代码,联系使用“K”查找帮助文档:

    3.练习gcc编译运行代码;

    4.练习gdb调试代码;

    5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

    6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。

    作业以及操作截图:

    VIMTUTOR

    删除文本

    成功删除

    文本编辑之插入

    成功插入

    文本编辑之添加

    添加完成

    编辑文件

    Vim 【文件名】进行编辑,:wq保存退出

    第一讲小结  

    删除类命令

    删改成功

    运用d$删除到行末

    更多的删除命令

    使用计数指定动作

    使用计数删除更多

    成功删除

    删除整行

    成功删除

    撤销类命令

    指令撤销

    完成修改之后撤销

    第二讲小结

    置入类命令

     

    成功归位

    替换类命令

    修改完毕

    更改类命令

    成功修改

    使用c更改更多

    第三讲小结

    定位及文件状态

    搜索类命令

    成功查找

    逆向查找用?

    配对括号的查找:按%进行括号配对的查找

    替换命令

    成功替换

    全部替换

    第四讲小结

    在VIM执行外部命令的方法

    尝试!dir

    关于保存文件的更多信息

    新建一个TEST

    删除TEST

    成功删除TEST

    一个具有选择性的保存命令

    新建一个TEST

    提取和合并文件

    :r TEST + :r !ls

    第五讲小结

    打开类命令

    小o下方插入

    大O上方插入

    附加类命令

    插入完成:先e找单词末尾 再小a进入下一个字符的插入

    另一个置换类命令的版本

    成功替换

    复制粘贴文本

    成功复制粘贴

    注意yw可以复制一个单词

    设置类命令的选项

    Hlsearch即highlightsearch

    关闭高亮

    第六讲小结

    获取帮助信息

    创建启动脚本

    补全功能

    第七讲小结

    练习操作以及截图:

    打入代码

    3.练习gcc编译运行代码;

    4.练习gdb调试代码;

    5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

    6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。

    建议多加一项:加载实验楼虚拟环境所花费的时间

  • 相关阅读:
    发现IDEA两个超级好用的工具
    事务的传播属性
    Java 单元测试PowerMockito
    Spirng源码学习 第一天
    2021年 每日打卡
    Spring源码调试环境搭建成功
    practice
    学习进度表
    报数
    负二进制转换
  • 原文地址:https://www.cnblogs.com/brotherlittlefish/p/4842659.html
Copyright © 2011-2022 走看看