信息安全系统设计与实现:第一、二章学习笔记
20191331 lyx
教材学习内容总结
第一章
本书的学习目标
通过本书的学习我们将掌握Unix/Linux的所有基本组件,包含进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和数据库。
操作系统内核
内核的定义: “内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
所以可以将内核理解为一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,决定着系统的性能和稳定性。是应用程序能够在计算机系统中通过硬件执行的基础。
例:一些典型的操作系统及内核
宏内核:linux MacOS 等
微内核:华为鸿蒙系统
混合内核:win7、win10 等
一些典型的unix和linux发行版
Unix | Linux |
---|---|
AT&T Unix | Debian Linux |
Berkeley Unix | Ubuntu Linux |
HP Unix | Linux Mint |
IBM Unix | 基于RPM的Linux |
Sun Unix | Slackware Linux |
通过虚拟机安装Linux
- [x] VirtualBox
- [ ] Vmware
Linux内核版本
内核是系统的心脏,是linux中最基层的代码。
uname -a 或者cat /proc/version 查看内核版
Linux目录树结构
- bin 存放二进制可执行文件(ls,cat,mkdir等)
- boot 存放用于系统引导时使用的各种文件
- dev 用于存放设备文件
- etc 存放系统配置文件
- home 存放所有用户文件的根目录
- lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
- mnt 系统管理员安装临时文件系统的安装点
- opt 额外安装的可选应用程序包所放置的位置
- proc 虚拟文件系统,存放当前内存的映射
- root 超级用户目录
- sbin 存放二进制可执行文件,只有root才能访问
- tmp 用于存放各种临时文件
- usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
- var 用于存放运行时需要改变数据的文件
Linux基本命令
- ls:显示文件或目录信息
- mkdir:当前目录下创建一个空目录
- rmdir:要求目录为空
- touch:生成一个空文件或更改文件的时间
- cp:复制文件或目录
- mv:移动文件或目录、文件或目录改名
- rm:删除文件或目录
- ln:建立链接文件
- find:查找文件
- file/stat:查看文件类型或文件属性信息
- cat:查看文本文件内容
- more:可以分页看
- less:不仅可以分页,还可以方便地搜索,回翻等操作
- tail -10: 查看文件的尾部的10行
- head -20:查看文件的头部20行
- echo:把内容重定向到指定的文件中 ,有则打开,无则创建
- 管道命令 | :将前面的结果给后面的命令,例如:ls -la | wc,将ls的结果加油wc命令来统计字数
- 重定向 > 是覆盖模式,>> 是追加模式,例如:echo "Java3y,zhen de hen xihuan ni" > qingshu.txt把左边的输出放到右边的文件里去
第二章
大致内容
主要介绍几类文本编辑器如:Vim、emacs、gidit等,GCC是编译器,静态和动态链接,GDB调试工具,文件系统操作,以及一些数据结构。
Vim的使用方法
最常用的几条指令
- dd 删除整行
- 2dd 向下删除2行,以此类推
- yy 复制游标所在的整行
- 3yy 向下复制3行,以此类推
- p 粘贴至光标后
- u(n) 撤销一次或n次操作
- U(大写) 撤销当前行的所有修改
- i 在当前光标处进行编辑
- :q! 强制退出vim,不保存
- :q 退出vim
- :wq! 强制保存并退出vim
- :w <文件路径> 另存为
插入图片 Vim 键位
vim学习网站 : https://www.lanqiao.cn/courses/2
上课时老师建议在编程时 开三个CMD
- 一个用来使用编辑器编写程序
- 一个用来编译
- 一个用来调试
^+ALR+T 打开CMD
^+SHift+T 新建CMD
ALT + n 切换标签页
GCC编辑器及使用方法
插入图片
(1) 预处理
gcc -E test.c -o test.i
, C 编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等;
(2) 编译
gcc -S test.i -o test.s
,将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件;
(3) 汇编
gcc -c test.s -o test.o
,将汇编代码翻译成了机器码,但是还不可以运行;
(4) 链接
gcc test.o -o test
,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息。
链接库&项目管理
链接可分为动态链接和静态链接:
-
动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。动态链接生成的程序小巧,但是必须依赖动态库,否则无法执行。
-
Linux 下的动态链接库实际是共享目标文件(shared object),一般是.so文件,作用类似于 Windows 下的.dll 文件。
-
静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过体积较大。
-
Linux 下静态库是汇编产生的.o 文件的集合,一般以.a 文件形式出现。
gcc 默认是动态链接,加上-static 参数则采用静态链接。
一个完整的项目将包含:
- 头文件: /include
- 源文件: /src
- 静态库: /lib
- 可执行文件: /bin
- 说明文档: /doc
使用默认源码编译:gcc -Iinclude -c src/hello.c -o libs/hello.o
使用默认静态库编译:gcc src/testhello.c libs/hello.o -Iinclude -o bin/hw1
使用指定静态库编译:gcc src/testhello.c -Iinclude -Llibs -lhello -o bin/hw2
产生静态库:ar rcs libhello.a xx.o yy.o
产生动态库:gcc src/hello.c -Iinclude -fPIC -o libs/hello.o
makefile
makefile用来管理和编译项目。makefile是一个文件,在使用make命令时,会读取这个文件并对项目按照文件内容进行编译。
make文件由一系列目标项、依赖项、规则组成。
- 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
makefile就相当于visual studio中的项目管理器,它会帮助你在更新了项目中部分源代码时,自动将整个项目进行编译,以减少人工项目管理的开支。
GDB调试工具
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
它主要能帮助我们
- 让程序在所指定的调置的断点处停住。
- 当程序被停住时,可以检查此时你的程序中所发生的事。
- 动态的改变你程序的执行环境。
- 自定义的调试参数,观察程序的运行。
gdb工具常见调试指令
- list(l) 显示当前行之后的10行代码(list后面可接行号和函数名,回车继续向下显示)
- 回车 直接回车,重复上一次执行的命令
- start(s) 开始执行程序,并停在main函数的第一条语句处
- next(n) 执行下一条语句
- step(s) 进入正要执行的函数内部
- print(p) 打印变量的值
- break(b) 查看断点
- info breakpoints(i b) 删除编号为n的断点
- delete breakpoints(d) n 使编号为n的断点失效
- disable breakpoints n 使编号为n的断点生效
- enable breakpoints n 设置断点 (行号 || 函数名)
- run(r) 连续执行程序,直到遇到断点
- continue(c) 继续执行程序,直到遇到下一个断点
- finish 跳出当前函数,执行其调用函数
- jump(j) n 强制跳转到第n行,若后面没有断点则执行到程序结束
- print(p) var 打印变量var的值,打印地址
- print *a@n (a是数组名,n是要显示的元素个数), 显示数组a的n个元素
- set var a=5 (set var)命令用于修改变量(a)的值
- display var 程序每执行一步都会打印var变量的值
- undisplay n 取消编号为n的打印
- info locals 列出当前函数的局部变量信息
- whatis var 显示变量var的类型
- ptype var 显示变量var更详细的类型
- quit(q) 退出gdb调试
C语言中的一些数据结构
- 结构体和指针
- 链表
- 二叉树
- 各种数据结构下的增删改查操作
实践内容
vscode 安装markdown插件 及 实用markdown语法
链接:https://www.cnblogs.com/DKYcaiji/p/15267782.html
OpenEuler 操作系统的安装
链接:https://www.cnblogs.com/DKYcaiji/p/15268065.html
OpenEuler 操作系统 安装 银河麒麟GUI界面
链接:https://www.cnblogs.com/DKYcaiji/p/15268176.html
基于VitralBox 的 OpenEuler系统 安装增强功能
链接:https://www.cnblogs.com/DKYcaiji/p/15268507.html
虚拟机中 OpenEuler等操作系统安装浏览器 及 登录校园网
链接:https://www.cnblogs.com/DKYcaiji/p/15269304.html
编程项目管理实践
使用vim编写简单程序
进行项目管理
安装GBD调试工具
对hello.c进行调试
一些小问题
校园网环境下 OpenEuler 系统 yum 出错
更换网络环境后问题解决
我认为可能跟校园网网关进行包过滤有关。
20191331lyx
2021/9/14