【拓展】玩轉 Terminal 終端:入門指南及進階技巧

本文轉載自少數派網站

  • 原文:https://sspai.com/post/45534

  • 作者:王禹效

怎樣看出電影中哪個人是電腦大神?看他是不是在用終端

這是句玩笑話,但是你可能或多或少從電影中見過某個電腦大神或者專業黑客,在一塊黑色的窗口前隨便敲一點代碼,某個問題就迎刃而解了。雖然實際情況不會這麼容易,但是不可否認,終端在電腦中確實具備控制一切的能力

電影中常常出現的情景

你可能會覺得終端太過深奧,其實不然。終端可難可易,有些時候你只需要知道一些簡單的用法,就可以自己上手解決一些日常問題了。

本文我會首先帶你零基礎認識終端,瞭解其常見用寫法,告訴你新手入門哪些地方可以碰,那些地方是雷區。接着會實踐一些實用命令,如關閉報錯提示,顯示隱藏文件夾,修改截圖類型,整理應用程序欄等。最後我會分析一下這些實用命令的寫法,如何舉一反三,並談幾個涉及轉換文稿格式,快速安裝軟件和硬盤擴容等操作的進階命令。

目錄

  • 什麼是終端?

  • 如何打開終端?

  • 基礎知識

  • 常見玩法

    • 關閉崩潰報錯

    • 修改文件日期

    • 不要進入休眠狀態

    • 程序假死需要強退

    • 截圖保存爲 JPEG

    • 關閉截圖自動陰影

    • 顯示隱藏文件夾

    • 整理程序欄

    • 重置程序欄

    • 打印機械感十足的文字

  • 進階教程

    • 默認設置 defaults

    • 文件格式轉換 textutil

    • 磁盤處理 diskutil

    • 常用但有風險的命令 diskutil

    • 自動安裝 brew

    • 文件刪除 rm

    • 其它命令

  • 寫在文後

什麼是終端?

我們總在說在終端中如何操作,那麼終端到底是什麼呢?爲什麼它會有這麼大的權利?

要說清終端是什麼,我們先來看看操作系統的組成。簡化來說,操作系統分爲兩個部分,一部分稱作內核,另一部分成爲用戶交互界面。內核部分負責系統的全部邏輯操作,由海量命令組成,這一部分是系統運行的命脈,不與用戶接觸;交互界面則是開機之後所有我們所看到的東西,比如窗口,軟件,應用程序等等。

null

那麼我們若我們想對系統內核的某些操作邏輯做出一些修改,應該怎麼辦呢?終端就是連接內核與交互界面的這座橋,它允許用戶在交互界面上打開一個叫做「Terminal 終端」的應用程序,在其中輸入命令,系統會直接給出反饋。

因爲終端這座橋,實際允許用戶間接控制系統內核,也就是系統的大腦,因此它理論上具備控制一切的權利。

如何打開終端?

終端是系統中一個應用程序,你可以直接在所有程序中找到它,點擊打開就行。我比較喜歡使用聚焦搜索,輸入「終端」或「Terminal」,看到終端被選中了按下回車即可。

快速打開終端

基礎知識

本節會從零開始,一步步講解基礎知識。若你只想查看實際命令,可以完全跳過這一部分。

終端啓動後,就會進入一個問你要指令的狀態,你只需要將指令輸入在光標後,按下鍵盤迴車,指令就會被執行。

那麼什麼是命令?命令就是你告訴電腦希望它做什麼的那句話。若我現在希望告訴電腦說 hi,這句話的命令就是 say hi,就這麼簡單。

命令由三個部分組成,第一個部分是命令對象,在 say hi 這個命令中,「say」 是我們的命令對象,我們希望電腦說話;第二個部分是修飾命令對象的關鍵詞,可有可無,若我希望電腦說話時慢一點,可以輸入 say -r 500 hi,這裏的 「-r 500」 則是修飾說話語速的關鍵詞;第三部分是命令內容,這裏填寫希望電腦說的內容是「hi」這句話。

命令的組成

我們先來嘗試讓電腦將我們所打的話複述出來,這一步的指令是 echo "想說的話",將這句指令複製進終端並回車後,可以看到,它會將我們輸入進去的文字在下一行重新打出來。

echo

終端運行常常離不開對文件,文件夾的操作。

當你需要使用終端對文件夾進行操作時,終端需要你告訴它,你想要修改的文件在哪裏,這時我們需要了解路徑的概念。系統中的每一個文件都有一個存放位置,這一存放位置就稱作路徑。

終端啓動後,它的默認路徑在當前用戶文件夾的根目錄上,爲了確定這一點,你可以輸入 pwd 命令來查看當前路徑。在下圖中,輸入命令後,終端告訴我當前路徑是 /Users/我的名字

pwd

路徑的一般寫法爲 /文件夾名/文件夾名,但路徑其實分爲兩種。一種叫相對路徑,另一種叫絕對路徑,它們兩有什麼區別呢?

我們從當前路徑說起,當前路徑指的是現在終端所處的位置,若你想改變當前路徑,則可以輸入 cd /其他文件夾。比如我希望系統將當前路徑改爲所有應用程序文件夾,則輸入 cd /Applications,在下圖中可以看到,Legolas 前出現了一個 Applications,表示當前路徑已經在應用程序文件夾中。

cd /

剛剛提到的路徑的一般寫法 「/文件夾名/文件夾名」,它指的其實就是絕對路徑,你必須指定它從根目錄一直到達具體的文件夾。

與其相對的是相對路徑,**相對路徑允許你告訴終端從現在開始,接下來應該怎麼走。**相對路徑的書寫方法實在絕對路徑前加一個 .

若你現在已經處在應用程序文件夾中,想前往其中的一個名叫 Utilities 的子文件夾應該怎麼辦?

下圖中,當前位置的絕對路徑是 /Applications/Utilities,但由於我已經處於 /Applications 文件夾中,因此可以使用相對路徑的寫法 cd ./Utilities,表示將當前路徑轉到 Utilities 文件夾。

cd ./

說了這麼多關於路徑的寫法,你可能已經頭大了,懶得去這麼寫,那麼有沒有快速導入路徑的方法呢?有,直接將待編輯文件或文件夾拖入終端中即可,它會自動把絕對路徑提取出來,實際情況下常用的也是這種自動提取或手動複製的方法。

拖入快速提取路徑

當你想要查看當前路徑下有什麼文件時,可以使用 ls 命令,它會列舉當前路徑下的全部文件,若你希查看進階設定,比如列舉當前路徑下的全部文件並展開所有子文件夾,可以在 ls 命令後加上 -R 的識別符,新指令就變成了 ls -R,運行結果如下,可以看到我放在資源文件夾中的所有子文件都被顯示出來了。

ls -R

講到這裏,你也許會發現自己的終端已經滿滿當當的了,看着不舒服,這時可以使用 clear指令來清屏,運行結果如下。

clear

以上講的所有指令,都是無害指令,這裏的無害指的是不會對系統文件造成破壞,但是還有一些指令,可以瞬間刪掉你的整個系統,若你知道這些指令的用法那也沒問題,但若是不小心根據網上的教程用了從而誤刪了東西就不好了。內核爲了確保你知道某些指令的用法,要求你必須在這些有風險的指令前加輸 sudo,這就是所謂的超級管理員指令,它會在你密碼確認後,賦予 sudo 之後的命令最高權限,可以進行任何操作。

比如我需要把電腦上的 Windows 分區徹底刪除時,只需要輸入下面這串代碼,一瞬間整個磁盤分區就會被刪除:

sudo diskutil eraseVolume free none diskx

關聯閱讀:如何徹底移除你的 Boot Camp 分區?[1]

到這裏爲止,終端的非常基礎教學就已經講完了,這只是略過了終端海量指令中最常見的一小部分,畢竟終端控制的是整個系統的內核,其指令庫非常之大,沒有辦法全部講完。那麼,當你在網上見到一個新命令的時候,怎麼知道它該如何用?你可以使用 man 指令查看其用法,比如,當你見到了一個磁盤管理命令 diskutil,可以使用 man diskutil來查看這個磁盤管理命令的具體用法說明,想要退出這個說明按下鍵盤 Q 即可。

man

若你使用的是帶有觸控條的 Mac,可以點按觸控條按鈕進行快速更改終端顏色,添加書籤等操作。

觸控欄更改顏色

若你想要完全自定義終端,可以在「終端 - 偏好設置 - 描述文件」中進行更改。

自定義

常見玩法

關閉崩潰報錯

有時軟件崩潰就已經很讓人煩心了,重新打開後一遍遍彈出的問題報告更是煩不勝煩。這時你可以使用 defaults write com.apple.CrashReporter DialogType none 命令關閉這個問題報告。若你希望恢復其顯示,可以輸入 defaults write com.apple.CrashReporter DialogType crashreport

修改文件日期

有時你可能需要修改文件創建或修改日期,這時可以使用 touch -t 199505090000 拖入文件命令。這句命令中的數字表示 1995 年 5 月 9 日 00:00 分,你可以根據實際需要修改。

任意修改文件日期

不要進入休眠狀態

當你臨時不希望電腦進入休眠狀態時,可以使用 caffeinate 命令讓電腦時刻清醒。當你需要其恢復正常時,按下 ⌃Control - C 即可停止該命令。

caffeinate

程序假死需要強退

有時候程序假死了,強行退出也沒用,這時可以使用 killall 命令。以微信爲例,若想強退它,只需輸入 killall WeChat 即可。

killall

截圖保存爲 JPEG

Mac 的默認截圖格式爲 PNG,若你想讓默認的截圖保存類型爲 JPEG,可以輸入如下指令 defaults write com.apple.screencapture type jpg,結果如下圖所示,以後的截圖都會變成 JPEG 格式。如果你希望撤銷這條指令,輸入 defaults write com.apple.screencapture type png 即可。

運行命令後所有截圖均爲 JPEG

關閉截圖自動陰影

若你使用 Mac 自帶的截圖,會發現每次的窗口截圖均會自動添加陰影,當你需要後期處理這些圖片時,這些陰影可能會對你造成困擾。你可以使用下面這串命令來關閉截圖陰影:

defaults write com.apple.screencapture disable-shadow -bool true; killall SystemUIServer

當你希望重新啓動陰影時,可以輸入:

defaults write com.apple.screencapture disable-shadow -bool false; killall SystemUIServer

查看下方的截圖,你就會發現它和本文的其他截圖不同,沒有陰影。

關閉陰影后的截圖

顯示隱藏文件夾

在你跟着網絡上的教程進行一些操作時,難免會遇到讓你尋找隱藏文件夾的情況,這時你可以使用:

defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder

來顯示所有隱藏文件夾,當你不需要再顯示時,輸入:

defaults write com.apple.finder AppleShowAllFiles -bool false; killall Finder

即可恢復隱藏。查看下圖,你會發現所有隱藏文件夾全部顯示出來了。

顯示隱藏文件夾

整理程序欄

你也許會發現,底部的程序欄越用越亂,有時候內容多的半天找不到所需程序。這時你可以考慮爲其加入幾個隱藏的分界符將其歸爲幾個區域,輸入:

defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock

即可添加一個空白分界符,需要幾個重複運行幾遍命令即可。當你不需要這個白分界符了,將它從程序欄拖走即可刪除。

爲程序欄加分界符

重置程序欄

當你想要重新整理底部程序欄時,有時候從默認狀態開始整理也許是個好辦法。這是你可以使用 defaults delete com.apple.dock; killall Dock 命令將程序欄恢復爲電腦剛剛激活時的狀態。

恢復後的狀態

打印機械感十足的文字

當你想要打出機械感十足的文字時,可以玩玩banner -w 80 legolas.me這句命令,只需要將代碼結尾處的文字替換爲你想打印的字即可。

打印文字

進階教程

上面講了不少指令,你也許會好奇,這些指令到底修改的是什麼?可以修改什麼?若我想改別的,應該去哪裏找?

默認設置 defaults

上面這些 defaults 開始的指令,實際修改的是系統默認的 Plist 表單,這些表單管理着系統中全部程序的默認設置,上面所做的修改無非是改了某些程序的默認設置罷了。

若你想查看還有哪些可以修改,可以在訪達中按下鍵盤 ⌥Option,點擊「前往 - 資源庫」,找到 Perference 文件夾,你會發現所有的 Plist 文件均在這裏,你也可以根據便好手動修改。

Perference 文件夾

文件格式轉換 textutil

textutil 是一個系統自帶的,用於處理文稿的命令,其中我最常用的功能是其下屬功能 convert,這句指令允許你將任何文件,在以下文件格式中互相轉換 txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive。

若你手頭有一篇 DOCX 文件需要被轉換成 TXT,則可以輸入 textutil -convert txt 文件路徑,這句代碼中的 txt 處,可以替換爲任何你需要轉換到的文件格式,文件路徑則可以採用拖拽文件到終端的方法自動填充。

textutil -convert

磁盤處理 diskutil

磁盤處理也是常用的命令行操作之一,因爲其命令需要根據具體情況具體對待,所以我只簡單介紹其中無風險的兩個,下方列舉的其餘操作均會直接處理磁盤內容,請務必清楚你在做什麼,然後再輸入命令。

若你的電腦採用的是 APFS 磁盤分區,則應使用 diskutil apfs 開頭的命令;若你的電腦採用的是 HFS,HFS+ 磁盤分區,則應使用 diskutil 開頭的命令;若你的電腦採用的是 coreStorage 磁盤分區,則應使用 diskutil cs開頭的命令。

diskutil list 命令會將你的現有磁盤狀況顯示出來,如下圖所示。

diskutil list

diskutil cs list 命令會將你的現有的 Core Storage 邏輯分區狀況顯示出來,如下圖所示。

diskutil cs list

常用但有風險的命令 diskutil

  • 查看分區上限:sudo diskutil resizeVolume /dev/disk1s3 limits

  • 重置空間大小:sudo diskutil resizeVolume /dev/disk1s2 100GB

  • 斷開驅動器:sudo diskutil unmountDisk force /dev/disk1

  • 徹底移除邏輯磁盤: diskutil unmount /Volumes/Macintosh\ HD

  • 顯示 GUID 分區結構:gpt -r show /dev/disk1

  • 刪除 EFI NO NAME:gpt remove -I 4 /dev/disk1

  • 新增存儲區塊:gpt add -I 3 -b 1362424032 -s 1269536 -t 426F6F74-0000-11AA- AA11-00306543ECAC

  • 新增分區:newfs_hfs -J -v “Recovery HD” /dev/disk0s3

  • 物理 Core Storage 擴容: diskutil cs resizeDisk 11111111-2222-3333-4444-555555555555 980g

  • 邏輯 Core Storage 擴容: diskutil cs resizeVolume 11111111-2222-3333-4444-555555555555 980g

自動安裝 brew

Mac 有個很方便的包管理器,名叫 Homebrew[2],它允許你自動安裝許多應用程序。Homebrew 不是 terminal 的自帶內容,需要運行這串命令來進行安裝:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
使用 brew 命令前需要安裝 Homebrew

安裝完成後你可以直接使用 brew cask install 軟件英文名 等命令來快速安裝需要的軟件。Homebrew 在少數派已經有不少介紹了,因此這裏不再詳述。

關聯閱讀:9 條進階命令,把 HomeBrew 打造成第三方應用的 App Store[3]Mac 上高質量的開源應用,你可以在這裏一次找到[4]

文件刪除 rm

這一指令本是 刪除文件 用的,但正因爲它可以不分敵我的刪除任何文件,新手誤用有極大風險,因此我不打算詳細介紹這個。網上有一個臭名遠揚的傳言,欺騙別人用 sudo rm -rfv /Cool 來刪除系統文件,從而使整個系統崩潰,這條命令絕對不要嘗試。

我們來用前面學到的知識分析一下爲什麼這句命令會使得系統崩潰。首先 sudo 表示管理員命令並獲取最高權限,rm 表示刪除文件,用 man rm 命令查看手冊,可以發現 -r 是用來修飾 rm 命令的,表示刪除當前工作路徑下的全部子文件,-f 也是修飾 rm 命令的,表示無視被保護的文件依舊執行刪除。

前文在講默認路徑時提到,打開終端之後默認工作路徑正是當前用戶的根目錄,因此執行 sudo rm -rfv /Cool 後,會從根目錄開始,無視被保護的文件並且刪除當前路徑下的所有文件及子文件夾,包括系統文件,這樣一來系統就廢了。

既然談到了這個代碼的破壞力,我索性用與 Mac 同源的 fedora 系統在虛擬機上跑了一遍,下圖是跑代碼前:

虛擬機 fedora 中運行破壞代碼

下圖是跑代碼後,遇到了一個小問題,下面這張截圖已經是在 Mac 上了。你仔細觀察可以發現截圖裏的複製窗口前面的圖標損壞了,這是因爲當我在虛擬機中運行此破壞代碼時,Parallel Desktop 實際並沒有將 fedora 系統獨立於沙盒中。

半分鐘後我發現了這個問題但爲時已晚,這個小實驗直接破壞了我正在使用的 Mac 系統並造成超過 100 GB 文件丟失,許多系統軟件已無法正常運行,萬幸訪達等核心功能還可以正常工作。爲了修復這個錯誤,我不得不評估損失,備份文件以及重裝系統。

直接對 Mac 造成無法挽回的破壞

至於什麼是沙盒,什麼是虛擬機,這是另一個話題了,若你有興趣可以在本文下方評論。簡單來說,虛擬機可以在在工作電腦中模擬一個獨立運行環境,使用它,可以允許你在一個系統的同時運行另一個系統。沙盒是一種保護機制,保證了當前在虛擬機中運行的任何內容不會影響工作機本身。

這個在虛擬機 Fedora 中運行的破壞代碼的實驗本來不應該破壞我正常使用的 Mac 系統,最終導致 Mac 被破壞時由於 Parallel Desktop 這個軟件默認虛擬機不開啓沙盒模式導致的慘劇。

其它命令

當然命令遠不止上面所提到的這些,常見的還有 cp複製文件;mv 移動文件;mkdir 創建目錄;cat 顯示文件內容等等,這裏就不再一一介紹了。若你有興趣可以閱讀下面這篇文章,裏面有每個命令的詳細介紹。

關聯閱讀:每天一個linux命令[5]

寫在文後

如本文開頭所說,終端是銜接內核和用戶界面的橋樑,可易可難。你可以用它學習簡單的輕度操作,來幫你節省時間,讓電腦爲你優化;也可以深入學習,定製整個系統的細枝末節

如果你曾經懼怕終端不敢點開,那麼讀完本文之後,你也許有了嘗試新命令的衝動,這沒問題,絕大部分命令完全無害,每個人都可以嘗試。但切記,終端不是玩具,請懷有一顆敬畏之心,確定代碼無害後再運行,因爲終端中嚴重誤操作的後果往往是無法挽回的。


參考資料

[1]

如何徹底移除你的 Boot Camp 分區?: https://sspai.com/post/43699

[2]

Homebrew: https://brew.sh/

[3]

9 條進階命令,把 HomeBrew 打造成第三方應用的 App Store: https://sspai.com/post/43451

[4]

Mac 上高質量的開源應用,你可以在這裏一次找到: https://sspai.com/post/45554

[5]

每天一個linux命令: https://www.cnblogs.com/peida/archive/2012/12/05/2803591.html

原創系列推薦

1. JavaScript 重溫系列(22篇全)

2. ECMAScript 重溫系列(10篇全)

3. JavaScript設計模式 重溫系列(9篇全)

4. 正則 / 框架 / 算法等 重溫系列(16篇全)

5. Webpack4 入門(上)|| Webpack4 入門(下)

6. MobX 入門(上) ||  MobX 入門(下)

7. 59篇原創系列彙總

回覆“加羣”與大佬們一起交流學習~

點這,與大家一起分享本文吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章