目 录
第1章 入门知识..................................................................................................... - 2 - 第 2 章 shell与shell命令 .................................................................................... - 4 - 第 3 章 用户、组和密码管理............................................................................... - 9 - 第 4 章 文件系统及管理..................................................................................... - 13 - 第 5 章 进程与作业管理..................................................................................... - 17 - 第 6 章 系统安装、启动与管理......................................................................... - 21 - 第7章 软硬件管理及系统的扩充与升级........................................................... - 24 - 第8章 网络管理与网络应用............................................................................... - 26 - 第9 章 bshell编程 ............................................................................................... - 28 - 第10章 C编程基础和方法 ................................................................................. - 33 - 第11章 文件部分系统调用与标准I/O .............................................................. - 35 - 第12章 UNIX 系统进程环境............................................................................. - 40 - 第13章 文件属性与目录编程............................................................................. - 41 - 第14章 进程关系与进程控制............................................................................. - 43 - 第15章 进程间通讯............................................................................................. - 47 - 第16章 线程编程基础......................................................................................... - 49 - 第17章 终端与curses库编程............................................................................. - 50 - 第18章 数据库的使用及编程............................................................................. - 52 - 第19章 网络编程基础......................................................................................... - 55 -
第1章 入门知识
1. UNIX系统的创始人是谁?书中所提到的哪些人为UNIX的发展做出了重大贡献? 答:可参见§1.1及网络资源。
(1)Unix系统的两大发明人是贝尔实验室的Ken Thompson和Dennis M. Ritchie。(2)为UNIX系统作出贡献的有很多人,书提到的有Ken Thompson,Dennis M. Ritchie,Bill Joy,Tanenbaum,Richard Matthew Stallman(RMS),William Jolitz 和Linus Benedict Torvalds等。
2. UNIX的大部分代码是用一种流行的程序设计语言编写的,这种语言是什么? 答:C。
3. UNIX系统的特点有哪些? 答:可参见§1.1.2及网络资源。
UNIX有以下特点:多任务、多用户、并行处理能力、设备无关性、丰富的工具与Shell编程、安全可靠性与错误处理、强大的网络功能、开放性和可移植性。还有,现代的Unix/Linux系统均有良好的用户界面。
4. 什么是Linux?其创始人是谁? 答:可参见§1.2.1及网络资源。
Linux是一个功能强大的操作系统,同时它是一个自由软件,是免费的、源代码开放的,可以自由使用的UNIX兼容产品或称为类UNIX(UNIX Like)系统。Linux内核在8月25日由21岁的芬兰大学生Linus Benedict Torvalds公开发布。
5. Linux操作系统的诞生、发展和成长过程始终依赖着的重要支柱有哪些? 答:可参见§1.2.1及网络资源。
Linux操作系统的诞生、发展和成长过程始终依赖着以下五个支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。
6. 常见的Linux的发行版本有哪些?借助其它资源,简述Linux系统的特点。 答:可参见§1.2.1及网络资源。
(1)Linux的发行版本很多,常见的有Debian、Ubuntu、linux mint、Red Hat、Fedora、Deepin、Chrome OS和Andriod等。(2)Linux是某种版本的Unix,具有Unix系统的所有特点,见习题3。
7. 注销与关机有什么不同?用户如何从系统中注销?在字符界面下使用什么命令? 答:可参见§1.3.2和§1.3.3。
(1)注销是指正在工作的用户从系统中退出,以防止别有用心的人见缝插针地做非授权事情,注销是用户自己的事;关机是指关闭整个系统,系统关闭后所有用户就均无法工作了。
(2)不论用户在图形界面下工作或字符界面下工作,均可注销使自己退出系统。在字符界面下,可以使用exit和logout命令或组合键ctrl_D注销自己。
8. 运行级别的切换是怎么回事?你所用系统有哪些运行级别?如何在不同运行级间切换? 答:可参见§1.3.3。
Unix/Linux系统可以运行在不同的级别,以完成不同工作处理不同的事务,可用的运行的级别如表1-1所示。
表1-1 UNIX/Linux系统常用的运行级别或状态
级别 0 1 s|S 2 Fedora/Linux 系统关闭 单用户或系统维护模式 单用户或系统维护模式 没有NFS的完整多用户 意 义 FreeBSD 9 系统关闭 同左 未使用 未使用 Solaris 11 系统关闭 同Fedora 同Fedora 同Fedora
3 4 5 6 q|Q 没有X的完整多用户 保留 具X的完整多用户 重启动 重新检查配置文件 未使用 未使用 未使用 重启动 无 完整多用户 保留 系统关闭 重启动 同Fedora 由于表中的某些级别并不能真正的运行,比如0和6是用于系统关闭和重启动的,因此运行级别又被称为运行“状态”。 运行级别的切换可以使用init命令来实现,具体方法为: 比如
# init 6 # init 0 # init 1 # init s
# 立即重启。Fedora、FreeBSD 9 & Solaris 11 # 立即关闭。Fedora、FreeBSD 9 & Solaris 11
# 切换到单用户或系统维护模式:Fedora、FreeBSD 9 & Solaris 11 # 切换到单用户或系统维护模式:Fedora & Solaris 11
# init L # telinit L
# L为运行级别(0~6)
或
9. 在线手册是怎么组织的?以read为例,说明如何使用man对其进行帮助? 答:可参见§1.4.1。
man是传统UNIX系统的在线手册页,通过它用户可以得到某命令、系统调用或配置文件格式等的在线帮助。
在UNIX/Linux系统中,手册页被分成不同的部分(章节)。每个系统都自己的手册页,组织方式略有不同,大致情况可参考表1-3。
表1-3 man手册页的组成
章节 Fedora/Linux 1 2 3 4 5 6 7 8 9
FreeBSD 9 1 2 3 4 5 6 7 8 9 以对read帮助为例,使用方法如下:
$ man -a read $ man -S 2 read $ man -s 2 read $ man 2 read
# 对所有的read进行帮助
# 对系统调用read进行帮助(FreeBSD)
# 对系统调用read进行帮助(Fedora Linux & Solaris) # 对系统调用read进行帮助(Fedora Linux & FreeBSD)
Solaris 11 1 2 3 7 4 6 5 8、1M 9 普通用户指令部分 系统调用部分 库函数 设备及特别文件及接口 配置文件格式 游戏 公约及杂项 系统维护命令(只有超级用户可以使用) 内核及接口 内容
第 2 章 shell与shell命令
1.shell的基本功能有哪些? 解:可参见§2.1.1。
shell的基本功能有6,它们分别是:命令解释执行、系统环境设置、I/O重定向、连通管道建立、各种替换与扩展和shell编程。
2.Fedora、FreeBSD 9和Solaris11系统中的主要的目录有哪些?各有什么作用? 解:可参见§2.1.4.1。
UNIX系统的典型目录结构如图下所示。
/:系统的根目录。
/dev:系统的设备目录,其中存放着几乎所有的设备文件。 /etc:存放系统和大部分应用软件的配置文件。
/home:用户家目录所在目录。默认情况下,每创建一个用户,就会在这里新建一个与用户名同名的目录,为用户分配一个自己的空间。比如用户zh3的家目录默认为/home/zh3。
/root:root用户的家目录。在某些早期的Unix系统中,root的家目录为/。
/lost+found:被修复文件的存在目录。由于非法关机等原因造成的文件系统损坏,经修复后一些丢失的文件将以其i节点号为名并存放在这里(Linux系统使用)。FreeBSD未使用此目录。
/mnt:外来文件的挂接点。传统Unix系统用此目录来安装外来文件系统,比如光盘、U盘等移动设备或磁盘分区。在现代具有图形界面的系统中,外来文件系统或移动存储会被自动安装/media目录下。
/boot:引导程序所在目录。引导程序或软件安装在这里。
/proc:伪文件系统(也即虚拟文件系统),用于反映系统内进程运行及状态变化情况。通过它的内容可以查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来动态改变内核配置或访问系统内核参数等信息。
/usr:用户级目录。
/tmp,/usr/tmp:临时目录。FreeBSD不使用/usr/tmp。 /sbin,/usr/sbin:系统级的命令与实用程序存放目录。 /bin,/usr/bin:用户级的命令与实用程序存放目录。 /usr/include:C语言,内核编译所需要的头文件存放目录。 /lib,/usr/lib:库文件存放目录,其中有静态库和动态库。 /usr/src:系统源程序目录,编译内核时使用。
/var:通常用来存放一些经常变化的内容,大多数网络服务使用此目录。 /var/log:系统和应用程序日志存放目录。
/var/spool:邮件、新闻、打印队列等假脱机系统使用的目录。
/usr/share:存放用户共享使用的,比如各种说明文档和在线帮助等的目录,比如man手册就存放在/usr/share/man/目录内。
3.工作目录及其父目录可分别用什么表示?在如图2-3所示的目录结构中,若处在usr1目录中的用户要访问include目录中的stdio.h,可以采用什么样的路径,对应的带有路径的文件名是什么?
解:可参见§2.1.4。
工作目录也叫当前目录,可用“.”表示。父目录也叫上级目录,可用“..”表示。
若在用户自在如图2-3所示的目录内,要访问include目录中的stdio.h,可分别采用相对路径或绝对路径。使用绝对路径
时可表示为“/usr/include/stdio.h”;使用相对路径时可表示为“../../usr/include/stdio.h”。
4.Linux系统中常用的通配符有哪些?试举例说明它们的作用。 解:可参见§2.1.2。
通配符是指在模式匹配,如文件名匹配、路经名搜索、字符串查找等中起统配作用的字符。常用的通配符有“*”、“?”和“[ ]”。
(1)*:表示从它所在位置开始的到某个符合条件的结束符之间的任何字符串。例如:“f*.c”匹配以f打头的所有C语言程序。
(2)?:表示它所在位置上的任何可能的单个字符。例如:“f?.c”匹配以f打头的主名只有2个字符的C语言程序,比如f1.c、fx.c等。
(3)[ ]:表示[ ]中所含字符的任何一个。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符“-”组成。例如:[abcd]代表或a或b或c或d;[a-d]与[abcd]的作用相同。[ ]内的第一个字符若“^”或“!”(“!”在有系统中可能有问题),表示非,意为不匹配[ ]内的任何字符,例如[^a-d]表示不匹配方括号内的a~d的字符集。
说明:连字符“-”仅在方括号内且不在最前或最后时才表示字符范围,如在方括号外面或在方括号内最前或最后就成为普通字符;相反地,字符“^”或“!”只有在方括号内且位于首字符位置才起“非”的作用;“*”和“?”只在方括号外才是通配符,若出现在方括号内,就成了普通字符。
5.Unix/Linux的文件类型有哪些?试结合命令ls -l /dev的输出,描述文件的类型及用途。 解:可参见§2.1.3。
Unix/Linux的文件类型有:(1)普通文件;(2)目录文件;(3)设备文件。常见设备文件有:块设备文件(b):字符设备文件(c);命名管道设备文件(p)。除此之外,还有硬链接和符号链接等。
在命令ls -l /dev输出中,第一列首个字符为文件的类型,比如,其中的
lrwxrwxrwx 1 root root 3 2014-01-20 20:31 cdrom -> sr0 # 符号链接
drwxr-xr-x 5 root root 100 2014-01-20 20:31 disk # 目录文件
brw-r----- 1 root floppy 2, 0 2014-01-20 20:31 fd0 # 块设备文件(软件) brw-rw----+ 1 root disk 11, 0 2014-01-20 20:31 sr0 # 块设备文件(光驱)
crw-rw-rw- 1 root root 1, 3 2014-01-20 20:31 null # 字符设备文件(空设备) crw-rw-rw- 1 root tty 5, 0 2014-01-20 20:31 tty # 字符设备文件(终端设备) 分别依次描述了符号链接(l)、目录文件(d)、块设备文件(b)和字符设备文件(c)等。 6.常用的shell环境变量有哪些?怎么查询和设置环境变量? 解:可参见§2.1.7.2、§2.2.7.4和§9.4.3.1。
用户在登录成功后,启动shell的过程中,就已经定义了一些和用户的工作环境有关的变量,这些变量被称为环境变量。环境变量可用命令env来查询,用户还可以重新定义这些环境变量或新增环境变量。 (1)常用环境变量 环境变量有很多,常用的有: HOME:用户家目录的完整路径名。 IFS:命令行内部域分割符:白空格。
PATH:由冒号分隔的路径名。shell将按PATH变量中给出的顺序搜索这些目录,从中查找要执行的命令。找到的第一个与命令名称一致的可执行文件将被执行。
OLDPWD:刚刚离开的目录。 TERM:终端的类型。
PWD:当前工作目录的绝对路径名。该变量的取值随cd命令的使用而变化。 PS1:主提示符。默认情况下,超级用户的主提示符是#,普通用户主提示符是$。 PS2:辅提示符,默认为“>”。 (2)环境变量的查询
可用命令env来查询环境变量。
# env # env | grep PATH
# 查询所有环境变量 # 查询环境变量PATH
(3)环境变量的设置
环境变量的设置和定义可参阅后述的§2.2.7.4中的env命令和§9.4.3.1中的export命令。