Download - 20141203 mac os terminal 常用指令與小技巧
Mac OS Terminal 常⽤用指令與⼩小技巧
終端機
• Linux 的介⾯面就是終端機,看到畫⾯面的地⽅方。
• Linux 系統同時會有很多終端機,⼀一般⼀一次只會看到⼀一個。
• Mac OS 因爲有圖像化介⾯面,視窗的概念,因此可以同時操作多個終端機。
Option + ⽅方向鍵可快速在⻑⾧長指令內,做遊標的移動
pwd
• 顯⽰示當前⺫⽬目錄
!
• 重複上⼀一個執⾏行過,開頭相同的指令
• ex. !redis > redis-server
ls -alh
• 可列出當前⺫⽬目錄的檔案系統
• al: 全部檔案(含隱藏檔)與屬性
• h: ⼤大⼩小顯⽰示爲可讀的⼤大⼩小(B,K,M)
ls -alh
檔案權限權限 擁有者羣組
chown
• 可同時變更擁有者與羣組
• ex. chown user:group file
檔案權限格式爲 drwxrwxrwx
• 綠:是否爲⺫⽬目錄
• 紅:擁有者(Owner)權限
• ⿈黃:羣組(Group)權限
• 紫:擁有者(Other)權限
檔案權限rwx
• 讀取:是否可讀取
• 寫⼊入:是否可寫⼊入
• 執⾏行:是否可執⾏行
檔案權限
• 每⼀一個區塊的權限都是數字的總和
• 如果只可執⾏行權限就是 1
• 可讀執⾏行不可寫是 5
• 不具有權限是 0
20
21
22
rwx
chmod
• 可變更檔案或是資料夾的權限
• ex. chmod 777 mylog < 最壞⽰示範
• ex. chmod -R 755 htdoc < Web 常⽤用權限
Recursive與檔案系統
• 資料夾與檔案都是物件,有各⾃自的權限
• chmod 與 chown 都只能變更⼀一個標的
• 遞迴可以讓指令對⺫⽬目標下的檔案與根⺫⽬目錄重複執⾏行
rm
• 只能移除檔案
• 移除資料夾使⽤用 rmdir ,且只能移除空資料夾
• 透過遞迴可以移除所有檔案與資料夾
• ex. rm -Rf test/ < ⾮非常危險
touch
• 修改檔案時間戳記 (存取時間與更改時間)
• 有時候也被當做快速建⽴立檔案的⽅方式
• 建⽴立的檔案權限就是建⽴立者的權限
tail
• 可在終端機顯⽰示特定檔案最後⼗十⾏行內容
• 適合⽤用來觀看 log 檔案
tail• 加上參數 -n 20 可顯⽰示 20 ⾏行,或是可以偷懶直接帶⼊入數字
tail• 加上參數 -f 可以讓終端機持續顯⽰示 log 的更新,直到按下 Ctrl + C 中斷操作
&
• 執⾏行檔案的指令後⾯面加上 & 符號,可不鎖定終端機
• 但是這個程式如果有 print 訊息,還是會在終端機上⾯面被看到
• ex. redis-server&
>
• 執⾏行檔案的指令後⾯面加上 > 符號,可將程式 print 的訊息導向
• ex. redis-server > /dev/null
ps
• Process Status,顯⽰示當前使⽤用者執⾏行的程序
• 加上 aux 參數,可顯⽰示所有系統的程序
• ex. ps aux
grep
• Globally Search a Regular Expression and Print,搜尋⼯工具
• 給 grep 關鍵字或正規表⽰示式,會列出結果
• ex. grep apple fruitlist.txt
|
• pipe ,會把左邊的執⾏行結果丟給右邊
• ex. ps aux | grep redis
kill
• 關閉系統程序,後⾯面通常加上 PID
• 正常關閉 : 15
• 強制關閉 : 9
• ex. kill -9 5568
Finder
不能被關閉• 可以關閉 Finder 所有視窗
• 但是 Finder 不能被關閉
回到上⼀一層
• 在 Windows 內是倒退鍵
• 在 Mac 使⽤用 Cmd+ 上
新增視窗與分⾴頁
• Cmd+N,開新視窗
• Cmd+T,開新分⾴頁
精度
var numA = 0.1;
var numB = 0.2;
alert( (numA + numB) === 0.3 );
會顯⽰示?
精度
false
精度0.1+0.2 = ????
JavaScript 說
0.01 = 0.0001 1001 1001 1001 … 無限循環
0.02 = 0.0011 0011 0011 0011 … 無限循環
不過雙精度浮點數最⾼高是 52 位
精度
所以相加後是 0.0100110011001100110011001100110011001100110011001100
轉爲⼗十進位就是 0.30000000000000004
精度只要先將數字乘上10的 n 次⽅方,n 是你要的⼩小數點精度,運算完在除以10的 n 次⽅方就可以解決這個問題。
ex. 想要算出 0.1+0.2,可寫成
var accuracy = 1 * 10;
alert((0.1*accuracy+0.2*accuracy)/accuracy);
閉包
• myText 執⾏行完 closure_test 之後就應該要消失了
• 但是因爲 closure_test return 了⼀一個 function,且這個 function 內部使⽤用到了 text 變數,形成了⼀一個閉包。
• 這個閉包的特性,就像保護罩⼀一樣保護了 myText 。