目 錄
第一篇 Ubuntu入門
第1章 了解Ubuntu 3
1.1 什么是Linux 3
1.2 Linux發行版 5
1.2.1 Debian 6
1.2.2 Ubuntu 6
1.2.3 Arch Linux 7
1.2.4 Fedora 8
1.2.5 OpenSUSE 8
1.2.6 CentOS 9
1.2.7 Red Hat Enterprise Linux 10
1.3 Ubuntu概述 10
1.3.1 什么是Ubuntu 10
1.3.2 Ubuntu的版本 11
1.3.3 Ubuntu的特點 12
1.3.4 如何獲得Ubuntu 13
1.4 GNU GPL和POSIX介紹 14
1.4.1 什么是GNU GPL 14
1.4.2 GNU GPL發展歷史 14
1.4.3 如何正確理解GNU GPL 15
1.4.4 了解POSIX標準 15
1.5 學習Ubuntu的方法 15
第2章 安裝Ubuntu 17
2.1 準備安裝Ubuntu 17
2.1.1 獲得安裝介質 17
2.1.2 Ubuntu的硬件要求 19
2.1.3 Ubuntu的安裝方式 20
2.2 虛擬機軟件 20
2.2.1 常見虛擬機軟件 20
2.2.2 選擇虛擬機軟件 21
2.2.3 安裝Oracle VM VirtualBox 21
2.3 安裝Ubuntu的方式 26
2.3.1 下載ISO鏡像文件 26
2.3.2 創建虛擬機 26
2.3.3 安裝Ubuntu過程 29
2.4 通過網絡安裝Ubuntu 35
2.4.1 下載網絡安裝器 35
2.4.2 通過網絡安裝Ubuntu步驟 35
2.5 將Ubuntu安裝到U盤中 41
2.5.1 Rufus工具 42
2.5.2 制作LiveUSB Ubuntu系統 42
2.6 安裝過程中的常見問題 44
2.6.1 選擇32位還是64位的Ubuntu 44
2.6.2 應該選擇哪種語言 45
2.6.3 Ubuntu中的磁盤分區與Windows中的磁盤分區 45
第3章 桌面環境 46
3.1 常見的桌面環境 46
3.1.1 KDE 46
3.1.2 GNOME 48
3.1.3 Xfce 50
3.1.4 Unity 51
3.2 使用Unity 52
3.2.1 菜單欄 52
3.2.2 啟動器 54
3.2.3 Dash 55
3.2.4 工作區 56
3.2.5 管理窗口 58
3.2.6 文件管理器 59
3.2.7 搜索文件和文件夾 61
3.2.8 定制桌面 63
3.3 使用GNOME 65
3.3.1 桌面布局 65
3.3.2 活動按鈕 66
3.3.3 工作區 66
3.3.4 浮動面板 67
3.3.5 顯示應用程序 68
3.3.6 鎖定、關閉或者重啟電腦 69
第4章 文件系統基礎知識 70
4.1 文件系統的層次結構 70
4.1.1 樹形層次結構 70
4.1.2 路徑名 72
4.1.3 Linux目錄結構 74
4.2 文件類型 75
4.2.1 普通文件 75
4.2.2 目錄文件 78
4.2.3 字符設備文件 79
4.2.4 塊設備文件 80
4.2.5 管道 81
4.2.6 套接字 84
4.2.7 文件鏈接 84
4.3 文件權限 87
4.3.1 文件權限概述 88
4.3.2 顯示文件權限 89
4.3.3 修改文件權限 91
4.3.4 更改文件所有權 94
4.3.5 文件特殊權限 95
第5章 文件和目錄管理 98
5.1 創建文件 98
5.1.1 使用touch命令創建文件 99
5.1.2 使用重定向創建文件 99
5.1.3 使用vi命令創建文件 101
5.2 顯示文件列表 103
5.2.1 使用ls命令顯示文件列表 103
5.2.2 顯示隱藏文件 106
5.2.3 遞歸顯示目錄內容 107
5.3 顯示文件內容 108
5.3.1 拼接文件內容:cat命令 108
5.3.2 分屏顯示:more命令 111
5.3.3 前后翻頁分屏顯示:less命令 113
5.3.4 查看前幾行內容:head命令 113
5.3.5 查看最后幾行內容:tail命令 114
5.4 文件的常用操作 116
5.4.1 復制文件 116
5.4.2 移動文件 118
5.4.3 刪除文件 119
5.4.4 比較文件 120
5.4.5 重命名文件 122
5.5 搜索文件 122
5.5.1 快速搜索文件:locate命令 122
5.5.2 按類型搜索:whereis命令 125
5.5.3 搜索二進制文件:which命令 125
5.5.4 全功能搜索:find命令 126
5.6 文本內容篩選 127
5.6.1 使用grep命令檢索文本內容 128
5.6.2 篩選其他命令的輸出結果 129
5.6.3 在grep命令中使用正則表達式 130
5.7 文本排序 132
5.7.1 使用sort命令文本排序 133
5.7.2 合并有序文件 134
5.8 文件的壓縮和解壓 135
5.8.1 壓縮文件 135
5.8.2 解壓文件 138
5.9 目錄管理 139
5.9.1 顯示當前工作目錄 139
5.9.2 改變目錄 139
5.9.3 創建目錄 140
5.9.4 移動目錄 141
5.9.5 復制目錄 141
5.9.6 刪除目錄 141
第6章 用戶和權限管理 142
6.1 用戶和用戶組基礎 142
6.1.1 用戶和用戶標識號 142
6.1.2 用戶組和組標識號 143
6.1.3 /etc/passwd文件 144
6.1.4 /etc/shadow文件 145
6.1.5 /etc/group文件 146
6.2 用戶管理 147
6.2.1 添加用戶:useradd命令 147
6.2.2 添加用戶:adduser命令 148
6.2.3 修改用戶:usermod命令 150
6.2.4 刪除用戶:userdel命令 151
6.2.5 修改用戶密碼:passwd命令 152
6.2.6 顯示用戶信息:id命令 153
6.2.7 用戶間切換:su命令 154
6.2.8 受限的特權:sudo命令 154
6.3 用戶組管理 157
6.3.1 添加用戶組:groupadd命令 157
6.3.2 添加用戶組:addgroup命令 157
6.3.3 修改用戶組:groupmod命令 157
6.3.4 刪除用戶組:groupdel命令 158
6.4 權限管理 158
6.4.1 權限概述 158
6.4.2 改變文件所有者:chown命令 160
6.4.3 改變文件所屬組:chgrp命令 161
6.4.4 設置權限掩碼:umask命令 162
6.4.5 修改文件訪問權限:chmod命令 163
6.4.6 修改文件ACL:setfacl命令 165
6.4.7 查詢文件ACL:getfacl命令 166
第二篇 進階篇
第7章 系統啟動和關閉 169
7.1 Ubuntu啟動過程 169
7.1.1 BIOS階段 169
7.1.2 引導程序階段 170
7.1.3 內核階段 173
7.1.4 進入系統 174
7.2 引導相關組件 174
7.2.1 主引導記錄 174
7.2.2 GRUB啟動程序 175
7.3 登錄 181
7.3.1 login進程 181
7.3.2 選擇Shell 183
7.3.3 用戶初始化文件 185
7.4 關閉系統 187
7.4.1 shutdown命令 187
7.4.2 init命令 188
7.4.3 其他命令 188
第8章 服務和進程管理 189
8.1 初始化程序概述 189
8.1.1 初始化程序 190
8.1.2 systemd 196
8.1.3 systemd基本配置文件 197
8.2 systemd單元 198
8.2.1 單元類型 198
8.2.2 列出單元 200
8.2.3 查看單元狀態 203
8.2.4 單元依賴 205
8.2.5 單元配置文件 207
8.3 systemd單元管理 209
8.3.1 啟動服務 210
8.3.2 停止服務 210
8.3.3 重啟服務 210
8.3.4 重新加載服務配置文件 211
8.3.5 查看服務狀態 211
8.3.6 配置服務自動啟動 212
8.3.7 禁止服務自動啟動 213
8.3.8 重新加載單元配置文件 214
8.3.9 顯示服務屬性 214
8.3.10 設置服務屬性 216
8.4 常用systemd命令 216
8.4.1 systemd-analyze命令分析系統啟動時的性能 216
8.4.2 hostnamectl命令 219
8.4.3 localectl命令 220
8.4.4 timedatectl命令 220
8.4.5 loginctl命令 221
8.5 目標 222
8.5.1 理解目標 222
8.5.2 切換目標 225
8.5.3 默認目標 226
8.6 日志管理 226
8.6.1 讀取日志 226
8.6.2 過濾輸出 227
8.6.3 日志大小限制 229
8.6.4 手動清理日志 230
8.7 進程管理 231
8.7.1 查詢進程及其狀態 231
8.7.2 監控進程及系統資源 233
8.7.3 終止進程 238
8.7.4 調整進程優先級 239
第9章 軟件包管理 241
9.1 軟件包管理概述 241
9.1.1 軟件包管理基本概念 241
9.1.2 軟件包管理工具 243
9.2 apt-get命令 245
9.2.1 搜索軟件包 245
9.2.2 apt-get命令基本語法 247
9.2.3 安裝軟件包 248
9.2.4 重新安裝軟件包 249
9.2.5 刪除軟件包 250
9.2.6 更新和升級軟件包 251
9.3 apt命令 253
9.3.1 apt命令基本語法 253
9.3.2 搜索軟件包 253
9.3.3 安裝軟件包 254
9.3.4 刪除軟件包 254
9.3.5 更新和升級軟件包 255
9.4 aptitude命令 255
9.4.1 aptitude命令基本語法 255
9.4.2 搜索軟件包 257
9.4.3 安裝軟件包 259
9.4.4 刪除軟件包 259
9.4.5 更新和升級軟件包 260
9.4.6 圖形化界面 260
9.5 synaptic軟件管理工具 261
9.5.1 安裝軟件包 261
9.5.2 刪除軟件包 264
9.5.3 更新和升級軟件包 265
第10章 磁盤和文件系統管理 266
10.1 磁盤管理基礎 266
10.1.1 磁頭 266
10.1.2 磁道 267
10.1.3 柱面 267
10.1.4 扇區 267
10.1.5 磁盤分區 268
10.2 文件系統基礎知識 268
10.2.1 常見文件系統 269
10.2.2 塊 271
10.2.3 引導塊 272
10.2.4 超級塊 272
10.2.5 索引節點 272
10.3 創建文件系統 273
10.3.1 創建分區 273
10.3.2 mkfs命令 278
10.3.3 創建ext2/ext3/ext4文件系統 281
10.3.4 創建NTFS文件系統 282
10.3.5 創建FAT文件系統 282
10.3.6 調整文件系統 284
10.4 掛載與卸載文件系統 285
10.4.1 掛載點 285
10.4.2 mount和findmnt命令 286
10.4.3 /etc/fstab文件 289
10.4.4 手工掛載文件系統 290
10.4.5 自動掛載文件系統 291
10.4.6 卸載文件系統 291
10.5 檢查與修復文件系統 292
10.5.1 fsck和e2fsck命令 293
10.5.2 交互式檢查與修復文件系統 294
10.5.3 自動檢查與修復文件系統 294
10.5.4 恢復嚴重受損的超級塊 295
10.6 磁盤陣列 296
10.6.1 磁盤陣列概述 296
10.6.2 磁盤陣列級別 296
10.6.3 創建磁盤陣列 299
10.7 邏輯卷管理 305
10.7.1 邏輯卷管理基本概念 305
10.7.2 安裝LVM 306
10.7.3 創建物理卷 306
10.7.4 創建卷組 309
10.7.5 創建邏輯卷 310
10.7.6 擴展邏輯卷 311
10.7.7 壓縮邏輯卷 312
第11章 網絡管理 314
11.1 網絡接口 314
11.1.1 查看網絡接口 314
11.1.2 網絡接口命名 319
11.1.3 配置網絡接口IP地址 319
11.1.4 域名解析 323
11.2 常用網絡配置命令 324
11.2.1 ifconfig命令 324
11.2.2 ip命令 326
11.2.3 route命令 333
11.2.4 netstat命令 335
11.2.5 nslookup命令 338
11.2.6 ping命令 339
11.3 防火墻 340
11.3.1 ufw簡介 340
11.3.2 ufw配置 340
11.3.3 ufw與應用系統的整合 342
11.3.4 ufw日志管理 344
第三篇 精通Linux
第12章 Shell編程 347
12.1 Shell編程基礎 347
12.1.1 Shell 347
12.1.2 Shell腳本 348
12.1.3 Shell腳本的執行方法 349
12.1.4 位置參數 350
12.1.5 內部命令 351
12.2 變量 353
12.2.1 變量分類 353
12.2.2 變量聲明 354
12.2.3 變量賦值 355
12.2.4 變量的引用和替換 355
12.2.5 變量的間接引用 356
12.2.6 特殊變量替換 357
12.2.7 單引號和雙引號 358
12.2.8 命令替換 359
12.3 算術運算 359
12.3.1 let命令 360
12.3.2 expr命令 360
12.3.3 $(())表達式 361
12.3.4 $[]表達式 361
12.4 數組 361
12.4.1 定義數組 362
12.4.2 獲取數組長度 363
12.4.3 遍歷數組 363
12.4.4 刪除元素 365
12.4.5 數組切片 365
12.4.6 數組替換 366
12.5 條件測試 366
12.5.1 條件測試語法 367
12.5.2 文件測試 367
12.5.3 字符串測試 370
12.5.4 整數值測試 371
12.5.5 邏輯運算符 372
12.6 條件語句 372
12.6.1 if語句 373
12.6.2 case語句 375
12.7 循環語句 377
12.7.1 for語句 377
12.7.2 while語句 379
12.7.3 until語句 381
12.7.4 select語句 382
12.7.5 嵌套循環 384
12.7.6 continue和break語句 384
12.8 信號的捕獲與處理 387
12.8.1 信號 387
12.8.2 捕獲信號 388
第13章 網絡服務管理 391
13.1 SSH服務 391
13.1.1 SSH協議 391
13.1.2 配置SSH服務 392
13.1.3 管理SSH服務 395
13.1.4 使用賬號密碼登錄SSH服務 396
13.1.5 使用密鑰對登錄SSH服務 397
13.2 FTP文件傳輸服務 402
13.2.1 FTP文件傳輸協議 402
13.2.2 安裝vsftpd 402
13.2.3 vsftpd配置文件 403
13.2.4 管理FTP用戶:匿名用戶、本地用戶、虛擬用戶 406
13.2.5 演示:使用FTP傳輸文件 411
13.3 DNS域名服務 416
13.3.1 域名、IP地址、域名服務器 417
13.3.2 BIND以及組件 418
13.3.3 BIND配置文件 418
13.3.4 配置區域 424
13.3.5 資源記錄 425
13.3.6 演示:DNS服務器配置實例 427
13.4 NFS服務 430
13.4.1 安裝NFS服務 431
13.4.2 共享文件系統 431
13.4.3 掛載NFS文件系統 433
13.4.4 NFS文件系統權限 434
13.5 其他網絡服務管理 437
13.5.1 Samba資源共享 437
13.5.2 Apache萬維網服務 441
13.5.3 MySQL數據庫服務 444
第14章 虛擬化和云計算 447
14.1 虛擬化基礎知識 447
14.1.1 虛擬化技術 447
14.1.2 常用虛擬化方案 447
14.2 KVM 448
14.2.1 KVM及其相關組件 448
14.2.2 安裝KVM 448
14.2.3 創建虛擬機 449
14.2.4 管理虛擬機 451
14.3 Docker 452
14.3.1 Docker以及基礎知識 452
14.3.2 安裝Docker 453
14.3.3 使用鏡像 454
14.3.4 管理容器 456
14.3.5 使用網絡:外部訪問容器 459
14.3.6 使用網絡:容器互聯 461
14.4 LXC和LXD 461
14.4.1 LXC和LXD簡介 462
14.4.2 安裝LXD 462
14.4.3 創建容器 463
14.4.4 列出容器 464
14.4.5 查看容器 466
14.4.6 管理容器 466
14.4.7 與容器交互 467
14.4.8 管理鏡像 469
14.5 OpenStack 471
14.5.1 OpenStack的核心組件 471
14.5.2 通過DevStack部署OpenStack 473
14.5.3 儀表盤 474
14.5.4 實例管理 478
14.5.5 鏡像管理 486
14.5.6 卷管理 488
14.5.7 網絡管理:網絡拓撲 489
14.5.8 網絡管理:網絡的修改和刪除 490
14.5.9 網絡管理:路由 494
14.5.10 網絡管理:安全組 496
第15章 系統和網絡安全 499
15.1 用戶管理安全 499
15.1.1 管理好root用戶 499
15.1.2 用戶資料安全 500
15.1.3 密碼策略 501
15.2 防火墻 503
15.2.1 ufw 503
15.2.2 IP偽裝 504
15.2.3 日志 504
15.3 AppArmor 505
15.3.1 安裝AppArmor 505
15.3.2 使用AppArmor 505
15.3.3 AppArmor配置文件 507
15.4 數字證書 509
15.4.1 獲取數字證書 509
15.4.2 生成密鑰 509
15.4.3 生成證書簽署請求 510
15.4.4 安裝證書 511
15.5 弱點掃描 511
15.5.1 安裝OpenVAS 512
15.5.2 OpenVAS儀表盤 514
15.5.3 掃描任務管理 514
15.5.4 掃描報表 516
15.6 入侵檢測 518
15.6.1 安裝Snort 518
15.6.2 Snort配置文件 519
15.6.3 Snort檢測規則 519
15.6.4 測試Snort 521