Linux哲学(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-07 00:42:06

点击下载

作者:(美)戴维·博特(David Both)

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux哲学

Linux哲学试读:

译者序

作者简介

技术审阅者简介

致谢

第一部分 导论第1章 Linux哲学简介1.1 我是系统管理员吗1.2 哲学的结构1.3 谁应该读这本书1.3.1 但我不满足这些要求1.3.2 谁不适合读这本书1.4 Linux的真相1.5 限制性操作系统1.6 Linux是开放和免费的1.7 真正的知识1.8 启示第2章 准备2.1 实验2.2 系统要求2.2.1 如何访问命令行2.2.2 创建student用户2.2.3 准备U盘2.3 实验不起作用怎么办

第二部分 基础第3章 数据流3.1 文本流——通用接口3.2 STDIO文件句柄3.3 生成数据流3.4 使用“yes”来检验一个理论3.5 探索U盘3.6 随机流3.7 小结第4章 转换数据流4.1 数据流作为原材料4.2 管道梦4.3 建立管线4.4 重定向4.5 管线的挑战4.5.1 问题4.5.2 解决方案4.5.3 关于解决方案的思考4.6 小结第5章 一切都是文件5.1 什么是文件5.2 设备文件5.3 udev简化5.4 设备数据流5.5 设备文件分类5.6 有趣的设备文件5.7 随机数、零等设备5.8 备份主引导记录5.9 一切都是文件的应用5.10 小结第6章 使用Linux FHS6.1 定义6.2 标准6.3 使用定义明确的文件系统结构6.4 Linux统一目录结构6.5 特殊文件系统6.5.1 /proc文件系统6.5.2 /sys文件系统6.5.3 SELinux6.6 解决问题6.6.1 不正确地使用文件系统6.6.2 电子邮件收件箱6.6.3 坚持标准6.6.4 这个文件在哪里6.7 小结

第三部分 功能第7章 拥抱CLI7.1 定义命令行7.2 CLI术语7.2.1 命令提示符7.2.2 命令行7.2.3 命令行界面7.2.4 终端7.2.5 控制台7.2.6 虚拟控制台7.2.7 终端仿真器7.2.8 伪终端7.2.9 会话7.2.10 shell7.2.11 SSH7.2.12 screen7.3 GUI和CLI7.3.1 非限制性接口7.3.2 邮件列表7.4 解决方案原则7.5 用大数据阻止他们7.6 CLI的威力第8章 当一名懒惰的系统管理员8.1 准备工作8.2 真正的生产力8.3 预防性维护8.4 最小化打字量8.4.1 别名8.4.2 其他打字捷径8.5 文件命名8.6 Bash效率8.6.1 自动补全功能8.6.2 命令行调用和编辑8.6.3 历史记录8.6.4 使用历史记录8.7 日志是你的朋友8.7.1 SAR8.7.2 邮件日志8.7.3 消息8.7.4 dmesg8.7.5 安全8.7.6 跟踪日志文件8.7.7 systemd日志8.7.8 logwatch8.8 成功地当一名懒惰的系统管理员第9章 自动化一切9.1 为什么我使用脚本9.2 我是如何达到的9.3 编写重复性任务脚本9.3.1 让它更容易9.3.2 从理想到必要9.4 更新9.5 其他自动化水平9.6 使用cron进行定时自动化操作9.6.1 crontab9.6.2 cron.d9.6.3 anacron9.6.4 关于作业安排的提示9.6.5 关于cron的想法9.6.6 cron资源9.7 其他可能自动化的任务9.8 深化哲学第10章 始终使用shell脚本10.1 定义10.2 系统管理员语境10.2.1 需求10.2.2 开发速度10.2.3 性能速度10.2.4 变量10.2.5 测试10.2.6 开放和开源10.3 把shell脚本作为原型10.4 处理10.4.1 快捷而不完善10.4.2 规划和远见10.5 小结第11章 尽早测试,经常测试11.1 流程11.1.1 创建测试计划11.1.2 在一开始就开始测试11.1.3 最终测试11.1.4 生产测试11.2 模糊测试11.3 自动化测试11.4 尝试一下11.4.1 MOTD脚本的需求11.4.2 MOTD脚本测试计划11.4.3 开发脚本11.4.4 添加健全性检查11.4.5 版本号11.5 修复脚本11.6 小结第12章 使用常识命名12.1 脚本和程序名称12.2 变量12.2.1 命名变量12.2.2 把一切变成变量12.3 子程序12.4 主机12.5 机构命名12.6 小结第13章 以公开格式存储数据13.1 封闭是不可理解的13.2 开放是可知的13.3 纯ASCII文本13.3.1 系统配置文件13.3.2 全局Bash配置13.3.3 用户配置文件13.3.4 ASCII的可贵之处13.4 小结第14章 对数据使用分离的文件系统14.1 为什么我们需要分离的文件系统14.1.1 硬盘崩溃14.1.2 文件系统填满14.2 挽救便携式计算机14.3 数据安全14.4 建议14.4.1 /boot14.4.2 /home14.4.3 /usr14.4.4 /opt14.4.5 /var14.4.6 /tmp14.4.7 其他分支14.5 一开始就分离文件系统14.6 稍后添加分离的文件系统14.7 小结第15章 使程序可移植15.1 从英特尔PC到大型机15.2 体系结构15.3 可移植性限制15.3.1 许可15.3.2 技术15.3.3 LibreOffice15.4 shell脚本15.5 互联网和可移植性15.6 创建网页15.6.1 静态内容15.6.2 作为新工作的动态网页15.6.3 CGI——开放并可移植15.6.4 WordPress15.7 小结第16章 使用开源软件16.1 开源的定义16.2 开源定义(注释)16.3 为什么这很重要16.4 创造术语16.5 许可我们自己的代码16.6 机构代码共享16.6.1 孤岛很差劲16.6.2 开放式机构和代码共享16.6.3 要避免的事情16.7 代码可用性16.7.1 我如何分享代码16.7.2 代码共享注意事项16.8 小结

第四部分 成为禅师第17章 追求优雅17.1 硬件优雅17.1.1 PCB17.1.2 主板17.1.3 计算机17.1.4 数据中心17.1.5 电源和接地17.2 软件优雅17.3 修复我的网站17.4 删除废物17.4.1 旧的或未使用的程序17.4.2 脚本中的旧代码17.4.3 旧文件17.5 小结第18章 追求简单18.1 数字中的复杂性18.2 简单性的基础知识18.3 永无止境的简化过程18.4 简单的程序做一件事18.5 简单程序很小18.6 简单与哲学18.6.1 简化我自己的程序18.6.2 简化他人的程序18.6.3 未注释的代码18.7 硬件18.8 Linux和硬件18.9 窘境18.10 小结第19章 使用你喜爱的编辑器19.1 不仅仅是编辑器19.2 Linux启动19.2.1 为什么我更喜欢SystemV19.2.2 为什么我更喜欢systemd19.2.3 真正的问题19.3 桌面环境19.4 用sudo还是不用sudo19.4.1 绕过sudo19.4.2 sudo的有效用途19.5 小结第20章 记录一切20.1 红男爵20.2 我的文档理念20.2.1 帮助选项20.2.2 自由地注释代码20.2.3 我编写代码文档的流程20.3 手册页20.4 系统文档20.5 为现有代码编写文档20.6 保持文档更新20.7 小结第21章 备份一切,经常备份21.1 数据丢失21.2 依靠备份救援21.2.1 问题21.2.2 恢复21.3 按我的方式做21.3.1 备份选项21.3.2 异地备份21.4 灾难恢复服务21.5 其他选择21.6 如何“经常”备份21.7 小结第22章 追随你的好奇心22.1 查理22.2 好奇心把我引入了Linux22.3 好奇心解决问题22.4 追随自己的好奇心22.4.1 成为作者22.4.2 失败是一种机会22.4.3 去做就对了22.5 小结第23章 没什么应当23.1 始终存在各种可能性23.2 释放力量23.3 解决问题23.3.1 批判性思维23.3.2 解决问题的推理23.4 自知之明23.5 多样性的含义23.6 量化考核狂热23.7 优秀的管理人员23.8 协作23.8.1 孤岛城市23.8.2 简单的方法23.9 小结第24章 指导年轻的系统管理员24.1 雇用合适的人24.2 指导24.3 解决问题的艺术24.4 示例24.5 迭代24.6 小结第25章 支持你最喜欢的开源项目25.1 项目选择25.2 编写代码25.3 测试25.4 提交错误报告25.5 文档25.6 协助25.7 教学25.8 写作25.9 捐赠25.10 小结第26章 现实部分26.1 人26.2 指手画脚的管理者26.3 过犹不及26.4 技术支持烦恼26.5 你应当按我的方式做26.6 可以拒绝26.7 科学方法26.8 了解过去26.9 结语

参考文献译者序

我曾经是一名软件开发人员和数据库管理员,工作中接触Linux很多年了,对照第1章列出的清单,我符合其中的几条,所以我也是一名系统管理员。对一般人来说,哲学似乎是很玄的东西,在翻译本书之前,我也这么认为。但随着翻译的逐步深入,我渐渐体会到它实用的方面。任何人学习任何本领,都有一个从完全不懂到知之甚少,再到基本掌握的过程。而那些引导我们逐步前进的原则,就构成了哲学,或者理念。当然,不专门学习哲学,我们也可以达成学习的目标,但学习了哲学,并按照它的指引,我们可以少走许多弯路。

作为20世纪70年代生人,我的计算机学习之路就是从命令行开始的。所以,看到作者列举的许多例子,我深有感触。身为一个IT从业人员,操作命令行是最基本的技能,否则无法高效完成工作。举个例子,如果有一批文件需要按照规则改名,使用命令行可能一行即可完成,而改用图形界面手工操作,可能所需时间的倍数与文件的数量成正比,还不包括误操作可能会造成错误的情况。关于数据流和解决一种问题的多种可能性,我至今记得一位同事把nc和tar命令用管道结合,把我整个ftp个人目录从一台服务器迅速移动到了另一台,而我如果用ftp客户端操作,因为有的客户端不支持两台服务器间的传输,会需要额外的空间和多出几倍的时间。

本书还涉及良好工作习惯的养成。编写代码,书写文档并按照规则命名,便于理解和维护程序。而按照标准保存文件,我们就可以在固定的位置取得想要的东西。这些都有利于正确而高效地工作。

我自己也有把需要多次重复操作的步骤编成程序的习惯,我也欣赏绝妙的代码,我还用论坛发帖这种形式给技术社区做贡献。而这一切都在ITPUB的SQL大赛中融合到了一起。我和其他几位版主负责出题、制定规则、评分。我负责客观分,比如代码的长度、结果的正确性和执行时间,我编写了一个PL/SQL脚本,用几种测试用例来验证选手的代码,并在最后输出一个统计表,这极大地提高了比赛的打分效率,也减少了我自己的工作量,从而能够把更多时间用在体会印象深刻的优秀作品上,这样我自己也获得了提升。

工作做得多了,我们自己也慢慢总结出一套原则,其中大部分和本书中的哲学是吻合的,而另一些原则我们没有意识到,是因为我们没有接触到这些方面,比如本书提到的将硬盘检查和防火墙告警信息进行总结发送到邮箱。我们需要开拓视野,以便从别人的经验中学到将来我们可能面对的问题的对策。因为讲述重点在于哲学,本书对命令的解释点到即止,若要深入研究可阅读作者推荐的其他参考书。

书中关于如何与人协作的内容也很好,系统管理员并不只是对机器负责,还需要满足各种人群的需求。这对我们技术人员是一种鞭策,作者通过亲身经历的案例,鞭策我们克服自身弱点,达到更高的境界。

正如作者说的,写作不是单枪匹马的行动,翻译也是如此。本书翻译完成,离不开大家的帮助。

感谢华章公司刘锋编辑信任我,把这本书交给我翻译。感谢我的同事们,在工作中教给我许多IT知识。感谢家人,你们辛勤劳动,使我能专心投入这本书的翻译。卢令一,这本书是送给你的。卢涛作者简介

David Both是一位开源软件和GNU/Linux的倡导者、培训师、作家和演讲人。他从事Linux和开源软件工作已有20余年,从事计算机工作已超过45年。他在IBM工作了21年,并于1981年在佛罗里达州博卡拉顿担任课程开发员,为第一台IBM PC编写了培训课程。他曾在Red Hat教过RHCE课程,曾在MCI Worldcom、思科和北卡罗来纳州工作过。在离开IBM后,他在工作的大多数地方都教过Linux课程,包括午餐讲座和完整的五天课程。

David非常喜欢购买配件和从头开始组装自己的计算机,以确保每台新计算机都符合他的严格规范。他最近组装的计算机配备华硕TUF X299主板和带有16个处理器核心(32个线程)的Intel i9CPU以及64GB RAM,采用ThermalTake Core X9机箱。

他为包括《Linux Magazine》和《Linux Journal》在内的杂志撰写过文章,目前仍在撰写大量文章并且是OpenSource.com的志愿者社区版主。他特别喜欢在研究文章时学习新事物。

David目前住在北卡罗来纳州的罗利,与非常支持他的妻子爱丽丝和一条奇特的杰克罗素救援犬在一起。David喜欢读书、旅游、去海滩消遣,与他们的两个孩子及其伴侣还有四个孙子共度时光。技术审阅者简介

Ben Cotton是一名受过训练的气象学家,职业是高性能计算工程师。Ben在学术界和高性能计算方面拥有超过十年的Linux、Windows和macOS系统支持经验。Ben和他人共同创立了一个本地技术聚会小组,他是开源计划的成员和软件自由保护协会的支持者,并曾为Sysadvent、Opensource.com、The Next Platform以及他在funnelfiasco.com的博客撰稿。致谢

撰写一本书不是一场单枪匹马的行动,本书也不例外。创作一本书需要一个后援队。这项工作中最重要的人就是我了不起的妻子爱丽丝,她在整个过程中一直担任我的首席后援队长。我最好的朋友,我的心上人,如果没有你的支持,我不可能完成这本书。

很多时候,出版一本书最困难的部分就是为它找到出版商。2017年10月,当我去北卡罗来纳州罗利市的All Things Open(ATO)时,我已经写了大约20000字,目的是请他们帮助推荐出版商。我已经问过Rikki Endsley是否能帮助我,她是Opensource.com的聪明而有才华的社区经理和编辑,我经常向她投稿。Rikki给了我一份简短的名单,列出了她多年来在技术出版方面认识的人,名单上有两家出版商在ATO。非常感谢Rikki在我替Opensource.com写作的那段时间里对我的支持,她指点我找到Apress,并成为我的知心朋友。这里还要感谢她不仅为我,也为许多替Opensource.com撰稿的作者当了一名出色的后援队长。

2017年在ATO的第一天,我在浏览赞助商的展台时偶遇了Apress的开源领域高级编辑Louise Corrigan,她的名字列在Rikki给我的名单上。她正在为Apress招募人员,当我拿起她的名片时,我对她说:“我有一本书想投稿给你。”她马上表示感兴趣并告诉我她对我这本书的看法,她对此非常热心。她的热情和对我的理想不加任何改变的喜欢促使我选择了Apress。感谢Louise对我和我的理想的信任。

感谢Apress的编辑Nancy Chen和James Markham,他们从始至终都在指导我完成这本书的创作,并解答了我的许多问题。感谢你们两位帮助我完成我第一本书的撰写。

尽管这是一本关于哲学的书,但它也是一本非常有技术含量的书。作为我的技术评审人,Ben Cotton做了出色的工作。他确保了本书实验和其他技术部分的技术准确性。当我忘记或错过一些重点时,Ben也对需要进一步澄清的内容提出了一些很好的建议。Ben,你的贡献为本书增色许多,非常感谢你的出色工作。

我要感谢Opensource.com的所有编辑,感谢他们对我在那里提交的文章所做的工作以及他们用温和的方式帮助我了解编辑过程。他们还帮我提高了写作能力。谢谢你们,Jason Hibbits、Rikki Endsley、Jen Wike Huger、Jason Baker、Bryan Behrenshausen和Alex Sanchez。

我还要感谢所有为Opensource.com做出贡献的志愿者社区版主。我们每年尽可能设法从世界各地聚会,在ATO总是我度过的最精彩的时刻之一。我很荣幸能加入这么优秀的人才团队,我总是能够从你们身上学到很多东西。第一部分 导论

·第1章 Linux哲学简介

·第2章 准备

本书的第一部分介绍Unix哲学和原始Linux哲学,其中后者直接源自Unix哲学,还会介绍Unix和Linux的开发历史与参与者,以及这些开发者是如何将起先的Unix哲学和后来的Linux哲学付诸实现的。

我制定自己的哲学的理由和动机在很大程度上是原始Linux哲学在应用于系统管理员时存在一些不足。

书中有一些动手实验,以实现大多数系统管理员最喜欢的学习类型——从实践中学习。第一部分将为这些实验做准备。运行实验需要Linux计算机应具备的一整套最低配置和一个U盘。

本书中的实验都设计得很简短。它们的主要目的是帮助读者理解系统管理员的Linux哲学。第1章 Linux哲学简介[1]

Unix哲学是造就Unix独特和强大的重要组成部分。关于Unix哲学的文章有很多。Linux哲学本质上与Unix哲学基本相同,因为它直接来自Unix。

最初的Unix哲学主要面向系统开发人员。事实上,由Ken [2][3]Thompson和Dennis Ritchie领导的Unix开发人员在设计Unix的过程中采取了一种对他们有意义的方法,他们创建规则、指导方针和程序化的方法,然后将它们设计到操作系统的结构中。这对系统开发人员来说效果很好,而且(至少部分)适用于系统管理员。在Mike Gancarz的优秀著作《Unix哲学》中,他编纂了来自Unix操作系统创始人的指导方针集合,后来Gancarz先生又把它更新为《Linux/Unix设[4]计思想》。

Eric S.Raymond的另一本书《Unix编程艺术》(The Art of Unix [5]Programming)提供了作者在Unix环境中编程的哲学观点。它也有点像Unix的发展历史,因为它是作者亲身经历和回忆的。此书也可在[6]互联网上免费获取。

我从这三本书中学到了很多东西。它们对Unix和Linux程序员都有巨大的价值。每个Linux程序员、系统管理员和开发运营人员都应该熟读《Linux/Unix设计思想》以及《Unix编程艺术》。

我持续使用计算机的时间超过了45年。直到我开始使用Unix和Linux并开始阅读有关Unix、Linux和它们共有的通用哲学的一些文章及书籍时,我才理解Linux和Unix世界中的许多事情为什么会实现成现在的样子。

在撰写本书时,我已经使用Unix和Linux工作了20多年,作为系统管理员,Linux哲学对我自己的效率和有效性有巨大贡献。我一直努力遵循Linux理念开展工作,我的经验是,不管上司(PHB,[7]Pointy-Haired-Boss)的压力多大都严格遵守它,从长远来看,这么做总会带来好处。

原始的Unix和Linux哲学适用于操作系统的开发人员。虽然系统管理员可以将许多原则应用于他们的日常工作,但仍缺少许多解决系统管理员独有问题的重要原则。

在我的Unix和Linux职业生涯中,我非常幸运能够遇到一些优秀的导师。他们帮助我树立了不怕失败的信心。因为他们总是让我自己解决我造成的问题,所以当我遭遇失败的时候,我从中学到的东西远超任务正常运行时。这些专家担任系统管理员的时间比我长许多年,他们从来没有因为失败而责备我或惩罚我——他们的信条是,“如果你失败了,你就学会了。”我学到了很多东西。他们教给我的一个重要部分是Linux哲学,但他们也教会了我他们自己的哲学,那些哲学有助于填补原始哲学的缺失部分。

因此,持续使用Linux和Unix的这么多年来,我已经制定了自己更直接地应用于系统管理员的日常生活和任务的哲学。我的哲学部分基于最初的Unix和Linux哲学,以及我的导师的哲学。当我决定编写自己的书,一本针对当今系统管理员需求的书时,我从这些原则开始,但随着写作的进展,这种哲学的结构和性质变得前所未有的清晰。事实证明,这种哲学与最初的Linux哲学有很大的不同。直到那时我才意识到我们多么需要一种专门针对系统管理员的新哲学。我把这种新哲学称为“系统管理员的Linux哲学”。

本书是我创造新哲学的成果,它提供了一种独特的实践方法,大家可以藉此成为更好的系统管理员。我的成长离不开社区的培养,而且它帮助我变得更加自信,我想把这本书及其揭示的哲学回馈给社区。

在本书中大部分地方会将“系统管理员的Linux哲学”简称为“哲学”。[1] https://en.wikipedia.org/wiki/Unix。[2] https://en.wikipedia.org/wiki/Ken_Thompson。[3] https://en.wikipedia.org/wiki/Dennis_Ritchie。[4] Mike Gancarz, Linux and the Unix Philosophy,Digital Press – an imprint of Elsevier Science, 2003, ISBN1-55558-273-7。[5] Eric S.Raymond,The Art of Unix Programming,Addison-Wesley,September 17,2003,ISBN 0-13-142901-9。[6] Eric S.Raymond,“The Art of Unix Programming,”http://www.catb.org/esr/writings/taoup/html/。[7] Dilbert漫画中的人物,原文贬义,本书统一译成中性的“上司”。——译者注1.1 我是系统管理员吗

由于本书适用于系统管理员,因此你需要了解自己承担的是否是[1]系统管理员工作。维基百科将系统管理员定义为“负责计算机系统(特别是多用户计算机,例如服务器)的维护、配置和可靠运营的人员”。根据我的经验,这个系统可以包括计算机和网络硬件、软件、机架和机箱、计算机房或空间等。

典型的系统管理员工作包括大量任务。在小型企业中,系统管理员可能负责与计算机相关的所有事情。在较大的环境中,多个系统管理员可能共同负责保持运行所需的所有任务。在某些情况下,你甚至可能不知道你是系统管理员,你的经理可能只是简单地告诉你要开始维护办公室中的一台或多台计算机——这就会使你成为系统管理员,无论你喜欢与否。

术语“DevOps”用于描述以前互相独立的开发和运营人员的交集。在过去,这主要是教授系统管理员编写代码,但现在的重点转向[2]教授程序员如何执行运营任务。参与系统管理员任务使得这些人至少在部分时间内也是系统管理员。在思科工作时,我有一个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] https://en.wikipedia.org/wiki/System_administrator。[2] Charity,Ops: It’s everyone’s job now(运营:现在这是每个人的工作),https://opensource.com/article/17/7/state-systems-administration。1.2 哲学的结构

系统管理员的Linux哲学有三个层次,类似于马斯洛的需求层次[1]这些层次也通过逐步提高的领悟水平体现着我们的成长。

底层是基础层——担任系统管理员执行最低级的工作需要知道的基本命令和知识。中间层包含在基础层上构建,并告知系统管理员的日常任务的实用原则。顶层包含满足系统管理员的更高要求,以及鼓励并使我们能够分享知识的原则。

本书由三部分组成,分别对应哲学的三个层次,如图1-1所示。哲学的第一层也是最基本的一层,它奠定了基础。我们将介绍“Linux的真相”、数据流、标准输入输出(STDIO)、转换数据流,以及“一切都是文件”的含义。随着工作的开展,我们会学到很多新命令,学到如何在简单的命令行程序中有效地使用它们,以及如何利用一切都是文件的事实。本书第二部分对这个基础层进行了详细探讨。图1-1 系统管理员Linux哲学的分层结构

然后我们开始探索哲学的中间层,在此处,功能成为我们的行动指南。为了更好地利用命令行,我们开始扩展命令行程序,以创建经过测试且可维护的shell程序,我们可以保存并可以重复使用甚至共享它们。我们成为“懒惰管理员”并开始自动化一切。我们适当地使用Linux文件系统分层结构并以公开格式存储数据。哲学的功能部分见第三部分。

在第四部分我们进入哲学的最高层——领悟层。当我们开始不仅仅只是执行系统管理员任务并完成工作时,我们对Linux设计的优雅性和简洁性的理解已经完善。我们开始努力优雅地完成自己的工作,保持解决方案简单,简化现有但复杂的解决方案,并创建可用且完整的文档。我们开始只是为了获得新知识而探索和实验。在领悟阶段,我们开始将知识和方法传递给那些新的专业人员,积极支持我们最喜欢的开源项目。

在现实生活中,哲学的层次很少是泾渭分明的。如何运用和应用哲学的原则可能会因环境、上司、我们的培训水平以及我们目前对哲学的理解而有所不同。[1] Wikipedia, Maslow’s hierarchy of needs(马斯洛的需求层次,将人类需求像阶梯一样从低到高按层次分为五种,分别是:生理需求、安全需求、社交需求、尊重需求和自我实现需求),https://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs。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的真相。

这会很有趣!第2章 准备

本书定义了一种哲学,但它也旨在通过实验来阐明此哲学的实践方面。因为系统管理员是亲自动手执行任务的人群,本书提供了许多简单的实验,可以执行这些实验,以便更充分地欣赏和理解这种哲学。大多数实验通常由单行bash shell命令或程序组成,但有些实验使用了多行命令。

本章将讲述关于这些实验要求的更多内容。它会描述应用这些实验的Linux计算机的最佳配置,还会提供准备U盘以用于某些实验的方法。2.1 实验

作为一名动手操作的系统管理员,我喜欢尝试使用命令行来学习新命令和执行任务的新方法。本书的大多数实验都是我自己在探索中进行的实验,可能会做一些微小的改动以便它们适合在这里使用。

有些原则不适合进行实验。因此,并非本书中的所有原则都通过实验进行说明,但我尽可能多地安排了实验。许多实验都说明了更多的原则,而不仅仅是它们出现时所处的那个原则。

对于系统管理员来说,有必要通过实验来亲身体验这些原则,以便充分想象和欣赏它们所体现的道理。实验的目的就在于提供超越理论的机会,并以实际的方式应用这些原则。虽然为了说明特定的知识点,有些实验有点人为,但是它们仍然有效。

这些启发性的实验并没有隐藏在每一章或全书的末尾,它们都嵌入在正文中,是本书不可或缺的一部分。建议在深入阅读本书时边看书边做实验。

每个实验的命令都将显示在“实验”部分中,有时结果也显示在那里,如下所示。许多实验只需要一个命令,因此只有一个“实验”部分。有些实验可能更复杂,因此会把它们分成多个实验部分。实验示例

这是一个实验的示例。每个实验都有说明和供你在计算机上输入的代码。

许多实验都会有像本段落这样的散文格式的一系列指令。只需按照说明进行操作即可。

1)一些实验将列出要执行的一系列步骤。

2)第2步。

3)等等……

你要为实验输入的代码将如本行所示。

这是实验的结束处。

大多数实验可以使用非root用户执行,这比以root身份执行更安全。但其中一些实验需要使用root用户执行。

这些实验在指定用于培训的计算机或虚拟机上使用时是安全的。但无论它们看起来多么温和,你都不应该将任何一个实验在生产系统上执行。警告 不应该使用生产计算机执行这些实验。应该使用指定用于培训的计算机或虚拟机。

有时候我想呈现有趣的代码,你不用把它作为其中某个实验的一部分。对于这种情况,我将把代码和任何支持文本放在代码示例部分中,如下所示。代码示例

用于说明某一知识点,此代码部分请勿在任何计算机上运行。2.2 系统要求

实验需要一台安装了Linux的计算机。这台计算机的规格相对不重要,因为即使最差的Linux计算机也提供终端仿真器或控制台会话来访问命令行。为获得最佳效果,最低限度是Intel或AMD硬件,配备至少2GB的内存和i3处理器或同档次产品。在紧急时,一台使用最新版本的Raspbian的Raspberry Pi 3B也可以使用。

进行本书中实验的计算机应该有一个最新的主流发行版,如Fedora、Ubuntu、Mint、RHEL或CentOS。无论使用哪种发行版都应安装GUI桌面并可供使用。某些实验需要在桌面上打开多个终端仿真会话。

还需要一个U盘,可以在其上执行一些涉及在硬盘驱动器上读取和写入数据的更危险的实验。U盘是包含旋转磁盘和移动磁头的硬盘驱动器的一个合适的替代品,并且其工作方式与硬盘完全相同。

我强烈建议你使用未用于其他任何任务的主机,例如指定用于培训的系统,或运行在VirtualBox等免费开源软件上的虚拟机,以安装Linux并执行这些实验。这将显著降低损坏生产计算机的可能性。

你应该在用于这些实验的计算机或虚拟机上具有root访问权限,否则无法执行某些实验。书中会指明哪些实验需要root访问权限。

你应该使用诸如“student”账户之类的账户来尝试大多数实验。这进一步降低了损坏自己文件的危险。事实上,大多数实验都假设你以非特权用户,即student身份登录。警告 不要在生产系统上执行本书中提供的实验。2.2.1 如何访问命令行

所有现代主流Linux发行版都至少提供三种访问命令行的方法。

如果你使用图形桌面,大多数发行版都配有多个终端模拟器供你选择。我更喜欢Krusader和Tilix,读者可以自行选择终端模拟器。

Linux还提供了多个虚拟控制台的功能,允许从单个键盘和监视器进行多次登录。虚拟控制台可以在没有GUI桌面的系统上使用,也可以在具有GUI桌面的系统上使用。

每个虚拟控制台都被分配了与控制台编号对应的功能键。因此vc1将被分配给功能键F1,依此类推。切换到这些会话很容易。在计算机上,你可以按住Ctrl和Alt键,然后按F2切换到vc2。然后按住Ctrl和Alt键并按F1切换到vc1和图形界面。

在Linux计算机上访问命令行的最后一种方法是通过远程登录。Secure Shell(SSH)是最常用的远程访问方法。

如果无法用本地访问的计算机来运行这些实验,但可以访问远程计算机,则可以通过SSH连接到该计算机以运行实验。某些实验需要多次登录。

在第7章中我们将详细介绍终端仿真器和控制台会话。2.2.2 创建student用户

作为root用户,你应该在计算机上创建一个新用户,这个用户将使用用户ID“student”(不含引号)进行这些实验。将密码设置为你可以记住的比较安全的密码。准备2-1

输入以下命令以创建student用户并指定密码。2.2.3 准备U盘

选择没有其他任何用途的U盘执行实验。在其上重新创建分区和文件系统,以便在完成后再次使用它。

我用的是旧的容量64MB的旧U盘。你可以使用手头上的任何容量的小巧的U盘。准备2-2

准备U盘用于这些实验。

1)在计算机上打开终端会话,然后以root用户身份登录。

2)将U盘插入Linux计算机的USB插槽中。

3)使用dmesg命令确定内核分配给U盘的设备文件。它可能类似于/dev/sdb。dmesg输出应至少显示一个分区/dev/sdb1。驱动器号——在此示例中为b,在你的Linux计算机上可能是另一个字母。

小心如果在命令中指定了错误的设备,以下步骤可能会导致生产系统上的数据被完全销毁。务必使用非生产系统进行此实验。

4)将驱动器的分区安装在/mnt上。

5)将当前工作目录(PWD)更改为/mnt。

6)删除任何预先存在的文件。

7)输入并运行以下命令以在驱动器上创建包含内容的一些文件。

8)验证驱动器上现在至少有10个文件,文件名为file0.txt到file9.txt。

9)将PWD更改为root的主目录。

10)卸下U盘,然后将其从计算机中拔出,直至需要它为止。

现在可以在实验中使用这个U盘了。2.3 实验不起作用怎么办

这些实验都被独立设计,并且不依赖于任何设置(除了U盘)或先前执行的实验的结果。某些Linux实用程序和工具必须存在,但这些应该都可以在标准的Fedora Linux工作站安装或任何其他主流通用发行版中使用。

因此,所有这些实验都应该“正常工作”。当某些任务失败时,按以下步骤查找问题。

1)验证是否正确输入了命令。这是我遇到的最常见的问题。

2)你可能会看到一条错误消息,指出未找到此命令。bash shell显示错误的命令,在这里,我编造了badcommand。然后简要介绍问题。对于缺失和拼写错误的命令,都将显示此错误消息。多次检查命令拼写和语法以验证它是否正确。

3)使用man命令查看手册页(man页)以验证命令的正确语法和拼写。

4)确保实际安装了所需的命令。如果尚未安装,安装它们。

5)对于要求你以root用户身份登录的实验,要确保已执行此操作。这些实验应该只有少数,但以非root用户身份执行它们将无法正常工作。

应该没有其他问题会出错——但如果你遇到无法利用这些技巧解决的问题,可通过LinuxGeek46@both.org与我联系,我会尽力帮助你解决问题。第二部分 基础

·第3章 数据流

·第4章 转换数据流

·第5章 一切都是文件

·第6章 使用Linux FHS

Linux命令行有很多功能,用户可以充分利用它做许多事情。当今的图形用户界面(GUI)使得某些人无须使用命令行,对于许多只想使用一些相对简单的工具来浏览网页、使用电子邮件以及阅读或书写文档的人来说,确实如此。大多数Linux用户无法想象GUI背后隐藏的力量。然而,与其他情况相比,允许更多用户轻松访问计算机功能的GUI隐藏了这台计算机为我们提供的大部分功能。

有一类人特别倾向于成为命令行的主要用户:系统管理员,即负责管理系统的人员。系统管理员是命令行的最终用户,因为命令行可以直接访问全部范围的功能。

这并不是说普通的非root用户不使用命令行。许多人都会使用命令行,但通常是在GUI没有满足他们需求的能力时才这样做。大多数Linux发行版都有用于安装程序、管理用户和组及其权限、移动和管理文件、处理邮件、浏览网页、管理进程和CPU功能、限制某些用户访问系统资源,以及更多功能的图形工具。但是,如果命令行界面(CLI)的临时用户深入探索下去,他们会发现Linux提供了许多文本模式和命令行工具来执行可以在GUI中执行的每项任务和不能用GUI完成的许多任务,而且通常运行速度更快,功能更多。

作为系统管理员,我的需求包括功能、速度、灵活性和对操作系统的完全控制。满足所有这些需求的唯一方法是不受限制地访问Linux命令行,这样可以把所有这些功能和速度都显露出来。我发现自己管理任务时使用CLI的频率远远高于使用GUI。这在很大程度上是因为我更喜欢CLI,但也有许多Linux计算机没有安装任何类型的GUI,甚至那些具备GUI的计算机在试图通过任何远程桌面工具执行远程管理时也非常慢。如果你与远程计算机的Internet连接速度非常快,那么这些远程GUI工具会很有用,但它们永远不会像老式的终端会话一样快,因为GUI数据的网络开销会占用大量带宽。

我并不是说我不使用GUI桌面而且它们“糟糕”。事实上,GUI桌面可以提高我在CLI上的工作效率。我通过同时打开多个终端会话来利用GUI访问CLI,从而使我能够同时访问多个Linux主机上的多个用户的CLI。

我在GUI桌面上使用图形工具。我正在使用LibreOffice Writer——一个功能强大的免费开源图形化文字处理程序来写作本书。我很欣赏并使用CLI和GUI来发挥各自的优势。但是,Linux的真相是CLI为那些愿意使用它的人提供了最强大的功能。

本部分将介绍Linux系统管理员哲学的基础原则。这些原则是Gancarz著作中记载的Unix/Linux哲学原理的发展体现,我们将在这部分中看到更多基础原则。对Unix以及Linux的基本设计的哲学方法有助于实现这两个操作系统的稳定性、优雅性、简单性和强大的功能。

这不是偶然的。Linus Torvalds起初把开发Linux作为业余爱好来做,但故意以Unix为基础来开发它。他接受了免费提供的GNU实用程序,然后为Linux重新编译它们,并将它们添加到他的操作系统中,当它们组合在一起时,被纯粹主义者称为GNU/Linux。

任何操作系统的个性和可用性都是由设计者所做出的假设决定的。Linux也不例外。它的设计从一开始就像Unix一样,Unix开发人员已经决定Unix允许用户使用融入它的设计中的每一部分功能。不仅如此,他们还为用户提供了使用该功能所需的工具。毕竟,设计出一个操作系统(或者其他任何事情),然后却限制对它的使用没有意义。GNU/Linux是Free Libre开源软件(FLOSS),在其理念和实现方面与Unix非常相似。

由于它们对Linux个性的重要性和广泛影响,我在本书中花费了大量文字来解释这些基础原则,并通过动手实验来说明它们。我相信,只有对这些原则有了坚实的理解,才能理解功能原则,才能更加完全地实现它们对系统管理员的日常任务的适用性。第3章 数据流

Linux中的所有内容都围绕着数据流(特别是文本流)展开。

我最近使用Google搜索“数据流”,大多数热门内容都涉及处理单个实体(如流媒体视频和音频)中的大量流数据,或由大量个别交易组成的金融机构处理流程。这些都不是我们要在这里讨论的数据流,虽然它们的概念是相同的,并且可以说当前的应用程序正是使用Linux的流处理功能作为处理许多数据类型的模型。

在Unix和Linux世界中,流是指源自某个来源的流文本数据,流可以流动到一个或多个以某种方式对其进行变换的程序,然后它可以存储在文件中或显示在终端会话中。系统管理员的工作与操纵这些数据流的创建和流动密切相关。本章将探讨数据流——它们是什么,如何创建它们,以及它们的一些用法。3.1 文本流——通用接口

使用标准输入/输出(STDIO)进行程序输入和输出是Linux工作方式的关键基础之一。STDIO最初是为Unix开发的,从那时起它已经进入大多数其他操作系统,包括DOS、Windows和Linux。

这就是Unix的哲学:编写程序,让它只做一件事并且做好。编写程序以协同工作。编写程序来处理文本流,因为这是一个通用接口。[1][2]——Doug McIlroy,Unix哲学基础[3]

STDIO由Ken Thompson开发,作为在早期版本的Unix上实现管道所需的基础结构的一部分。实现STDIO的程序使用标准化的文件句柄,而不是存储在磁盘或其他记录介质上的文件来进行输入和输出。STDIO最好被描述为缓冲的数据流,其主要功能是将数据从一个程序、文件或设备的输出,用流的方式传输到另一个程序、文件或设备的输入。[1] Eric S.Raymond,The Art of Unix Programming(Unix编程艺术),http://www.catb.org/esr/writings/taoup/html/ch01s06.html。[2] Linuxtopia,Basics of the Unix Philosophy(Unix哲学基础),http://www.linuxtopia.org/online_books/programming_books/art_of_unix_programming/ch01s06.html。[3] Wikipedia,Ken Thompson,https://en.wikipedia.org/wiki/Ken_Thompson。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载