Linux/Unix技术丛书
点击这里查看第二章:准备
点击这里查看第三章:数据流
Linux哲学
The Linux Philosophy for SysAdmins: And Everyone Who Wants To Be One
[美] 戴维·博特(David Both)著
卢 涛 李 颖 译
第一部分
导 论
■第1章 Linux哲学简介
■第2章 准备
本书的第一部分介绍Unix哲学和原始Linux哲学,其中后者直接源自Unix哲学,还会介绍Unix和Linux的开发历史与参与者,以及这些开发者是如何将起先的Unix哲学和后来的Linux哲学付诸实现的。
我制定自己的哲学的理由和动机在很大程度上是原始Linux哲学在应用于系统管理员时存在一些不足。
书中有一些动手实验,以实现大多数系统管理员最喜欢的学习类型—从实践中学习。第一部分将为这些实验做准备。运行实验需要Linux计算机应具备的一整套最低配置和一个U盘。
本书中的实验都设计得很简短。它们的主要目的是帮助读者理解系统管理员的Linux哲学。
第1章
Linux哲学简介
Unix哲学是造就Unix独特和强大的重要组成部分。关于Unix哲学的文章有很多。Linux哲学本质上与Unix哲学基本相同,因为它直接来自Unix。
最初的Unix哲学主要面向系统开发人员。事实上,由Ken Thompson和Dennis Ritchie领导的Unix开发人员在设计Unix的过程中采取了一种对他们有意义的方法,他们创建规则、指导方针和程序化的方法,然后将它们设计到操作系统的结构中。这对系统开发人员来说效果很好,而且(至少部分)适用于系统管理员。在Mike Gancarz的优秀著作《Unix哲学》中,他编纂了来自Unix操作系统创始人的指导方针集合,后来Gancarz先生又把它更新为《Linux/Unix设计思想》。
Eric S. Raymond的另一本书《Unix编程艺术》(The Art of Unix Programming)提供了作者在Unix环境中编程的哲学观点。它也有点像Unix的发展历史,因为它是作者亲身经历和回忆的。此书也可在互联网上免费获取。
我从这三本书中学到了很多东西。它们对Unix和Linux程序员都有巨大的价值。每个Linux程序员、系统管理员和开发运营人员都应该熟读《Linux/Unix设计思想》以及《Unix编程艺术》。
我持续使用计算机的时间超过了45年。直到我开始使用Unix和Linux并开始阅读有关Unix、Linux和它们共有的通用哲学的一些文章及书籍时,我才理解Linux和Unix世界中的许多事情为什么会实现成现在的样子。
在撰写本书时,我已经使用Unix和Linux工作了20多年,作为系统管理员,Linux哲学对我自己的效率和有效性有巨大贡献。我一直努力遵循Linux理念开展工作,我的经验是,不管上司(PHB,Pointy-Haired-Boss)的压力多大都严格遵守它,从长远来看,这么做总会带来好处。
原始的Unix和Linux哲学适用于操作系统的开发人员。虽然系统管理员可以将许多原则应用于他们的日常工作,但仍缺少许多解决系统管理员独有问题的重要原则。
在我的Unix和Linux职业生涯中,我非常幸运能够遇到一些优秀的导师。他们帮助我树立了不怕失败的信心。因为他们总是让我自己解决我造成的问题,所以当我遭遇失败的时候,我从中学到的东西远超任务正常运行时。这些专家担任系统管理员的时间比我长许多年,他们从来没有因为失败而责备我或惩罚我—他们的信条是,“如果你失败了,你就学会了。”我学到了很多东西。他们教给我的一个重要部分是Linux哲学,但他们也教会了我他们自己的哲学,那些哲学有助于填补原始哲学的缺失部分。
因此,持续使用Linux和Unix的这么多年来,我已经制定了自己更直接地应用于系统管理员的日常生活和任务的哲学。我的哲学部分基于最初的Unix和Linux哲学,以及我的导师的哲学。当我决定编写自己的书,一本针对当今系统管理员需求的书时,我从这些原则开始,但随着写作的进展,这种哲学的结构和性质变得前所未有的清晰。事实证明,这种哲学与最初的Linux哲学有很大的不同。直到那时我才意识到我们多么需要一种专门针对系统管理员的新哲学。我把这种新哲学称为“系统管理员的Linux哲学”。
本书是我创造新哲学的成果,它提供了一种独特的实践方法,大家可以藉此成为更好的系统管理员。我的成长离不开社区的培养,而且它帮助我变得更加自信,我想把这本书及其揭示的哲学回馈给社区。
在本书中大部分地方会将“系统管理员的Linux哲学”简称为“哲学”。
1.1 我是系统管理员吗
由于本书适用于系统管理员,因此你需要了解自己承担的是否是系统管理员工作。*将系统管理员定义为“负责计算机系统(特别是多用户计算机,例如服务器)的维护、配置和可靠运营的人员”。根据我的经验,这个系统可以包括计算机和网络硬件、软件、机架和机箱、计算机房或空间等。
典型的系统管理员工作包括大量任务。在小型企业中,系统管理员可能负责与计算机相关的所有事情。在较大的环境中,多个系统管理员可能共同负责保持运行所需的所有任务。在某些情况下,你甚至可能不知道你是系统管理员,你的经理可能只是简单地告诉你要开始维护办公室中的一台或多台计算机—这就会使你成为系统管理员,无论你喜欢与否。
术语“DevOps”用于描述以前互相独立的开发和运营人员的交集。在过去,这主要是教授系统管理员编写代码,但现在的重点转向教授程序员如何执行运营任务。参与系统管理员任务使得这些人至少在部分时间内也是系统管理员。在思科工作时,我有一个DevOps类型的工作。部分时间我编写代码来测试Linux设备,其余时间我是这些经过测试的设备所在实验室中的系统管理员。在我的职业生涯中,这是一段非常有趣和有益的时间。
下面的清单可以帮助你确定自己是不是系统管理员。如果符合其中的几条,你就是一名系统管理员。
1)你认为这本书可能很有趣。
2)人们经常要求你帮助他们使用计算机。
3)每天早上检查服务器,然后再做其他事情。
4)编写shell脚本以自动完成简单的任务。
5)共享shell脚本。
6)你的shell脚本使用开源许可证进行许可。
7)你知道开源意味着什么。
8)你记录自己所做的一切。
9)你破解无线路由器以安装Linux软件。
10)你发现计算机比大多数人更容易交流。
11)你理解:(){ :|:& };:
12)你认为命令行很有趣。
13)你想完全掌控。
14)你是root用户。
15)你理解应用于软件时,“免费”与“*”之间的区别。
16)你在机架机箱中安装了计算机。
17)你将标准CPU冷却风扇更换为散热更多的风扇。
18)你购买配件并组装自己的计算机。
19)你为CPU使用液体冷却。
20)你可以在所有的东西上安装Linux。
21)你有一个Raspberry Pi连接到你的电视。
22)你使用Raspberry Pi作为家庭网络的防火墙。
23)你运行自己的电子邮件、DHCP、NTP、NFS、DNS或SSH服务器。
24)你破解了家用计算机,以用更快的速度更换处理器。
25)你已在计算机中升级BIOS。
26)由于经常更换配件,因此将盖板从计算机上卸下。
27)ISP提供的路由器处于“直通”模式。
28)你使用Linux计算机作为路由器。
29)其他……
明白了吧。我可以列出更多可能使你成为系统管理员的东西,但那将会有数百个条目。我相信你可以想到更适合你的东西。
1.2 哲学的结构
系统管理员的Linux哲学有三个层次,类似于马斯洛的需求层次这些层次也通过逐步提高的领悟水平体现着我们的成长。
底层是基础层—担任系统管理员执行最低级的工作需要知道的基本命令和知识。中间层包含在基础层上构建,并告知系统管理员的日常任务的实用原则。顶层包含满足系统管理员的更高要求,以及鼓励并使我们能够分享知识的原则。
本书由三部分组成,分别对应哲学的三个层次,如图1-1所示。
哲学的第一层也是最基本的一层,它奠定了基础。我们将介绍“Linux的真相”、数据流、标准输入输出(STDIO)、转换数据流,以及“一切都是文件”的含义。随着工作的开展,我们会学到很多新命令,学到如何在简单的命令行程序中有效地使用它们,以及如何利用一切都是文件的事实。本书第二部分对这个基础层进行了详细探讨。
然后我们开始探索哲学的中间层,在此处,功能成为我们的行动指南。为了更好地利用命令行,我们开始扩展命令行程序,以创建经过测试且可维护的shell程序,我们可以保存并可以重复使用甚至共享它们。我们成为“懒惰管理员”并开始自动化一切。我们适当地使用Linux文件系统分层结构并以公开格式存储数据。哲学的功能部分见第三部分。
在第四部分我们进入哲学的最高层—领悟层。当我们开始不仅仅只是执行系统管理员任务并完成工作时,我们对Linux设计的优雅性和简洁性的理解已经完善。我们开始努力优雅地完成自己的工作,保持解决方案简单,简化现有但复杂的解决方案,并创建可用且完整的文档。我们开始只是为了获得新知识而探索和实验。在领悟阶段,我们开始将知识和方法传递给那些新的专业人员,积极支持我们最喜欢的开源项目。
在现实生活中,哲学的层次很少是泾渭分明的。如何运用和应用哲学的原则可能会因环境、上司、我们的培训水平以及我们目前对哲学的理解而有所不同。
1.3 谁应该读这本书
如果你是系统管理员或有志于此职业,你应该阅读本书。如果你至少履行系统管理员的部分职责,即使这不是你的职位,你也应该阅读本书。如果你在做开发运营工作,你应该阅读本书。如果你是一台或多台Linux计算机的root用户,你应该阅读本书。如果你经常使用和喜欢命令行,你应该阅读本书。如果你认为命令行既有趣又强大,你应该阅读本书。下图中的奶牛也希望你阅读本书。
如果你想成为本领高强远超凡人的Linux系统管理员;如果你想成为其他人在出麻烦时转身求助的系统管理员—那么这本书适合你。
本书与学习新命令无关。相反,它讲述的是使用你应该熟悉的常见和众所周知的命令在命令行中阐明Linux的底层结构。可以把这本书以及你将在练习中使用的命令当作体检时医生用来揭示人体内部的工具,如X射线、CT扫描和核磁共振成像。本书将展示如何使用一些简单的Linux命令来揭示GNU/Linux的底层结构。
本书旨在揭示和说明命令行的强大功能与灵活性,以及支持这些特征的设计和使用原则。了解如何从Linux命令行中提取最多信息可以帮助你成为更好的系统管理员。
我假设本书的读者至少有一整年的Linux命令行界面经验,最好是使用bash shell,但任何shell都可以。你应该熟悉许多Linux命令。
我期望你已经知道如何使用适当的命令执行大部分的系统管理员工作,并能够进行调整以使用适当的设备。因此,当我告诉你,例如,“将U盘挂载在/mnt上”时,你明白我的意思并能够确定要挂载的设备文件,使用mount命令执行挂载,以及根据需要访问已挂载的设备,以便创建或查看内容。
你还应该在一台或多台Linux计算机上具有root访问权限,并且至少已执行一些系统管理员任务满六个月。如果你在家中的一台或多台计算机上安装了Linux,则符合此要求并应阅读本书。
1.3.1 但我不满足这些要求
也许你不符合之前提出的任何要求,但无论你是想成为系统管理员还是有兴趣了解系统管理员的Linux哲学,都可以继续阅读本书。在这种情况下,我试图提供足够的信息,使你可以执行大多数实验。如果确实遇到问题,可与当地的Linux用户组联系。世界上有很多这种用户组,我发现这些用户组的成员往往非常乐于助人。
如果你有兴趣了解有关使用Linux命令行和学习系统管理技能的更多信息,我推荐下面三本书。当你进行本书中的实验时,它们将成为很好的参考。
1)Pro Linux System Administration; Matotek, Dennis, Turnbull, James, LIEVERDINK, PETER; Apress; ISBN 978-1-4842-2008-5。
2)Beginning the Linux Command Line; van Vugt, Sander; Apress; ISBN 978-1-4302-6829-1。
3)A Practical Guide to Linux Commands, Editors, and Shell Programming Third Edition; Sobell, Prentice Hall; ISBN 978-0-13-308504-4。
这三本书应该能够让你学习使用Linux命令行和系统管理。但最好的方法是尽可能多地亲自动手。
1.3.2 谁不适合读这本书
如果你只是想使用你的网络浏览器、发送电子邮件,并且可能使用LibréOffice Writer程序创建一些文档,并不关心Linux幕后发生的事情,而且是依赖他人来修复你的计算机的问题,那么本书不适合你。
如果你的唯一目的是要了解高级命令以及如何使用它们—这本身就是一个令人钦佩的目标—本书也不适合你。
1.4 Linux的真相
Linux命令行的惊人功能在最初引自Unix的以下引言中暗示了。它也适用于Linux。
Unix的目的并不是阻止用户做傻事,因为那样也会阻止他们做聪明的事情。
—Doug Gwyn
这句话总结了Unix和Linux最重要的事实—操作系统必须信任用户。只有通过扩展这种完全的信任度,才能让用户充分利用操作系统所能提供的全部功能。这个事实适用于Linux,因为它作为Unix的直接后继者而传承。
1.5 限制性操作系统
保护用户免受其拥有的能力损害的操作系统是从下面的基本假设开始设计的,即用户不够聪明或知识不够渊博,从而无法信任他们拥有计算机实际可以提供的全部功能。这些操作系统是限制性的,并具有通过设计强制执行这些限制的用户界面—命令行和图形。这些限制性的用户界面迫使普通用户和系统管理员进入一个没有窗户的封闭房间,然后关门并将其锁上。上锁的房间阻止了他们做任何Gwyn先生提到的那些聪明的事情。
这种限制性操作系统的命令行界面提供相对较少的命令,对任何人可能采取的可能行为提供事实上的限制。一些用户觉得这很舒服。但有些人(包括我)不会这么认为。
1.6 Linux是开放和免费的
Linux从一开始就设计为开放和免费的,因为用户和系统管理员应该在自己的领域内对操作系统的所有方面进行完全访问。结果是我们可以用Linux做那些非常聪明的事情。开放和免费还有其他含义,例如免费Libré开源软件(FLOSS)和免费啤酒,但该讨论适用于其他书籍。
即使是最有经验的用户在使用Linux时也可能做“傻事”。我的经验是,利用开放型操作系统提供的全部功能,可以更轻松地从我自己不那么罕见的愚蠢中恢复。我发现大多数时候,几条命令就可以解决问题,甚至无须重启。有几次,我不得不切换到较低的运行级别来解决问题。只有在很少的情况下,才需要启动到恢复模式来编辑我故意损坏的配置文件,这会导致严重的问题,包括无法启动。需要了解Linux的基本理念、结构和技术,以便能够充分释放其能力,尤其是当事情被弄糟时。只需要对系统管理员知识有所了解,就可以充分发挥Linux的潜力。
1.7 真正的知识
任何人都可以记住或学习命令和程序,但死记硬背出来的东西不是真正的知识。如果没有掌握Linux的哲学以及在Linux的优雅结构和实现中体现这一点的相应知识,就不可能应用正确的命令作为工具来解决复杂的问题。我见过一些Linux知识渊博的聪明人却无法解决一个相对简单的问题,因为他们不了解表象下面结构的优雅。
作为系统管理员,我在许多工作中的部分责任是协助雇用新员工。我参加了许多技术面试,面试过一些通过了许多微软认证并且有漂亮简历的人。我也参加了许多寻找Linux技能人才的面试,但很少有应聘者获得认证。这是因为当时微软认证是最重要的,但Linux数据中心尚在早期发展阶段,很少有应聘者获得Linux认证。
我们通常在面试的一开始询问用于确定申请人知识限制的问题。然后会提出更有趣的问题,这些问题会测试他们通过问题推理找到解决方案的能力。我注意到一些非常有趣的结果。很少有Windows证书所有者可以通过我们提供的方案来进行推理,而很大一部分Linux应聘者却都可以做到这一点。
我认为上述结果部分是因为获得Windows证书依赖于记忆而不是实际的操作经验,还因为Windows是一个封闭系统,这阻碍着系统管理员真正理解它的工作原理。我认为Linux应聘者做得更好,因为Linux在多个层面上是开放的,其逻辑和原理可用于识别并解决任何问题。任何使用Linux一段时间的系统管理员都必须了解Linux的体系结构,并且在应用知识、逻辑和原理来解决问题方面拥有相当丰富的经验。
1.8 启示
本书大部分内容都是在Linux命令行中进行的,但这些内容与命令本身无关。在本书中,如果你知道如何阐明Linux的底层结构之美,就可以用命令作为工具来展示这种美。本书将展示如何使用这些常用命令来探索这种美,从而帮助你实现领悟。
本书中的所有命令,除了少数之外,都是你应该已经熟悉的命令。本书将使你能够使用这些常用命令来探索Linux的底层,并自己发现Linux的真相。
这会很有趣!