你終究要學會 Linux -- Shell 指令完整使用精解
內容描述
你終究有一天要回到Linux shell的,
為何不現在就開始?
被Windows和MacOS帶壞的你,想當個稱職的工程師,終究還是得回到Command Line。自動化固定性的工作、玩弄作業系統於股掌之間、用編輯器之神vim、宗師級的oh-my-zsh,別再牽拖,現在就開始用!
類Linux系列是全世界被最多人使用的作業系統(不是Windows哦,如果算上Android、MacOS和iOS的核心),他最強大的功能不是不會中毒,更不會是醜醜的GUI(你也可以讓他很漂亮!),一定就是那通殺每個工程師的shell指令。 這本書將會是你踏入專業領域最重要的一本工具書。
本書特色
◎針對初學者
這本書簡單易學,絕不在一開始就堆砌專業術語,而是注重趣味性和參與感,學習的過程就像你一邊敲鍵盤,我們一邊在你身旁聊一聊那些讓你疑惑的點,聊著聊著你就學會了。除了帶大家一步步操作,書中還會重點講解想法與方法,說明不同部分之間的內在關聯和區別,以便大家建立知識網,知其然亦知其所以然。
◎強調實用性
書中每個概念、工具都儘量配合程式範例,方便各位自學。隨書程式開放原始碼a,以容器形式提供完整的作業環境,大家既可以手動架設環境,也可以先體驗效果,再決定要不要深入了解。除了介紹應用的使用方法,書中還包含安裝和移除方法—裝卸自如,大家可以根據個人情況靈活取捨。
◎注重準確性
網路資源浩如煙海,但準確性參差不齊,大家篩選的過程需要耗費大量精力。而我們經過多年的學習,本身已經掌握了大量互動列知識並閱讀消化了不少資料,因此,我們在寫作本書的過程中遵循了一個原則:儘量使用第一手資料,避免大家被不可靠的轉述帶著走冤枉路。
◎針對多種作業系統
本書以Linux 使用者為主,兼顧macOS 和Windows 使用者:介紹了在3種平台上架設互動列環境的方法,範例程式在Linux Mint 20、macOS 和 Windows(WSL:Ubuntu 20.04 LTS)下通過測試。另外,還需要強調一點,這本書的寫作離不開開放原始碼工具和社區,期待讀者也能以開放的心態閱讀本書,學成之後可以積極參與開放原始碼活動,力爭為開放原始碼技術貢獻一份力量。
【前言】
原諒我這一生不羈放縱愛自由。
—Beyond,《海闊天空》
電影《駭客任務》中,人們生活在由電腦創造的虛擬世界Matrix 裡,這是個時尚光鮮、賞心悅目的現代化大都市,人們在這裡辛勤工作、努力奮鬥,上演自己的人生故事;而在真實世界,他們渾身插滿管子躺在吊艙中,靠營養液維持生命。少數人從吊艙中醒來,發現身處由機器控制的大工廠,人只是為機器提供能源的電池。這些醒來的人中,有些人選擇回到Matrix,忘掉真實世界,另一部分人則努力擺脫被機器控制的命運,奪回在陽光下自由生活的權利。隨著資訊技術的快速發展,我們的資訊媒介從電報升級到電話,再升級到文字、語音、視訊流暢傳輸的網際網路,Matrix 與真實世界的差距越來越小—人們被外表可愛、使用貼心的各種應用包圍著,在演算法的悉心“照料”下,聽“想聽”的話、看“想看”的劇,沉浸在“作為世界主宰者”的感覺裡。
但這終究不是生活的全部,總有那麼一些時刻,我們希望能夠從塑膠感十足的“烏托邦”中抽身而出,回到真實世界,雖然辛苦,卻更有意義。互動列就是我們從Matrix 回到真實世界的那部電話。它不是一張單程票,我們仍然可以繼續使用那些熟悉的圖形化使用者介面應用,它只是提供了對於未來的另一種選擇,或說一種更本質、更優雅的解決方案。對於數位世界的消費者,它外表古怪不討人喜歡,而對於真實世界中的創造者和探索者,它卻是日常工作不可或缺的可靠夥伴。
為什麼要學習互動列
我們平時使用的“應用”大多是圖形化使用者介面應用a(以下簡稱“圖形應用”),例如我們在手機、Windows 筆記型電腦上用的聊天、購物、遊戲、音樂應用;偶爾你還會注意到一些人透過鍵盤在“黑色的視窗”裡輸入字元執行程式,這個黑色的視窗我們習慣上叫它“互動列”(commandline,或console),那些執行在裡面的程式就叫“互動列介面應用”(以下簡稱“互動列應用”)。如果你覺得前面的Matrix 雖然很酷,但有點摸不著頭腦,那麼接下來,我們就分三點簡單直白地說說與圖形應用相比,互動列應用的主要特點。
• 學習曲線雖然先陡後平,但是掌握新工具的綜合成本很低圖形應用用來娛樂和購物確實很方便,作為開發工具呢,一開始也是很方便的,但圖形化的展示方式和開發模式,導致不同應用之間協作工作的難度很大,使用者常常為了分析資料學習Excel,為了做Web 後端開發學習在PyCharm 裡寫Django 程式,為了開發Java 程式學習Eclipse、IntelliJ,為了管理程式學習Sourcetree⋯⋯好吧,那我們就拼命一個一個地學習,可是當我們終於熟悉了這些應用之後,發現大家又在用Python做資料分析,用VS Code 寫Java 程式了,之前學的Excel 幫不上忙不說,又冒出來個Anaconda 要學習⋯⋯工具層出不窮,跟著走學不勝學,不跟著走又怕落伍。互動列應用正好相反,一開始需要花點時間熟悉它的套路,一旦掌握之後你就會發現:所有互動列應用的使用方法基本一樣—一通百通,掌握新工具的成本接近於零。
• 功能強大效率高,硬體設定要求低
一個互動列應用就像一塊積木,可以方便地與其他互動列應用組合在一起,進而完成高度複雜的工作。這就像只要掌握26 個字母,就可以組合出近乎無限的單字。你輸入的每行指令都可以儲存到檔案裡,變成指令稿自動執行,還能透過自動補全功能將重複工作幾乎減少到零。相較於互動列如此豐富、自動化的應用,它卻幾乎沒有“啟動”這個概念,按下確認鍵立刻開始工作。即使執行Windows、macOS 卡頓的老舊電腦,也能在互動列的世界裡重返青春。
• 開放原始碼、免費、開放
絕大多數互動列應用是開發者為了解決自己遇到的問題而撰寫的,而非專門為“使用者”開發的,因為這一點,互動列應用的豐富程度遠高於圖形應用。而且互動列應用多採用開放原始碼方式分發,免費使用。如果你對實現原理有興趣,可以方便地閱讀、偵錯程式,還可以提出問題,與作者互動,甚至傳送自己的改進,成為貢獻者(contributor)—像那些科學家、藝術大師一樣,在人類技術發展的長河裡留下自己的名字。為什麼要用這本書學習互動列假設你已經下定決心開始學習互動列了,而關於互動列的免費網路資料、圖書多到讓人眼花繚亂,為什麼要唯獨選擇這一本呢?先來看看你屬於哪一種讀者。
- 目標讀者
如果你符合以下任何一種情況,這本書正是為你而寫:
① 準備從零上手Linux 系統管理員的工作,學習讓日常系統管理工作自動化;
② Linux 系統愛好者,但還不熟悉Linux 系統和互動列的常見操作;
③ 主要在Windows、Android 等圖形介面和IDE 中程式設計,但渴望架設並使用Linux 系統;
④ 厭倦了一眼望不到頭的業務程式,不想35 歲學不動的時候被掃地出門;
⑤ 曾經想像過自己也能像電影裡的駭客一樣“運籌帷幄之中,決勝千里之外”。
歸納一下,本書適合所有想入門互動列開發的讀者,尤其是參考其他圖書或資料學習有困難的讀者。本書不敢說一定教會,但只要你願意下功夫,定能學有所成。此外,對Python 語言、資料分析和開放原始碼技術有興趣的讀者均可閱讀本書。
現在,你已經確定自己屬於本書的目標讀者了,那麼在真正開啟閱讀之前,先來了解一下這本書的特色吧—所謂“知己知彼,百戰百勝”,更進一步地認識一本書,才能更高效率地學習一本書。首先用簡單的項目跟大家交代一下圖書的核心特點,其次介紹一下全書章節的組織結構,最後聊一下大家重視的內容時效性問題。
- 核心特點
• 針對初學者
這本書簡單易學,絕不在一開始就堆砌專業術語,而是注重趣味性和參與感,學習的過程就像你一邊敲鍵盤,我們一邊在你身旁聊一聊那些讓你疑惑的點,聊著聊著你就學會了。除了帶大家一步步操作,書中還會重點講解想法與方法,說明不同部分之間的內在關聯和區別,以便大家建立知識網,知其然亦知其所以然。
• 強調實用性
書中每個概念、工具都儘量配合程式範例,方便各位自學。隨書程式開放原始碼a,以容器形式提供完整的作業環境,大家既可以手動架設環境,也可以先體驗效果,再決定要不要深入了解。除了介紹應用的使用方法,書中還包含安裝和移除方法—裝卸自如,大家可以根據個人情況靈活取捨。
• 注重準確性
網路資源浩如煙海,但準確性參差不齊,大家篩選的過程需要耗費大量精力。而我們經過多年的學習,本身已經掌握了大量互動列知識並閱讀消化了不少資料,因此,我們在寫作本書的過程中遵循了一個原則:儘量使用第一手資料,避免大家被不可靠的轉述帶著走冤枉路。
• 針對多種作業系統
本書以Linux 使用者為主,兼顧macOS 和Windows 使用者:介紹了在3種平台上架設互動列環境的方法,範例程式在Linux Mint 20、macOS 和 Windows(WSL:Ubuntu 20.04 LTS)下通過測試。另外,還需要強調一點,這本書的寫作離不開開放原始碼工具和社區,期待讀者也能以開放的心態閱讀本書,學成之後可以積極參與開放原始碼活動,力爭為開放原始碼技術貢獻一份力量。 - 章節組織和閱讀建議
你可以將本書內容看作對一個問題的回答:如何愉快、高效率地使用互動列工具,使之成為日常工作的得力幫手?圍繞這個主題,本書正文由8 章組成,可分為兩部分。
第一部分為前 5 章,介紹互動列工具的基本概念和使用方法。從第 1章一步步帶大家架設Linux 系統開始,我們便擺開架勢要從0 到1 大幹一場;第2 章我們來學習處於Linux 系統核心位置的檔案系統;第3章我們需要研究一下如何對琳琅滿目的互動列應用和包進行有效管理;第4 章我們來攻克互動列世界最重要的工具—shell;第5 章我們要掌握如何處理文字資料。
第二部分為後 3 章,每章各討論一個主題,彼此之間內容相對獨立,分別詳細展示了如何使用互動列進行資料分析、文字編輯和執行緒管理。
對於沒有特殊偏好、希望了解Linux 系統基本概念和使用方法、未來可能嘗試將Linux 作為主要工作環境的讀者,可以在讀完第一部分後留出一段時間多練習,待熟練使用後再進入第二部分。對資料分析有興趣的讀者,由於未來主要使用Python(以及R、Julia)等語言,而Python 社區的大部分開發者和使用者使用Linux/macOS(統稱為nix)系統,因此了解nix 系統基礎知識、熟練使用*nix 系統是用好Python 的基本功。第6 章介紹如何使用多種互動列應用進行資料概覽、資料篩選、數值計算、資料分組等工作,它們短小精悍,使用方便,和Python 互為補充,相得益彰。建議這部分讀者按順序閱讀1 ∼ 6 章,掌握相關內容不論對於學習Python 還是做以Python 為基礎的資料分析工作,都有很好的促進作用。對Linux 系統運行維護、資料庫管理(DBA)或後端應用(Web 服務端、中介軟體等)開發有興趣的讀者,可以先跳過第6 章,以後有需要時再閱讀。
對於輕度互動列使用者(例如大多數時間在macOS、Windows 下使用圖形應用,只是偶爾需要登入伺服器修改一下設定檔、執行一個應用、啟動一個服務等),讀完第一部分後,再看看7.1 節,就足以應付日常工作了,以後可以在工作中慢慢熟悉其他部分。最後需要特別提一下,附錄A 和附錄B 包含了幾個專題,雖然不屬於本書主題範圍,但與之密切相關。例如不熟悉鍵盤盲打的讀者,不妨看一下附錄A,這樣掌握互動列工具將獲得事半功倍的效果;例如對開放原始碼文化有興趣的讀者,不妨讀讀附錄B 推薦的圖書,將會有助大家深刻認識開放原始碼運動及其未來發展。
- 內容會不會很快過時
在這個技術發展日新月異的時代,資訊產生和過時的速度越來越快,大家投入時間和精力閱讀某本書或學習某項技能的同時常常會擔心:如果剛學會就過時了怎麼辦?作為長年的技術書籍閱讀者,筆者完全了解這種心情,本書採用下面的方法解決內容的時效性問題。
首先,在各章主題的選擇上,堅持抓大放小,將基礎、核心的內容講透,不追求大而全。其次,每章內容都採用從原理到實現的順序,即從一般到特殊,從穩
定到善變。
以文字編輯為例:我們首先介紹模式編輯的基本原理,只要人類還在使用以字母為單位的輸入裝置,模式編輯就不會過時;然後我們介紹標準Vim,即Vim 各種版本都具有的最核心的功能—不論Vim 如何變化,其核心是穩定的,雖然穩定程度相較模式編輯稍遜一籌;最後我們透過外掛程式拓展Vim 的功能,仍然採用從原理到實現的順序,例如使用ack.vim外掛程式實現全文檢索搜尋—雖然ack.vim 或許不會陪伴我們很長時間,但對全文檢索搜尋的需求是穩定存在的,即使不用Vim,我們仍然要從是否能方便地開啟專案檔案、是否能方便地進行全文檢索搜尋等幾個維度檢查其他編輯器。
借助這種原理和實現分離的結構,筆者可以方便地更新善變的那部分內容,進一步保證內容的時效性。當然,我們更希望看到你的意見和建議作者聯絡方式見“互動與勘誤”一節),讓更多人掌握互動列這一強大的生產力工具。
致謝
本書的問世首先要感謝人民郵電出版社圖靈公司的劉美英編輯,她給予了我們專業的指導和熱情的幫助,並對內容編排提出了很有價值的建議。將多年的思考寫成一本書似乎不缺素材,但寫起來慢慢發現,花大量時間進行構思、討論、撰寫和修改是必不可少的。感謝父母和夫人承擔了許多壓力,給予一個老大不小的理想主義者足夠的時間和信任,這本書裡也有你們默默的付出(李超)。感謝曉傑同學閱讀了本書的初稿,並提出了許多寶貴意見。
最後,請允許我們向全世界的開放原始碼貢獻者致以最崇高的敬意。在這個“拜物教”和“成功學”盛行的時代,幾代開放原始碼貢獻者堅持理想、辛勤工作,創造了無數藝術和技術結合的精品,用行動讓這個世界變得更真實、更公平、更美好。
人的生命是短暫的,但文字和程式永存。
雖然在寫作過程中,我們已經竭盡所能地力求準確,但由於個體的認知總是有限的,疏忽在所難免。因此,正在閱讀本書的你,如果發現任何問題,
請隨時與我們交流。大家可以透過電子郵件聯絡我們。
• 李超:leechau@126.com
• 王曉晨:wanty7788@163.com
目錄大綱
第1 章 開闢鴻蒙:從零架設互動列環境
1.1 架設系統方案選擇
1.2 製作Linux 體驗隨身碟
1.3 啟動Linux 體驗系統
1.4 驗證硬體相容性
1.5 安裝並啟動正式的Linux 系統
1.6 系統初始設定
1.7 其他架設方案
1.8 小結
第2 章 腳踏實地:檔案系統及其管理
2.1 檔案樹和目錄跳躍
2.2 許可權系統
2.3 檢視檔案資訊
2.4 建立檔案和目錄
2.5 複製和更改檔案和目錄
2.6 刪除檔案和目錄
2.7 檔案系統核心概念和常用指令一覽
2.8 小結
第3 章 調兵遣將:應用和套件管理
3.1 應用和套件管理的由來
3.2 系統套件管理工具:apt 和dpkg
3.3 跨平台套件管理工具
3.4 管理可執行檔
3.5 管理手動編譯的應用
3.6 以語言為基礎的套件管理
3.7 常用套件管理指令一覽
3.8 小結
第4 章 王者歸來:互動列及shell 強化
4.1 shell 外掛程式系統
4.2 訂製互動提示字元
4.3 目錄跳躍
4.4 搜尋檔案和目錄
4.5 智慧輔助
4.6 別名機制
4.7 說明文件隨手查
4.8 常用互動列增強工具一覽
4.9 小結
第5 章 縱橫捭闔:文字瀏覽與處理
5.1 了解文字資料
5.2 文字瀏覽
5.3 文字搜尋
5.4 文字連接
5.5 文字轉換
5.6 常用文字處理指令一覽
5.7 小結
第6 章 點石成金:資料分析
6.1 資料格式和分析工具
6.2 產生範例資料
6.3 資料概覽
6.4 資料抽樣和排序
6.5 資料篩選
6.6 數值計算
6.7 分組整理
6.8 其他工具
6.9 常用資料分析工作和實現指令一覽
6.10 小結
第7 章 駕馭神器:Vim 文字編輯
7.1 Vim 核心:模式編輯
7.2 暫存器和巨集
7.3 說明系統
7.4 設定Vim
7.5 借助外掛程式系統強化Vim 功能
7.6 模式編輯常用指令和鍵位圖
7.7 小結
第8 章 運籌帷幄:執行緒管理和工作空間組織
8.1 執行緒管理
8.2 工作空間組織
8.3 常用執行緒和服務管理指令一覽
8.4 小結
附錄A
盲打指南
A.1 鍵盤
A.2 調整鍵盤設定
附錄B
推薦資源
B.1 常用生產力工具
B.2 閱讀書目和網路資源
後 記
讓我們一起創造歷史
作者介紹
李超
算法工程師、北京理工大學博士,主要從事人工智慧、機器學習算法的研究和開發工作。深度參與開源軟體的開發和維護,OpenEuler社區貢獻者。翻譯出版作品《精通Puppet配置管理工具(第2版)》《 Python函數式編程(第2版)》。
個人博客:http://leetschau.github.io/。感興趣的研究領域:函數式編程、DevOps、高性能計算、範疇論。喜愛的語言:Python、Haskell、F#、C++等。
王曉晨
某互聯網頭部企業算法工程師、電子科技大學碩士,主要從事人工智能、機器學習算法的研究和開發工作。對離散製造的派工優化、計算機視覺、自然語言處理、網路安全等領域都有濃厚的學習興趣。