你能夠成天駕駛汽車而不用知道如何修理它們,可是若是你但願當一個維護員,你就須要知道事情是如何運做的。一樣的事情也發生在了 Mac OS X 上;你能夠一直使用 Mac 而不用知道如何修理它,可是若是你想對系統作一些維護或解決一些問題,那麼你須要知道如何使用 command-line。html
1 爲何要使用命令行/如何開啓命令行?
- 許多功能在圖形界面不提供,只有經過命令行來實現。
- Finder會隱藏許多你不太會須要的文件,然而 command line 會容許你訪問全部文件。
- 經過 command line 能夠遠程訪問你的 Mac(利用 SSH)。
- administrators 用戶能夠經過
sudo
命令得到 root 用戶權限。 - 經過 command-line script 可使工做更高效。
- Terminal(終端)程序能夠在「實用工具」裏找到。
- 若是你開啓手動輸入用戶名登錄模式,登錄時在用戶名處輸入
>console
能夠直接進入命令行界面。隨後你仍然須要登陸到一個帳戶。
2 初識Command Line
- 許多命令會花費一些時間來執行,然而這中間不會給出任何提示或者進度條。通常結束後會出現一個「用戶名$」的標記。若是沒有出現,那麼說明最後一條命令正在執行。
- 一條命令包括 Command Name、Options、Arguments、Extras 四個部分,可是後三個部分有時是可選的。Options 部分用
-
做爲前導符。其中許多命令的 Options 部分只包含單個字母,這時能夠合併。例如,ls -lA
和ls -l -A
是等效的。Arguments 部分用來細化這個命令或指定這個命令具體的實施對象,Extras 部分則用來進一步實現其餘功能。 - 舉例:下列命令包含前三個部分,用於刪除 Junk 這個程序。
michelle$ rm -R /Applications/Junk.app
- 若是你輸入了一些錯誤的命令,系統會返回一些錯誤信息。可是系統卻不會阻止你作傻事(例如刪除整個用戶文件夾)。
3 關於 man 命令
雖然有上千條命令,每條命令還有許多可選參數和具體的使用方式,可是你卻不須要記住這些命令。你只須要記住一個:man
shell
大多數命令都會包含一個使用指南,會告訴你任何你須要知道的關於這個命令的全部細節,在命令行中輸入 man command-name
便可獲取。例如,你想知道ls
這個命令怎麼使用,輸入man ls
便可進入使用指南頁面。數據庫
使用指南每每很長,因此你可使用▲(上箭頭)或▼(下箭頭)來上下移動,使用 來翻頁,輸入/
和關鍵字來按照關鍵字搜索,按Q來退出使用指南頁面。安全
那麼——若是你連命令名稱都不知道怎麼辦呢?輸入man -k
和關鍵字來對整個使用指南數據庫進行搜索。app
4 命令行,文件和路徑
若是知道如何使用命令是掌握 command line 的第一步,那麼第二步就是學習如何在 command line 中使用文件路徑。若是你掌握了文件路徑,你將會發現這比使用 Finder 更加快捷。less
注意編輯器
- command line 工具是大小寫敏感的,而且對於文件名,必須包括擴展名。例如,你想找iTunes這個程序,輸入
itunes
是無效的,必須輸入iTunes.app
。 - Mac OS傳統上喜歡使用「文件夾」(folders)這個名稱,可是在 command line 中,主要使用「目錄」(directory)這個詞。這和 UNIX 是一致的。
4.1 兩種路徑:絕對路徑和相對路徑
- 絕對路徑:完整描述一個文件的位置,老是以斜槓(
/
)(forward slash)開頭。例如/Users/michelle/Public/Drop Box
。 - 相對路徑:只描述一部分位置信息,它和你在 command line 目前的目錄有關。當你打開新的 Terminal 程序時,command line 會話的目錄應該是你的 home folder。這時 上面例子文件夾的相對路徑寫做
Public/Drop Box
。顯然它從當前目錄開始。和html相似,你也可使用兩個點(「..
」)來表明父目錄,這樣你就能夠用相對路徑表示上級或同級目錄了。例如你能夠輸入cd ..
甚至cd ../..
4.2 切換到其餘路徑和目錄
若是你想將當前 command line 會話切換到其餘目錄,須要用到三個命令:pwd
,ls
和cd
。ide
pwd
的含義是「print working directory」,會顯示當前目錄的絕對路徑。ls
的含義是「list directory contents」,它會列出當前目錄的內容。這個命令還有其餘參數可選。cd
的含義是「change directory」,它會改變當前目錄到你指定的目錄。若是你不指定,則會返回你的 home folder。
4.3 處理特殊字符
若是目錄中有特殊字符(空格,括號,引號,[]
,!
,$
,&
,*
,;
,|
,\
),那麼直接輸入空格會形成系統識別困難,必須使用特殊的語法來表示這些字符。例如上例中,空格前添加反斜槓「\
」(back slash)便可:cd Punlic/Drop\ Box/
。除了反斜槓,也能夠用引號的方法:cd "Public/Drop Box"。
工具
——若是不想手動輸入,也能夠把文件從 Finder 拖到 Terminal 窗口來建立絕對路徑,這會方便一些,由於上面提到的全部特殊字符在拖動後都會自動變成系統可識別的表示方法。其實,更有效率的解決方案是使用 Tab Complete 功能。post
Tab Complete 是 command line 中最能給你節省時間的特性之一,利用它的自動完成文件、目錄名稱功能還能夠防止你輸入錯誤。使用cd
進入你的 home folder,使用cd P
命令,而後按下tab按鍵。你可能會聽到錯誤音,由於你的 home folder 內有多個 P 開頭的文件夾。再按一次tab,Terminal 將會爲你列出 P 開頭的兩個文件夾:Public 和 Pictures。按U,再按tab,Terminal 則會自動爲你補全Public/
。Tab complete 一樣會處理那些特殊字符。注意,這會在末尾保留/
符號,大部分時候這沒問題,但若是出錯,移除多餘的/
試一試。
另外,鄂化符~
(tilde)在command line 中能夠表明當前用戶的 home folder。例如~/Public/Drop\ Box/
是合法的。
4.4 查看隱藏文件
爲了簡化工做,command line 和 Finder 都會隱藏許多文件和文件夾,這些內容一般是系統須要的。不借助第三方工具讓 Finder 顯示隱藏文件比較困難,可是在 command line 中卻很是簡單。首先,許多隱藏文件的隱藏是經過隱藏屬性在 Finder 中隱藏的,而 command line 會忽略這些屬性,因此這些文件會在 command line 中顯示。另外,ls
命令會隱藏文件名以.
開頭的文件,可是這些文件卻能夠被顯示出來,方法是利用-a
選項。例如:
michelle$ ls -la
咱們還添加了-l
選項,目的是控制輸出格式。若是你注意輸出內容的話,會發現還包括.
和..
兩項,它們分別表示當前文件夾和父文件夾(如圖)。若是你不想顯示這兩項,只須要把-a
改爲-A
便可。
4.5 前往其餘卷
在 command line 中,系統卷(也稱爲 root volume)是由開始的一個正斜槓表示的。然而也許聽起來難以想象,在 command line 中其餘卷看起來就在文件系統中一個叫作 Volumes 的文件夾中。下面的命令清晰地顯示出這種邏輯關係:我從個人 home folder 出發,最終前往一個叫 Time Machine 的卷,該卷是外接在 Mac 上的。
bogon:~ renfei$ pwd /Users/renfei bogon:~ renfei$ cd /Volumes/ bogon:Volumes renfei$ pwd /Volumes bogon:Volumes renfei$ ls Macintosh SSD Time Machine bogon:Volumes renfei$ cd Time\ Machine/ bogon:Time Machine renfei$ pwd /Volumes/Time Machine
5 用Command-Line管理文件
5.1 檢視文件
有許多基礎命令用來定位、檢視文件和文件夾,包括cat
, less
, which
, file
以及find
。別忘了,你能夠利用man
命令來查閱每一個命令的使用指南。
5.1.1 cat
cat
是「concatenate」的意思,會按順序讀取文件並輸出到 Terminal 窗口,語法爲cat
後接你須要查看的文件的路徑。cat
命令也能夠用>>
來增長文本文件的內容,例如命令cat ../textOne.txt >> textTwo.txt
會把 textOne.txt 的內容添加到 textTwo.txt 的結尾。這個>>
就屬於上一篇提到的「Extras」。
5.1.2 less
這個命令更適合用來查看長文本文件,由於它會容許你查找文本。語法爲 less
後接文件路徑,和cat
同樣。用less
命令打開的文件其實和你查看命令使用指南的時候使用的是一個查看器,因此操做是相同的,一樣可使用▲(上箭頭)或▼(下箭頭)來上下移動文本,使用 來翻頁,輸入/
和關鍵字來按照關鍵字搜索,按Q來退出使用指南頁面。除此以外,按V鍵來使用vi
文本編輯器。
5.1.3 which
這個命令會定位某個命令的文件路徑。換言之,它會告訴你你執行某個具體命令的時候,在使用哪一個文件。語法爲which
後接某個命令。如圖:
5.1.4 file
這個命令會嘗試根據文件的內容輸出文件類型。若是一個文件缺失了擴展名,那麼這個命令可能會很是有用。語法爲file
後接文件路徑。如圖,此例爲一個 PNG 文件,還給出了它的尺寸、顏色數等信息。
5.1.5 find
這個命令用來根據搜索關鍵詞定位文件路徑。 find
命令不使用 Spotlight 搜索服務,可是它容許你設置很是具體的搜索條件,以及通配符(稍後介紹)。語法爲find
後接搜索的起始路徑,後接定義搜索的選項,後接搜索內容(包含在引號裏)。例如:
注意
- 若是你要搜索根目錄,也許你想使用
-x
選項來避免搜索 /Volumes 文件夾。 - 若是想使用 Soptlight 搜索服務,使用
mdfind
命令後接搜索關鍵詞便可。
5.2 使用通配符(Wildcard Characters)
下面是經常使用的通配符:
- 星號(*,Asterisk)——表明任何長度的任何字符。例如
*.tiff
表明全部格式爲tiff的文件。 - 問號(?,Question mark)——表明任何單個字符。例如
b?ok
匹配 book 可是不匹配 brook。 - 方括號([],Square brackets)——定義必定範圍的字符,例如
[Dd]ocument
匹配 Document 以及 document;doc[1-9]
匹配doc1, doc2, …, doc9。
配合使用上面三種通配符能夠大大提升效率。
5.3 使用遞歸命令
簡單來講,遞歸命令能夠容許命令不執行於一個特定文件,而是指定的路徑下的全部文件。大多數命令包含一個-r
或者-R
選項,來設定你想遞歸地執行這個命令。例以下面的例子,展現了添加-R
後ls
命令的執行方式:
5.4 編輯文件和文件夾
有許多基礎的命令用來編輯文件和文件夾,包括mkdir
, cp
, mv
, rm
, rmdir
以及vi
。下面咱們來簡要地介紹一下這些命令。
5.4.1 mkdir
「make diretory」的縮寫,用來建立文件夾,語法爲mkdir
後接新文件夾的目錄。能夠用-p
選項,來一塊兒建立路徑中不存在的文件夾(這樣你就不用挨層建立了)。
5.4.2 cp
「copy」的縮寫,用來把文件從一處複製到另外一處。語法爲cp
後接原始路徑,後接目標路徑。若是你想複製整個文件夾和全部內容,須要添加-R
選項。若是指定的目標路徑不含文件名,則 cp 命令會按原名複製。若是指定的目標路徑包括文件名,則會複製爲你指定的文件名。若是僅指定新文件名,則會在原處以新名稱建立文件副本。注意,系統會自動替換同名文件而不出現提示。
5.4.3 mv
「move」的縮寫,用來移動文件。語法爲mv
後接原路徑,後接新路徑。mv 的指定路徑規則和 cp 是同樣的(沒錯,若是僅指定新文件名,它就成了重命名命令)。
5.4.4 rm
「remove」的縮寫,會永久刪除文件。注意,command-line中沒有廢紙簍。語法爲rm
後接文件路徑。然而,使用 rm 命令刪除的文件有可能能夠經過數據恢復工具恢復。若是但願安全刪除文件,可使用srm
命令。
5.4.5 rmdir和rm -R
rmdir是「remove directory」的縮寫,這個命令會永久刪除文件夾。再強調一遍,CLI 中木有廢紙簍。語法爲rmdir
後接但願刪除目錄的路徑。然而,rmdir 命令沒法刪除含有任何其餘文件的文件夾,因此大多數情形下rmdir
命令是不適用的。不過,你能夠利用rm
添加-R
選項來刪除文件夾及包含的全部文件。
5.4.6 vi
表明「visual」(視覺的),然而這個名稱至關具備諷刺意味:vi多是可視化效果最差的文本編輯器了。然而,vi 是 command line 中最多見的文本編輯器。用vi打開文本文件,只須要輸入vi
後接文件路徑便可。Mac OS X 還提供了nano
,一個更加現代的文本編輯器。它也更加方便,例如在底部包含了一個做弊小條(=_=),上面有經常使用的快捷鍵列表(你就不用背下來它們了)。然而,vi卻有時是默認的文本編輯器,因此掌握vi是頗有用的。
和less
命令相似,vi
命令會佔用整個 Terminal 空間來顯示文件內容。打開後,在「command模式」,vi 會等你輸入一些預約義字符來告訴 vi 你想作什麼。你也可使用鍵盤上的箭頭鍵單純地瀏覽文件。你想編輯時,按A開始(會進入編輯模式)。文字會插入到光標處。若是你想保存,須要先退出編輯模式進入 command 模式。方法是按下esc鍵。回到 command 模式後,按住shift同時按兩次Z來保存並退出。若是你不想保存,在 command 模式輸入:quit!
並按enter
return直接退出。
6 用Command-Line管理系統
6.1 使用su來切換用戶
su
命令表明「substitute user identity」,容許你在命令行中輕鬆切換到另外一個用戶帳戶。語法爲su
後接用戶的短名稱。而後會要求你輸入密碼(可是輸入的時候不會顯示)。執行完畢後,命令的前綴會改變,表示你擁有其餘用戶的權利。你能夠利用who -m
命令來驗證當前登錄的身份。切換後,你會一直保持該用戶身份,直至退出 Terminal 或者輸入exit
命令。
6.2 關於sudo的使用
6.2.1 sudo概述
更強大的命令就是sudo
,表明「substitute user do」,或者,更恰當地,「super user do」。用sudo
執行一個命令會使用 root 帳戶權限。固然,使用以前須要 administrator 帳戶(管理員帳戶)的受權(如輸入密碼)。
默認狀況下,任何管理員帳戶均可以使用sudo
來獲取 root 權限,甚至當 root 帳戶在圖形界面被禁用的狀況下,sudo
依然有效。這個命令是不少狀況下咱們不得不使用 Terminal 的緣由,——一樣也是給每一個用戶管理員身份的危險所在。不過,你能夠調整sudo
的配置文件,來限制它的使用。
bogon:~ renfei$ cat secret.txt cat: secret.txt: Permission denied bogon:~ renfei$ sudo cat secret.txt Password: This is the contents of the secret.txt text file that the user account renfei does not normally have access permissions to read. However, because he is an administrative user, she can use the sudo command to envoke root user access and read the contents of this file.
提示:若是因爲你忘了使用sudo
而致使命令行返回一個錯誤,只需輸入sudo !!
就能夠用sudo
來執行上一條指令。
記住,權力越大責任越大。不恰當地使用sudo
能夠輕易破壞你的系統設置。命令行只會在你第一次執行嚴重破壞性行爲以前提示你,以後,它就會假設你清楚本身正在幹什麼。若是你只掌握三條使用命令行的準則,那將是:老是仔細檢查你的命令;老是使用Tab completion來幫助你避免拼寫錯誤;使用sudo
以前,老是仔仔細細檢查你的命令。
6.2.2 使用 sudo 切換 Shell
若是你是一個管理員用戶,你須要執行不少條須要 root 權限的命令,你能夠臨時切換整個命令行 shell 來取得 root 級別的訪問權限。方法就是先輸入sudo -s
,回車後再鍵入你的密碼。
7 其餘Command-Line技巧提示
- 輸入命令
open .
能夠用 Finder 打開當前的位置。 - 在 Terminal 的偏好裏面能夠設定它的外觀和風格。
- 停止一個錯誤的或者發瘋的命令,可使用組合鍵control + C。
- 你能夠在執行前編輯命令,只須要使用箭頭和鍵盤上的其餘字母。
- 沒有輸入任何命令時,你能夠用▲和▼來瀏覽歷史命令。一樣能夠編輯和再次執行。
- 你也可使用
history
命令查看歷史記錄。 - 你可使用組合鍵control + L清屏。