20145211《信息安全系统设计基础》第2周学习总结————愬秋风以开襟

教材学习内容总结

Vim相关操作

  • vim可以仅仅通过键盘在任意模式之中进行切换,这就使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率。vim有6种基本模式(常用的是普通模式、插入模式和命令行模式)
  1. 普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
  2. 插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
    可视模式(Visual mode):命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
  3. 选择模式(Select mode):这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
  4. 命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
  5. Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。
  • 三种常用模式的切换:
  1. 进入vim:
    在终端中输入 vim 文件名;
    在终端中输入vim,进入vim界面中,进入命令行模式输入:e 文件路径(文件名)
    处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式;
  2. 普通模式中按i(插入)或a(附加)键都可以进入插入模式;
    普通模式中按:进入命令行模式;
  3. 命令行模式中输入wq回车后保存并退出vim。
  • 退出vim:
  1. 命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
  2. 普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim
  3. 普通模式下删除文本:
  • 使用vim编辑多个文件:
    编辑多个文件有两种形式:一种是在进入vim前使用的参数就是多个文件;另一种就是进入vim后再编辑其他的文件。同时创建两个新文件并编辑$ vim 1.txt 2.txt。
    默认进入1.txt文件的编辑界面:命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件;命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件。
    进入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进入文档后,输入:ewcover 1.txt来恢复。

GCC介绍

  • gcc 编译程序的流程(参数是ESc,文件的后缀是iso):
    预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp,产生预处理过的C原始程序
    编译: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,产生可执行文件
    运行:./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”。
    静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o;
    静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;
    注意:-L:在库文件的搜索路径列表中添加dir目录,-l: 在头文件的搜索路径列表中添加dir目录。
    静态库示例:

  • 共享库的生成: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
    动态库示例:

  • gcc警告和出错选项列表:
    -w:关闭所有告警
    -Wall:允许发出gcc提供的所有有用的报警信息
    -werror:把所有的告警信息转化为错误信息,并在告警发生时终止编译过程
    GDB 使用
    程序的运行状态有“运行”、“暂停”、“停止“三种。
    主要操作:
    查看文件:l
    设置断点:在b后加入相对应的行号。例b 6
    查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt查询调用函数的情况
    运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行
    查看变量值:p变量。例:p n
    单步运行:n或s,s会进入函数,n不会进入函数
    恢复程序运行:c
    帮助信息:h
    断点的设置:
    函数:b 文件名.c:函数名
    行:b 行数
    条件:b 行数 if 表达式(例如:b 9 if == 12)
    临时:tb [文件名:]行号或函数名 <条件表达式>
    GDB测试示例:

Makefile 介绍

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

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

  • 第一个问题的出现很神奇,在我非常方便的在linux下访问windows里的盘区的时候,有一天,他突然出现了这个error

    看看报错:Please resume and shutdown Windows fully (no hibernation or fast restarting)

    译:请重启电脑把windows 完全关闭 (没有休眠或者快速启动)奇怪了,明明已经关机了啊?后来此发现,windows下为了快速启动,内核采用了“休眠”的模式,启动时就是混合启动,所以速度很快,一般8秒左右;
    后来,我在网上找到一堆要在挂载区下修改读写权限的办法,感觉很复杂,完全不懂~我想,不就是没完全关机吗,我就切换到win10下,shutdown -s -t 1表示毫无压力,ubuntu下又可以访问盘区了(其实这样只是写博客比较方便,一般我很少访问盘区)
    下面是网上的办法。。。
    在这种情况下,是没有办法设置读写权限的只能是-ro (read only只读)

    所以只能在/etc/fstab 里设置:UUID=1E7E5FE17E5FAFEF /media/222 ntfs ro,defaults,auto,nodev,nosuid,user,force 0 0    #只能是ro ,如果是rw启动会报错!

    通过$ ls -all /dev/disk/by-uuid/ 可以查到UUID

    注意:这样挂载不能对挂载盘的修改!!read only!!!

    如果你的win8 没有设置快速启动或者没有什么问题的话,应该可以吧ro改为rw(读写)的

  • 第二个问题是我安装wireshark时遇到的

    安装后打开wireshark 提示权限不足消息:Couldn’t run /usr/bin/dumpcap in child process: Permission denied

    先试了网上第一个方法:

    1. sudo apt-get install libcap2-bin
    2. 添加一个组,名字为 wireshark我执行时,提示已经存在相同名字的组了
      sudo groupadd wireshark
    3. 把自己当前的用户名添加到 wireshark组sudo usermod -a -G wireshark YOUR-USER-NAME newgrp wireshark
    4. 修改组别sudo chgrp wireshark /usr/bin/dumpcap
    5. 添加执行权限sudo chmod 754 /usr/bin/dumpcap
    6. 最后一步:Grant Capabilities

    执行下面两句其中一句就可以了
    sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
    sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap

重启系统,发现全是鬼话。。

于是我又试了第二个方法,修改init.lua

终端运行sudo gedit /usr/share/wireshark/init.lua

倒数第二行原来为:dofile(DATA_DIR.."console.lua")

改为--dofile(DATA_DIR.."console.lua")

  • 还有一个问题,你们发现没有,linux下耗电巨快,有没有,一个下午充了好几次电~
    我在网上看了一下,说是双显卡的原因,不太懂,解决办法是关掉一个显卡,平时不用独立显卡的时候关闭Nvidia,启用intel集成显卡,然而并没有什么用。。。有大神解决的说一下
  • 还有,巨坑的是linux下的浏览器都无法支持上edu。。说他的协议不可靠,简直了这linux的安全性能~

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

  • 每次到这一步都特别开心,毕竟千呼万唤始出来。前天读了《闲居赋》,里面有一句话还是让人感触蛮深的——愬寒风以开襟,愿同衾与穷女;翻译过来就是想敞开胸膛面对疾风,和没钱的女子盖一条被子;闲居的时候都不忘记穷人的疾苦,这思想境界~还是要多向古人学习,做一个高尚的人,做一个纯粹的人,做一个远离低级趣味的人!
    -嗯。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 120/200 1/2 16/16 学习Linux核心命令
第二周 100/200 1/3 30/46 学习vim,gcc以及gdb的基本操作

参考资料

原文地址:https://www.cnblogs.com/nostalgia-/p/5904142.html