Mac 終端的入門指南與進階技巧

前言

hihi,勇敢的小夥伴兒們大家好啊,今天我想分享的是 Mac 終端的一些用法,說起分享的原因呢,也是在生活中受到了前輩的指導,那分享的目的呢,就是想在分享的同時和大家一起學習並逐漸掌握這個技能,我在之前的休息時間內也學習過,猶記得當時在筆記本上寫下的幾個常用的指令(也可叫做命令,以下統稱爲指令),可到如今,幾經週轉,想再找到那個本子已經是難上加難了,借力於互聯網時代的便利,還是在自己這番小天地裏記錄下來罷。

其實在日常開發中我們經常會使用終端比如 git 和 pod(CocoaPods)就是我們常用的兩個指令,使用起來非常方便,由此可見,終端非常強大,所以我總有探究的慾望。每次看見別人在終端上噼裏啪啦一頓敲那些“每個字母都認識就是不知道啥意思”的指令,就覺得甚是崇拜,心裏想“ TA 一定是個大牛”。

學會用工具是人類的進步,熟練使用工具會給我們更高效率和更多自由。要想成爲一個電腦高手,掌握終端的用法必不可少。(而且還有機會在給妹子修電腦的時候耍酷,何樂而不爲呢?)

醞釀了一番情緒之後,接下來就是化“悲痛”爲動力的時候了,讓我們一起走進終端,瞭解終端的魅力吧!

正文

在瞭解終端之前,我還想跟大家分享一個前天晚上我的一位學長告訴我的學習方法,那就是“ WWH 學習法”,其實就是“What?+Why?+How?”,在學習之前先了解要學的東西是什麼?就比如終端,終端是什麼?爲什麼要用終端?怎麼用終端?三個方向去學習。學習就會事半功倍。接下來就帶着這種思想進入正題吧~

1.什麼是終端?爲什麼要用終端?

終端是什麼?彆着急,讓我們先來了解一下操作系統以下簡稱 OS (如Windows,macOS,Linux,iOS,Android,Unix)的組成,簡單來說, OS 就是由兩部分組成,一部分稱爲內核,一部分稱爲用戶交互界面。內核部分負責系統的全部邏輯操作,由海量命令組成,這一部分是系統運行的命脈,不與用戶接觸;交互界面則是開機之後所有我們看到的東西,比如窗口、軟件、應用程序等等。

null

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

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

2.如何打開終端?

相信剛接觸Mac OS的小夥伴兒們一定很不習慣它的一些操作,包括應用程序的位置都設計的那麼優秀,所以如何打開終端也是義務要分享給各位小夥伴兒們的。如果會的話可以看看能不能查漏補缺,也可以直接跳過這一部分。

方法1:最近我喜歡上了Spotlight(聚焦搜索)這個超厲害的全局搜索器,可通過屏幕右上角狀態欄裏的放大鏡icon打開,也可以通過command+space(空格)打開,直接輸入終端或Terminal就可以找到它,選中它按下回車就可以啓動它。

快速打開終端

方法2:打開啓動臺,在啓動臺頂端搜索終端或Terminal也可以找到,然後啓動它。

方法三:也是在啓動臺中,找到其他,在其他分組中找到終端,然後啓動它。

綜上幾種方法,隨意使用即可(手動狗頭)。

發現了一個我一直都不知道的Mac功能,在這裏偷偷分享給大家,Spotlight搜索“屏幕共享”有驚喜喲~

還有一個截屏快捷鍵 command + shift + 4 和 command + shift + 5 也一併練習一下吧。

3.怎麼用終端?

3.1 基礎知識

因爲這篇文章面向 0 基礎的小夥伴兒們,所以基礎知識部分我也不能略過,還是那句話,可以繼續看看以防有所遺漏,也可以直接跳過該部分內容哦~

終端啓動後,就會進入一個向我們要指令的狀態。我們只需要在光標後輸入指令,按下回車鍵,指令就會被執行。

那麼什麼是指令?指令就是我們告訴電腦希望它做什麼的那句話。若我現在希望告訴電腦說 hi ,這句話的指令就是 say hi ,就是這麼簡單。動手試試,電腦真的會跟你說 hi 哦~ (PS:如果電腦沒有聲音,可以檢查一下聲音輸出設備是否爲電腦本身,或者移步解決 Mac 從睡眠恢復後沒有聲音 嘗試解決。)

動手嘗試了就會更有求知慾,接下來我們瞭解一下指令是由哪些部分組成的吧?動腦想一想?你覺得是由幾部分組成的呢?

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

命令的組成

小插曲

以下部分截圖是以 % 結尾,而不是以 $ 結尾的原因是新系統版本catalina中終端顯示 “The default interactive shell is now zsh.”的原因。修改shell的方法會在下圖介紹。在系統偏好設置->用戶與羣組->左下角小鎖打開->當前用戶名鼠標右擊打開高級選項->修改shell爲zsh->點擊ok按鈕->command + N 打開終端新窗口就可以看到變化了哦~

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

以上兩個指令對象分別是 say 和 echo,他們一箇中文意思是 說 一個是 回聲 ,由此我們也可以看出指令對象本身是具有意義的,和它們的操作相匹配,這也是我們學習需要了解的重點。

一個OS,會經常對各種文件和文件夾進行操作,比如複製和粘貼,所以終端運行也離不開對文件、文件夾的操作。

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

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

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

我們從當前路徑說起,當前路徑指的是現在終端所處的位置,如果我們想改變當前路徑,則可以輸入 cd /其他文件夾  (Change Directory)。比如我希望系統將當前路徑改爲所有應用程序文件夾。則輸入 cd /Applications ,如圖所示,在Emy後面增加了 Applications 字段,表示當前路徑已經切換到應用程序文件夾中。

剛纔提到的路徑一般寫法是 /文件夾名/文件夾名 ,它指的就是絕對路徑,我們必須指定它從根目錄一直到達具體的文件夾

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

如果我們已經處在應用程序文件夾中,想前往其中一個名叫 Utilities 的子文件夾應該怎麼辦呢?

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

在操作過程中你可能疲於英文字母一個個輸入,畢竟這些像網址一樣複雜的路徑不是那麼容易一個一個字母輸入的,那有什麼方法可以快速導入路徑呢?

當然有啦!懶人推動世界的進步嘛~我們可以直接將待編輯文件或文件夾拖入終端中就可以啦,它會自動把絕對路徑提取出來,實際情況下常用的也是這種自動提取或手動複製的方法。

拖入快速提取路徑

既然我們找到了文件夾,我們很大可能要打開它看看裏面有什麼吧?那麼問題來了~當我們想要查看當前路徑下有什麼文件時,有什麼指令可以使用呢?嘿嘿,可以使用 ls (List & Sort)命令,它會列舉當前路徑下的全部文件,並按照大小字母和字母順序排序。

如果你還希望能查看進階設定,比如列舉當前路徑下的全部文件並展開所有子文件夾,可以在 ls 指令後加上 -R 的識別符,新指令就變成了 ls -R ,運行結果如下,我們可以看到我桌面的sortDemo文件夾下的所有子文件都被顯示出來了。

學習到這裏,你也許會發現自己的終端已經眼花繚亂了,看着非常的亂,就像我上面的圖片一樣,這滿屏的英文看得我只想清屏,還寶寶我一片清淨,這時候 clear 指令它來咯~ 運行指令後,上圖就會變成下圖所示的樣子,眼前一片清淨,心裏也舒服多了。

以上講的所有指令,都是無害指令。這裏的無害指的是不會對系統文件造成破壞,但是還有一些指令,可以瞬間刪掉我們的整個系統,比如有一個表情包:

還有一個表情包:

服務器啓動、試試大佬教我的新命令。rm -rf /*

看的我忍不住笑出鵝叫~

如果我們知道這些指令的用法是沒問題的,怕就怕我們不知道是什麼意思,然後跟着網上的教程用了之後誤刪了東西甚至是刪除了整個系統就真成了表情包裏那樣了。到時候只能追悔莫及,做什麼都無濟於事了。

爲了更好的避免這種“悲劇”的發生,爲了確保我們知道這些指令的用法,咱們OS內核也是機智的提供了 sudo (Switch User Do)指令,要求我們必須在那些有風險的指令前加上它,這就是所謂的超級管理員指令,它會在我們密碼確認後,賦予 sudo 之後的指令最高權限,可以進行任何操作。

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

sudo diskutil eraseVolume free none diskx

所以有些指令在不清楚具體操作的時候一定要慎用,尤其是需要加 sudo 的指令哦~

好了,終端的基礎教學我們已經學習完畢啦,當然,這只是略過了終端海量指令中最常見的一小部分而已啦,畢竟終端控制的是整個系統的內核,它的指令庫非常大,大到沒辦法講完。那麼,它是否有什麼方法可以查看指令的用法呢?哦豁,問出這個問題的你果然不簡單,man (Manual Pages)指令就是你要找的方法啦! 舉個栗子,當我們看到一個磁盤管理指令 diskutil (Disk Util),可以使用 man diskutil 來查看這個磁盤管理命令的具體用法說明,想要退出這個說明按下鍵盤 Q 就好。

我們可以看到 diskutil 的 name(名字)、synopsis(摘要)、description(描述)、verbs(命令,如:eraseVolume)、devices(設備)、disk identifier(硬盤標識符)、sizes(尺寸)、format(格式)、examples(用例)、sell also(參閱)、errors(錯誤提示)、history(歷史記錄)這些內容。對 diskutil 也有了更多地瞭解。使用起來也會明朗許多。【語義翻譯的可能不精準,僅供參考】

3.2 終端偏好設置

如果你使用的是帶有 Touch Bar (觸控條)的 Mac ,可以點按觸控條按鈕進行快速更改終端顏色、添加書籤等操作,非常便捷。

觸控欄更改顏色

如果你想要完全自定義終端,可以在終端->偏好設置-描述文件中進行修改。快捷鍵是 command + ,

自定義

3.3 常見玩法

終端其實也很好玩的,有一段時間在知乎上看見 有一個程序員朋友是怎麼樣的體驗 類似的問題,就看見一個程序員在終端打出了一個臥佛的形象,很狂拽酷炫,讓我不禁頂禮膜拜(哈哈哈誇張修辭表達感受,大家見諒)。所以接下來我們也學習幾個好玩的終端指令加強一下學習的興趣吧~

  • 關閉崩潰報錯:有時候軟件崩潰就已經很讓人煩心了,重新打開後一遍遍彈出的問題報告更是不勝其煩,這時候我們可以使用
    defaults write com.apple.CrashReporter DialogType none

    指令關閉這個問題報告。如果希望恢復顯示,可以輸入

    defaults write com.apple.CrashReporter DialogType crashreport

    煩人的崩潰提醒

  • 修改文件日期:有時候我們可能需要修改文件創建或修改日期,這時可以使用

    touch -t 199505090000 拖入文件獲取絕對地址

    指令。這句指令中的數字表示1995年5月9日0點00分,我們可以根據實際需求修改。如圖我修改成了1995年2月5日上午8點0分。

  • 不要進入休眠狀態:當我們臨時不希望電腦進入休眠狀態時,比如只有下載文件的時間裏希望屏幕常亮,可以使用 caffeinate 指令讓電腦保持清醒。當我們需要恢復正常時,按下 Control + C 就可以停止該命令。

  • 程序假死需要強退:有時候程序假死了,強行退出也沒用,這時候可以使用 killall (Kill All...)指令。以微信爲例,如果想強退它,只需要輸入 killall WeChat 就可以啦~試用了一下,我的微信秒退,可以(豎大拇指),很酷。

  • 截圖保存爲JPEG:Mac 的默認截圖格式爲 PNG ,如果我們想讓默認的截圖保存類型爲 JPEG,可以輸入如下指令

    defaults write com.apple.screencapture type jpg

    結果如圖所示,以後的截圖都會變成 JPEG 格式。如果希望撤銷這條指令,輸入

    defaults write com.apple.screencapture type png

    就可以了,其實就是把上面的 jpg 改成 png。

  • 關閉自動陰影:如果我們使用 Mac 自帶的截屏,會發現每次的窗口截圖均會自動添加陰影,如上圖所示,當我們後期需要處理這些圖片時,這些陰影可能會給我們造成困擾。我們可以使用下面這串指令關閉截圖陰影:

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

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

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

    其實就是把 -bool 的值從 true 換成了 false 罷了。下面的圖就和上面的不一樣,它沒有陰影。

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

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

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

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

    就可以恢復隱藏,我們可以看出來和上面陰影的命令很相似也是修改 -bool 的值。測試試試,真的所有的隱藏文件夾都顯示出來咯。

    顯示隱藏文件夾

  • 整理程序塢:有時候我們會發現,底部的程序塢越用越亂,有時候內容多的半天找不到所需要的程序。這時候我們可以考慮爲它加入幾個隱藏的分界符將它們歸爲幾個區域,輸入:

    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 你想打的文字內容

    指令就可以看到機械感十足的文字哦,用這個表白說不定還能增加成功率。(emmm,我感覺我彷彿是個直男...)

3.4 進階教程

上面學了不少實用的指令,可是我們只知其一不知其二,總不能遇見指令就複製粘貼,都不知道 具體修改的是什麼?可以修改什麼?如果想改別的,怎麼活學活用?應該到哪裏找呢?這些問題的答案吧。接下來就是我們的進階時間,不要眨眼,它們來咯。

默認設置 defaults

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

如果我們想要查看還要哪些可以更改,可以在 Finder (訪達)頂部菜單欄點擊 前往->資源庫 ,找到 Perference 文件夾,我們會發現所有的 Plist 文件都在這裏,我們也可以根據偏好手動修改哦~

我們可以參考上面指令中的 com.apple.dock 在 Perference 文件夾中查找到進行相應的操作。

文件格式轉換 textutil

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

如果手頭有一篇 DOCX 文件需要被轉換成 TXT,就可以輸入

textutil -convert 想轉換的格式如txt 文件路徑

就可以進行文件格式轉換了。

textutil -convert

磁盤處理 diskutil

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

如果我們的電腦採用的是 APFS 磁盤分區,就應該使用 diskutil apfs 開頭的指令;如果我們的電腦採用的是 HFS, HFS+磁盤分區,就應該使用 diskutil 開頭的指令;如果我們的電腦採用的是 coreStorage 磁盤分區,就應該使用 diskutil cs 開頭的指令。

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,它允許我們自動安裝許多應用程序。Homebrew 不是 Terminal 的自帶內容,需要運行這串指令來進行安裝:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用 brew 命令前需要安裝 Homebrew安裝完成後我們可以直接使用 brew cask install 軟件英文名 等指令來快速安裝需要的軟件了。

文件刪除 rm

這一指令本是刪除文件用的,但正因爲它可以不分敵我的刪除任何文件,新手誤用有極大風險,就如我前面的表情包所示,使用 sudo rm -rtv /Cool 能刪除系統文件,使得整個系統崩潰,這條指令絕對不要嘗試。

我們可以複習一下前面的知識分析一下問什麼這句指令會讓系統崩潰。首先 sudo 表示超級管理員命令,可以獲得最高權限,rm (Remove)刪除文件,用 man rm 來查看手冊,可以知道 -r 是用來修飾 rm 命令的,表示刪除當前工作路徑下的全部子文件夾,無視被保護的文件並且刪除當前路徑下的所有文件夾和子文件夾,包括系統文件,這樣一來系統自然就廢了。

這裏可以參考我的參考文章《玩轉 Terminal 終端:入門指南及進階技巧》看一下作者的慘痛經歷。

其他指令

當然指令遠不止上面所提到的那些,常見的還有 cp (Copy)複製文件,mv (Move)移動文件,mkdir (Make Directories)創建目錄,cat (Concatenate Files)顯示文件內容等等,這篇學習筆記就不一一介紹了,可以閱讀《每天一個linux命令目錄》進行深入學習。

寫在文後

我一個字一個字碼完這篇博客,一句指令一句指令的試驗截屏貼圖,到現在結束已經凌晨1點18分了,才僅僅是終端的一個入門教程而已,可見它的強大,學無止境,繼續學習吧,夥伴們!

最後,文章中很多東西是我個人總結的東西,僅供參考,如果有錯誤還請指出,感激不盡!

 

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