Mac OS X Terminal 101:终端使用初级教程以及Xcode
轉(zhuǎn)自?http://www.renfei.org/blog/mac-os-x-terminal-101.html
?
最近學(xué)習(xí)蘋果認(rèn)證的《Mac OS X Support Essentials》教程,看到 Command Line 一節(jié)有很多實(shí)用的知識(shí),下面選取一部分翻譯 + 筆記,整理成此文。
你可以整天駕駛汽車而不用知道如何修理它們,但是如果你希望當(dāng)一個(gè)維護(hù)員,你就需要知道事情是如何運(yùn)作的。同樣的事情也發(fā)生在了 Mac OS X 上;你可以一直使用 Mac 而不用知道如何修理它,但是如果你想對(duì)系統(tǒng)做一些維護(hù)或解決一些問題,那么你需要知道如何使用 command-line。
為什么要使用命令行/如何開啟命令行?
- 許多功能在圖形界面不提供,只有通過命令行來實(shí)現(xiàn)。
- Finder會(huì)隱藏許多你不太會(huì)需要的文件,然而 command line 會(huì)允許你訪問所有文件。
- 通過 command line 可以遠(yuǎn)程訪問你的 Mac(利用 SSH)。
- administrators 用戶可以通過?sudo?命令獲得 root 用戶權(quán)限。
- 通過 command-line script 可以使工作更高效。
- Terminal(終端)程序可以在“實(shí)用工具”里找到。
- 如果你開啟手動(dòng)輸入用戶名登陸模式,登陸時(shí)在用戶名處輸入?>console?可以直接進(jìn)入命令行界面。隨后你仍然需要登錄到一個(gè)賬戶。
初識(shí)Command Line
- 許多命令會(huì)花費(fèi)一些時(shí)間來執(zhí)行,然而這中間不會(huì)給出任何提示或者進(jìn)度條。一般結(jié)束后會(huì)出現(xiàn)一個(gè)“用戶名$”的標(biāo)記。如果沒有出現(xiàn),那么說明最后一條命令正在執(zhí)行。
- 一條命令包括 Command Name、Options、Arguments、Extras 四個(gè)部分,但是后三個(gè)部分有時(shí)是可選的。Options 部分用-作為前導(dǎo)符。其中許多命令的 Options 部分只包含單個(gè)字母,這時(shí)可以合并。例如,ls -lA和ls -l -A是等效的。Arguments 部分用來細(xì)化這個(gè)命令或指定這個(gè)命令具體的實(shí)施對(duì)象,Extras 部分則用來進(jìn)一步實(shí)現(xiàn)其他功能。
-
舉例:下列命令包含前三個(gè)部分,用于刪除 Junk 這個(gè)程序。
michelle$ rm -R /Applications/Junk.app
- 如果你輸入了一些錯(cuò)誤的命令,系統(tǒng)會(huì)返回一些錯(cuò)誤信息。但是系統(tǒng)卻不會(huì)阻止你做傻事(例如刪除整個(gè)用戶文件夾)。
關(guān)于 man 命令
雖然有上千條命令,每條命令還有許多可選參數(shù)和具體的使用方式,但是你卻不需要記住這些命令。你只需要記住一個(gè):man
大多數(shù)命令都會(huì)包含一個(gè)使用指南,會(huì)告訴你任何你需要知道的關(guān)于這個(gè)命令的所有細(xì)節(jié),在命令行中輸入?man command-name?即可獲取。例如,你想知道ls這個(gè)命令怎么使用,輸入man ls即可進(jìn)入使用指南頁面。
使用指南往往很長(zhǎng),所以你可以使用▲(上箭頭)或▼(下箭頭)來上下移動(dòng),使用 來翻頁,輸入/和關(guān)鍵字來按照關(guān)鍵字搜索,按Q來退出使用指南頁面。
那么——如果你連命令名稱都不知道怎么辦呢?輸入man -k和關(guān)鍵字來對(duì)整個(gè)使用指南數(shù)據(jù)庫進(jìn)行搜索。
命令行,文件和路徑
如果知道如何使用命令是掌握 command line 的第一步,那么第二步就是學(xué)習(xí)如何在 command line 中使用文件路徑。如果你掌握了文件路徑,你將會(huì)發(fā)現(xiàn)這比使用 Finder 更加快捷。
注意
- command line 工具是大小寫敏感的,并且對(duì)于文件名,必須包括擴(kuò)展名。例如,你想找iTunes這個(gè)程序,輸入itunes是無效的,必須輸入iTunes.app。
- Mac OS傳統(tǒng)上喜歡使用“文件夾”(folders)這個(gè)名稱,但是在 command line 中,主要使用“目錄”(directory)這個(gè)詞。這和 UNIX 是一致的。
兩種路徑:絕對(duì)路徑和相對(duì)路徑
- 絕對(duì)路徑:完整描述一個(gè)文件的位置,總是以斜杠(/)(forward slash)開頭。例如/Users/michelle/Public/Drop Box。
- 相對(duì)路徑:只描述一部分位置信息,它和你在 command line 目前的目錄有關(guān)。當(dāng)你打開新的 Terminal 程序時(shí),command line 會(huì)話的目錄應(yīng)該是你的 home folder。這時(shí)上面例子文件夾的相對(duì)路徑寫作Public/Drop Box。顯然它從當(dāng)前目錄開始。和html類似,你也可以使用兩個(gè)點(diǎn)(“..”)來代表父目錄,這樣你就可以用相對(duì)路徑表示上級(jí)或同級(jí)目錄了。例如你可以輸入cd ..甚至cd ../..
切換到其他路徑和目錄
如果你想將當(dāng)前 command line 會(huì)話切換到其他目錄,需要用到三個(gè)命令:pwd,ls和cd。
處理特殊字符
如果目錄中有特殊字符(空格,括號(hào),引號(hào),[],!,$,&,*,;,|,\),那么直接輸入空格會(huì)造成系統(tǒng)識(shí)別困難,必須使用特殊的語法來表示這些字符。例如上例中,空格前添加反斜杠“\”(back slash)即可:cd Punlic/Drop\ Box/。除了反斜杠,也可以用引號(hào)的方法:cd "Public/Drop Box"。
——如果不想手動(dòng)輸入,也可以把文件從 Finder 拖到 Terminal 窗口來創(chuàng)建絕對(duì)路徑,這會(huì)方便一些,因?yàn)樯厦嫣岬降乃刑厥庾址谕蟿?dòng)后都會(huì)自動(dòng)變成系統(tǒng)可識(shí)別的表示方法。其實(shí),更有效率的解決方案是使用 Tab Complete 功能。
Tab Complete 是 command line 中最能給你節(jié)省時(shí)間的特性之一,利用它的自動(dòng)完成文件、目錄名稱功能還可以防止你輸入錯(cuò)誤。使用cd進(jìn)入你的 home folder,使用cd P命令,然后按下tab按鍵。你可能會(huì)聽到錯(cuò)誤音,因?yàn)槟愕?home folder 內(nèi)有多個(gè) P 開頭的文件夾。再按一次tab,Terminal 將會(huì)為你列出 P 開頭的兩個(gè)文件夾:Public 和 Pictures。按U,再按tab,Terminal 則會(huì)自動(dòng)為你補(bǔ)全Public/。Tab complete 同樣會(huì)處理那些特殊字符。注意,這會(huì)在末尾保留/符號(hào),大部分時(shí)候這沒問題,但如果出錯(cuò),移除多余的/試一試。
另外,鄂化符~(tilde)在command line 中可以代表當(dāng)前用戶的 home folder。例如~/Public/Drop\ Box/是合法的。
查看隱藏文件
為了簡(jiǎn)化工作,command line 和 Finder 都會(huì)隱藏許多文件和文件夾,這些內(nèi)容通常是系統(tǒng)需要的。不借助第三方工具讓 Finder 顯示隱藏文件比較困難,但是在 command line 中卻非常簡(jiǎn)單。首先,許多隱藏文件的隱藏是通過隱藏屬性在 Finder 中隱藏的,而 command line 會(huì)忽略這些屬性,所以這些文件會(huì)在 command line 中顯示。另外,ls命令會(huì)隱藏文件名以.開頭的文件,但是這些文件卻可以被顯示出來,方法是利用-a選項(xiàng)。例如:
michelle$ ls -la我們還添加了-l選項(xiàng),目的是控制輸出格式。如果你注意輸出內(nèi)容的話,會(huì)發(fā)現(xiàn)還包括.和..兩項(xiàng),它們分別表示當(dāng)前文件夾和父文件夾(如圖)。如果你不想顯示這兩項(xiàng),只需要把-a改成-A即可。
前往其他卷
在 command line 中,系統(tǒng)卷(也稱為 root volume)是由開始的一個(gè)正斜杠表示的。然而也許聽起來不可思議,在 command line 中其他卷看起來就在文件系統(tǒng)中一個(gè)叫做 Volumes 的文件夾中。下面的命令清晰地顯示出這種邏輯關(guān)系:我從我的 home folder 出發(fā),最終前往一個(gè)叫 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用Command-Line管理文件
檢視文件
有許多基礎(chǔ)命令用來定位、檢視文件和文件夾,包括cat,?less,?which,?file以及find。別忘了,你可以利用man命令來查閱每個(gè)命令的使用指南。
cat
cat是“concatenate”的意思,會(huì)按順序讀取文件并輸出到 Terminal 窗口,語法為cat后接你需要查看的文件的路徑。cat命令也可以用>>來增加文本文件的內(nèi)容,例如命令cat ../textOne.txt >> textTwo.txt會(huì)把 textOne.txt 的內(nèi)容添加到 textTwo.txt 的結(jié)尾。這個(gè)>>就屬于上一篇提到的“Extras”。
less
這個(gè)命令更適合用來查看長(zhǎng)文本文件,因?yàn)樗鼤?huì)允許你查找文本。語法為?less后接文件路徑,和cat一樣。用less命令打開的文件其實(shí)和你查看命令使用指南的時(shí)候使用的是一個(gè)查看器,所以操作是相同的,同樣可以使用▲(上箭頭)或▼(下箭頭)來上下移動(dòng)文本,使用 來翻頁,輸入/和關(guān)鍵字來按照關(guān)鍵字搜索,按Q來退出使用指南頁面。除此之外,按V鍵來使用vi文本編輯器。
which
這個(gè)命令會(huì)定位某個(gè)命令的文件路徑。換言之,它會(huì)告訴你你執(zhí)行某個(gè)具體命令的時(shí)候,在使用哪個(gè)文件。語法為which后接某個(gè)命令。如圖:
file
這個(gè)命令會(huì)嘗試根據(jù)文件的內(nèi)容輸出文件類型。如果一個(gè)文件缺失了擴(kuò)展名,那么這個(gè)命令可能會(huì)非常有用。語法為file后接文件路徑。如圖,此例為一個(gè) PNG 文件,還給出了它的尺寸、顏色數(shù)等信息。
find
這個(gè)命令用來根據(jù)搜索關(guān)鍵詞定位文件路徑。?find命令不使用 Spotlight 搜索服務(wù),但是它允許你設(shè)置非常具體的搜索條件,以及通配符(稍后介紹)。語法為find后接搜索的起始路徑,后接定義搜索的選項(xiàng),后接搜索內(nèi)容(包含在引號(hào)里)。例如:
注意
使用通配符(Wildcard Characters)
下面是常用的通配符:
- 星號(hào)(*,Asterisk)——代表任何長(zhǎng)度的任何字符。例如*.tiff代表所有格式為tiff的文件。
- 問號(hào)(?,Question mark)——代表任何單個(gè)字符。例如b?ok匹配 book 但是不匹配 brook。
- 方括號(hào)([],Square brackets)——定義一定范圍的字符,例如[Dd]ocument匹配 Document 以及 document;doc[1-9]匹配doc1, doc2, …, doc9。
配合使用上面三種通配符可以大大提高效率。
使用遞歸命令
簡(jiǎn)單來說,遞歸命令可以允許命令不執(zhí)行于一個(gè)特定文件,而是指定的路徑下的所有文件。大多數(shù)命令包含一個(gè)-r或者-R選項(xiàng),來設(shè)定你想遞歸地執(zhí)行這個(gè)命令。例如下面的例子,展示了添加-R后ls命令的執(zhí)行方式:
編輯文件和文件夾
有許多基礎(chǔ)的命令用來編輯文件和文件夾,包括mkdir,?cp,?mv,?rm,?rmdir以及vi。下面我們來簡(jiǎn)要地介紹一下這些命令。
mkdir
“make diretory”的縮寫,用來創(chuàng)建文件夾,語法為mkdir后接新文件夾的目錄。可以用-p選項(xiàng),來一起創(chuàng)建路徑中不存在的文件夾(這樣你就不用挨層創(chuàng)建了)。
cp
“copy”的縮寫,用來把文件從一處復(fù)制到另一處。語法為cp后接原始路徑,后接目標(biāo)路徑。如果你想復(fù)制整個(gè)文件夾和所有內(nèi)容,需要添加-R選項(xiàng)。如果指定的目標(biāo)路徑不含文件名,則 cp 命令會(huì)按原名復(fù)制。如果指定的目標(biāo)路徑包括文件名,則會(huì)復(fù)制為你指定的文件名。如果僅指定新文件名,則會(huì)在原處以新名稱創(chuàng)建文件副本。注意,系統(tǒng)會(huì)自動(dòng)替換同名文件而不出現(xiàn)提示。
mv
“move”的縮寫,用來移動(dòng)文件。語法為mv后接原路徑,后接新路徑。mv 的指定路徑規(guī)則和 cp 是一樣的(沒錯(cuò),如果僅指定新文件名,它就成了重命名命令)。
rm
“remove”的縮寫,會(huì)永久刪除文件。注意,command-line中沒有廢紙簍。語法為rm后接文件路徑。然而,使用 rm 命令刪除的文件有可能可以通過數(shù)據(jù)恢復(fù)工具恢復(fù)。如果希望安全刪除文件,可以使用srm命令。
rmdir和rm -R
rmdir是“remove directory”的縮寫,這個(gè)命令會(huì)永久刪除文件夾。再強(qiáng)調(diào)一遍,CLI 中木有廢紙簍。語法為rmdir后接希望刪除目錄的路徑。然而,rmdir 命令無法刪除含有任何其他文件的文件夾,所以大多數(shù)情形下rmdir命令是不適用的。不過,你可以利用rm添加-R選項(xiàng)來刪除文件夾及包含的所有文件。
vi
代表“visual”(視覺的),然而這個(gè)名稱相當(dāng)具有諷刺意味:vi可能是可視化效果最差的文本編輯器了。然而,vi 是 command line 中最常見的文本編輯器。用vi打開文本文件,只需要輸入vi后接文件路徑即可。Mac OS X 還提供了nano,一個(gè)更加現(xiàn)代的文本編輯器。它也更加方便,例如在底部包含了一個(gè)作弊小條(=_=),上面有常用的快捷鍵列表(你就不用背下來它們了)。然而,vi卻有時(shí)是默認(rèn)的文本編輯器,所以掌握vi是很有用的。
和less命令類似,vi命令會(huì)占用整個(gè) Terminal 空間來顯示文件內(nèi)容。打開后,在“command模式”,vi 會(huì)等你輸入一些預(yù)定義字符來告訴 vi 你想做什么。你也可以使用鍵盤上的箭頭鍵單純地瀏覽文件。你想編輯時(shí),按A開始(會(huì)進(jìn)入編輯模式)。文字會(huì)插入到光標(biāo)處。如果你想保存,需要先退出編輯模式進(jìn)入 command 模式。方法是按下esc鍵。回到 command 模式后,按住shift同時(shí)按兩次Z來保存并退出。如果你不想保存,在 command 模式輸入:quit!并按enter
return直接退出。
用Command-Line管理系統(tǒng)
使用su來切換用戶
su命令代表“substitute user identity”,允許你在命令行中輕松切換到另一個(gè)用戶賬戶。語法為su后接用戶的短名稱。然后會(huì)要求你輸入密碼(但是輸入的時(shí)候不會(huì)顯示)。執(zhí)行完畢后,命令的前綴會(huì)改變,表示你擁有其他用戶的權(quán)利。你可以利用who -m命令來驗(yàn)證當(dāng)前登陸的身份。切換后,你會(huì)一直保持該用戶身份,直至退出 Terminal 或者輸入exit命令。
關(guān)于sudo的使用
sudo概述
更強(qiáng)大的命令就是sudo,代表“substitute user do”,或者,更恰當(dāng)?shù)?#xff0c;“super user do”。用sudo執(zhí)行一個(gè)命令會(huì)使用 root 賬戶權(quán)限。當(dāng)然,使用之前需要 administrator 賬戶(管理員賬戶)的授權(quán)(如輸入密碼)。
默認(rèn)情況下,任何管理員賬戶都可以使用sudo來獲取 root 權(quán)限,甚至當(dāng) root 賬戶在圖形界面被禁用的情況下,sudo依然有效。這個(gè)命令是很多情況下我們不得不使用 Terminal 的原因,——同樣也是給每個(gè)用戶管理員身份的危險(xiǎn)所在。不過,你可以調(diào)整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而導(dǎo)致命令行返回一個(gè)錯(cuò)誤,只需輸入sudo !!就可以用sudo來執(zhí)行上一條指令。
記住,權(quán)力越大責(zé)任越大。不恰當(dāng)?shù)厥褂胹udo可以輕易破壞你的系統(tǒng)設(shè)置。命令行只會(huì)在你第一次執(zhí)行嚴(yán)重破壞性行為之前提示你,之后,它就會(huì)假設(shè)你清楚自己正在干什么。如果你只掌握三條使用命令行的準(zhǔn)則,那將是:總是仔細(xì)檢查你的命令;總是使用Tab completion來幫助你避免拼寫錯(cuò)誤;使用sudo之前,總是仔仔細(xì)細(xì)檢查你的命令。
使用 sudo 切換 Shell
如果你是一個(gè)管理員用戶,你需要執(zhí)行很多條需要 root 權(quán)限的命令,你可以臨時(shí)切換整個(gè)命令行 shell 來取得 root 級(jí)別的訪問權(quán)限。方法就是先輸入sudo -s,回車后再鍵入你的密碼。
其他Command-Line技巧提示
- 輸入命令open .可以用 Finder 打開當(dāng)前的位置。
- 在 Terminal 的偏好里面可以設(shè)定它的外觀和風(fēng)格。
- 中止一個(gè)錯(cuò)誤的或者發(fā)瘋的命令,可以使用組合鍵control?+?C。
- 你可以在執(zhí)行前編輯命令,只需要使用箭頭和鍵盤上的其他字母。
- 沒有輸入任何命令時(shí),你可以用▲和▼來瀏覽歷史命令。同樣可以編輯和再次執(zhí)行。
- 你也可以使用history命令查看歷史記錄。
- 你可以使用組合鍵control?+?L清屏。
?
?
有關(guān)Xcode:
1、如果Xcode一直處于indexing狀態(tài)?
在終端中輸入?defaults write com.apple.dt.Xcode IDEIndexDisable 1 ? 解決
2、如果command+左鍵 不能索引 出現(xiàn)問號(hào)
在終端中輸入?defaults write com.apple.dt.Xcode IDEIndexDisable 0
xcode?command+左鍵不能跳轉(zhuǎn)的解決方法
?
?
工程中默認(rèn)都有跳轉(zhuǎn)功能,就是在command+鼠標(biāo)可以實(shí)現(xiàn)函數(shù) 的跳轉(zhuǎn),但是有時(shí)會(huì)出現(xiàn)Symbol not found,這是因?yàn)楣こ痰乃饕?文件被破壞了,/Users/XXX/Library/Developer/Xcode/DerivedData 中把相應(yīng)的工程的文件夾刪除就行了。轉(zhuǎn)載于:https://www.cnblogs.com/fromus/p/7474056.html
總結(jié)
以上是生活随笔為你收集整理的Mac OS X Terminal 101:终端使用初级教程以及Xcode的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html仿百度页面代码_百度优化需要注意
- 下一篇: ctr z撤回反向_matplotlib