《信息安全系统与设计》学习笔记第一二章
第一章:引言
第一章主要内容为:
- 本书大致目标
- 强化编程背景知识
- 动态数据结构应用:C结构、指针、链表、链树
- 进程概念和进程管理
- 并行计算:线程
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCP\IP和网络编程:TCP\IP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型
- Unix/Linux操作系统及其历史
(1) Unix
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix
(2) Linux - Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
- ubuntu操作系统在主机或者虚拟机上的安装
- VirtualBox
- VMware Workstation
- 部分简单的unix/linux命令、文件类型、文件组织系统
(1)常用命令(列出与用户有关)
- user name :列出文件所有者为name的文件
- touch filename:新建文件或修改文件时间戳
- ls [dirname]:列出cwd或指定目录内容(可以与tree配合使用)
- history:查看历史命令
- sudo adduer username:添加新用户
(为确保用户可以发出sudo,a、用户名必须保存在/etc/sudoers文件中,sudoers文件中必须包含 username ALL(ALL) ALL) - sudo su :切换至根用户(书中不方便透露的内容)
(书中说明了Ubuntu禁用了root,sudo命令仅允许用户以超级用户的身份执行命令,执行完后恢复之前级别以提高安全系统) - passwd username:修改用户密码
...
(2)文件类型
- 目录文件
- 非目录文件
A.特殊文件
B.常规文件 - 符号链接文件(类似与快捷方式)
(文件路径名可分为绝对路径和相对路径,pwd命令可以打印cwd的绝对路径名)
(3)文件组织系统
Unix/Linux系统采用树形组织结构,在Linux中文件系统树中的每一个节点都由文件组成。用tree命令可以打印看见组织情况。
第二章:编程背景
第二章主要内容为:
- Linux操作系统中的三款文本编辑器vim、gedit、emacs
(1)vim
- 命令模式:输入命令
- 插入模式:输入和编辑文本
- 末行模式:保存文件并退出
(2)gedit
gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。
(3)emacs:
功能强大,书中涉及到的编辑器大多是emacs,使用sudo apt-get emacs命令安装,使用emacs filename命令编辑相应文件。
- 程序开发
(1)变量
c语言程序中的变量可分为全局变量、局部变量、静态变量、自动变量和寄存器变量。其中,全局变量在函数外定义。局部变量在函数内定义。该内容在大一时已经学过,这里是再复习一遍。
(2)程序开发基本流程
- 创建源文件。
- 用gcc把源文件转换成二进制可执行文件:
使用gcc程序,它有三个步骤:第一步:将c源文件转换为汇编代码文件。第二步:把汇编代码转换为目标代码(通常是二进制代码)。第三步:链接。
A.预处理:gcc -E xx.c -o xx.i
B.编译(将C语言文件转换为汇编代码文件):gcc -s xx.i xx.s
C.汇编(处理完之后通常是二进制代码):gcc -c xx.s xx.o
二进制可执行文件名为a.out。a.out的内容包括4个部分:
a.文件头:包含a.out文件的加载信息和大小
b.代码段:也叫正文段,代码段从标准c启动代码crt0.o开始
c.数据段
d. 符号表
D.链接:
静态链接:gcc -static xx.c -L[dirname] -l[libname]
动态链接: gcc xx.c -L[dirname] -l[libname]
示意图如下:
(3)makefile
makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile是在linux系统下设计大型项目所必须的文件,可以使整个工程编译自动化,极大提升开发效率。
makefile组成:
- 目标项(创建或更新的文件,也可以是make程序要引用的指令或标签)
- 依赖项
- 规则(使用依赖项列表构建目标项需要的命令)
(4)高级语言和数据结构相关知识
书本后面介绍很多在之前高级语言课和数据结构课中学过的知识,包括C语言结构体、数组、指针、树、二叉树(含遍历等操作)、链表(含创建、删除、增添、排序等操作)。这部分书本介绍的内容相对前面linux系统的知识来说熟悉了很多,因此看得较快。
问题和解决
用sudo apt-get install emacs命令下载emacs出错。
用sudo apt-get remove --auto-remove emacs命令卸载后重装,仍然有相同的错误。找网上的博客也都不行。
最后在重新安装虚拟机后重新下载,成功运行。