1.什么是終端?
要說清終端是什么,我們先來看看操作系統的組成。簡化來說,操作系統分為兩個部分,一部分稱作內核,另一部分成為用戶交互界面。內核部分負責系統的全部邏輯操作,由海量命令組成,這一部分是系統運行的命脈,不與用戶接觸;交互界面則是開機之后所有我們所看到的東西,比如窗口,軟件,應用程序等等。
那么我們若我們想對系統內核的某些操作邏輯做出一些修改,應該怎么辦呢?終端就是連接內核與交互界面的這座橋,它允許用戶在交互界面上打開一個叫做「Terminal 終端」的應用程序,在其中輸入命令,系統會直接給出反饋。
因為終端這座橋,實際允許用戶間接控制系統內核,也就是系統的大腦,因此它理論上具備控制一切的權利。
2.如何打開終端?
終端是系統中一個應用程序,你可以直接在所有程序中找到它,點擊打開就行。或者使用聚焦搜索,輸入「終端」或「Terminal」,看到終端被選中了按下回車即可。
3.基礎指令
簡單來說,首先打開終端,在里面輸入 say hello 命令.系統就會說出hello.
命令由三個部分組成,第一個部分是命令對象,在?say hi?這個命令中,「say」 是我們的命令對象,我們希望電腦說話;第二個部分是修飾命令對象的關鍵詞,可有可無,若我希望電腦說話時慢一點,可以輸入?say -r 500 hi,這里的 「-r 500」 則是修飾說話語速的關鍵詞;第三部分是命令內容,這里填寫希望電腦說的內容是「hi」這句話。
3.1?對文件,文件夾的操作
當你需要使用終端對文件夾進行操作時,終端需要你告訴它,你想要修改的文件在哪里,這時我們需要了解路徑的概念。系統中的每一個文件都有一個存放位置,這一存放位置就稱作路徑。
終端啟動后,它的默認路徑在當前用戶文件夾的根目錄上,為了確定這一點,你可以輸入?pwd?命令來查看當前路徑。在下圖中,輸入命令后,終端告訴我當前路徑是?/Users/我的名字。
路徑的一般寫法為?/文件夾名/文件夾名,但路徑其實分為兩種。一種叫相對路徑,另一種叫絕對路徑,它們兩有什么區別呢?
我們從當前路徑說起,當前路徑指的是現在終端所處的位置,若你想改變當前路徑,則可以輸入?cd /其他文件夾。比如我希望系統將當前路徑改為所有應用程序文件夾,則輸入?cd /Applications,在下圖中可以看到,Legolas 前出現了一個 Applications,表示當前路徑已經在應用程序文件夾中。
剛剛提到的路徑的一般寫法 「/文件夾名/文件夾名」,它指的其實就是絕對路徑,你必須指定它從根目錄一直到達具體的文件夾。
與其相對的是相對路徑,相對路徑允許你告訴終端從現在開始,接下來應該怎么走。相對路徑的書寫方法實在絕對路徑前加一個?.。
若你現在已經處在應用程序文件夾中,想前往其中的一個名叫 Utilities 的子文件夾應該怎么辦?
下圖中,當前位置的絕對路徑是?/Applications/Utilities,但由于我已經處于?/Applications文件夾中,因此可以使用相對路徑的寫法?cd ./Utilities,表示將當前路徑轉到 Utilities 文件夾。
快速導入路徑:直接將待編輯文件或文件夾拖入終端中即可,它會自動把絕對路徑提取出來,實際情況下常用的也是這種自動提取或手動復制的方法。
當你想要查看當前路徑下有什么文件時,可以使用?ls?命令,它會列舉當前路徑下的全部文件,若你希查看進階設定,比如列舉當前路徑下的全部文件并展開所有子文件夾,可以在?ls?命令后加上?-R?的識別符,新指令就變成了?ls -R,運行結果如下,可以看到我放在資源文件夾中的所有子文件都被顯示出來了。
講到這里,你也許會發現自己的終端已經滿滿當當的了,看著不舒服,這時可以使用?clear指令來清屏,運行結果如下。
常見的還有?cp復制文件;?mv?移動文件;?mkdir?創建目錄;?cat?顯示文件內容等等,詳情請看下面每天一個linux命令.
關聯閱讀:每天一個linux命令
4.常見玩法
關閉崩潰報錯:有時軟件崩潰就已經很讓人煩心了,重新打開后一遍遍彈出的問題報告更是煩不勝煩。這時你可以使用?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?即可停止該命令。
程序假死需要強退:有時候程序假死了,強行退出也沒用,這時可以使用?killall?命令。以微信為例,若想強退它,只需輸入?killall WeChat?即可。
截圖保存為 JPEG:Mac 的默認截圖格式為 PNG,若你想讓默認的截圖保存類型為 JPEG,可以輸入如下指令?defaults write com.apple.screencapture type jpg,結果如下圖所示,以后的截圖都會變成 JPEG 格式。如果你希望撤銷這條指令,輸入?defaults write com.apple.screencapture type png?即可。
關閉截圖自動陰影:?若你使用 Mac 自帶的截圖,會發現每次的窗口截圖均會自動添加陰影,當你需要后期處理這些圖片時,這些陰影可能會對你造成困擾。你可以使用下面這串命令來關閉截圖陰影:
當你希望重新啟動陰影時,可以輸入:
查看下方的截圖,你就會發現它和本文的其他截圖不同,沒有陰影。
顯示隱藏文件夾:在你跟著網絡上的教程進行一些操作時,難免會遇到讓你尋找隱藏文件夾的情況,這時你可以使用:defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder
來顯示所有隱藏文件夾,當你不需要再顯示時,輸入:defaults write com.apple.finder AppleShowAllFiles -bool false; killall Finder
即可恢復隱藏。查看下圖,你會發現所有隱藏文件夾全部顯示出來了。還有一個簡單方法,快捷鍵cmd + shift + . 打開或者關閉隱藏文件夾
整理程序欄:你也許會發現,底部的程序欄越用越亂,有時候內容多的半天找不到所需程序。這時你可以考慮為其加入幾個隱藏的分界符將其歸為幾個區域,輸入:
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這句命令,只需要將代碼結尾處的文字替換為你想打印的字即可。
5.進階教程
上面講了不少指令,你也許會好奇,這些指令到底修改的是什么?可以修改什么?若我想改別的,應該去哪里找?
默認設置 defaults
上面這些 defaults 開始的指令,實際修改的是系統默認的 Plist 表單,這些表單管理著系統中全部程序的默認設置,上面所做的修改無非是改了某些程序的默認設置罷了。
若你想查看還有哪些可以修改,可以在訪達中按下鍵盤??Option,點擊「前往 - 資源庫」,找到 Perference 文件夾,你會發現所有的 Plist 文件均在這里,你也可以根據便好手動修改。
文件格式轉換 textutil
textutil 是一個系統自帶的,用于處理文稿的命令,其中我最常用的功能是其下屬功能 convert,這句指令允許你將任何文件,在以下文件格式中互相轉換 txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive。
若你手頭有一篇 DOCX 文件需要被轉換成 TXT,則可以輸入?textutil -convert txt 文件路徑,這句代碼中的 txt 處,可以替換為任何你需要轉換到的文件格式,文件路徑則可以采用拖拽文件到終端的方法自動填充。
磁盤處理 diskutil
磁盤處理也是常用的命令行操作之一,因為其命令需要根據具體情況具體對待,所以我只簡單介紹其中無風險的兩個,下方列舉的其余操作均會直接處理磁盤內容,請務必清楚你在做什么,然后再輸入命令。
若你的電腦采用的是 APFS 磁盤分區,則應使用?diskutil apfs?開頭的命令;若你的電腦采用的是 HFS,HFS+ 磁盤分區,則應使用?diskutil?開頭的命令;若你的電腦采用的是 coreStorage 磁盤分區,則應使用?diskutil cs開頭的命令。
diskutil list?命令會將你的現有磁盤狀況顯示出來,如下圖所示。
diskutil cs list?命令會將你的現有的 Core Storage 邏輯分區狀況顯示出來,如下圖所示。
6.常用但有風險的命令?
以上講的所有指令,都是無害指令,這里的無害指的是不會對系統文件造成破壞,但是還有一些指令,可以瞬間刪掉你的整個系統,若你知道這些指令的用法那也沒問題,但若是不小心根據網上的教程用了從而誤刪了東西就不好了。內核為了確保你知道某些指令的用法,要求你必須在這些有風險的指令前加輸?sudo,這就是所謂的超級管理員指令,它會在你密碼確認后,賦予 sudo 之后的命令最高權限,可以進行任何操作。
比如我需要把電腦上的 Windows 分區徹底刪除時,只需要輸入下面這串代碼,一瞬間整個磁盤分區就會被刪除:sudo diskutil eraseVolume free none diskx
查看分區上限: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
文件刪除 rm
這一指令本是?刪除文件?用的,但正因為它可以不分敵我的刪除任何文件,新手誤用有極大風險,因此我不打算詳細介紹這個。網上有一個臭名遠揚的傳言,欺騙別人用?sudo rm -rfv /Cool?來刪除系統文件,從而使整個系統崩潰,這條命令絕對不要嘗試。
我們來用前面學到的知識分析一下為什么這句命令會使得系統崩潰。首先 sudo 表示管理員命令并獲取最高權限,rm?表示刪除文件,用?man rm?命令查看手冊,可以發現 -r 是用來修飾 rm 命令的,表示刪除當前工作路徑下的全部子文件,-f 也是修飾 rm 命令的,表示無視被保護的文件依舊執行刪除。
前文在講默認路徑時提到,打開終端之后默認工作路徑正是當前用戶的根目錄,因此執行?sudo rm -rfv /Cool?后,會從根目錄開始,無視被保護的文件并且刪除當前路徑下的所有文件及子文件夾,包括系統文件,這樣一來系統就廢了。
既然談到了這個代碼的破壞力,我索性用與 Mac 同源的 fedora 系統在虛擬機上跑了一遍,下圖是跑代碼前:
下圖是跑代碼后,遇到了一個小問題,下面這張截圖已經是在 Mac 上了。你仔細觀察可以發現截圖里的復制窗口前面的圖標損壞了,這是因為當我在虛擬機中運行此破壞代碼時,Parallel Desktop 實際并沒有將 fedora 系統獨立于沙盒中。
半分鐘后我發現了這個問題但為時已晚,這個小實驗直接破壞了我正在使用的 Mac 系統并造成超過 100 GB 文件丟失,許多系統軟件已無法正常運行,萬幸訪達等核心功能還可以正常工作。為了修復這個錯誤,我不得不評估損失,備份文件以及重裝系統。
至于什么是沙盒,什么是虛擬機??簡單來說,虛擬機可以在在工作電腦中模擬一個獨立運行環境,使用它,可以允許你在一個系統的同時運行另一個系統。沙盒是一種保護機制,保證了當前在虛擬機中運行的任何內容不會影響工作機本身。
這個在虛擬機 Fedora 中運行的破壞代碼的實驗本來不應該破壞我正常使用的 Mac 系統,最終導致 Mac 被破壞時由于 Parallel Desktop 這個軟件默認虛擬機不開啟沙盒模式導致的慘劇。
7.觸控欄更改顏色
若你想要完全自定義終端,可以在「終端 - 偏好設置 - 描述文件」中進行更改。