Linux 基本操作指令介紹

檔案操作相關

  • pwd: 顯示目前目錄
  • cd: 更換目錄
  • ls: 顯示檔案名稱與內容的指令(-a可顯示隱藏檔,-al同時顯示隱藏檔與詳細資料 )
  • cat: 將檔案內容列出的指令
  • more: 檔案太大的話,可以用 more 來一頁頁讀取喔(如: ls -al|more)
  • mkdir: 建立新的目錄
  • rm: 刪除的指令,如rm test.txt,如果要刪掉整個資料夾下的檔案,則可以加-irf,如rm -rf test
  • rmdir: 刪除資料夾的指令,但如果資料夾內有內容則需要使用rm -rf
  • mv: 移動檔案或目錄
  • cp: copy 的意思
  • find:尋找檔案的指令
  • whereis:相對於 find ,你也可以使用 whereis 這個指令來下達找尋的檔案,whereis 利用曾經找過的系統資訊內的資料去找檔案,所以速度會很快,不過,如果 whereis 找不到的話,並不代表該檔案真的不存在
  • chmod:變更檔案屬性的指令
  • chown:變檔案有擁有者
  • chgrp:改變檔案或目錄的『擁有群組』
  • df:察看硬碟空間的指令
  • du:用來察看目錄內所有檔案使用掉的空間的情況
  • ifconfig: 用來查詢目前我們這個系統的網路卡的狀況的指令,可以查詢 IP、子遮罩網路及網路卡的硬體資訊等等。
  • adduser username:新增使用者

Linux 設定開機自動執行程式

所有使用者登入自動執行指令

執行以下指令
vi /etc/profile

在裡面打入要執行的指令如下:
/home/gtwang/my_script.sh

然後記得要有執行權限
chmod +x /home/gtwang/my_script.sh

個別使用者登入自動執行指令

如果只是要讓個別使用者登入執行的程式,就寫在使用者個人的 ~/.bash_profile、~/.bash_login 或是 ~/.profile 當中,就看自己的家目錄下所使用的是那一個,就把指令加進去即可,bash 在使用者登入時,會依序尋找這三個檔案,它只會執行第一個找到的那一個,假設 ~/.bash_profile 這個檔案存在,它就會執行這一個,而後面兩個就不管了,以此類推。

依據不同執行類型修改不同設定檔

另外,/etc/bash.bashrc ~/.bashrc 也是很常被使用的 bash 設定檔,這兩個檔案的用途跟上面的 profile 設定檔很類似,不過有些差異:

  • profile 設定檔:登入型 shell(login shell)所執行的指令稿,例如使用者登入。
  • bashrc 設定檔:非登入型 shell 所執行的指令稿,例如開啟終端機視窗。

登出自動執行指令

若要設定使用者登出時所要自動執行的程式,可將指令寫在自己的 ~/.bash_logout 指令稿中(如果不存在,就自己建立一個),例如:
/home/gtwang/my_script2.sh
同樣要確認執行權限:
chmod +x /home/gtwang/my_script2.sh

VI文書處理器

Linux的文書處理器

若要使用Linux來管理伺服器,文書處理是很重要的,因此會需要了解如何操作Linux裡的文書編輯軟體VI。
要呼叫VI的方式如下

VI的三種使用模式

因為純鍵盤的操作,又需要可以支持打字,因此VI將操作模式分為下面三種

  • 一般模式:可以使用『上下左右』按鍵來移動游標,您可以使用『刪除字元』或『刪除整行』來處理檔案內容,也可以使用『複製、貼上』來處理您的文件資料
  • 編輯模式: 用來編輯檔案內容,按下『i, I, o, O, a, A, r, R』其中一個可以進入編輯模式,畫面的左下方會出現『 INSERT 或 REPLACE 』的字樣。
  • 指令列命令模式:輸入『 : 或 / 』就可以將游標移動到最底下那一行。可做儲存搜尋等動作


左下方的I代表現在正在編輯模式

一般模式

  • [Ctrl] + [f]: 螢幕『向前』移動一頁
  • [Ctrl] + [b]: 螢幕『向後』移動一頁
  • /word: 向游標之後尋找一個字串名稱為 word 的字串。
  • ?word: 向游標之前尋找一個字串名稱為 word 的字串。
  • :n1,n2s/word1/word2/g : 在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !
  • :1,$s/word1/word2/g : 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !
  • :1,$s/word1/word2/gc: 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認(conform)是否需要取代!
  • x 為向後刪除一個字元, X 為向前刪除一個字元
  • dd刪除游標所在的那一整列
  • yy:複製游標所在的那一行,20yy 則是複製 20 列
  • p 為複製的資料在游標下一行貼上,P 則為貼在游標上一行!
  • u: 復原前一個動作。

編輯模式

  • i, I插入:在目前的游標所在處插入輸入之文字,已存在的文字會向後退;
  • a, A增加:由目前游標所在的下一個字開始輸入,已存在的文字會向後退:
  • o, O插入新的一行:從游標所在的下一行枝行首開始輸入文字
  • r, R取代:r 會取代游標所在的那一個字元;R會一直取代游標所在的文字,直到按下 ESC 為止;
  • Esc退出編輯模式,回到一般模式中

指令列命令模式

  • :w 將編輯的資料寫入硬碟檔案中
  • :q 離開 vi
  • :wq 儲存後離開,若為 :wq! 則為強制儲存後離開
  • :e! 將檔案還原到最原始的狀態!
  • ZZ 若檔案沒有更動,則不儲存離開,若檔案已經經過更動,則儲存後離開!
  • :w [filename] 將編輯的資料儲存成另一個檔案(類似另存新檔)
  • :r [filename] 在編輯的資料中,讀入另一個檔案的資料。亦即將 『filename』 這個檔案內容加到游標所在行後面
  • :set nu 顯示行號,設定之後,會在每一行的字首顯示該行的行號
  • :set nonu 與 set nu 相反,為取消行號!
  • n1,n2 w [filename] 將 n1 到 n2 的內容儲存成 filename 這個檔案。
  • :! command 暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如[ :! ls /home ]

後面加上!則代表強制執行

Linux用pm2來管理伺服器

pm2介紹

pm2 是一個管理 Node.js process 的工具,它可以讓我們用簡單的指令啟動 Node.js cluster 並最大化使用我們的 CPU,可以利用它來簡化很多node應用管理的繁瑣任務,如性能監控、自動重啟、負載均衡等,而且使用非常簡單。

安裝

使用npm安裝
npm install pm2 -g

目錄介紹

pm2安裝好後,會自動創建下面目錄。
$HOME/.pm2 將包含所有PM2相關文件
$HOME/.pm2/logs 將包含所有應用程序日誌
$HOME/.pm2/pids 將包含所有應用程序pids
$HOME/.pm2/pm2.log PM2記錄
$HOME/.pm2/pm2.pid PM2 pid
$HOME/.pm2/rpc.sock 遠程命令的套接字文件
$HOME/.pm2/pub.sock 可發布事件的套接字文件
$HOME/.pm2/conf.js PM2配置

啟動程序

pm2 start後面加上node.js 起始檔案
pm2 start app.js
使用叢集(cluster)的方式來起始檔案
pm2 start -i 4 –name server app.js

刪除Process

根據id, name刪除process
pm2 delete { id or name }

停止Process

根據id, name停止process
pm2 stop { id or name }

重新啟動Process

根據id, name重新啟動process
pm2 restart { id or name }

監控

列出目前所有已啟動的process並顯示他們目前的狀態, 按下ctrl+c 可以離開monitor
pm2 monit

利用叢集增加效能

請參考此篇文章:使用 pm2 啟動 Node.js cluster 以提升效能
截取作者實測結果報告:

可以發現開多個 process 處理的時候,消化 1000 個 request 的時間從 17.4 秒降到 9.9 秒,而每個 request 的回應時間也從 1668ms 降到 930ms,整體的速度大概快了兩倍(我的電腦是四核心,如果配備更好的話會快更多)

參考資料

在Linux與Windows間傳送檔案

PSCP介紹

PSCP 是一套使用命令提示列的軟體,是PuTTY相關可選擇使用的軟體。它提供 SCP client 的功能。當我們僅需要將一個或少數檔案從 pc 端 upload 到 server 端時,這套軟體就提供非常安全的方法,使得所傳送的內容不會被其他人給竊聽。倘若遠端有提供 SSH2 建議還是使用 PSFTP 會比較好。

檔案下載:pscp.exe
下載原站:Download PuTTY: latest release (0.72)

linux傳送檔案到windows

下載單一檔案: /claire/test.txt為linux檔案位置,/tmp為windows要下載到的位置

pscp claire@8.8.8.8:/claire/test.txt /tmp

下載整個資料夾: /claire/為linux檔案位置,/tmp為windows要下載到的位置

pscp -r claire@8.8.8.8:/claire /tmp

windows傳送檔案到linux

pscp c:\123.xls root@xxx.xxx.xxx.xxx:/home/uploads

代表將於Windows之C槽下的一123.xls檔案,
傳送至IP為xxx.xxx.xxx.xxx的Linux中的/home/uploads資料夾下。

參考資料

PieTTY : 免費的SSH及Telnet client

軟體介紹

軟體下載:pietty0400b14.exe
官方網站:PieTTY:A terminal forked from PuTTY by piaip

PuTTY 是個小巧方便的 Telnet/SSH 安全遠端連線程式, 但用於非英語系文字時有非常多的問題, 而且它對於初學者來說過於複雜的使用界面也為人詬病已久。 PieTTY (舊稱 pputty) 則是源自於 PuTTY ,修正與完整支援亞洲等多國語系字元、 並在使用界面上大幅改進、易學易用的版本。

連線至Linux伺服器


按下『連線』後,就會出現等待登入與輸入帳/密資料的畫面,輸入帳密後就可以連線到遠端的linux電腦了。

如果想更改程式的編碼,可以選擇『選項 > 字元編碼 > 想顯示的編碼』,這樣就可以正常顯示各種不同編碼的文字

更多的連線方式

如果想要嘗試更多的連線方式,可以至此文章有更詳盡的介紹:
鳥哥的 Linux 私房菜 第十一章、遠端連線伺服器SSH / XDMCP / VNC / RDP

參考資料

Windows Services的設置

如果我們想要把一個EXE檔設定為開機自動執行,就需要把這個程式設定為service

開啟services管理畫面

打開搜尋,輸入

services.msc

就會看到以下畫面

就可以看到現有的所有service列表和狀態了

新增exe檔案為服務

使用sc create並設定呼叫程式的方式,如下

sc create MyProgramName binpath= “C:\MyFolder\MyProgram.exe” type= own start= auto

刪除現有的服務

使用以下的語法,可移除現有的服務

sc delete ServiceName

[30- 相關工具] 手機遠程測試

Android系統的手機設備偵錯

在電腦上的偵錯工具首推的就是 Chrome 開發者工具,但是由於若我們想要做手機遊戲,不同的設備有可能會有不同的狀況,我們會需要在不同手機上去做除錯。如果是Android系統的手機,開啟Enable USB Debugging之後,用USB線連至電腦,則可以藉著使用chrome去做遠端偵錯。
偵錯步驟如下:

  • 選擇 Settings > Developer Options > Enable USB Debugging以啟用設備上的開發者選項(要如何開啟請參考此篇文章:Set up a device for development
  • 使用一個 Google 帳戶登錄到 Chrome
  • 打開Chrome 開發者工具(在Chrome選單中選擇 更多工具 > 開發者工具)
  • 在 DevTools 中,點擊 Main Menu 主菜單,然後選擇 More tools > Remote devices。
  • 在 DevTools 中,點擊 Settings 標籤
  • 確保已啓用 Discover USB devices。
  • 使用 USB 將 Android 設備直接連接到電腦上
  • 在左測的remote target選擇要偵錯的設備

iOS的手機設備偵錯

首先針對要偵錯的 iDevice 接上 Mac 並且進入 iOS 設定中的「Safari」選項,在「進階」選單中開啟「網頁檢閱器」,iPhone 畫面如下:

接著我們開啟 MacOS 中的 Safari,並且啟用「開發」選項,如下圖:

當我們的 iOS 開啟網頁時,就可以在 Mac 中的 Safari「開發」功能表中看到連上線的 iDevice,直接選取正在開啟的頁面就可以進行 Debug 囉,畫面如下:

Debug的畫面如下:

利用 weinre 遠端 Debug 網頁元素

官網位置:https://people.apache.org/~pmuellr/weinre/docs/latest/Home.html

weinre 的全名是 WEb INspector REmote,顧名思義是一個遠端的網頁檢視器。在技術上 weinre 其實是一個以 node.js 為基礎的 Http Server,利用了 Web 即時通訊的技巧,將某個已經掛上 Target JavaScript 的 Browser ,透過背景將 DOM 資訊傳遞到 Debugging Tools 中。Debugging Tools 也是由 Web 進行設計,連接後雙方可以即時傳遞一些命令讓我們即時看見反饋,是一個很聰明的做法。而且沒有太多的環境限制,基本上可以執行 JavaScript 的瀏覽器都可以使用。

1. 安裝方式:可以直接由網址下載安裝,也可以透過npm來安裝
透過npm
sudo npm -g install weinre
直接透過網址安裝
sudo npm -g install http://example.com/path/to/apache-cordova-weinre-X.Y.Z-bin.tar.gz

2. 啟動服務
weinre –boundHost 10.0.0.13

接著在電腦內打開網址 http://10.0.0.13:8080,會看到如下的畫面:

3. 設定要被觀察的程式
在程式內加入下面的script

<script src="http://10.0.0.13:8081/target/target-script-min.js"></script>

接著重新整理就可以看到我們在手機設備上開啟的網頁的資訊,點選該連結就可以偵錯該程式

4. 偵錯畫面如下

參考資料

[29- 相關工具] 效能評估工具



遊戲效能評估方式

FPS是指影格速率,是用於測量顯示張數的量度。測量單位為「每秒顯示張數」(Frame per Second,FPS)或「赫茲」,一般來說FPS用於描述影片、電子繪圖或遊戲每秒播放多少影格。一般說來,顯示器的張數為60Hz,因此,若超過60的fps容易會有畫面撕裂的狀況產生。而60FPS的遊戲體驗會相較30FPS的遊戲體驗來得更順暢。

PixiJS的ticker的預設FPS為60,可以自行藉由ticker.speed的值來調整遊戲的FPS。

// Scales ticker.deltaTime to what would be
// the equivalent of approximately 120 FPS
ticker.speed = 2;

顯示遊戲現在的fps數值

這邊介紹兩款不同的畫面fps顯示工具,FPSMeter和stats.js

FPSMeter

官網:http://darsa.in/fpsmeter/
使用樣子:

使用方法:

//anchor指要把fps顯示的方框放在那邊,如果沒有傳值進去,則會放至document.body
//options是指相關的設定(請參見:https://github.com/darsain/fpsmeter/wiki/Options)
var meter = new FPSMeter([ anchor ] [, options ]);

若一個遊戲有多個不同的fps設定,則可以在該ticker去設定要顯示的fps是那一個ticker的

// Function that renders one frame
function render() {
	// ... rendering happens here ...
	meter.tick();
}

若要知道每一次render圖像時要花的時間,則使用下列方法:

// Function that renders one frame
function render() {
	meter.tickStart();
	// ... rendering happens here ...
	meter.tick();
}

stats.js

官網:https://github.com/mrdoob/stats.js/
使用樣子:

使用方法:

var stats = new Stats();
stats.showPanel( 1 ); // 0: fps, 1: ms, 2: mb, 3+: custom
document.body.appendChild( stats.dom );

function animate() {

	stats.begin();

	// monitored code goes here

	stats.end();

	requestAnimationFrame( animate );

}

requestAnimationFrame( animate );

這個工具可以同時顯示較多的數值,我們初始顯示的數值雖然只能四選一(0: fps, 1: ms, 2: mb, 3+: custom)
但是只要在顯示fps的方塊用滑鼠點擊,亦可以切換顯示不同的panel。



Chrome Debug Tool

在電腦上測試時最好的效能監測工具還是屬Chrome Debug Tool,切到Performance頁籤,在要監測時按下左上方的錄影按鈕,在結束時按下停止,就會看到如下的畫面:

我們可以看到,最上方有fps的部份,以上圖為例,我們可以觀察到,在遊戲重新loading時的fps最低,這的同時,也是cpu最高的時期,在frame的部份,還可以看到遊戲在每個時間點時的遊戲畫面截圖,幫助我們更了解這個時間軸的每個時刻遊戲畫面是如何呈現。

在2500ms的地方,有一條紅色的線,代表當時是被debug tool判定效能較差的時刻。我們點一下上方的時間軸,可以選擇下方要顯示的資料的範圍。

這時候我們可以看到最上方有一條Timer Fired的任務花費最多時間,這時候大家可能會想什麼ansync.js根本不是我寫的呀,但是其實這個工具上面顯示的名稱是只會顯示一整串序列最初被呼叫的函數名稱。例如在pixi裡的event handler是循序被執行並不會同步執行的,這時如果有許多listener監聽某個事件,其中有一個在聽到該事件後會執行一個很耗效能的動作,在這個performace工具裡會顯示的名稱為該動作emit事件的動作。

因此我們較難直接從這個列表得知造成效能低落的原因,這時,我們可以點選某列我們感興趣的執行動作,這時下方會出現一個面板,我們可以從這個面板得知這個工作項目的細節。

由上圖可得知,這個耗效能的動作,是由於GameScene.draw要繪製整個遊戲場景所造成的。

除了Call-Tree可以讓我們看到這整個工作項目是怎麼被呼叫的,Summary裡可以看到這個動作較花效能的是script、painting還是rendering

參考資料

[28- 相關工具] PixiJS devtools

開發人員工具

Chrome 開發者工具是網頁開發者常在使用的偵錯工具,可以檢查下載的檔案、html的dom元素檢視及編輯、調整css等…

開發工具打開方式:
1. 功能表 -> 工具 -> 開發人員工具
2. 直接按 F12 叫出來
3. 在網頁任何位置按右鍵,選擇”檢查元素”,就可以看到原始碼。

工具有許多的面版在最上列,左邊也可以直接選擇要找的html元素的位置

上圖即為偵錯面板的圖示。

關於這個工具更多的資訊請見此:Chrome 開發者工具

PixiJS devtools

一般的debug tools在一般網頁上就十分夠用了,但是對於PIXI來說,因為其繪圖元件都放在Canvas裡,對於畫面上的偵錯較不容易。

因此推薦大家可以安裝下面這個擴充應用程式:

安裝完成後,如果這個網頁的頁面內有使用pixi,則會多顯示這個pixi的tab如下圖

在左邊我們可以看到場景上所有的繪圖元件以及其屬性

當我們點選元件的名稱時,場景上會有框框將這個元件的位置框出來

當我們有物件放到場景上卻沒有看到時,用這個工具可以很方便的查找是否該物件有存在在場景上只是被其他物件壓住,亦或是根本沒有加進場景裡。
也可以從物件的順序看到圖層的相對關係,越下面的代表越上面的圖片。

面版的左上方的Reconnect按鈕則是用來刷新元件資訊,元件列表的更新需要手動按這個鈕才能夠更新到最新。

屬性面版的部份,則是我認為最好用的功能,我們可以直接去檢視現在這個物件的某些屬性是否正確。
例如x、y、visible,並且也可以動態調整。

因為現在Pixi JS的開發工具還沒有專屬的IDE,在開發遊戲時,對位是相對較麻煩的
這個工具因為可以所見即所得,並且動態調整x、y時可以直接在畫面上反應出來,在對位上是十分方便的一個工具。

在調整數值時,可以直接用上、下鍵來增加或減少數字,也可以直接在畫面中馬上看到物件的移動,若是直接輸入數字,較容易游標會有跳掉的狀況。

參考資料