信息安全系统设计与实现(上) 学习笔记1(教材1,2章)

发布时间 2023-09-09 18:19:05作者: 20211419
学习笔记1 
  
  知识点总结
 
  第一章
  《Unix/Linux系统编程》教材第一章中介绍了Unix和Linux系统的基本概念以及编程环境的设置,介绍了系统编程的重要性和目标,旨在强化学生的编程背景知识,特别关注动态数据结构、进程管理、并发编程、定时器、信号处理、文件系统、TCP/IP和网络编程等方面。大致叙述了unix和linux的各世代版本,提供了Unix和Linux操作系统版本的历史概述,目标读者包括那些希望深入了解Unix和Linux系统、系统编程的学生和开发人员,帮助读者了解它们的起源和演变过程,以及它们在计算领域的重要性,同时也讲述了安装虚拟机的具体过程,以及操作时的各种注意事项。介绍了如何将Ubuntu操作系统的映像文件安装到虚拟机软件(如VirtualBox,Vmware)中,使读者能够在Linux中运行相关代码和程序。
  自从大一,我便有一个疑惑,那就是为什么要在linux系统中进行各项操作呢?windows不是也行吗?然而,随着本章的学习,我明白了Linux的重要性。首先,它是开源的,允许自由学习和探索系统内部工作原理。其次,Linux更灵活,可根据需求自定义,适用于各种项目。此外,它更稳定、更安全,有庞大的社区支持和丰富的软件生态系统。诸多系统都是建立在linux系统上的,如我们熟悉的ubuntu linux系统,还有其他很多,Debian Linux,还有我学习网络攻防的渗透项目时安装的Kali Linux系统,它们都是在Linux的基础上衍生出来的适合各个方面的系统。
  第二章
  介绍了常见的Linux文本编辑器,包括vimgeditemacs,并提到vim是功能最强大的一个。
  阐述了GCC编译器的重要性和多语言支持,以及GCC的编译过程分为预处理、编译、汇编和链接四个阶段。
  解释了静态链接和动态链接的区别,包括硬链接和软链接。
  讲解了可执行文件的分类,包括内置命令、外置命令、实用程序、用户程序、Shell脚本等。
  简要介绍了常用的Linux命令,包括pwdcdlsmkdirrmdirtouchmvrmlnfindfile/statcatmoreless等。
  介绍了sudo命令,用于临时提升用户特权级别执行命令。
  探讨了vim的三种操作模式:命令模式、插入模式、末行模式。
  讲解了a.out文件的内容和程序终止方式。
  介绍了C语言的结构体、变量类型、函数调用、汇编代码链接等相关知识。
  提供了对链表、树和二叉树的基本理解,包括遍历算法。
  最后,讨论了一个编程项目,即Unix/Linux文件系统树模拟器,其中使用二叉树实现了树结构。
  对于常见Linux命令,有必要掌握它们的具体意义,因此总结如下:
  mkdir路径名:为给定的路径名创建一个新目录。
  rmdir路径名:如果目录为空,则删除该目录。
  cd [路径名]:将当前工作目录更改为路径名,如果没有路径名则更改为
  is [路径名」:列出路径名或当前工作目录的目录内容
  pwd:打印当前工作目录的(绝对)路径名。
  creat路径名:创建一个FILE节点。
  rm路径名:删除FILE节点。
  save文件名:将当前文件系统树保存为文件。
  reload文件名:从一个文件构造一个文件系统树。
  menu:显示有效命令菜单
  quit:保存文件系统树,然后终止程序
  touch: 创建一个新的空文件或者更新已存在文件的访问和修改时间戳。
  ln: 创建链接文件,包括硬链接和软链接。硬链接是多个文件名指向同一数据块,删除一个链接不影响其他链接;软链接是指向另一个文件或目录的符号链接,类似于Windows的快捷方式。
  find: 在指定目录中查找文件和目录。可以根据不同的条件搜索文件,如文件名、文件类型、文件大小等。
  file/stat: file命令用于查看文件的类型信息,例如判断一个文件是否为文本文件、二进制文件等;stat命令用于显示文件的详细信息,包括文件的权限、大小、创建时间等。
  cat: 显示文件的内容,通常用于查看较小的文本文件。
  more: 分页显示文件内容,允许用户逐页查看文件,按空格键翻页。
  less: 分页显示文件内容,提供更多交互选项,允许用户翻页、搜索、退出等,比more更强大。
 
 
  这两章的内容涵盖了系统编程的基础知识,包括编译、文本编辑、文件操作、数据结构等,为深入理解系统编程奠定了坚实的基础。同时,对UnixLinux系统的历史、特点以及开发环境也进行了介绍,有助于理解为什么选择在Linux下进行系统编程。
 
  最大的收获
  在第一章中,最有收获的内容是对Unix和Linux系统的历史和演变过程的了解。这章提供了关于这两个操作系统的起源和发展的宝贵信息,让我明白了它们在计算领域的演化和重要性。这个知识点让我深刻认识到为什么选择在Linux环境下进行编程。
  至于第二章,其中最有收获的内容是对常见Linux命令的深入了解。学习了mkdir、rmdir、cd、ls、mv、rm、ln、find、file/stat、cat、more和less等命令的具体用途,这些命令是日常系统编程中不可或缺的工具。这些知识点为我提供了处理文件操作和文本编辑的实际技能,为未来的系统编程项目打下了坚实的基础。
 
  苏格拉底挑战过程截图:  
  文本编辑器知识点:
 

 

   常见Linux命令知识点:

 

 

 

  问题与解决思路

  问题1:在学习关于Unix和Linux系统的基本概念时,我曾经感到困惑,不太清楚Unix和Linux之间的区别是什么,以及它们与其他操作系统的关系。

  解决思路:为了解决这个困惑,我首先查阅了相关的教材和在线资料,以了解Unix和Linux的历史和演变过程。我发现,Unix是早期的操作系统,而Linux是基于Unix开发的开源操作系统。Linux在很大程度上受到了Unix的启发,但有自己的内核(Linux内核),并且以开放源代码的方式进行维护和发展。这个理解帮助我明白了它们之间的联系和区别。

 

  问题2:在执行娄老师的代码ls /sr/include/stdio.h时,没有显示出stdio.h的头文件。

  解决思路:经过查询资料,发现改指令是列出位于 /usr/include/ 目录下的名为 stdio.h 的文件。所以,运行 ls /usr/include/stdio.h 的命令实际上是试图列出 /usr/include/ 目录下的一个名为 stdio.h 的文件,以查看文件是否存在或者了解其属性。不过,stdio.h 是一个头文件,而不是一个普通的可执行文件,因此直接运行 ls 命令查看它可能会出错。所以通常会使用文本编辑器而不是 ls 命令。因此我将ls改为了cat 命令查看文件内容,最终解决了该问题。

 

 

  实践过程

 

   具体代码:

hello.c:

#include "hello.h"

void xyy()
{
printf("hello!\n");
}

main.c:

#include "hello.h"

int main(){
xyy();
}

hello.h:

#ifndef ___HELLO_H___
#define ___HELLO_H___
void xyy();
#endif

 

  其他:

  我选择使用Kali Linux系统编写Linux代码的主要原因有以下几点:

 

  1.全面的工具集:Kali Linux是一个专为网络渗透测试和安全应用而设计的Linux发行版,因此它包含了丰富的工具和资源,包括用于系统管理、开发和测试的工具。这使得它成为学习和实践Linux系统编程的理想平台。

  2.稳定性和安全性:Kali Linux基于Debian构建,继承了Debian的稳定性和安全性。

  3.我在大一时装过ubuntu,但之后电脑重装导致系统丢失,但之后学习网络攻防又下载了kali linux,因此我选择了kali而没有使用传统的ubuntu