
基础篇:包含系统简介、系统入门和shell与shell命令等三章。通过本篇的学习,用户可以掌握Linux相关的入门知识,且可以处理一般问题。管理篇:包含用户和密码管理、文件系统管理、进程与任务和管理、系统安装与系统管理、设备管理和网络管理等六章。本篇是UNIX/Linux系统的管理核心,通过本篇的学习,用户可以掌握UNIX/Linux系统的核心管理内容,胜任日常管理工作。编程与开发篇:包含shell编程和C编程环境两章。通过本篇的学习,为系统管理和开发打下基础,从而使用户的管理水平提升一个新层次。网络应用篇:包含DHCP、ftp与tftp、telnet与ssh、samba、防火墙与系统安全、Internet接入与代理服务器、DNS、邮件服务和WEB服务等九章。本篇重点介绍的是Linux的网络应用和网络安全。通过本篇的学习可以使用户了解和掌握常用服务器的工作原理和配置方法。
关于本书 Linux是计算机爱好者的操作系统,也是专业人士的操作系统。这不仅因为她有一个自由的、开放源代码的王国,更因为她在IT新技术、新应用中有不俗的表现。通过学习Linux,可使计算机爱好者掌握核心技术,成为计算机或操作系统的高手或专业人士。 UNIX是Linux系统的前身,Linux是对UNIX系统的发展,从某种意义上讲Linux就是某个版本的UNIX,因此Linux像UNIX系统一样具有可靠、高效和稳定性等特点。从Linux到处都可看到UNIX系统的身影,因此可以说,学习了Linux就等于学习了UNIX。 作为一个操作系统,Linux早已涉足政府办公、军事战略和商业运行的方方面面,在电子政务、电子商务、网站建设、嵌入式、移动开发、虚拟化、云计算、大数据等众多领域大显身手,但我们必须承认,作为操作系统的Linux,比Windows等具有更高的专业性,因此就管理和使用来讲,对用户有更高的要求。这也是编写本书的出发点之一。 本书是基于红帽(Fedora 24、CentOS 7和RHEL 7.3)及Ubuntu(16.04)系统的,它们都具有开放、创新、前瞻性等特点,可运行的体系结构包括X86、X86_64和PowerPC等多种平台。由于Linux发展迅速,图形界面在不同版本间差别很大,所以本书主要侧重字符、命令界面和基本知识、基本技能的介绍,并兼顾UNIX和Linux。 本书结构 全书分共4篇,共20章,大致内容如下。 基础篇:包含系统简介、入门和shell与shell基本操作三章,作为本书的入门。通过对本篇的学习,用户可以掌握Linux基本知识和基本操作,并能处理一般性问题。 系统管理篇:包括用户、组和密码管理,文件系统的应用及管理,进程、任务和作业管理,系统安装、扩充启动及管理,设备管理,网络管理与网络基本应用和Linux系统安全等章节。本部分是传统UNIX和现代Linux系统的管理核心,通过对本部分的学习,可使用户掌握UNIX和Linux系统的常用管理内容。 编程与开发篇:包括bshell编程、C/C++及其他编程环境两章。通过对本部分的学习,可为系统综合管理和开发打下基础,从而使用户的管理、应用与开发水平提升到一个新层次。 网络服务与应用篇:包括网络时间服务NTP、基础服务ssh和VNC、WEB服务器Apache、DHCP服务器、FTP与TFTP服务器、网络资源共享服务Samba和NFS、域名服务器DNS和邮件服务器Sendmail等,重点介绍的是Linux的网络服务及应用。通过对本部分的学习,可使用户胜任网络应用、网络服务配置与管理等工作。 本书特点 本书的组织与编写基于编者二十多年的UNIX/Linux管理、应用和开发经验,力求层次清楚、概念清晰、内容翔实、可操作性强,既便于读者循序渐进地系统学习,又能够使读者了解到Linux新的进展,具有以下特点: (1)从“应用型”出发,兼顾基本知识和基础理论介绍,具有较强的实用性和指导性。 (2)基于红帽(Fedora 24、CentOS 7和RHEL 7.3)和Ubuntu 16.04系统,具有广泛的代表性和实用性。 (3)涵盖了UNIX/Linux系统管理和应用的几乎所有内容。 (4)重点突出实例和操作步骤。 (5)强调系统安全,强化对防火墙和SELinux的支持。 (6)每章后都提供一定数量的习题和实验内容。 (7)提供有电子课件、习题解答和实验指导。 适用对象 本书作为“高等教育计算机学科‘应用型’教材系列”教材之一,适用于大专院校作为UNIX和Linux操作系统教材,也可作为网络操作系统的实例教材,还可作为UNIX和Linux系统管理者的参考书,更是UNIX和Linux系统爱好者的益友。 编者信息 本书由邵国金担任主编,褚龙现和张娜担任副主编,郭玉东教授主审。参编人员还有陈红军、董哲、沙锋、苏靖枫和蔡照鹏。 在本书的编写过程中,参考了大量的专业书籍、互联网信息和Fedora、CentOS、RHEL及Ubuntu系统在线文档、网站信息及相关其他文档,不能一一列出,在此一并表示感谢,特别对郭玉东教授的辛勤工作和大力支持表示衷心的感谢。 面对Linux的迅速更新和发展,编者对完成一个高标准的编写任务感到压力很大,限于水平和经验,加之时间仓促,疏忽之处难免,欢迎广大专家、读者批评指正。作者衷心地希望能得到大家,尤其是广大同学和老师的支持与帮助,共同交流Linux系统的课程教学经验,探讨Linux课程的教学内容和方法,从而提高教学水平和质量,进而提高Linux系统的管理和应用水平。作者邮箱:pdsshaogj@hncj.edu.cn。 编 者 2017年10月
目 录 基础篇 第1章 系统简介 2 1.1 UNIX系统简介 3 1.1.1 UNIX系统的发展历史 3 1.1.2 UNIX系统的特点 6 1.2 Linux系统简介 8 1.2.1 Linux系统的发展历史 8 1.2.2 Linux系统的特点 9 1.2.3 Linux系统的发行版本介绍 10 1.2.4 Linux系统的应用 12 习题1 13 第2章 系统入门 14 2.1 系统的开机与界面切换 15 2.1.1 系统的开机 15 2.1.2 两种操作界面及切换 16 2.2 用户的登录与注销 17 2.2.1 系统的登录 17 2.2.2 注销 19 2.2.3 CLI终端仿真界面 20 2.2.4 程序的启动 20 2.3 Linux系统的关闭与重启动 21 2.3.1 字符界面 21 2.3.2 系统的运行级别及切换 22 2.3.3 图形界面 23 2.4 Linux系统的图形界面介绍 23 2.4.1 GNOME桌面简介 24 2.4.2 Ubuntu的Unity桌面简介 26 2.4.3 设置中心(Settings) 27 2.5 Linux系统的在线帮助与资源 29 2.5.1 man 29 2.5.2 textinfo 31 2.5.3 yelp 31 2.5.4 Linux系统的其他帮助和 资源 31 2.6 LibreOffice办公套件简介 32 2.6.1 LibreOffice Writer 33 2.6.2 LibreOffice Calc 33 2.6.3 LibreOffice Impress 34 2.6.4 LibreOffice Draw 34 习题2 34 实验2 35 第3章 shell与shell基本操作 36 3.1 shell基本功能与基本概念 37 3.1.1 shell基本功能 37 3.1.2 字符与保留字 37 3.1.3 文件命名及文件类型 39 3.1.4 目录结构与路径 41 3.1.5 shell命令格式与命令编辑 43 3.1.6 标准流与输入/输出重定向 45 3.1.7 管道与三通 47 3.1.8 环境变量与变量 48 3.1.9 引号机制、命令替换与变量 替换 49 3.1.10 shell命令的执行 50 3.1.11 shell种类 51 3.2 Linux系统的基本命令 52 3.2.1 目录基本操作命令 52 3.2.2 文件操作基本命令 54 3.2.3 文件属性基本操作 60 3.2.4 文本文件编辑与操作基本 命令 62 3.2.5 日期、时间与时区管理 命令 70 3.2.6 进程管理基本命令 73 3.2.7 文件或目录比较命令 78 3.2.8 其他操作命令 82 习题3 88 实验3 89 系统管理篇 第4章 用户、组和密码管理 92 4.1 UNIX系统的用户和组 93 4.1.1 用户与uid 93 4.1.2 组与gid 93 4.2 与用户和组管理相关的文件 93 4.2.1 /etc/passwd 93 4.2.2 /etc/shadow 94 4.2.3 /etc/group 95 4.2.4 /etc/login.defs 95 4.2.5 其他文件 95 4.3 用户管理命令 96 4.3.1 增加用户(useradd) 96 4.3.2 用户删除(userdel) 98 4.3.3 用户修改(usermod) 98 4.4 组管理命令 98 4.4.1 组创建(groupadd) 99 4.4.2 组删除(groupdel) 99 4.4.3 组修改(groupmod) 99 4.5 密码管理 100 4.5.1 密码管理综述 100 4.5.2 密码管理命令(passwd) 100 4.5.3 密码管理示例 101 4.6 用户、组和密码管理图形界面 101 4.6.1 添加用户 102 4.6.2 用户属性修改 102 4.6.3 用户删除 103 4.7 与用户身份和位置相关的其他 命令 103 4.7.1 显示与用户和组相关的 身份信息(id) 103 4.7.2 显示已登录用户的信息 (who) 104 4.7.3 显示使用者的用户名 (whoami) 105 4.7.4 向系统中的指定用户发信息 (write) 105 4.7.5 向系统中已登录的所有用 户发信息(wall) 105 4.7.6 确定用户所使用的终端 设备(tty) 105 4.7.7 不退出系统而将自己切换 成其他用户(su) 106 4.7.8 以其他用户身份执行程序 (sudo) 107 习题4 109 实验4 109 第5章 文件系统管理及使用 110 5.1 文件系统权限及管理 111 5.1.1 三种权限 111 5.1.2 三类人 111 5.1.3 权限控制 111 5.1.4 默认权限与umask 112 5.2 权限管理命令 113 5.2.1 设置文件创建掩码 (umask) 113 5.2.2 改变文件的权限 (chmod) 114 5.2.3 改变文件的所有者 (chown) 114 5.2.4 改变文件的组(chgrp) 115 5.2.5 ext2+文件系统的新增属性 及其管理 115 5.3 文件系统管理 117 5.3.1 UNIX/Linux支持的文件 系统 117 5.3.2 UNIX/Linux系统使用的存 储设备 119 5.3.3 磁盘分区管理与文件系统 的创建 120 5.3.4 文件系统的使用 125 5.3.5 文件系统的检查、修复与 同步 130 5.4 与文件系统管理相关的其他命令 132 5.4.1 文件综合查找命令 (find) 132 5.4.2 文件按名查找命令 (locate) 134 5.4.3 文件复制命令(dd) 135 5.4.4 链接管理命令(ln) 136 5.4.5 特别文件创建(mknod, mkfifo) 136 5.4.6 磁盘空间和文件系统的使 用情况统计(df) 137 5.4.7 目录使用磁盘空间情况 统计(du) 138 5.4.8 数据备份与文件归档管理 (tar,cpio) 138 5.4.9 文件的压缩与解压缩 142 5.5 图形界面下的文件和目录管理 145 习题5 146 实验5 147 第6章 进程、任务与作业管理 148 6.1 程序和进程的概念 149 6.1.1 程序、进程、作业和任务 149 6.1.2 调度策略与优先级的计算 149 6.1.3 Linux操作系统的启动 149 6.1.4 0#进程与1#进程 150 6.1.5 进程状态及查询(ps) 151 6.1.6 三类进程 152 6.2 登录shell的启动与定制 153 6.2.1 用户登录过程与登录shell 的启动 153 6.2.2 用户登录控制与shell的 定制 154 6.3 Linux系统的启动过程分析 155 6.3.1 SysVinit 155 6.3.2 upstart 158 6.3.3 systemd 161 6.4 服务管理 165 6.4.1 systemctl 165 6.4.2 早期的服务管理 166 6.4.3 超级服务器(xinetd) 168 6.4.4 rc-local.service 171 6.5 进程管理与调度命令 171 6.5.1 可执行文件的setuid、 setgid权限和目录的sticky 属性 171 6.5.2 进程管理与调度命令 173 6.5.3 改变进程的家目录 (chroot) 177 6.6 任务的自动调度 179 6.6.1 at和batch 179 6.6.2 crontab 181 6.6.3 系统crontab 183 6.7 进程管理图形界面 183 习题6 183 实验6 184 第7章 系统安装、扩充、启动与管理 185 7.1 系统安装 186 7.1.1 安装任务与准备 186 7.1.2 硬盘的物理结构与分区 划分 186 7.1.3 安装Linux系统所需的基本 分区 190 7.1.4 安装过程 191 7.1.5 虚拟机的安装与使用 195 7.2 引导器(grub) 196 7.2.1 grub常用术语 196 7.2.2 操作界面 197 7.2.3 grub及其配置 198 7.2.4 系统的启动及启动参数 修改 203 7.3 软件包管理 205 7.3.1 红帽系统的软件包管理 205 7.3.2 ubuntu的软件包管理 209 7.3.3 其他格式软件包管理 212 7.3.4 图形界面 214 7.4 系统升级 214 7.5 日志管理 215 7.5.1 日志系统 215 7.5.2 常见日志文件及阅读 217 7.5.3 日志滚动 219 7.6 系统管理 220 7.6.1 系统管理的任务 220 7.6.2 系统管理工具与命令 221 7.7 内核配置与参数在线调整 226 7.7.1 内核配置、编译与安装 227 7.7.2 编译与安装新内核 229 7.7.3 模块管理 230 7.7.4 内核参数在线调整 231 习题7 231 实验7 232 第8章 设备管理 233 8.1 设备管理概述 234 8.1.1 Linux系统支持的设备 234 8.1.2 设备发现与udev简介 235 8.1.3 系统设置与查看 236 8.2 打印机的管理与使用 238 8.2.1 cups的安装 239 8.2.2 打印机安装与配置 239 8.2.3 cups系统的启动管理 242 8.2.4 打印机使用 243 8.2.5 打印任务管理 244 8.2.6 cups的配置文件 245 8.3 交换区管理 245 8.3.1 概述 245 8.3.2 使用交换设备 246 8.3.3 使用交换文件 247 8.4 串口的管理与使用 247 8.4.1 Linux系统的串口设备 247 8.4.2 串口管理程序(setserial) 248 8.4.3 串口和调制解调器管理及 通信程序(minicom) 249 习题8 251 实验8 252 第9章 网络配置、管理与基本应用 253 9.1 TCP/IP基础知识 254 9.1.1 IP地址 254 9.1.2 端口及服务 256 9.1.3 物理地址与逻辑地址 257 9.1.4 主机名及设置 257 9.1.5 网卡命名方案 258 9.2 TCP/IP配置 259 9.2.1 与网络有关的配置文件 259 9.2.2 网络服务及管理 264 9.2.3 IP地址配置 265 9.3 网络管理命令 268 9.3.1 测试网络是否通(ping) 268 9.3.2 检查网络状态(netstat) 269 9.3.3 地址解析协议缓存中的 项目管理(arp) 271 9.3.4 网络接口配置(ifconfig) 272 9.3.5 网络IP管理(ip) 273 9.3.6 网络接口的启用与停止 (ifup/ifdown) 274 9.3.7 路由表维护(route) 274 9.3.8 主机及地址查询 (nslookup/host) 276 9.3.9 网络路由跟踪 (traceroute) 277 9.4 网络应用常用命令简介 277 9.4.1 远程登录 277 9.4.2 文件传输 278 9.4.3 邮件收发 278 9.4.4 文件下载 280 习题9 280 实验9 281 第10章 Linux系统的安全 282 10.1 Linux系统安全概述 283 10.1.1 Linux操作系统的基本安 全机制 283 10.1.2 Linux系统可能遇到的安 全问题及防范策略 284 10.2 检查和监督系统的运行情况 287 10.2.1 检查网络 287 10.2.2 用ps或pstree检查进程 287 10.2.3 检查系统的日志文件 287 10.2.4 停止不需要的服务 287 10.2.5 去掉多余的具有SUID和 SGID属性的文件 288 10.3 入侵检测和事件报告 288 10.3.1 使用完整性检查工具 288 10.3.2 事件报告制度 289 10.4 防火墙 290 10.4.1 iptables 290 10.4.2 Firewalld 292 10.4.3 ufw 296 10.5 SELinux 297 10.5.1 SELinux中的安全类型和 角色 297 10.5.2 SELinux中的策略 299 10.5.3 SELinux的Targeted 策略 299 10.5.4 SELinux的策略及改变 300 10.5.5 SELinux中的布尔值及 改变 301 10.5.6 检查SELinux的状态 301 10.5.7 SELinux安全上下文 管理 302 10.5.8 SELinux的应用 304 习题10 306 实验10 306 编程与开发篇 第11章 bshell编程 308 11.1 正则表达式 309 11.1.1 字符集 309 11.1.2 shell正则表达式 311 11.2 流编辑(sed) 311 11.2.1 功能及用法 311 11.2.2 参数与说明 312 11.2.3 脚本命令 312 11.2.4 sed示例 313 11.3 模式搜索与处理(awk) 314 11.3.1 功能及用法 314 11.3.2 参数说明 314 11.3.3 记录和域 314 11.3.4 变量 314 11.3.5 操作符 315 11.3.6 控制语句 316 11.3.7 常用函数 316 11.3.8 awk程序的执行 317 11.3.9 awk使用示例 317 11.4 Bourne shell及其编程 318 11.4.1 特殊字符 318 11.4.2 I/O重定向 319 11.4.3 变量与参数 320 11.4.4 shell的状态 321 11.4.5 shell的调用与变量传递 322 11.4.6 shell程序设计 323 11.4.7 命令行参数与选项的 处理 336 11.4.8 shell程序调试 340 11.4.9 shell脚本程序格式 341 习题11 344 实验11 345 第12章 C/C++及其他编程环境 347 12.1 编译器 348 12.1.1 功能及用法 348 12.1.2 参数及说明 348 12.1.3 示例 349 12.1.4 gcc/g++的工作过程 351 12.2 头文件 351 12.3 链接器与库文件 352 12.4 静态库 352 12.4.1 静态库的管理 352 12.4.2 构造静态库 353 12.4.3 使用自己的库 353 12.5 共享库 354 12.5.1 共享库构造 354 12.5.2 共享库的管理 354 12.5.3 共享库编程 355 12.5.4 共享库使用示例 356 12.6 make与Makefile 357 12.6.1 make的用法简介 357 12.6.2 Makefile文件 358 12.6.3 Makefile示例 360 12.7 调试器(gdb) 363 12.7.1 gdb功能 363 12.7.2 gdb基本命令 364 12.7.3 程序调试方法 364 12.8 UNIX/Linux其他编程工具简介 366 12.8.1 常用库与GNOME/GTK 开发 366 12.8.2 KDevelop/Qt开发 367 12.8.3 eclipse 367 12.8.4 Java开发 368 12.8.5 Perl开发 369 12.8.6 数据库开发 370 12.8.7 PHP开发 371 12.8.8 Objective-C开发 371 12.8.9 Python 372 12.8.10 R语言 373 12.8.11 虚拟化、云计算和大数 据应用 376 习题12 377 实验12 378 网络服务与应用篇 第13章 网络时间服务NTP 380 13.1 NTP协议 381 13.1.1 NTP简介 381 13.1.2 NTP的工作模式 381 13.1.3 NTP服务器选择 382 13.2 通过ntp配置NTP 382 13.2.1 软件包安装 382 13.2.2 服务管理 382 13.2.3 配置文件及配置 383 13.2.4 文件/etc/sysconfig/ntpd和 /etc/default/ntp 385 13.2.5 防火墙设置 385 13.2.6 配置文件实例 385 13.2.7 配置测试 386 13.2.8 无NTP服务的NTP客 户端 388 13.3 通过chrony配置NTP 389 13.3.1 chrony软件包安装 389 13.3.2 服务管理 389 13.3.3 配置文件chrony.conf及 默认配置 390 13.3.4 配置实例 391 13.3.5 配置测试 392 13.3.6 其他说明 394 习题13 394 实验13 394 第14章 基础服务OpenSSH和VNC 395 14.1 OpenSSH 396 14.1.1 OpenSSH协议 396 14.1.2 软件安装与启动管理 396 14.1.3 配置文件与服务器设置 397 14.1.4 客户端及应用 400 14.1.5 与防火墙和SELinux的 关系 402 14.2 VNC 403 14.2.1 红帽的TigerVNC 403 14.2.2 客户端及使用 405 14.2.3 Ubuntu的x11vnc 405 习题14 406 实验14 406 第15章 Web服务器Apache 407 15.1 Apache概述 408 15.2 Apache的安装和启动 408 15.2.1 Apache的安装 408 15.2.2 Apache服务器启动管理 409 15.2.3 Apache服务的测试 410 15.3 Apache的配置文件和配置指令 410 15.3.1 Apache主配置文件的 结构 410 15.3.2 Apache的配置指令 411 15.4 Web服务器配置实例 420 15.4.1 Web服务器配置实例 421 15.4.2 Fedora的图形配置工具 425 15.5 httpd与防火墙和SELinux的 关系 425 15.5.1 httpd与防火墙的关系 426 15.5.2 httpd与SELinux的关系 426 习题15 427 实验15 427 第16章 DHCP服务器 428 16.1 DHCP介绍 429 16.1.1 DHCP协议 429 16.1.2 DHCP的工作过程 430 16.2 DHCP服务器的安装与启动 管理 431 16.2.1 DHCP服务器软件安装 431 16.2.2 启动管理 431 16.3 DHCP的配置 432 16.3.1 配置文件 432 16.3.2 配置文件中的定义、参数 和选项及意义 434 16.4 DHCP规划 436 16.4.1 在不同的网络中使用 DHCP 436 16.4.2 设置DHCP中继 436 16.4.3 设置备份DHCP 437 16.5 DHCP客户端设置 438 16.6 DHCP与防火墙的关系 438 习题16 439 实验16 439 第17章 FTP与TFTP服务器 440 17.1 FTP与FTP服务器概述 441 17.1.1 FTP的相关概念 441 17.1.2 Linux系统的FTP服 务器 443 17.2 vsftpd服务器 444 17.2.1 vsftpd服务器的安装与 启动 444 17.2.2 vsftpd的配置 445 17.2.3 vsftpd.conf的常见应用 配置 450 17.3 FTP服务器的使用 451 17.3.1 用浏览器访问 451 17.3.2 使用客户端命令ftp 451 17.4 TFTP与TFTP服务器的使用 简介 457 17.4.1 TFTP协议 457 17.4.2 TFTP的安装和配置及 应用 457 17.5 与防火墙和SELinux的关系 459 17.5.1 与防火墙的关系 459 17.5.2 与SELinux的关系 460 习题17 460 实验17 461 第18章 网络资源共享服务 462 18.1 网络资源共享简介 463 18.2 Samba服务 463 18.2.1 SMB协议与 Samba 463 18.2.2 Samba的安装与启动 管理 465 18.2.3 Samba的配置 466 18.2.4 配置共享打印机 471 18.2.5 Samba共享服务使用 472 18.2.6 Samba图形界面配置 474 18.2.7 关于防火墙和SELinux的 说明 475 18.3 NFS服务器 476 18.3.1 NFS介绍 476 18.3.2 NFS文件系统配置 477 18.3.3 NFS系统使用 480 18.3.4 NFS的其他功能 481 18.3.5 关于NFS的其他说明 484 习题18 485 实验18 485 第19章 域名服务器DNS 486 19.1 DNS概述 487 19.1.1 IP与域名的转换 487 19.1.2 域名空间和区域 488 19.1.3 DNS查询 489 19.1.4 客户端与域名解析相关的 配置文件 490 19.1.5 DNS服务器的类型 490 19.2 BIND 491 19.2.1 BIND简介 491 19.2.2 安装BIND 491 19.2.3 bind的启动管理 492 19.2.4 DNS服务器的运行方式及 工作目录 492 19.2.5 DNS服务器配置基础 493 19.3 DNS服务器配置示例 499 19.4 测试DNS服务器 501 19.5 DNS与防火墙和SELinux的 关系 503 19.5.1 DNS与防火墙的关系 503 19.5.2 DNS与SELinux的关系 504 习题19 504 实验19 504 参考文献 505
河南城建学院 计算机学院副院长 教授,兼任软件学院副院长。主要教授Linux等程序设计教程,出版著作多部。
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0330460