《信息安全系统设计与实现》第一周学习笔记


第一章

  • 摘要

    • 本章介绍了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
  • 关于Linux

    • Linux是一个类Unix系统,包含其他Unix系统的许多特性,拥有许多版本
      • Debian Linux
      • Ubuntu Linux
      • Linux Mint
      • 基于RPM的Linux
      • Slackware Linux
  • 虚拟机上的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时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项
  • 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

收获

学习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回答:

    最终确认是缺少了镜像文件

实践

  • 截图: