《信息安全系统设计与实现》第一周学习笔记
第一章
-
摘要
- 本章介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本以及其他版本。此外,还介绍了Linux的开发及其各种发行版本,列出了适用于Linux的开发的各种硬件平台和虚拟机,并展示了如何将UbuntuLinux同时安装到Microsoft Windows中的VirtualBox虚拟机和VMware虚拟机上。本章还解释了Linux的启动过程(从Linux内核启动到用户登录和命令执行),描述了Unix/Linux文件系统组织、文件类型和常用的Unix/Linux命令。最后,本章介绍了用户管理和维护 Linux系统需执行的一些系统管理任务。
-
关于本书
- 涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统,并着重探讨了编程实践。
-
本书目标
- 强化学生的编程背景知识
- 动态数据结构的应用
- 进程概念和进程管理
- 并发编程
- 定时器和定时共嗯
- 信号、信号处理和进程间通信
- 文件系统
- TCP/IP和网络编程
-
关于Unix
- Unix是一种通用型操作系统,采用PDP-11微型计算机开发,有许多个版本
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix
- Unix是一种通用型操作系统,采用PDP-11微型计算机开发,有许多个版本
-
关于Linux
- Linux是一个类Unix系统,包含其他Unix系统的许多特性,拥有许多版本
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
- Linux是一个类Unix系统,包含其他Unix系统的许多特性,拥有许多版本
-
虚拟机上的Liunx
-
VirtualBox
-
VMware(目前正在使用)
-
Parallels Desktop
-
-
Unix/Linux 命令
- ls:Is dirname:列出CWD或目录的内容。
- cd dirname:更改目录。
- pwd:打印CWD的绝对路径名。
- touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。
- cat filename:显示文件内容。
- cp src dest:复制文件。
- mv src dest:移动或重命名文件。
- omkdir dirname:创建目录。
- rmdir dirname:移除(空)目录。
- rm filename:移除或删除文件。
- In oldfile newfile:在文件之间创建链接。
- find:搜索文件。
- grep:搜索文件中包含模式的行。
- ssh:登录到远程主机。
- gzip filename:将文件压缩为gz文件。
- gunzip filegz:解压.gz文件。
- tar-zcvffiletgz:从当前目录创建压缩tar文件。
- tar-zxvffiletgz:从tgz文件中解压文件。 man:显示在线手册页。
- zip file.zip filenames:将文件压缩为zip文件。
- unzip filezip:解压zip文件
-
用户账户
输入vi /etc/passwd
创建用户
-
sudo命令
- 允许用户以超级用户的身份执行命令
第二章
- Linux中的文件编辑器
-
vim编辑器
vim有3种不同的操作模式
命令模式:用于输入命令
插入模式:用于输入和编辑文本
末行模式:用于保存文件并退出
要退出插入模式,按ESC。命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim- i:插入模式,插入文本
- a:插入模式,追加文本
- w:写入(保存文件)
- q:退出vim
- wq:保存并退出
- q!:不保存更改,强制退出
-
gedit编辑器
gedit是Ubuntu及其他使用GNOME GUI用户界面的Linux的默认编辑器,包含用于编辑源代码和结构化文本的工具
-
emacs编辑器
emacs是一款强大的文本编辑器,可在多个不同的平台上运行,最受欢迎的版本是GNU Emacs。
-
以上三款编辑器都支持直接输入和全屏模式下的文本编辑,还支持关键词搜索,可用新文本替换字符串。
- 使用emacs
- 程序开发
(1)创建源文件
全局变量
局部变量
自动变量
静态变量
寄存器变量
(2)gcc把源文件转成二进制可执行文件
将C源文件转换为汇编代码文件
将汇编代码转换成目标代码
将目标代码转换成二进制可执行文件(链接)
- 静态和动态链接
- 动态链接
可以减小每个a.out文件大小
许多执行程序可以在内存中共享相同库函数
修改库函数不需要重新编译源文件
- 动态链接
- 可执行文件
- 二进制可执行平面文件
- a.out可执行文件
- ELF可执行文件
- a.out文件的内容
- 文件头
- 代码段
- 数据段
- 符号表
- 程序执行过程
- 读取a.out文件头
- sh从总大小中分配一个内存区给执行映像。
- sh放弃旧映像,开始执行新映像。
- 执行从crt0.o开始,调用main(),将argc和argv作为参数传递给main()
- 程序终止
- 正常终止
如果程序执行成功,main()最终会返回到crt0.out,调用库函数exit(0)(系统调用)来终止进程 - 异常终止
遇到错误,如无效地址,非法指令,越权等
按下ctrl+C可以产生硬件中断
用kill -s signal_number pid #signal_number=1 to 31
向通过pid识别的目标进程发送信号
- 正常终止
- C语言中的函数调用
- long jump
- 32位GCC中的运行时堆栈使用情况
- 64位GCC中的运行时堆栈使用情况
- C语言程序与汇编代码的链接
- gcc生成的汇编代码
- 入口代码
- 函数体代码
- 退出代码
- 链接库
(1) 静态链接库
-L.指定链接库路径 -l指定链接库
() gcc -c -fPIC mysum.c gcc -shared -o libmylib.so mysum.o gcc t.c -L. -lmylib a.out (
)
(2)动态链接库
() gcc -c mysum.c ar rcs libmylib.a mysum.o gcc -static t.c -L. -lmylib a.out (
) - makefile
- make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
一个make文件由一系列目标项、依赖项和规则组成 - 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
- make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
- GDB调试工具
- 在emacs IDE中使用GDB
(1)源代码
(2)编译源代码
(3)启动GDB
(4)多窗口GDB
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。与Window下的IDE不同,GDB是纯命令行执行的,并没有图形界面方法。 - GDB的常规应用
- 自定义程序的启动方式(指定影响程序运行的参数)
- 设置条件断点(在条件满足时暂停程序的执行)
- 回溯检查导致程序异常结束的原因(Core Dump)
- 动态改变程序执行流(定位问题的辅助方式)
- GDB的启动方式
1.gdb
2.gdb test.out
3.gdb test.out core
- 在emacs IDE中使用GDB
收获
学习Unix/Linux系统编程第一章对我了解Unix和Linux系统的相关历史和演变的过程有很大的帮助。这让我对于Linux的有了更加深入的理解,确立了我未来Linux学习的目标。
在第二章,我认为最有收获的内容是对编程背景的深入了解。通过第二章我学习了mkdir、rmdir、cd、ls、mv、rm、ln、find、file/stat、cat等常见命令的用法,我了解到这些命令在日常系统编程中的具体作用,是必不可缺的工具。这些知识对于编写系统级程序和系统工具非常重要。
苏格拉底挑战过程截图:
1.系统管理知识点:
2.文本编辑器知识点:
遇到的问题
- 问题:在练习使用文本编辑器vim时对于命令q和命令!q有点疑惑,它们的功能都是退出vim,那么有什么区别吗
- 解决思路:询问GPT
- GPT回答:
- 问题:虚拟机报错
- 解决思路:询问GPT并与同学合作,解决问题
- GPT回答:
最终确认是缺少了镜像文件
实践
- 截图: