2022-2023-1 20201324《信息安全系统设计与实现(上)》第1章
1 本书目标
- 强化学生的编程背景知识:编程语言->编程开发
- 动态数据结构应用:C结构、指针、链表、链树
- 进程概念和进程管理
- 并发编程:线程的应用
- 定时器和定时功能
- 信号、信号处理和进程间通信
- 文件系统
- TCP\IP和网络编程
2 关于Unix
- AT&T Unix
- Berkeley Unix
- HP Unix
- IBM Unix
- Sun Unix
3 关于Linux
Linux(Linux 2017)是一个类Unix系统。它最初是Linus Torvalds在1991年为基于Intel x86的个人计算机开发的一个实验性内核。Linux包含其他Unix系统的许多特性。在某种意义上,它是由各种最为流行的Unix系统组合而成。
- Debian Linux
- Ubuntu Linux
- Linux Mint
- 基于RPM的Linux
- Slackware Linux
4 虚拟机上的Linux
大多数个人计算机用户不愿在同一台机器上同时安装Windows和Linux。通常的做法是在Windows主机内的虚拟机上安装和运行Linux。
-
VirtualBox
-
VMware
-
安装VMware Player
-
将Ubuntu安装到VMware虚拟机上
Ubuntu装有gcc包。安装Ubuntu后,用户可以创建和编译C源文件,并运行C程序
-
-
双启动的Slackware和Ubuntu Linux
5 使用Linux
(1)内核
- 在典型的Linux系统中,Linux内核映像位于/boot目录中
- Linux内核映像:vmlinuz-generic-VERSION_NUMBER。一个可启动的内核映像有三部分组成:|BOOT|SETUP|linux kernel|
- 启动程序:GRUB LILO HD
(2)启动
- 运行级别:单用户模式启动
- 登录进程:各登录进程在终端打开三个文件流stdin(用于输入)、stdout(用于输出)、stderr(用于错误输出),等待用户登录
(3)执行
- 用户进程执行命令解释程序sh,后者将提示用户执行命令
- sh将直接执行一些特殊命令
- 非特殊命令通常是可执行文件。对于非特殊命令,sh会复刻子进程并等待该子进程终止
6 使用Ubuntu Linux
- 在台式机或笔记本电脑上安装Ubuntu时,需要输入用户名和密码来创建一个默认主目录为“/home/username”的用户账户。当Ubuntu启动时,它会立即在用户环境中运行,因为其已自动登录默认用户。
- 用户为普通用户,而不是根用户或超级用户,要运行任何特权命令,用户必须输入
sudo command
,接下来会验证用户的密码 - 用户的“PATH”(路径)环境变量设置通常不包括用户的当前目录。为在当前目录下运行程序,用户每次必须输入./a.out。为方便起见,用户应更改路径设置,以包含当前目录。在用户的主目录中,创建一个包含以下代码的.bashrc文件:
PATH=$PATH:./
。用户每次打开伪终端时,sh都会先执行.bashrc文件来设置路径,以包含当前工作目录。 - 在64位Linux下,使用
gcc -m32 t.c # compile t.c into 32-bit code
生成32位代码。若64位Linux不采用-m32
选项,则用户必须安装适用于gcc的附加支持插件,才能生成32位代码。 - Ubuntu具有友好的GUI用户界面。许多用户都习惯于使用GUI,以至于产生了过度依赖,这往往需要反复拖动和点击指向设备,从而浪费了大量时间。在系统编程中,用户还需要学习如何使用命令行和sh脚本,它们比GUI要通用和强大得多。
7 Unix\Linux文件系统组织
Unix/Linux文件系统采用树形组织结构。
(1)文件类型
(1)目录文件:一个目录可能包含其他目录和(非目录)文件。
(2)非目录文件:非目录文件要么是“REGULAR”(常规)文件,要么是“SPECIAL”(特殊)文件,但只能是文件系统树中的叶节点。非目录文件可进一步分为:
- 常规文件:常规文件也称为“ORDINARY”(普通)文件。这些文件要么包含普通文本,要么包含可执行的二进制代码。
- 特殊文件:特殊文件是
/dev
目录中的条目。它们表示I/O设备,可进一步分为:- 字符特殊文件:字符I/O,如/dev/tty0、/dev/pts/l等。
- 块特殊文件:块I/O,如/dev/had、/dev/sda等。
- 其他类型,如网络(套接字)特殊文件、命名管道等。
(3)符号链接文件:属于常规文件,其内容为其他文件的路径名。因此,这些文件是指向其他文件的指针。例如,Linux命令ln -s aVeryLongFileName myLink
可创建一个符号链接文件“mylink”,其指向“aVeryLongFileName”。对“mylink”的访问将被重定向到实际文件“aVeryLongFileName”上。
(2)文件路径名
Unix/Linux文件系统树的根节点(用“/”符号表示)称为根目录,或简称为根。文件系统树的每个节点都由以下表单的路径名指定:
/a/b/c/d
OR a/b/c/d
以“/”开头的路径名为绝对路径名,反之则为相对于进程当前工作目录(CWD)的相对路径名。当用户登录到Unix/Linux时,CWD即被设为用户的主目录。CWD可通过cd(更改目录)命令更改。pwd命令可打印CWD的绝对路径名。
(3)Unix/Linux命令
①常用命令
ls:ls dirname:列出CWD或目录的内容
cd dirname:更改目录
pwd:打印CWD的绝对路径名
touch filename:更改文件名时间戳(如果文件不存在,则创建文件)
cat filename:显示文件内容
cp src dest:复制文件
mv src dest:移动或重命名文件。
mkdir dirname:创建目录
rmdir dirname:移除(空)目录
rm filename:移除或删除文件
ln oldfile newfile:在文件之间创建链接
find:搜索文件
grep:搜索文件中包含模式的行
ssh:登录到远程主机
gzip filename:将文件压缩为.gz文件。
gunzip file.gz:解压.gz文件
tar -zcvf file.tgz .:从当前目录创建压缩tar文件
tar -zxvf file.tgz:从.tgz文件中解压文件
man:显示在线手册页
zip file.zip filenames:讲问价压缩为.zip文件
unzip file.zip:解压.zip文件
其中,我又关于.gzip .tar .zip做了一个辨析Linux中 .gzip .tar .zip的区别
②运行情况
(4)Linux手册页
Linux将在线手册页保存在标准/usr/man目录下。在Ubuntu Linux中,手册页保存在/usr/share/man目录下。手册页分为不同类别,用man1、man2等表示。
man是一个程序,可读取手册页并以用户友好的格式显示其内容。下面是使用手册页的一些例子。
man ls:显示man1中ls命令的手册页。
man 2 open:显示man2中open函数的手册页。
man strtok:显示man3中strtok函数的手册页等。
man 3 dirname:显示man3(而非man1)中dirname函数。
man ls
运行结果
如有需要,应查看这些手册页,了解如何使用特定的Linux命令。很多所谓的Unix/Linux系统编程书籍实际上都是Unix/Linux手册页的浓缩版。
8 Ubuntu Linux系统管理
(1)用户账户
与在Linux中一样,用户账户信息保存在/etc/passwd文件中,该文件归超级用户所有,但任何人都可以读取。在表单的/etc/passwd文件中,每个用户都有一个对应的记录行:
loginName:x:gid:uid:usefInfo:homeDir:initalProgram
其中第二个字段“x”表示检查用户密码。加密的用户密码保存在/etc/shadow
文件中。shadow文件的每一行都包含加密的用户密码,后面是可选的过期限制信息,如过期日期和时间等。当用户尝试使用登录名和密码登录时,Linux将检查/etc/passwd文件和/etc/shadow文件,以验证用户的身份。用户成功登录后,登录进程将通过获取用户的gid和uid来转换成用户进程,并将目录更改为用户的homeDir,然后执行列出的initialProgram,该程序通常为命令解释程序sh。
(2)添加新用户
我们可以假设:用户想添加一名家庭成员,以便使用同一台计算机。与在Linux中一样,Ubuntu支持“adduser”(添加用户)命令,运行方式如下:
sudo adduser username
它通过为新用户创建账户和默认的主目录/home/username来添加新用户。此后,Ubuntu将在“About The Computer”(关于本电脑)菜单中显示用户名列表。新用户可通过选择新用户名来登录系统。
(3)sudo命令
出于安全原因,Ubuntu禁用了根或超级用户账户,这可防止任何人以根用户身份登录(其实也不完全是,有一种方法可以,但不方便透露)。sudo(“超级用户执行”)允许用户提升到超级用户特权级别。完成命令执行后,用户进程将恢复到原来的特权级别。为确保能够使用sudo,用户名必须保存在/etc/sudoers文件中。为确保用户能够发出sudo,只需在sudoers文件中添加一行,如下所示:
username ALL(ALL) ALL
但/etc/sudoers文件的格式非常严格。文件中的任何语法错误都可能破坏系统安全性。Linux建议只使用特殊命令visudo来编辑该文件,该命令可调用vi编辑器,但需要检查和验证。