前言

前言

之所以写这本书,是因为我觉得你应该对你使用的计算机有所了解。你应该可以让软件去做你想让它去做的事(当然要在它的能力范围之内)。要做到这一点,关键是必须理解软件能做什么,以及是怎么做的。这些正是本书要介绍的内容。这样你就不必对着计算机抓狂了。

如果你要学习这方面的知识,Linux是一个很好的平台,因为它是一个透明的系统。特别是大多数系统配置都存放在文本文件中,让人一目了然。难点在于了解每个组件分别负责什么,以及它们如何协同工作。

读者对象

我们学习Linux的原因可能各不相同。对于IT从业者(如系统运维人员)来说,他们需要了解本书中的几乎所有内容。对于Linux软件架构师和开发人员来说,他们同样需要了解这些内容,以便发挥操作系统的最大功效。对于只需考虑个人所用Linux系统的研究人员和学生来说,本书能够让他们理解为什么系统是那个样子的。

还有一些堪称多面手的读者,出于兴趣、谋利或其他原因而摆弄计算机,喜欢探究事情的根源,喜欢尝试不同的可能性。或许你就是其中一位。

阅读要求

虽然开发人员热爱Linux,不过并非开发人员才能阅读本书,只要你有一些基础的计算机知识即可。也就是说,你需要知道如何操作GUI(特别是能看懂各种Linux发行版的安装和配置界面),需要知道什么是文件什么是目录(文件夹)。此外,还要有心理准备随时查看系统文档或者上网搜索一些相关文章。当然,我前面提过,最重要的是你对电脑的热情。

阅读方法

要对任何技术建立起系统的认识都不是件容易的事。而说到软件系统的工作原理,就更复杂了。有时候面对大量的技术细节,读者会难以抓住重点(因为人类大脑无法同时处理太多新概念),但是如果解释得不够透彻,又会让读者一知半解,不利于后面的学习。

本书每一章都会先介绍最重要最基本的知识,以便让读者能够继续深入。为了突出重点,有些地方简化了很多内容。随着一章内容的展开,更多细节才会在最后几节出现。这些内容需要你马上就掌握吗?通常不用,我经常也会这么提醒你。如果你觉得正在阅读的内容有些枯燥难懂,可以随时跳到下一章或者稍事休息。

动手操作

你最好准备一台可以用来实际操作的Linux计算机。你可以使用虚拟机,比如我就使用VirtualBox来测试本书中的很多实例。你需要拥有超级用户(root)权限,不过多数情况下你需要以普通用户身份登录系统。我们将主要通过终端窗口或者远程会话来运行命令行。如果你之前毫无经验也无大碍,书中第2章会让你尽快上手。

书中的命令通常是像下面这样:

$ ls /
[输出结果]

你只需输入第一行粗体的文本,非粗体的文本是系统的输出结果。$是普通用户提示符。如果你是超级用户的话则是#。(详见第2章。)

本书结构

本书分为三个部分。第一部分整体介绍Linux系统以及运行Linux系统所需的常用工具和命令。随后我们会根据系统启动的大体顺序,更深入地介绍从设备管理到网络配置的各个部分。最后我们会演示系统各部分的运行方式,并介绍一些基本技巧和开发人员常用的工具。

除第2章以外,开始的几章均主要讲解Linux内核,然后逐步涉及用户空间。(如果你现在对我所说的一头雾水也没关系,我们将在第1章中介绍这些概念。)

本书的内容尽量保证对各个版本的Linux系统均适用。但要涵盖各个系统之间的差异也实在是项繁琐的工作,所以我尽量考虑两个主要的Linux版本:Debian(包括Ubuntu)和RHEL/Fedora/CentOS。本书主要针对的是桌面和服务器系统。嵌入式系统(如Android和OpenWRT)也多有涉及,但各系统之间的差异还需要你自己去探索。

第2版的新内容

本书的第1版侧重于从用户的角度来介绍Linux系统,旨在帮助读者了解系统各部分的工作原理。彼时Linux上的软件安装和配置还不是那么容易。

有幸的是,随着各种新版本的出现,这些问题已然不复存在,所以我剔除了一些较为陈旧和不太相关的内容(比如打印),以便能够更加深入地介绍Linux内核。你可能没有意识到你将会多么频繁地和内核打交道。

当然,上一版中的很多内容随着时间推移也发生了较大变化,我花了大量的精力梳理和更新了它们,特别是在Linux的启动和设备管理方面。我对很多内容也进行了重新组织,以满足当下读者的阅读兴趣与需要。

本书没有发生变化的是它的厚度。我希望读者能够尽快上手,因此会解释一些不太容易理解的细节,但我又不想让这本书变得你拿都拿不动。只要掌握了本书介绍的知识,自己再去深入探索就不是一件难事了。

我还删掉了第1版中一些关于历史背景的介绍,目的是突出重点。如果你对Linux和Unix的历史感兴趣,可以参考Peter H. Salus所著The Daemon, the Gnu, and the Penguin(Reed Media Services,2008),这本书详细介绍了我们使用的各种软件的历史沿革。

关于术语

关于操作系统中某些组件应该叫什么,一直都存在争论。甚至“Linux”是否应该叫作“GNU/Linux”也存在争论,因为其中使用了GNU项目的成果。本书中我们尽量使用通用术语,不使用拗口、生硬的词汇。

目录

  • 版权声明
  • 前言
  • 致谢
  • 第一版书评
  • 第1章 概述
  • 第2章 基础命令和目录结构
  • 第3章 设备管理
  • 第4章 硬盘和文件系统
  • 第5章 Linux内核的启动
  • 第6章 用户空间的启动
  • 第7章 系统配置:日志、系统时间、批处理任务和用户
  • 第8章 进程与资源利用详解
  • 第9章 网络与配置
  • 第10章 网络应用与服务
  • 第11章 shell脚本
  • 第12章 在网络上传输文件
  • 第13章 用户环境
  • 第14章 Linux桌面概览
  • 第15章 开发工具
  • 第16章 从C代码编译出软件
  • 第17章 在基础上搭建