1. 程式人生 > >MAC OS命令列使用詳解

MAC OS命令列使用詳解

原文地址:http://www.renfei.org/blog/mac-os-x-terminal-101.html

最近學習蘋果認證的《Mac OS X Support Essentials》教程,看到 Command Line 一節有很多實用的知識,下面選取一部分翻譯 + 筆記,整理如下。

你可以整天駕駛汽車而不用知道如何修理它們,但是如果你希望當一個維護員,你就需要知道事情是如何運作的。同樣的事情也發生在了 Mac OS X 上;你可以一直使用 Mac 而不用知道如何修理它,但是如果你想對系統做一些維護或解決一些問題,那麼你需要知道如何使用 command-line。

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 -lAls -l -A是等效的。Arguments 部分用來細化這個命令或指定這個命令具體的實施物件,Extras 部分則用來進一步實現其他功能。
  • 舉例:下列命令包含前三個部分,用於刪除 Junk 這個程式。
    michelle$ rm -R /Applications/Junk.app
  • 如果你輸入了一些錯誤的命令,系統會返回一些錯誤資訊。但是系統卻不會阻止你做傻事(例如刪除整個使用者資料夾)。

3 關於 man 命令

雖然有上千條命令,每條命令還有許多可選引數和具體的使用方式,但是你卻不需要記住這些命令。你只需要記住一個:man

大多數命令都會包含一個使用指南,會告訴你任何你需要知道的關於這個命令的所有細節,在命令列中輸入 man command-name 即可獲取。例如,你想知道ls這個命令怎麼使用,輸入man ls即可進入使用指南頁面。

使用指南往往很長,所以你可以使用(上箭頭)或(下箭頭)來上下移動,使用來翻頁,輸入/和關鍵字來按照關鍵字搜尋,按Q來退出使用指南頁面。

那麼——如果你連命令名稱都不知道怎麼辦呢?輸入man -k和關鍵字來對整個使用指南資料庫進行搜尋。

4 命令列,檔案和路徑

如果知道如何使用命令是掌握 command line 的第一步,那麼第二步就是學習如何在 command line 中使用檔案路徑。如果你掌握了檔案路徑,你將會發現這比使用 Finder 更加快捷。

注意

  • 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 會話切換到其他目錄,需要用到三個命令:pwdlscd

  1. pwd的含義是“print working directory”,會顯示當前目錄的絕對路徑。
  2. ls的含義是“list directory contents”,它會列出當前目錄的內容。這個命令還有其他引數可選。
  3. cd的含義是“change directory”,它會改變當前目錄到你指定的目錄。如果你不指定,則會返回你的 home folder。

4.3 處理特殊字元

如果目錄中有特殊字元(空格,括號,引號,[]!$&*;|\),那麼直接輸入空格會造成系統識別困難,必須使用特殊的語法來表示這些字元。例如上例中,空格前新增反斜槓“\”(back slash)即可:cd Punlic/Drop\ Box/。除了反斜槓,也可以用引號的方法:cd "Public/Drop Box"。

——如果不想手動輸入,也可以把檔案從 Finder 拖到 Terminal 視窗來建立絕對路徑,這會方便一些,因為上面提到的所有特殊字元在拖動後都會自動變成系統可識別的表示方法。其實,更有效率的解決方案是使用 Tab Complete 功能。

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即可。

Terminal ls -la命令

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 檢視檔案

有許多基礎命令用來定位、檢視檔案和資料夾,包括catlesswhichfile以及find。別忘了,你可以利用man命令來查閱每個命令的使用指南。

 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後接某個命令。如圖:

終端 which 命令

5.1.4 file

這個命令會嘗試根據檔案的內容輸出檔案型別。如果一個檔案缺失了副檔名,那麼這個命令可能會非常有用。語法為file後接檔案路徑。如圖,此例為一個 PNG 檔案,還給出了它的尺寸、顏色數等資訊。

終端 file命令

5.1.5 find

這個命令用來根據搜尋關鍵詞定位檔案路徑。 find命令不使用 Spotlight 搜尋服務,但是它允許你設定非常具體的搜尋條件,以及萬用字元(稍後介紹)。語法為find後接搜尋的起始路徑,後接定義搜尋的選項,後接搜尋內容(包含在引號裡)。例如:

Terminal Find 命令

注意

  1. 如果你要搜尋根目錄,也許你想使用-x選項來避免搜尋 /Volumes 資料夾。
  2. 如果想使用 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選項,來設定你想遞迴地執行這個命令。例如下面的例子,展示了新增-Rls命令的執行方式:

Terminal -R選項

5.4 編輯檔案和資料夾

有許多基礎的命令用來編輯檔案和資料夾,包括mkdircpmvrmrmdir以及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清屏。

相關推薦

MAC OS命令使用

原文地址:http://www.renfei.org/blog/mac-os-x-terminal-101.html 最近學習蘋果認證的《Mac OS X Support Essentials》教程,看到 Command Line 一節有很多實用的知識,下面選取一部分翻

【linux】Valgrind工具集(五):命令

一、使用方法 usage: valgrind [options] prog-and-args 使用方法:valgrind [引數選項] 程式和引數 二、選擇工具 tool-selection option, with default in [ ]: 工具選擇選項,預設值在[]

GCC 命令

作者: www.linuxfans.org mozilla 1。gcc包含的c/c++編譯器 gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的,(沒有看太明白前面這半句是什 麼意思:))一般c程式就用gcc編譯,c++程式就用g++編譯 2。gcc的基本用法 gcc test.c這樣

Mac OS命令下使用SublimeText開啟文字檔案

Step1. 安裝Sublime Text編輯器 可直接到以下網址下載dmg安裝檔案: Sublime Text 3 Step2. 新增命令列別名 開啟使用者配置檔案 vim ~/.bash_profile 新增如下alias alias subl="'/Ap

Linux讀取檔案命令

cat 檢視檔案內容,檢視內容過多檔案的時候不能全部顯示,如圖中2中想要檢視/etc/services的內容,使用cat檢視後(圖3)發現不能全部顯示只能顯示最後一屏內容。所以cat一般用於檢視檔案內容非常少的檔案,用法以及事例大家看圖即可。 (adsbygoogle = w

7Z壓縮包軟體命令

7z.exe在CMD視窗的使用說明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <command> [<switches>...] <archive_name>

GCC 命令 -L -l

我們用gcc編譯程式時,常常會用到“-I”(大寫i),“-L”(大寫l),“-l”(小寫l)等引數,下面做個記錄: GCC 命令列詳解 -L 指定庫的路徑 -l 指定需連線的庫名 Linux下動態連結庫預設字尾名是".so",靜態連結庫預設字尾名是“.a”。 例:

wireshark http抓包命令

This article is a quick and easy HowTo detailing the use of Wireshark or another network sniffing program to debug your Apache .htaccess o

GCC 命令 -L 指定庫的路徑 -l 指定需連線的庫名

o.x,/lib/libm.so.6又連結到/lib/libm-2.3.2.so,如果沒有這樣的連結,還是會出錯,因為ld只會找libxxxx.so,所以如果你要用到xxxx庫,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一個連結就可以了ln -s libxxxx-x.x.x.so

GCC 命令 -L 指定庫的路徑 -l 指定需連線的庫名【轉】

1. 為什麼會出現undefined reference to 'xxxxx'錯誤?首先這是連結錯誤,不是編譯錯誤,也就是說如果只有這個錯誤,說明你的程式原始碼本身沒有問題,是你用編譯器編譯時引數用得不對,你沒有指定連結程式要用到得庫,比如你的程式裡用到了一些數學函式,那麼你

Mac OS 命令修改IP地址

1.檢視網路服務 # networksetup -listallnetworkservices Ethernet 乙太網 # ifconfig 檢視網絡卡名稱 2. 設定IP地址

[Gradle中文教程系列]-跟我學Gradle-附錄:gradle命令

Gradle 命令列命令詳解,根據Gradle.2.13版本的help命令編寫而來. 引數 描述 -?, -h, –help 顯示幫助 - - ….. -a,

MVN命令

C:\Users\Administrator>mvn -h usage: mvn [options] [<goal(s)>] [<phase(s)>] ----------------------------------------------

搭建公司nuget伺服器,nuget命令

1:搭建伺服器     安裝iis -- 不在詳述     使用vs新建web空網站-

cd命令使用

表示 如果 用戶家目錄 roo 環境變量 方法 字符 實用 效果   cd命令是目錄切換命令,是shell內置命令。   語法:     cd [-L|-P] [dir]   選項:     -p 如果要切換到的目標目錄是一個符號連接,直接切換到符號連接指向的目標目錄   

dd命令使用

netcat num asc ear 遠程 操作 字節數 放置 顯示 博客原處:http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令簡介 dd 的主要選項: 指定數字的地方若以下列字符結

redis命令monitor

monitor 窗口 inf 做了 命令 linux blog linux中 技術分享 通過monitor這個命令可以查看數據庫在當前做了什麽操作,對於管理redis數據庫有這很大的幫助 如圖示,在redis客戶端進行操作顯示info,另一個窗口打

iptables命令使用

連接數目 fse output weekday lac centos7 comm delete post iptables的主要功能是實現對網絡數據包進出設備及轉發的控制。當數據包需要進入設備、從設備中流出或者經該設備轉發、路由時,都可以使用iptables進行控制。 環境

Linux vmstat命令實戰

上下文切換 span 一次 過多 sta log 讀取文件 負載 監控 vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜

Python爬蟲從入門到放棄(十三)之 Scrapy框架的命令

directory xpath idf 成了 spider i386 名稱 4.2 不同的 這篇文章主要是對的scrapy命令行使用的一個介紹 創建爬蟲項目 scrapy startproject 項目名例子如下: localhost:spider zhaofan$ sc