新書推薦:
《
短视频Vlog全流程:镜头脚本+运镜技巧+场景主题+后期剪辑
》
售價:NT$
406.0
《
英国小史
》
售價:NT$
426.0
《
影响力原则
》
售價:NT$
354.0
《
德川家康(全十三册)(他用30年活了下来,建立起300年基业)
》
售價:NT$
4155.0
《
新知文库·动人的北平
》
售價:NT$
155.0
《
银色瀑布:美国兵工厂与中途岛海战
》
售價:NT$
359.0
《
乔丹法则
》
售價:NT$
363.0
《
如何不被一杯水淹没
》
售價:NT$
307.0
編輯推薦:
如果你在开发或操作中使用Linux,并且需要一种结构化的方法来帮助你深入学习,那么本书就是为你准备的。作者还提供了使用这个开源操作系统改进工作流程的技巧。无论是开发人员、软件架构师还是站点可靠性工程师,本书都将帮助你使用Linux满足从开发到与办公相关的任务的日常需求。 在此过程中,你将获得使用现代Linux终端和shell的实践经验,并学会如何管理工作负载。你将了解如何通过使用容器、systemd、现代文件系统和不可变发行版(如Flatcar和Bottlerocket)来运行Linux应用程序。 通过学习本书,你将: ? 把Linux作为现代工作环境来使用,而不仅仅是从管理员的角度来使用。 ? 学习Linux内核、终端多路复用器、人性化shell和可移植shell脚本等关键组件。 ? 熟悉从文件权限到功能的访问控制,并理解文件系统作为基本构建块的作用。 ? 了解应用程序依赖项管理和容器。 ? 获得Linux网络栈和工具(包括DNS)的实践经验。 ? 应用现代操作系统可观测性来管理你的工作负载。 ? 熟悉进程间通信、虚拟机和选定的安全主题。
內容簡介:
本书主要以结构化方法介绍如何在开发或操作中使用Linux。本书还提供了使用这个开源操作系统改进工作流程的技巧,并讲解了如何获得现代终端、shell和命令的实际操作经验,如何使用Linux网络,如何管理工作负载,如何实现现代Linux可观测性。本书还讲述了如何使用容器、systemd、现代文件系统以及诸如Flatcar和Bottlerocket等不可变发行版以现代方式运行Linux应用程序。本书适合开发人员、软件架构师和站点可靠性工程师阅读。
關於作者:
Michael Hausenblas是AWS的解决方案工程主管,也是CNCF的云原生大使。他负责Prometheus、Grafana和OpenTelemetry的上游服务与托管服务。此前,Michael曾在Red Hat、Mesosphere(现为D2iQ)和MapR(现为HPE的一部分)工作,且在应用研究领域有十几年的实践经验。
目錄 :
目录 前言1 第1章 Linux简介7 1.1 什么是现代环境7 1.2 Linux故事(到目前为止)8 1.3 为什么要使用操作系统9 1.4 Linux发行版10 1.5 资源的可见性11 1.6 Linux高级概述13 1.7 总结14 第2章 Linux内核16 2.1 Linux架构16 2.2 CPU架构18 2.2.1 x86架构19 2.2.2 ARM架构20 2.2.3 RISC-V架构20 2.3 内核组件20 2.3.1 进程管理21 2.3.2 内存管理23 2.3.3 网络24 2.3.4 文件系统25 2.3.5 设备驱动程序25 2.3.6 系统调用26 2.4 内核扩展29 2.4.1 模块30 2.4.2 一种扩展内核的现代方法:eBPF31 2.5 总结32 第3章 shell和脚本35 3.1 基础知识36 3.1.1 终端36 3.1.2 shell37 3.1.3 现代命令44 3.1.4 常见的任务47 3.2 人性化的shell50 3.2.1 Fish shell50 3.2.2 Z-shell55 3.2.3 其他现代shell55 3.2.4 我应该使用哪个shell56 3.3 终端多路复用器57 3.3.1 screen57 3.3.2 tmux58 3.3.3 其他多路复用器61 3.3.4 我应该使用哪个多路复用器62 3.4 脚本63 3.4.1脚本基础知识63 3.4.2 编写可移植的bash脚本65 3.4.3 检测和测试脚本67 3.4.4 端到端示例:GitHub用户信息脚本68 3.5 总结70 第4章 访问控制72 4.1 基础知识72 4.1.1 资源和所有权72 4.1.2 沙盒73 4.1.3 访问控制类型74 4.2 用户75 4.2.1 管理本地用户76 4.2.2 用户集中管理78 4.3 权限79 4.3.1 文件权限79 4.3.2 进程权限83 4.4 高级权限管理85 4.4.1 功能85 4.4.2 seccomp 配置文件86 4.4.3 访问控制列表86 4.5 良好实践87 4.6 总结87 第5章 文件系统89 5.1 基础知识89 5.2 虚拟文件系统93 5.2.1 逻辑卷管理器95 5.2.2 文件系统操作97 5.2.3 常用文件系统布局98 5.3 伪文件系统99 5.3.1 procfs100 5.3.2 sysfs101 5.3.3 devfs103 5.4 常规文件103 5.4.1 通用文件系统104 5.4.2 内存文件系统105 5.4.3 写时复制文件系统106 5.5 总结107 第6章 应用、包管理和容器109 6.1 基础知识110 6.2 Linux启动过程111 6.3 systemd112 6.3.1 单元113 6.3.2 使用systemctl 进行管理114 6.3.3 使用journalctl进行监控115 6.3.4 示例:scheduling greeter115 6.4 Linux应用程序供应链117 6.5 软件包和包管理器119 6.5.1 RPM包管理器119 6.5.2 Debian deb122 6.5.3 特定语言的包管理器124 6.6 容器124 6.6.1 Linux命名空间126 6.6.2 Linux cgroups127 6.6.3 写时复制文件系统130 6.6.4 Docker131 6.6.5 其他容器工具134 6.7 现代包管理器135 6.8 总结136 第7章 网络138 7.1 基础知识138 7.2 TCP/IP协议栈140 7.2.1 链路层141 7.2.2 互联网层144 7.2.3 传输层151 7.2.4 套接字155 7.3 DNS156 7.3.1 DNS记录159 7.3.2 DNS查询161 7.4 应用层网络163 7.4.1 万维网163 7.4.2 安全外壳167 7.4.3 文件传输168 7.4.4 网络文件系统170 7.4.5 与Windows共享171 7.5 高级网络主题171 7.5.1 whois171 7.5.2 动态主机配置协议172 7.5.3 网络时间协议172 7.5.4 wireshark和tshark173 7.5.5 其他高级工具174 7.6 总结174 第8章 可观测性176 8.1 基础知识177 8.1.1 可观测性策略177 8.1.2 术语178 8.1.3 信号类型178 8.2 日志180 8.2.1 Syslog183 8.2.2 journalctl184 8.3 监控185 8.3.1 设备I/O和网络接口187 8.3.2 集成的性能监视器189 8.3.3 工具化192 8.4 高级可观测性192 8.4.1 追踪和剖析193 8.4.2 Prometheus和Grafana194 8.5 总结198 第9章 进阶主题199 9.1 进程间通信199 9.1.1 信号200 9.1.2 命名管道201 9.1.3 UNIX域套接字202 9.2 虚拟机203 9.2.1 基于内核的虚拟机204 9.2.2 Firecracker205 9.3 现代Linux发行版205 9.3.1 Red Hat Enterprise Linux CoreOS206 9.3.2 Flatcar Container Linux206 9.3.3 Bottlerocket207 9.3.4 RancherOS207 9.4 精选安全主题207 9.4.1 Kerberos207 9.4.2 可插拔认证模块208 9.5 其他现代和未来产品208 9.5.1 NixOS209 9.5.2 桌面上的Linux209 9.5.3 嵌入式系统上的Linux210 9.5.4 云IDE中的Linux210 9.6 总结210 附录A 有用的解决方案213 附录B 现代Linux工具219
內容試閱 :
前言 很高兴我们能一起踏上 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)。 在任何情况下,你都应该有一个现成的环境,并进行大量的练习。不要只是阅读,要尝 试命令和实验。试着“打破”某些限制,例如,提供无意义的或奇怪的输入。在你执行 命令之前,对结果形成一个假设。 另一个提示:总是问为什么。当你看到一个命令或某个输出时,试着弄清楚它是从哪里 来的,以及负责它的底层组件是什么。