前言
很高兴我们能一起踏上Linux学习之旅。如果你使用过Linux,正在寻求以一种结构化的实操方法深入研究Linux,或者你已经有相关经验,想要获得一些技巧和方法来改进使用Linux时的流程[例如,在专业设置(如开发或操作)中使用Linux ],那么本书适合你。
我们将把重点放在使用Linux来满足你的日常需求,从开发到与办公相关的任务,而不是系统管理方面的事情。此外,我们将重点关注命令行,而不是可视化UI。所以,虽然2022年可能还是桌面Linux,但我们将使用终端作为与Linux交互的主要方式。这样做还有一个额外的好处,你可以在许多不同的设置(从树莓派到你所选择的云提供商的虚拟机)中同样地应用你的知识。
在开始之前,我想通过分享我自己的经历来提供一些背景:我第一次使用的操作系统并不是Linux。我使用的第一个操作系统是AmigaOS(20世纪80年代末),之后,在技术高中,我主要使用微软DOS和当时新的微软Windows,具体是围绕事件系统和用户界面相关的开发。然后,在大学学习期间(20世纪90年代中后期),我主要在大学实验室使用基于UNIX的Solaris和硅图形机。我真正接触Linux是在21世纪00年代中期的大数据背景下,然后我开始与容器打交道,首先是2015年在Apache Mesos的背景下(我当时在Mesosphere工作),然后是Kubernetes(我最初在Red Hat的OpenShift团队,然后在AWS的容器服务团队)。也就是在这里我意识到一个人需要掌握Linux才能在这个领域发挥作用。Linux是不同的。它的背景、全球用户社区、多功能性和灵活性使其独一无二。
Linux是一个有趣的、不断增长的开源个人和企业的生态系统。它几乎可以在任何设备上运行,从50美元的树莓派到你最喜欢的云提供商的虚拟机,再到火星车。经过30多年的发展,Linux可能会持续存在一段时间,所以现在是深入了解Linux的好时机。
让我们首先设定一些基本规则和期望。我将与你分享如何从本书中获得最大的收获,以及一些管理方面的事情,比如你可以在哪里以及如何尝试我们将共同完成的主题。
目标读者
本书是为那些想要或需要在专业设置中使用Linux的人准备的,比如软件开发人员、软件架构师、QA测试工程师、DevOps和SRE工程师,以及类似的角色。如果你是一个业余爱好者,在从事3D打印或家庭装修等活动时遇到了Linux,而你对一般的操作系统或Linux/UNIX知之甚少甚至一无所知,那么从头到尾看完这本书,你会得到最大的收获,因为各章往往是相互关联的。但是,如果你已经熟悉了Linux,那么你也可以把它作为参考。
如何使用本书
本书的重点是使你能够使用Linux,而不是管理它。市面上有很多关于Linux管理的好书。
通过阅读本书,首先,你将了解什么是Linux(第1章)以及它的关键组件是什么(第2章和第3章),能够列举并使用基本的访问控制机制(第4章),了解文件系统(第5章)作为Linux基本构建块的作用,并知道什么是应用程序(第6章)。
然后,你将获得一些关于Linux网络栈和工具的实践经验(第7章)。此外,你将学习现代操作系统的可观测性(第8章)以及如何应用它来管理工作负载。
你将了解如何通过使用容器和Bottlerocket等不可改变的发行版以现代方式运行Linux应用程序,以及如何使用安全外壳(SSH)和高级工具(如点对点和云同步机制)安全地进行通信(下载文件等)和共享数据(第9章)。
以下是一些尝试方法的建议,跟着做(我强烈建议你这样做,学习Linux就像学习一种语言—你要多加练习):
•买一台Linux台式计算机或笔记本计算机。例如,我有一台非常漂亮的机器,是Star Labs的StarBook(https://oreil.ly/1MbY2)。另外,你也可以使用没有运行最新Windows版本的台式计算机或笔记本计算机,并在上面安装Linux。
•如果你想在一个不同的(主机)操作系统上做实验(比如MacBook或iMac),那么你可以使用虚拟机(VM)。例如,在macOS上,你可以使用优秀的Linux-on-Mac(https://oreil.ly/bqVYG)。
•使用你选择的云计算供应商来启动一个基于Linux的虚拟机。
•如果你喜欢修修补补并且想试试非英特尔处理器架构(如ARM),那么你可以买一台单板计算机,如奇妙的Raspberry Pi(https://www.raspberrypi.org)。
在任何情况下,你都应该有一个现成的环境,并进行大量的练习。不要只是阅读,要尝试命令和实验。试着“打破”某些限制,例如,提供无意义的或奇怪的输入。在你执行命令之前,对结果形成一个假设。
另一个提示:总是问为什么。当你看到一个命令或某个输出时,试着弄清楚它是从哪里来的,以及负责它的底层组件是什么。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
可以从https://oreil.ly/learning-modern-linux-code下载补充材料(示例代码、练习、勘误等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Learning Modern Linux,作者Michael Hausenblas,由O'Reilly出版,书号978-1-098-10894-6。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://oreil.ly/learning-modern-linux上列出了勘误表、示例以及其他信息。
关于书籍和课程的新闻和信息,请访问我们的网站http://oreilly.com。
我们在LinkedIn上的地址:https://linkedin.com/company/oreilly-media。
我们在Twitter上的地址:http://twitter.com/oreillymedia。
我们在YouTube上的地址:http://youtube.com/oreillymedia。
致谢
首先,我想感谢本书出色的审稿人Chris Negus、John Bonesio和Pawel Krupa,没有他们的反馈,本书的作用就少了一半。
我要感谢我的父母,他们使我能够接受教育,并为我今天的身份和工作奠定了基础。我要感谢我的大姐Monika,是她激励我投身科技领域。
我想对支持我的家人表示最深切的感谢,他们很棒:我的孩子Saphira、Ranya和Iannis;我聪明而有趣的妻子Anneliese;我们最棒的狗Snoopy;以及我们最新的家庭成员—公猫Charlie。
在我的UNIX和Linux旅程中,有太多的人影响了我的思想,我从他们那里学到了很多。我非常荣幸能与他们中的许多人一起工作或互动,包括但不限于Jérôme Petazzoni、Jessie Frazelle、Brendan Gregg、Justin Garrison、Michael Kerrisk和Douglas McIlroy。
最后,但最重要的是,我要感谢O'Reilly团队,特别是我的开发编辑Jeff Bleiel,感谢他在写作本书的过程中对我的指导。