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


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

    教材学习内容总结

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

    • Linux为何物
      • Linux 就是一个操作系统,也就是系统调用和内核那两层
    • Linux命令
      • command [options] [arguments]command作用于arguments,options区别指令的不同
    • man指令
      • man -k可以结合grep多关键字查找
      • 等价命令apropos
      • man -f cmd查看命令的基本功能,等价于whatis
    • cheat命令
    • 快捷键
      • ctrl+c 中端程序
        Ctrl+d 键盘输入结束或退出终端
        Ctrl+s 暂定当前程序,暂停后按下任意键恢复运行
        Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
        Ctrl+a 将光标移至输入行头,相当于Home键
        Ctrl+e 将光标移至输入行末,相当于End键
        Ctrl+k 删除从光标所在位置到行末
        Alt+Backspace 向前删除一个单词
        Shift+PgUp 将终端显示向上滚动
        Shift+PgDn 将终端显示向下滚动
    • Shell 常用通配符
      • * 匹配 0 或多个字符
        ? 匹配任意一个字符
        [list] 匹配 list 中的任意单一字符
        [!list] 匹配 除list 中的任意单一字符以外的字符
        [c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
        {string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
        {c2..c2} 匹配 c1-c2 中全部字符 如{1..10}
    • who am i命令查看用户
      • who 命令其它常用参数
        -a 打印能打印的全部
        -d 打印死掉的进程
        -m 同am i,mom likes
        -q 打印当前登录用户数及用户名
        -u 打印当前登录用户登录信息
        -r 打印运行等级
    • su <user>切换到用户user,su<cmd>以特权级别运行cmd命令,su - <user>切换用户的同时环境变量也会跟着切换
    • groups <user>命令得知用户属于哪个组
    • usermod命令为用户添加用户组,deluer删除用户
    • ls -l查看文件权限
    • cd命令切换目录:.表示当前目录,..表示上一级目录,- 表示上一次所在目录,通常表示当前用户的"home"目录。使用 pwd 命令可以获取当前所在路径(绝对路径)
    • mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性, -p 参数,同时创建父目录
    • cp(copy)命令复制一个文件或目录到指定目录,复制目录加参数-r
    • 使用rm命令,删除一个文件或目录,删除目录加参数-r
    • 使用mv命令,移动文件(剪切),
      重命名文件,批量重命名,rename来实现
    • 使用cat,tacnl命令查看文件,cat为正序显示,tac倒序显示,nl命令,添加行号并打印
    • 使用moreless命令分页查看文件,打开后默认只显示一屏内容,终端底部显示当前阅读的进度(百分比)。可以使用Enter键向下滚动一行,使用Space键向下滚动一屏,按下h显示帮助,q退出
    • 使用headtail命令查看文件,只查看的头几行(默认为10行,不足10行则显示全部)和尾几行,也可以加上-n参数,后面紧跟行数
    • file命令可以查看文件的类型
    • declare命令创建变量
    • 环境变量有关命令:set 显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
      env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
      export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
    • 变量修改:${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
      ${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
      ${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
      ${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
      ${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
      ${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串
    • Linux文件压缩格式:*.zip zip程序打包压缩的文件
      *.rar rar程序压缩的文件
      *.7z 7zip程序压缩的文件
      *.tar tar程序打包,未压缩的文件
      *.gz gzip程序(GNU zip)压缩的文件
      *.xz xz程序压缩的文件
      *.bz2 bzip2程序压缩的文件
      *.tar.gz tar打包,gzip程序压缩的文件
      *.tar.xz tar打包,xz程序压缩的文件
    • zip压缩打包程序,zip -r -q -o shiyanlou.zip /home/shiyanlou-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用du命令查看打包后文件的大小,-e参数可以创建加密压缩包,-l参数转换格式,使之在Windows下打开没有问题
    • unzip命令解压缩zip文件,-d表示路径(不存在会自动创建),-l不解压只查看压缩包内容,-o指定编码类型
    • rar打包压缩命令,rar a shiyanlou.rar压缩文件(使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建),rar d shiyanlou.rar .zshrc从指定压缩包文件中删除某个文件,rar l shiyanlou.rar查看不解压文件,unrar x shiyanlou.rar全路径解压,unrar e shiyanlou.rar tmp/去掉路径解压
    • tar打包工具,tar -cf shiyanlou.tar ~创建一个 tar 包,-c表示创建一个 tar 包文件,-f用于指定创建的文件名,注意文件名必须紧跟在-f参数之后,-v参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的/,你也可以使用-P保留绝对路径符,解包一个文件(-x参数)到指定路径的已存在目录(-C参数),只查看不解包文件-t参数
    • df 命令查看磁盘的容量,加-h转换成能看懂的形式
    • du 命令查看目录的容量,-d参数指定查看目录的深度(1级目录~ 0~)
    • dd命令用于转换和复制文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量
    • bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),count用于指定块数量
    • dd 命令创建虚拟镜像文件, dd if=/dev/zero of=virtual.img bs=1M count=256
    • mkfs 命令格式化磁盘,命令sudo mkfs.ext4 virtual.img格式化为ext4文件系统
    • sudo mount查看下主机已经挂载的文件系统,命令格式mount [options] [source] [directory],常用操作mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]umount 命令卸载已挂载磁盘sudo umount /mnt
    • fdisk为磁盘分区,查看硬盘分区表信息sudo fdisk -l,进入磁盘分区模式sudo fdisk virtual.img
    • type查看,内建命令
      xxx is a shell builtin
      外部命令
      xxx is /usr/sbin/xxx
      指令为命令别名所设定的名称
      xxx is an alias for xx --xxx
    • help命令只能用于显示内建命令的帮助信息。外部命令基本上都有一个参数--help,这样就可以得到相应的的帮助
    • man没有内建与外部命令的区分
    • cut命令,打印每一行的某一字段
    • grep命令,在文本中或 stdin 中查找匹配字符串,格式grep [命令选项]... 用于匹配的表达式 [文件]...
    • wc命令,简单小巧的计数工具
    • sort排序命令
    • uniq去重命令
    • tr命令可以用来删除一段文本信息中的某些文字
    • 使用tee命令同时重定向到多个文件,除了将需要将输出重定向到文件之外也需要将信息打印在终端
    • 永久重定向,使用exec命令
    • 利用设个/dev/null屏蔽命令的输出完全屏蔽命令的输出

    2.熟悉vi的基本操作

    参考:https://blog.csdn.net/xie_xiansheng/article/details/78413306

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

    GCC编译器编译程序的流程:源文件(*.c)–>预处理(预处理器)–>编译(编译器)–>汇编(汇编器)–>链接(链接器)–>可执行文件
    假定有一个最简单的hello.c源文件,代码即输出一个helloworld。通过几个不同步骤来展现gcc的编译器编译流程:
    第一步:~ gcc -E hello.c -o hello.i 这是讲源文件进行预处理器处理,也就是主要进行一些宏替换,不会进行语法检查,-E参数可以让gcc在预处理结束后停止后面的编译过程。
    第二步:~ gcc -c hello.i -o hello.o 此步骤会进行一些语法检查,将.i文件编译成目标文件。
    第三步:~ gcc hello.o -o hello 第三步也是最后一步,将目标链接为一个可执行文件,最后的hello是自定义生成的可执行文件名。
    GCC编译模块化的程序:代码:~ gcc denpend.c hello.c -o hello

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

    参考:https://blog.csdn.net/arackethis/article/details/43370307

    5.熟练使用gdb调试技术

    1)启动gdb
    gdb hello或者gdbfile hello
    2)显示程序
    list 或者 l
    3)打断点
    break(b) main() //函数的入口处
    break(b) 11 //行号
    break(b) hello.c:14 //特定文件的行号
    break(b) 12 if i=10 //if语句满足后在行号处打断点
    4)获取断点信息
    info break
    5)删除断点
    delete 13(断点编号)
    6)运行程序
    run(r)
    7)单步(不进入子函数)
    next(n)
    8)单步(进入子函数)
    step(s)
    9)继续运行
    continue(c)
    10)查看变量
    print(p) i(变量名)
    11)运行程序到当前函数结束
    finish
    12)监控变量
    watch i(变量名)
    13)退出gdb
    quit(q)

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


    7.掌握静态库和动态库的生成与调用方法

    参考:https://blog.csdn.net/hua12134/article/details/88381929

    8.理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则

    高内聚:
    如果类中的方法是一组相关的行为,则称该类是高内聚的,反之成为低内聚的。
    高内聚便于类的维护,而低内聚不利于类的维护。
    迭代器模式中,对于高内聚低耦合原则的使用会有很好的解释。
    低耦合:
    就是尽量不要让一个类有太多其他类的实例引用,以避免修改系统的其中一部分会影响到其他部分,
    中介者模式中,就会体会到这个低耦合原则的必要性。

    9.了解链接的概念

    参考:https://blog.csdn.net/u011857683/article/details/81044856

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

    xxx
    xxx

    代码调试中的问题和解决过程

    xxx
    xxx

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

    XXX
    XXX

    本周代码托管截图

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

    xxx
    xxx

  • 相关阅读:
    析构函数中的virtual是否必要?
    程序员必看的书
    UML类图几种关系的总结
    VS 2008的64位编译环境的安装和使用
    VB获取CAD属性值
    30分钟LINQ教程
    ADO.NET
    C#编写Windows服务程序图文教程
    Json的序列化与反序列化以及乱入的k_BackingField
    C#中的委托(Delegate)和事件(Event)
  • 原文地址:https://www.cnblogs.com/hollfull/p/12051304.html
Copyright © 2020-2023  润新知