Linux使用和管理指南:從云原生到可觀測性 [奧]邁克爾·豪森布拉斯
定 價:89 元
- 作者:[奧]邁克爾·豪森布拉斯
- 出版時間:2024/5/1
- ISBN:9787111755333
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP316.85-62
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書主要以結(jié)構(gòu)化方法介紹如何在開發(fā)或操作中使用Linux。本書還提供了使用這個開源操作系統(tǒng)改進工作流程的技巧,并講解了如何獲得現(xiàn)代終端、shell和命令的實際操作經(jīng)驗,如何使用Linux網(wǎng)絡(luò),如何管理工作負載,如何實現(xiàn)現(xiàn)代Linux可觀測性。本書還講述了如何使用容器、systemd、現(xiàn)代文件系統(tǒng)以及諸如Flatcar和Bottlerocket等不可變發(fā)行版以現(xiàn)代方式運行Linux應(yīng)用程序。本書適合開發(fā)人員、軟件架構(gòu)師和站點可靠性工程師閱讀。
如果你在開發(fā)或操作中使用Linux,并且需要一種結(jié)構(gòu)化的方法來幫助你深入學習,那么本書就是為你準備的。作者還提供了使用這個開源操作系統(tǒng)改進工作流程的技巧。無論是開發(fā)人員、軟件架構(gòu)師還是站點可靠性工程師,本書都將幫助你使用Linux滿足從開發(fā)到與辦公相關(guān)的任務(wù)的日常需求。
在此過程中,你將獲得使用現(xiàn)代Linux終端和shell的實踐經(jīng)驗,并學會如何管理工作負載。你將了解如何通過使用容器、systemd、現(xiàn)代文件系統(tǒng)和不可變發(fā)行版(如Flatcar和Bottlerocket)來運行Linux應(yīng)用程序。
通過學習本書,你將:
? 把Linux作為現(xiàn)代工作環(huán)境來使用,而不僅僅是從管理員的角度來使用。
? 學習Linux內(nèi)核、終端多路復(fù)用器、人性化shell和可移植shell腳本等關(guān)鍵組件。
? 熟悉從文件權(quán)限到功能的訪問控制,并理解文件系統(tǒng)作為基本構(gòu)建塊的作用。
? 了解應(yīng)用程序依賴項管理和容器。
? 獲得Linux網(wǎng)絡(luò)棧和工具(包括DNS)的實踐經(jīng)驗。
? 應(yīng)用現(xiàn)代操作系統(tǒng)可觀測性來管理你的工作負載。
? 熟悉進程間通信、虛擬機和選定的安全主題。
前言
很高興我們能一起踏上 Linux 學習之旅。如果你使用過 Linux,正在尋求以一種結(jié)構(gòu)化的實操方法深入研究 Linux,或者你已經(jīng)有相關(guān)經(jīng)驗,想要獲得一些技巧和方法來改進 使用 Linux 時的流程[例如,在專業(yè)設(shè)置(如開發(fā)或操作)中使用 Linux],那么本書適合你。
我們將把重點放在使用 Linux 來滿足你的日常需求,從開發(fā)到與辦公相關(guān)的任務(wù),而不是系統(tǒng)管理方面的事情。此外,我們將重點關(guān)注命令行,而不是可視化 UI。所以,雖然 2022 年可能還是桌面 Linux,但我們將使用終端作為與 Linux 交互的主要方式。這樣做 還有一個額外的好處,你可以在許多不同的設(shè)置(從樹莓派到你所選擇的云提供商的虛 擬機)中同樣地應(yīng)用你的知識。
在開始之前,我想通過分享我自己的經(jīng)歷來提供一些背景:我第一次使用的操作系統(tǒng)并 不是 Linux。我使用的第一個操作系統(tǒng)是 AmigaOS (20 世紀 80 年代末),之后,在技術(shù) 高中,我主要使用微軟 DOS 和當時新的微軟 Windows,具體是圍繞事件系統(tǒng)和用戶界 面相關(guān)的開發(fā)。然后,在大學學習期間(20 世紀 90 年代中后期),我主要在大學實驗室 使用基于 UNIX 的 Solaris 和硅圖形機。我真正接觸 Linux 是在 21 世紀 00 年代中期的大 數(shù)據(jù)背景下,然后我開始與容器打交道,首先是2015年在 Apache Mesos的背景下(我當時在 Mesosphere 工作),然后是 Kubernetes (我最初在 Red Hat 的 OpenShift 團隊,然 后在 AWS 的容器服務(wù)團隊)。也就是在這里我意識到一個人需要掌握 Linux 才能在這個 領(lǐng)域發(fā)揮作用。Linux 是不同的。它的背景、全球用戶社區(qū)、多功能性和靈活性使其獨 一無二。
Linux 是一個有趣的、不斷增長的開源個人和企業(yè)的生態(tài)系統(tǒng)。它幾乎可以在任何設(shè)備 上運行,從 50 美元的樹莓派到你最喜歡的云提供商的虛擬機,再到火星車。經(jīng)過 30 多 年的發(fā)展,Linux 可能會持續(xù)存在一段時間,所以現(xiàn)在是深入了解 Linux 的好時機。
讓我們首先設(shè)定一些基本規(guī)則和期望。我將與你分享如何從本書中獲得最大的收獲,以及一些管理方面的事情,比如你可以在哪里以及如何嘗試我們將共同完成的主題。
目標讀者
本書是為那些想要或需要在專業(yè)設(shè)置中使用 Linux 的人準備的,比如軟件開發(fā)人員、軟 件架構(gòu)師、QA 測試工程師、DevOps 和 SRE 工程師,以及類似的角色。如果你是一個 業(yè)余愛好者,在從事 3D 打印或家庭裝修等活動時遇到了Linux,而你對一般的操作系統(tǒng) 或 Linux/UNIX 知之甚少甚至一無所知,那么從頭到尾看完這本書,你會得到最大的收 獲,因為各章往往是相互關(guān)聯(lián)的。但是,如果你已經(jīng)熟悉了 Linux,那么你也可以把它 作為參考。
如何使用本書
本書的重點是使你能夠使用 Linux,而不是管理它。市面上有很多關(guān)于 Linux 管理的 好書。
通過閱讀本書,首先,你將了解什么是 Linux (第 1 章)以及它的關(guān)鍵組件是什么(第 2 章和第 3 章),能夠列舉并使用基本的訪問控制機制(第 4 章),了解文件系統(tǒng)(第 5 章) 作為 Linux 基本構(gòu)建塊的作用,并知道什么是應(yīng)用程序(第 6 章)。
然后,你將獲得一些關(guān)于 Linux 網(wǎng)絡(luò)棧和工具的實踐經(jīng)驗(第 7 章)。此外,你將學習現(xiàn) 代操作系統(tǒng)的可觀測性(第 8 章)以及如何應(yīng)用它來管理工作負載。
你將了解如何通過使用容器和 Bottlerocket 等不可改變的發(fā)行版以現(xiàn)代方式運行 Linux 應(yīng)用程序,以及如何使用安全外殼(SSH)和高級工具(如點對點和云同步機制)安全 地進行通信(下載文件等)和共享數(shù)據(jù)(第 9 章)。
以下是一些嘗試方法的建議,跟著做(我強烈建議你這樣做,學習 Linux 就像學習一種 語言—你要多加練習):
? 買一臺 Linux 臺式計算機或筆記本計算機。例如,我有一臺非常漂亮的機器,是 Star Labs 的 StarBook( https://oreil.ly/1MbY2)。另外,你也可以使用沒有運行最新 Windows 版本的臺式計算機或筆記本計算機,并在上面安裝 Linux。
? 如果你想在一個不同的(主機)操作系統(tǒng)上做實驗(比如 MacBook 或 iMac),那么 你可以使用虛擬機(VM)。例如,在 macOS 上,你可以使用優(yōu)秀的 Linux-on-Mac (https://oreil.ly/bqVYG)。
? 使用你選擇的云計算供應(yīng)商來啟動一個基于 Linux 的虛擬機。
? 如果你喜歡修修補補并且想試試非英特爾處理器架構(gòu)(如 ARM),那么你可以買一臺單板計算機,如奇妙的 Raspberry Pi (https://www.raspberrypi.org)。
在任何情況下,你都應(yīng)該有一個現(xiàn)成的環(huán)境,并進行大量的練習。不要只是閱讀,要嘗 試命令和實驗。試著“打破”某些限制,例如,提供無意義的或奇怪的輸入。在你執(zhí)行 命令之前,對結(jié)果形成一個假設(shè)。
另一個提示:總是問為什么。當你看到一個命令或某個輸出時,試著弄清楚它是從哪里 來的,以及負責它的底層組件是什么。
Michael Hausenblas是AWS的解決方案工程主管,也是CNCF的云原生大使。他負責Prometheus、Grafana和OpenTelemetry的上游服務(wù)與托管服務(wù)。此前,Michael曾在Red Hat、Mesosphere(現(xiàn)為D2iQ)和MapR(現(xiàn)為HPE的一部分)工作,且在應(yīng)用研究領(lǐng)域有十幾年的實踐經(jīng)驗。
目錄
前言1
第1章 Linux簡介7
1.1 什么是現(xiàn)代環(huán)境7
1.2 Linux故事(到目前為止)8
1.3 為什么要使用操作系統(tǒng)9
1.4 Linux發(fā)行版10
1.5 資源的可見性11
1.6 Linux高級概述13
1.7 總結(jié)14
第2章 Linux內(nèi)核16
2.1 Linux架構(gòu)16
2.2 CPU架構(gòu)18
2.2.1 x86架構(gòu)19
2.2.2 ARM架構(gòu)20
2.2.3 RISC-V架構(gòu)20
2.3 內(nèi)核組件20
2.3.1 進程管理21
2.3.2 內(nèi)存管理23
2.3.3 網(wǎng)絡(luò)24
2.3.4 文件系統(tǒng)25
2.3.5 設(shè)備驅(qū)動程序25
2.3.6 系統(tǒng)調(diào)用26
2.4 內(nèi)核擴展29
2.4.1 模塊30
2.4.2 一種擴展內(nèi)核的現(xiàn)代方法:eBPF31
2.5 總結(jié)32
第3章 shell和腳本35
3.1 基礎(chǔ)知識36
3.1.1 終端36
3.1.2 shell37
3.1.3 現(xiàn)代命令44
3.1.4 常見的任務(wù)47
3.2 人性化的shell50
3.2.1 Fish shell50
3.2.2 Z-shell55
3.2.3 其他現(xiàn)代shell55
3.2.4 我應(yīng)該使用哪個shell56
3.3 終端多路復(fù)用器57
3.3.1 screen57
3.3.2 tmux58
3.3.3 其他多路復(fù)用器61
3.3.4 我應(yīng)該使用哪個多路復(fù)用器62
3.4 腳本63
3.4.1腳本基礎(chǔ)知識63
3.4.2 編寫可移植的bash腳本65
3.4.3 檢測和測試腳本67
3.4.4 端到端示例:GitHub用戶信息腳本68
3.5 總結(jié)70
第4章 訪問控制72
4.1 基礎(chǔ)知識72
4.1.1 資源和所有權(quán)72
4.1.2 沙盒73
4.1.3 訪問控制類型74
4.2 用戶75
4.2.1 管理本地用戶76
4.2.2 用戶集中管理78
4.3 權(quán)限79
4.3.1 文件權(quán)限79
4.3.2 進程權(quán)限83
4.4 高級權(quán)限管理85
4.4.1 功能85
4.4.2 seccomp 配置文件86
4.4.3 訪問控制列表86
4.5 良好實踐87
4.6 總結(jié)87
第5章 文件系統(tǒng)89
5.1 基礎(chǔ)知識89
5.2 虛擬文件系統(tǒng)93
5.2.1 邏輯卷管理器95
5.2.2 文件系統(tǒng)操作97
5.2.3 常用文件系統(tǒng)布局98
5.3 偽文件系統(tǒng)99
5.3.1 procfs100
5.3.2 sysfs101
5.3.3 devfs103
5.4 常規(guī)文件103
5.4.1 通用文件系統(tǒng)104
5.4.2 內(nèi)存文件系統(tǒng)105
5.4.3 寫時復(fù)制文件系統(tǒng)106
5.5 總結(jié)107
第6章 應(yīng)用、包管理和容器109
6.1 基礎(chǔ)知識110
6.2 Linux啟動過程111
6.3 systemd112
6.3.1 單元113
6.3.2 使用systemctl 進行管理114
6.3.3 使用journalctl進行監(jiān)控115
6.3.4 示例:scheduling greeter115
6.4 Linux應(yīng)用程序供應(yīng)鏈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 寫時復(fù)制文件系統(tǒng)130
6.6.4 Docker131
6.6.5 其他容器工具134
6.7 現(xiàn)代包管理器135
6.8 總結(jié)136
第7章 網(wǎng)絡(luò)138
7.1 基礎(chǔ)知識138
7.2 TCP/IP協(xié)議棧140
7.2.1 鏈路層141
7.2.2 互聯(lián)網(wǎng)層144
7.2.3 傳輸層151
7.2.4 套接字155
7.3 DNS156
7.3.1 DNS記錄159
7.3.2 DNS查詢161
7.4 應(yīng)用層網(wǎng)絡(luò)163
7.4.1 萬維網(wǎng)163
7.4.2 安全外殼167
7.4.3 文件傳輸168
7.4.4 網(wǎng)絡(luò)文件系統(tǒng)170
7.4.5 與Windows共享171
7.5 高級網(wǎng)絡(luò)主題171
7.5.1 whois171
7.5.2 動態(tài)主機配置協(xié)議172
7.5.3 網(wǎng)絡(luò)時間協(xié)議172
7.5.4 wireshark和tshark173
7.5.5 其他高級工具174
7.6 總結(jié)174
第8章 可觀測性176
8.1 基礎(chǔ)知識177
8.1.1 可觀測性策略177
8.1.2 術(shù)語178
8.1.3 信號類型178
8.2 日志180
8.2.1 Syslog183
8.2.2 journalctl184
8.3 監(jiān)控185
8.3.1 設(shè)備I/O和網(wǎng)絡(luò)接口187
8.3.2 集成的性能監(jiān)視器189
8.3.3 工具化192
8.4 高級可觀測性192
8.4.1 追蹤和剖析193
8.4.2 Prometheus和Grafana194
8.5 總結(jié)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 基于內(nèi)核的虛擬機204
9.2.2 Firecracker205
9.3 現(xiàn)代Linux發(fā)行版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 其他現(xiàn)代和未來產(chǎn)品208
9.5.1 NixOS209
9.5.2 桌面上的Linux209
9.5.3 嵌入式系統(tǒng)上的Linux210
9.5.4 云IDE中的Linux210
9.6 總結(jié)210
附錄A 有用的解決方案213
附錄B 現(xiàn)代Linux工具219