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


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

    教材学习内容总结

    vi的基本操作

    • 对Vim的基本介绍

      Vim是一个超级超级强大的文本编辑器,是跨平台的。特点:历史悠久、有模式、可以实现复杂需求、一能百能、无限灵活。

    • vim的模式

      1、6种基本模式

        普通模式(Normal mode)(常用)
        插入模式(Insert mode)(常用)
        可视模式(Visual mode)
        选择模式(Select mode)
        命令行模式(Command line mode)(常用)
        Ex模式(Ex mode)
      

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

      3、进入vim:vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 命令vim 文件名vim

    4、退出与保存:
    
    	:q!	强制退出,不保存
    	:q	退出
    	:wq!	强制保存并退出
    	:w <文件路径>	另存为
    	:saveas 文件路径	另存为
    	:x	保存并退出
    	:wq	保存并退出
    
    普通模式下输入Shift+zz即可保存退出vim
    
    • 建立vim文件并进入

        vim <文件名><回车>	新建文件(可同时创建多个文件,默认进入第一个)
        :e 3.txt	打开新文件3.txt
        :e#		回到前一个文件
        :ls		可以列出以前编辑过的文档
        :b 2.txt(或者编号)	可以直接进入文件2.txt编辑
        :bd 2.txt(或者编号)	可以删除以前编辑过的列表中的文件项目
        :e! 4.txt	新打开文件4.txt,放弃正在编辑的文件
        :f		显示正在编辑的文件名
        :f new.txt	改变正在编辑的文件名字为new.txt
      
    • 恢复文件

      输入vim -r 1.txt进入文件,然后输入:ewcover 1.txt来恢复

    • 移动光标

      上、下、左、右:k、j、h、l

    • 进入和退出

      退出:按下<Esc>键,输入:q!<回车>(无保存退出)

      进入:输入vimtutor<回车>

    • 行内跳转

        w	到下一个单词的开头
        e	到下一个单词的结尾
        b	到前一个单词的开头
        ge	到前一个单词的结尾
        0或^	到行头
        $	到行尾
        f<字母>	向后搜索<字母>并跳转到第一个匹配的位置(非常实用)
        F<字母>	向前搜索<字母>并跳转到第一个匹配的位置
        t<字母>	向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)
        T<字母>	向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)
      
    • 文本编辑

      删除命令:d 操作对象

        w	当前光标位置至下一单词起始处,不包括第一个字符
        e	当前光标处至单词末尾,包括最后一个字符
        $	当前光标位置至行末
      

      删除光标所在位置字符:按下x

      删除当前行:输入dd

      在光标前插入字符:按下i键输入字符,按下<Esc>键返回正常模式

      在一行后添加文本:按下a键输入必要内容,按下<Esc>键返回正常模式

      保存并退出:输入:wq<回车>

      移动光标至行首:按下0

      将最后一次删除的内容至于光标之后:按下p

      重复上一次的命令操作:按下.(小数点)

      快速交换光标所在行与它下面的行:输入ddp

    • 快速调整缩进

        >>  整行将向右缩进
        <<  整行向左回退
      
    • 计数:动作前面输入数字可使其重复多次,可以与命令相结合使用

    • 定位:按下Ctrl g键显示当前行信息

      跳转至文件最后一行:按下G

      跳转至文件第一行:按下gg

      跳转至文件某一行:输入行号 G

      回到之前位置:输入Ctrl o,输入Ctrl I跳转到较新位置

    • 查找

        /icmp	查找字符串icmp
        n	查找下一个icmp
        ?tcp	向上查找字符串tcp
        N	查找上一个出现的tcp
        *	寻找游标所在处的单词
        #	同上,但 * 是向前(上)找,#则是向后(下)找
        g*	同* ,但部分符合该单词即可
        g#	同# ,但部分符合该单词即可
        %	查找配对的括号
      
    • 替换

        r+<待替换字母>	将游标所在字母替换为指定字母
        R	连续替换,直到按下Esc
        cc	替换整行,即删除游标所在行,并进入插入模式
        cw	替换一个单词,即删除一个单词,并进入插入模式
        ce	改变文本直至一个单词末尾,并进入插入模式
        C(大写)	替换游标以后至行末
        ~	反转游标所在字母大小写
        u{n}	撤销一次或n次操作
        U(大写)	撤销当前行的所有修改
        Ctrl+r	redo,即撤销undo的操作
      
    • 替换匹配串

      替换光标所在行的第一个匹配串:输入s/被替换字符串/替换为的字符串

      替换全行匹配串:输入s/被替换字符串/替换为的字符串/g

      替换两行之间所有匹配串:输入#,#s/被替换字符串/替换为的字符串/g(#位置为行号)

      替换文件中所有匹配串:输入%s/被替换字符串/替换为的字符串/g

      找到文件中所有匹配串,并提示是否替换:输入%s/被替换字符串/替换为的字符串/gc

    • 执行外部命令

        :!ls 用于显示当前目录的内容
        :!rm FILENAME用于删除名为 FILENAME 的文件
        :w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件
      
    • 将对文件的改动保存到文件中:输入v:w 文件名

    • 向当前文件中插入另外文件的内容:输入:r 文件名

    • 读取dir命令的输出并将其放置到当前文件的光标位置之后:输入:r !dir

    • 在光标下面打开新一行并进入插入模式:按下o

      在光标上面打开新一行并进入插入模式:按下O

    • 复制和粘贴

      普通模式中使用y复制

      p(小写)代表粘贴至光标后(下),P(大写)代表粘贴至光标前(上)

    • 调整文本位置

        :ce(center)	命令使本行内容居中
        :ri(right)	命令使本行文本靠右
        :le(left)	命令使本行内容靠左
      
    • 设置

      要永久保存配置需要修改vim配置文件~/.vimrc,可以打开文件进行修改,不过务必小心不要影响vim正常使用!

        :set或者:se	显示所有修改过的配置
        :set all 显示所有的设定值
        :set option? 显示option的设定值
        :set nooption 取消当期设定值
        :set nu 显示行号
        :set ai 自动缩行
        :set autowrite(aw) 设置自动存档,默认未打开
        :set ts=4 设置一个 TAB 键等于几个空格
        :set shiftwidth=10 设置缩进字符数为设置数值
        :set background=dark或light	设置背景风格
        :set backup(bk) 设置自动备份,默认未打开
        : set cindent(cin) 设置C语言风格缩进
      
    • 可视模式

        在普通模式下输入v(小写)	进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。
        在普通模式下输入Shift+v(小写)	进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。
        在普通模式下输入 Ctrl+v(小写)	这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。
        在普通模式下输入d		删除选取区域内容
        在普通模式下输入y		复制选取区域内容
      
    • 视窗操作

        命令行模式下输入:new 打开一个新的vim视窗,并进入视窗编辑一个新文件
        命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt
        命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt
        普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口
        普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口
        普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
        普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗
        普通模式下Ctrl-w j 移至下面视窗
        普通模式下Ctrl-w k 移至上面视窗
        普通模式下Ctrl-w h 移至左边视窗
        普通模式下Ctrl-w l 移至右边视窗
        普通模式下Ctrl-w J 将当前视窗移至下面
        普通模式下Ctrl-w K 将当前视窗移至上面
        普通模式下Ctrl-w H 将当前视窗移至左边
        普通模式下Ctrl-w L 将当前视窗移至右边
        普通模式下Ctrl-w - 减小视窗的高度
        普通模式下Ctrl-w + 增加视窗的高度
      

    • 文档加密:输入vim -x file1

    • 查看帮助文档

        普通模式下按F1	打开vim自己预设的帮助文档
        命令行模式下输入:h shiftwidth		打开名为shiftwidth的帮助文件
        命令行模式下输入:ver		显示版本及参数
      

    gcc编译器

    • GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。

    • 编译

        预处理: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程序

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

      2、在XfceTerminal打开后的界面中输入:gcc hello.c -o hello,编译成功,将会在当前目录生成一个可执行文件 hello

      3、继续输入:./hello 就会运行该程序

    gdb调试技术

    • gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。如:

        gcc -g hello.c -o hello
        g++ -g hello.cpp -o hello
      
    • 使用GCC编译时要加“-g”参数,如果没有-g,将看不见程序的函数名和变量名,代替它们的全是运行时的内存地址。

    • GDB最基本的命令:

        gdb programm(启动GDB)
        b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
        run 开始运行程序
        bt 打印函数调用堆栈
        p 查看变量值
        c 从当前断点继续运行到下一个断点
        n 单步运行
        s 单步运行
        quit 退出GDB
        display 跟踪变量值的改变
        until 跳出循环
        finish 跳出函数
        help 帮助
      
    • GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数。

    • 在 gdb 命令行界面可以执行外部的 Shell 命令:输入(gdb) !shell 命令

    • list:显示源文件中的代码

        list 行号	显示某一行附近的代码
        list 文件名 : 行号	显示某一个文件某一行附近的代码
        list 函数名	显示某个函数附近的代码
      
    • break:用来设置断点

        break 行号	断点设置在该行开始处,注意:该行代码未被执行
        break 文件名 : 行号	适用于有多个源文件的情况。
        break 函数名		断点设置在该函数的开始处,断点所在行未被执行
        break 文件名 : 函数名		适用于有多个源文件的情况
      
    • 使用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

    makefile

    • Makefile带来的好处就是——“自动化编译”,一但写好,只需要一个 make 命令,整个工程便可以完全编译,极大的提高了软件的开发效率。

    • make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。而makefile文件需要按某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,要求定义源文件之间的依赖关系。

    • Makefile 基本规则

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

      2、输入vim Makefile,输入i进入编辑模式,输入代码并保存

      3、输入make,进行自动化编译

      4、执行./test查看结果

    • Makefile还可以定义和使用宏(也称做变量),从而使其更加自动化,更加灵活,在Makefile中定义宏的格式为:macroname = macrotext,使用宏的格式为:(macroname)

    计算机系统

    • 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件。

    • 文件是字节序列

    • Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”。

    • 源文件到目标文件的转化由编译器驱动程序完成:gcc -o hello hello.c GCC编译器驱动程序读取源文件并把它翻译成一个可执行目标文件。翻译过程分为四个阶段:预处理、编译、汇编、链接,预处理器、编译器、汇编器、链接器一起构成编译系统。

    • 计算机系统是由硬件和系统软件组成的,程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件

    • 系统的硬件组成:总线、I/O设备、内存、处理器

    • 并发:一个同时具有多个活动的系统。

    • 并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行

    • 处理器读取并解释存放在主存里的二进制指令

    • 操作系统内核是应用程序和硬件之间的媒介,提供三个基本的抽象:

        文件是对I/O设备的抽象
        虚拟存储器是对主存和磁盘的抽象
        进程是对处理器、主存和I/O设备的抽象
      
    • 网络提供了计算机系统之间通信的手段

    链接

    • 静态链接器主要任务:符号解析、重定位

    • 目标文件形式:可重定位目标文件、可执行目标文件、共享目标文件

    • 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。有三种不同的符号:

        由m定义并能被其他模块引用的全局符号
        由其他模块定义并被模块m引用的全局符号
        只被模块m定义和引用的本地符号
      

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

    • 问题1:点开《深入理解计算机系统V2》学习指导的链接后,打开的目录是《深入理解计算机系统V2》这本书的,但是内容却都是上学期使用的《Java学习笔记(第8版)》的……

    • 问题2:练习vim的替换命令s/被替换字符串/替换为的字符串时不成功,输入之后没有任何反应。

    • 问题3:点开GDB 简明教程的链接发现是会员课程,然而我不是会员,所以只能预览一部分课程。

    • 问题4:在用gcc编译c程序时输入gcc hello_print.c hello_main.c -o hello后再查看主文件夹时发现没有多出来新的可执行文件hello,也没有报错。

      解决方法:后来发现是因为和前一个可执行文件重名了,改变命令为gcc hello_print.c hello_main.c -o hello_2后生成了一个可执行文件hello_2,运行正确。

    • 问题5:用 “宏” 的方式,来改写 Makefile 例子时不成功,应该是我哪个步骤理解的不对,但是我不知道怎么改正。

    本周代码托管截图

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

    本周主要是学习了vim的使用方法、gcc的使用方法、gdb的使用方法、makefile的基础、计算机系统和链接。其中,vim的使用方法重点在于练习,只有经过不断地练习才能熟练掌握并使用。gcc、gdb和makefile的使用方法有一定的命令格式和规则,只要遵循其规则格式就能够简单编译、运行、调试程序。计算机系统的相关知识重点在于记忆和理解,链接里面的用语有些生涩,一下子我并不能完全理解,还需要再仔细看看并理解。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第零周 0/0 1/1 15/15 虚拟机
    第一周 0/0 1/2 25/40 Linux命令
    第二周 62/62 1/3 25/65 vim、gcc、gdb、makefile

    参考资料

  • 相关阅读:
    JavaScript高度和宽度详解
    VC6程序图标
    VC++中的Dlg,App,Doc,view
    Vista桌面图标无法拖动
    VC2008中IE8脚本错误问题解决
    单文件安装包制作(转)
    AutoResetEvent与ManualResetEvent区别
    纯JavaScript中调用WebServices
    动态加载程序集Assembly.Load
    VC++小知识积累
  • 原文地址:https://www.cnblogs.com/20145219songge/p/5906602.html
Copyright © 2020-2023  润新知