Terminal命令小結(jié)

關(guān)于Command Line

從入行至今,使用Terminal的次數(shù)并不多,現(xiàn)用現(xiàn)查是常態(tài),平時(shí)開發(fā)中Git也是使用圖形界面工具,所以對Terminal非常陌生,直到最近自己搭了一個(gè)VPN才真正意識到命令行的便捷,而搭建博客的過程中命令行更是不可缺少的工具。

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

—— 網(wǎng)摘自Renfei Song's Blog

Mac上很多功能不提供圖形界面,只能通過命令行來實(shí)現(xiàn),例如說ssh,Windows下需要使用XShell之類的軟件來操作,而*nix系統(tǒng)直接使用終端命令就可以直接鏈接:

$ ssh username@hostname

通過Terminal可以訪問所有目錄,包括Finder隱藏的目錄,而Finder的隱藏文件功能也只能通過Terminal開關(guān),當(dāng)然在系統(tǒng)10.12中可以使用Shift+Command+.來快速開啟與關(guān)閉:

$ defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 
$ defaults write com.apple.finder AppleShowAllFiles -boolean false ; killall Finder 

Terminal可以做界面圖形App能做的絕大多數(shù)操作,因?yàn)榻缑鎴D形App背后使用的就是Command Line,例如在你安裝Xcode之后,你就可以通過命令行進(jìn)行編譯和打包操作:

$ xcodebuild -workspace YourWorkspaceName -scheme YourSchemeName -configuration Debug archive -archivePath YourArchivePath
$ xcodebuild -exportArchive -archivePath YourArchivePath -exportPath YourExportPath -exportOptionsPlist ./ConfigPlistName.plist

雖然學(xué)習(xí)Command Line需要一個(gè)記憶和熟練的過程,但其強(qiáng)大且廣泛的功能帶給我們的便利快捷要遠(yuǎn)大于其學(xué)習(xí)成本,所以說使用Terminal,學(xué)會Command Line是一個(gè)程序員必備的素質(zhì)之一。

關(guān)于man命令

Terminal里面成百上千條命令,每一條命令還有其具體的參數(shù)方法,誰也不能全都記住,那么怎么辦?推薦學(xué)習(xí)Command Line的人們最先掌握的命令man。通過man CommandName來獲取你想知道的命令的使用指南:

$ man xcodebuild

NAME
     xcodebuild -- build Xcode projects and workspaces

SYNOPSIS
     xcodebuild [-project name.xcodeproj]
                [[-target targetname] ... | -alltargets]
                [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [action ...]
                [buildsetting=value ...] [-userdefault=value ...]
...

包括命令的名稱、參數(shù)意義、使用描述等等,足夠你理解使用這個(gè)命令了,在瀏覽期間可以通過Space翻頁、來滾動、輸入/ SearchKeyword來搜索,使用Q退出頁面。如果你不清楚這個(gè)命令的名字,可以使用man -K Keyword來搜索,Terminal會詢問你搜索的結(jié)果是否是你想要的。

關(guān)于路徑與文件命令

雖然平時(shí)使用Finder管理文件已經(jīng)很方便了,但是某些時(shí)候使用Terminal來進(jìn)行路徑和文件的操作也會非常便捷。

路徑命令

路徑分為絕對路徑和相對路徑。

絕對路徑總是以/開頭,例如/Users/xuhaoran/blog

相對路徑是根據(jù)你的Terminal當(dāng)前的路徑位置有關(guān),Terminal默認(rèn)路徑為Home Folder,就是?+?+H的Folder,相對路徑可以使用../來表示上一級路徑,使用./表示本級路徑,通??梢允÷?,使用~/則表示你的Home Folder

絕對路徑的第一個(gè)/代表根目錄,而/Users/UserName即是HomeFolder

如何獲取絕對路徑?有兩個(gè)方法:1、打開Terminal后,直接拖拽Folder或File進(jìn)來;2、使用pwd命令:

$ pwd
/Users/xuhaoran/blog

跳轉(zhuǎn)到指定路徑使用cd命令:

$ cd DirectoryName

cd -命令可以后退目錄:

$ cd ~/Desktop/
$ cd ~/Downloads/
$ cd -
/Users/xuhaoran/Desktop

查看當(dāng)前路徑下的所有Folder和File使用ls命令,值得一提的是使用Tab可以進(jìn)行匹配輸入,注意Terminal大小寫敏感。通常情況ls命令是不顯示隱藏文件的,可以使用ls -A來顯示所有隱藏文件,即.Name形式的文件:

$ ls -A
.CFUserTextEncoding .gitignore_global   .vim
.DS_Store       .hgignore_global    .viminfo

pwd、cd、ls三條命令搭配使用可以完成絕大多數(shù)的路徑查詢跳轉(zhuǎn)工作,至于這三個(gè)命令的其他參數(shù)可以使用man來自行查詢。

而創(chuàng)建與刪除路徑使用mkdirrmdir兩個(gè)命令:

$ mkdir DirectoryName
$ rmdir DirectoryName

使用mkdir命令時(shí),如果想創(chuàng)建多層目錄的話可以添加參數(shù)p

$ mkdir -p dir1/dir2/dir3

文件命令

通過Command Line檢視文件,可以使用命令cat將文件內(nèi)容輸出到Terminal中:

$ cat Desktop/
cat: Desktop/: Is a directory
$ cat Hello.text
Hello World!

面對較長的文本直接輸出到Terminal中顯然并不合理,那么可以使用less命令,在less命令進(jìn)入文件后按V進(jìn)入vim編輯器。

如果想查看文件類型信息,特別是在文件擴(kuò)展名丟失的情況下,可以使用file命令:

$ file unnamed
unnamed: ASCII text

可以使用touch命令創(chuàng)建文件和指定文件擴(kuò)展名:

$ touch FileName.ExpandedName

創(chuàng)建之后可以直接進(jìn)入編輯器進(jìn)行編輯,可以使用vim命令進(jìn)去vim編輯器或者nano命令進(jìn)入nano編輯器:

$ vim FileName.ExpandedName

可以使用open命令打開一個(gè)文件或者使用Finder打開一個(gè)Folder,使用open .命令來打開當(dāng)前的Folder:

$ open .

對于基本的復(fù)制剪切操作可以分別使用cp 、mv命令:

// 將Test/ 復(fù)制/移動到 Workspace/
$ cp Test/ Workspace/
$ mv Test/ Workspace/

關(guān)于權(quán)限命令

權(quán)限

查看當(dāng)前目錄下的文件權(quán)限可以使用ls -alh命令:

$ ls -alh
total 8152
/*
    權(quán)限        擁有者    群組
*/
-rw-r--r--@  1 xuhaoran  staff   104K 11 22 14:07 430DDC5092226B6C4F062BAEF2242B78.jpg
drwxr-xr-x  10 xuhaoran  staff   320B 11  2 14:05 AlamofireDemo
-rw-r--r--@  1 xuhaoran  staff   956B 10 13  2016 CertificateSigningRequest.certSigningRequest
...

其中權(quán)限部分詳細(xì)的分為d rwx rwx rwx四部分。

第一部分中d表示為Directory,而-則表示File。

后面三部分分別表示“對所有者”、“對同組人”、“對其他人”的權(quán)限,r讀取權(quán)限、w寫入權(quán)限、x執(zhí)行權(quán)限,-表示無權(quán)限。

以其中AlamofireDemo為例,表示為目錄、所有者可讀可寫可執(zhí)行、同組人可讀可執(zhí)行、其他人可讀可執(zhí)行。

而三部分的權(quán)限可使用數(shù)字表示,其中r權(quán)限為22,w權(quán)限為21,x權(quán)限為2o,例如:AlamofireDemo目錄的全??梢员硎緸?code>755,而cerSigningRequest文件的權(quán)限為644。

權(quán)限是可以變更的,使用chmod命令:

$ chmod -R 755 AlamofireDemo

這是通常情況下的標(biāo)準(zhǔn)命令,為文件添加rwxr-xr-x權(quán)限,-R參數(shù)表示改變目錄結(jié)構(gòu)下所有子目錄文件的權(quán)限而并非目錄本身。chmod 777 FileName則是非常危險(xiǎn)的命令,賦予了其他人與root相同的權(quán)限。

chmod還有一種改變權(quán)限的形式,使用運(yùn)算符+(增加)、-(去除)、=(覆蓋設(shè)定)配合用戶類型u(所有者)、g(同組人)、o(其他人)、a(全部):

$ chmod -R g+x AlamofireDemo/

上面這條命令是為AlamofireDemo這個(gè)目錄的同組人添加執(zhí)行權(quán)限。

同樣,擁有者和群組也是可以改變的,使用chown命令:

$ chown UserName:GroupName FileName

root權(quán)限

sudo命令的作用在于會用root賬戶權(quán)限來執(zhí)行后面的命令,通常在執(zhí)行一條命令提示Permission denied時(shí)使用。使用sudo !!再次執(zhí)行:

$ cat secret.doc
Permission denied
$ sudo !!
Password: *

如果執(zhí)行多條需要root權(quán)限的命令,可以使用sudo -s獲取root權(quán)限,注意#代替了$表示使用root權(quán)限操作,操作結(jié)束可以使用Control+D或者輸入exit命令來退出環(huán)境:

xuhaoran$ sudo -s
Password:
bash-3.2# exit

關(guān)于網(wǎng)絡(luò)通信的命令

ping命令

在網(wǎng)絡(luò)通信之前,最常用的操作就是ping命令,它會給網(wǎng)絡(luò)主機(jī)發(fā)送一個(gè)回應(yīng)請求,進(jìn)而驗(yàn)證可否進(jìn)行通信:

$ ping panghu.cf
PING panghu.cf (128.14.32.165): 56 data bytes
64 bytes from 128.14.32.165: icmp_seq=0 ttl=50 time=168.334 ms
64 bytes from 128.14.32.165: icmp_seq=1 ttl=50 time=158.529 ms

可使用Control+C停止發(fā)送請求。

ssh命令

ssh是一種遠(yuǎn)程登錄和其他安全服務(wù)的協(xié)議,遠(yuǎn)程登錄相比較于telnetrlogin兩種協(xié)議,有其特有的優(yōu)勢,例如加密傳輸、數(shù)據(jù)壓縮等。

Mac的Terminal自帶SSH,使用ssh就可以登錄遠(yuǎn)程服務(wù)器:

$ ssh root@panghu.cf
root@panghu.cf's password: *

之后就可以在遠(yuǎn)程服務(wù)器進(jìn)行一些常規(guī)操作或者一些逗逼的命令:

$ wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh

網(wǎng)絡(luò)通信命令還有很多,這里限于能力就不獻(xiàn)丑了。

關(guān)于其他系統(tǒng)命令

bash命令是用來執(zhí)行一段腳本命令的命令,通??梢杂脕韴?zhí)行本地寫好的腳本,例如:

$ bash ssr.sh

who命令可以列出當(dāng)前登錄的所有用戶,who am i顯而易見是回答“我是誰?”的問題:

$ who
xuhaoran console  Nov 20 17:06 
xuhaoran ttys001  Nov 22 13:52 
xuhaoran ttys002  Nov 23 14:52 
$ who am i
xuhaoran ttys002  Nov 23 14:52 

console是電腦的底層控制臺,伴隨著電腦開機(jī)而啟動;ttys(Teletypewriter的縮寫)則是Terminal的類型名稱,隨著Terminal數(shù)量增加而增加計(jì)數(shù)。使用Command+N來新建Terminal。

至于Console、Terminal、ttyShell的關(guān)系這里就不敘述了。

使用ps命令來查看進(jìn)程狀態(tài),可以確定哪些進(jìn)程僵死或過多占用資源等。通常使用ps aux來查看具體進(jìn)程:

$ ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
xuhaoran           355   3.0  3.0  7056284 249392   ??  S    一05下午  57:40.33 /Applications/WeChat.app/Contents/MacOS/WeChat -psn_0_57358
root                96   0.3  0.1  4346796   8364   ??  Ss   一05下午   3:00.86 /usr/libexec/opendirectoryd
...

PID表示進(jìn)程的id,%CPU%MEM分別表示進(jìn)程占用CPU和內(nèi)存的比重,VSZ表示使用掉的虛擬內(nèi)存(KB),RSS表示占用的固定內(nèi)存(KB),TT表示在哪個(gè)Terminal上執(zhí)行,STAT表示該進(jìn)程目前的狀態(tài)。

關(guān)于STAT的狀態(tài)碼:

狀態(tài)碼 意義
R 正在運(yùn)行
S 休眠
T 停止
Z 僵死
< 高優(yōu)先級
N 低優(yōu)先級
L 鎖定
s 存在子進(jìn)程
+ 后臺進(jìn)程組

查詢到進(jìn)程之后可以使用kill命令用來終止進(jìn)程:

$ kill -SignalNumber PID

至于SignalNumber可以通過命令kill l獲?。?/p>

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
 9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGINFO     30) SIGUSR1     31) SIGUSR2 

其中常用的為9(SIGKILL),對付大多數(shù)程序可以kill -9 PID直接干掉。

其他常用的系統(tǒng)命令有查看時(shí)間的命令date

$ date
2017年11月23日 星期四 16時(shí)47分40秒 CST

查看日歷的命令cal

$ cal
      十一月 2017        
日 一 二 三 四 五 六  
          1  2  3  4  
 5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30   

cal命令后面可接年份,例如cal 2017,也可以接月份+年份,例如cal 8 2018表示展現(xiàn)2018年8月的日歷。

一些小技巧

alias與unalias命令

對于常用的命令可以使用alias為其添加別名,例如:

$ alias del="rm -rf"

刪除別名可以使用unalias:

$ unalias del

退出及清屏命令

使用control+C 可以終止持續(xù)進(jìn)行的命令,例如ping命令。

使用control+D或者exit命令可以結(jié)束當(dāng)前狀態(tài),例如結(jié)束ssh的遠(yuǎn)程鏈接。

使用control+L或者clear命令可以清屏,與reset命令不同的是,clear可以滾動查看之前的內(nèi)容,而reset則是完全清除內(nèi)容。

光標(biāo)操作

操作符 作用
control+A 移動光標(biāo)至行首
control+E 移動光標(biāo)至行尾
control+U 刪除整行命令
control+K 刪除光標(biāo)后面的內(nèi)容
option+、 按詞組移動光標(biāo)

快速操作

操作符 作用
!! 執(zhí)行上一條命令
! 重復(fù)命令,例如$ ! -3執(zhí)行前三條命令、$ !pod重復(fù)最近一次的pod命令等
| --將左側(cè)命令結(jié)果扔給右側(cè)命令,例如$ ps aux | pbcopy將進(jìn)程信息保存的剪貼板--
> 將左側(cè)命令結(jié)果保存進(jìn)右側(cè)文件,例如$ pbpaste > out.txt將剪貼板內(nèi)容保存到文件
&& 等待前一條命令執(zhí)行成功之后執(zhí)行后面命令,例如$ chmod +x ssr.sh && bash ssr.sh
& 多條命令同時(shí)執(zhí)行,例如$ chmod +x ssr.sh & chmod +x other.sh
; 不管前面命令成功與否都繼續(xù)執(zhí)行后面命令,例如$ chmod +x ssr.sh ; cp ssr.sh ~/Desktop/

使用history命令可以查詢執(zhí)行命令的歷史記錄history PageCnt

$ history 10
  543  kill l
  544  kill -l
  545  date
  546  cal
  547  ssh root@panghu.cf
  548  ls
  549  ping panghu.cf
  550  ftp panghu.cf
  551  yum
  552  ls

小結(jié)

連續(xù)寫了兩天時(shí)間,期間不斷的去查詢和完善內(nèi)容,感覺這個(gè)過程又收獲了很多知識。

Terminal的強(qiáng)大只有真正融入進(jìn)去才能感受得到,以上這些都只是本人在工作中遇到的最基本的內(nèi)容,說成冰山一角毫不為過,所以日后遇到新的內(nèi)容還會繼續(xù)進(jìn)行補(bǔ)充更新。

最后,很多命令下的參數(shù)都有不同的用法,當(dāng)遇到問題了請熟練地使用man命令,希望對您有所幫助。

請關(guān)注我的新博客Leo的博客,以后會在上面更新最新的文章,當(dāng)然簡書也會同步上來的~謝謝大家支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,598評論 9 468
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,512評論 19 139
  • 一、為什么要使用命令行? 許多功能在圖形界面不提供,只有通過命令行來實(shí)現(xiàn)。 Finder 會隱藏許多你不太會需要的...
    小道蕭兮閱讀 39,512評論 2 33
  • (一)基本命令 命令格式: 命令 參數(shù) 1.ls 顯示文件名,等同于dos下dir命令 命令格式:ls [opti...
    飛羽孟德閱讀 2,075評論 0 3
  • 本文筆記源自這里——[實(shí)驗(yàn)樓]歡迎大家在下面交流其中有問題的地方喜歡請點(diǎn)收藏,每日更新(全部已親自實(shí)踐). 一. ...
    東皇Amrzs閱讀 4,296評論 7 54

友情鏈接更多精彩內(nèi)容