2017年8月28日 星期一

【Linux cmd】關閉ubuntu防火牆的指令-ufw

ufw 是一個 iptables 的前端設定程式,其名稱為 Uncomplicated Firewall 的簡稱,意謂著「不複雜的防火牆」設定,它的製作目的在於讓一般人很容易的設定 iptables。

要強調的是 ufw 只是一個簡單的 iptables 前端設定工具,無法完全取代 iptables 的所有設定,若想做更複雜的 firewall 設定,還是得回到 iptables 層面。


啟用防火牆
$ sudo ufw enable
Firewall is active and enabled on system startup

停用防火牆:
$ sudo ufw disable
Firewall stopped and disabled on system startup

要確認 ufw 已經啟用,可以看一下 ufw 的 status:

已啟用:
$ sudo ufw status
Status: active

未啟用:
$ sudo ufw status
Status: inactive

2017年8月24日 星期四

在Ubuntu 14.04 無法apt-get install iperf3 的解決方法

首先加入 iperf3 需要的repository
sudo add-apt-repository "ppa:patrickdk/general-lucid"

接著更新你的apt-get的table
sudo apt-get update

最後安裝
sudo apt-get install iperf


*若是找不到命令add-apt-repository 請先使用下面方法安裝,通常安裝第一項就可以,若是不行再依序安裝二、三~
sudo apt-get install software-properties-common
and/or
sudo apt-get install python3-software-properties
and/or
sudo apt-get install python-software-properties

2017年8月17日 星期四

Windows Defender 無法開啟的問題

若是點了控制台的 Windows Defender 出現下面的訊息












可以試試以下步驟:

用管理權限去跑 regedit , 改機碼請小心

機碼位置位於:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\DisableAntiSpyware

這個值若為1   試試改為 0

2017年7月27日 星期四

【Linux cmd】vi指令說明

vi指令說明(完整版)
.vi 的操作模式
==============
        vi 提供兩種操作模式:輸入模式(insert mode)和指令模式(command mode)
        。當使用者進入 vi 後,即處在指令模式下,此刻鍵入之任何字元皆被視為
        指令。在此模式下可進行刪除、修改等動作。若要輸入資料,則需進入輸入
        模式。
.輸入模式
=========
        如何進入輸入模式
                a (append)      由游標之後加入資料。
                A               由該行之末加入資料。
                i (insert)      由游標之前加入資料。
                I               由該行之首加入資料。
                o (open)        新增一行於該行之下供輸入資料之用。
                O               新增一行於該行之上供輸入資料之用。
        如何離開輸入模式
                《ESC》 結束輸入模式。
.指令模式
=========
游標之移動
        h       向左移一個字元。
        j       向上移一個字元。
        k       向下移一個字元。
        l       向右移一個字元。
        0       移至該行之首
        $       移至該行之末。
        ^       移至該行的第一個字元處。
        H       移至視窗的第一列。
        M       移至視窗的中間那列。
        L       移至視窗的最後一列。
        G       移至該檔案的最後一列。
        +       移至下一列的第一個字元處。
        -       移至上一列的第一個字元處。
        (       移至該句之首。 (註一)
        )       移至該句之末。
        {       移至該段落之首。 (註二)
        }       移至該段落之末。
        nG      移至該檔案的第 n 列。
        n+      移至游標所在位置之後的第 n 列。
        n-      移至游標所在位置之前的第 n 列。
        <Ctrl><g>       會顯示該行之行號、檔案名稱、檔案中最末行之行號、游標
                        所在行號佔總行號之百分比。
        註一:句子(sentence)在vi中是指以『!』、『.』或『?』結束的一串字。
        註二:段落(paragraph)在vi中是指以空白行隔開的文字。
.視窗的移動
===========
        <Ctrl><f>       視窗往下捲一頁。
        <Ctrl><b>       視窗往上捲一頁。
        <Ctrl><d>       視窗往下捲半頁。
        <Ctrl><u>       視窗往上捲半頁。
        <Ctrl><e>       視窗往下捲一行。
        <Ctrl><y>       視窗往上捲一行。
.刪除、複製及修改指令介紹 (此單元較少使用)
=========================
        d(delete)、c(change)和y(yank)這一類的指令在 vi 中的指令格式為:
        Operator + Scope = command
        (運算子)   (範圍)
        運算子:
        d       刪除指令。刪除資料,但會將刪除資料複製到記憶體緩衝區。
        y       將資料(字組、行列、句子或段落)複製到緩衝區。
        p       放置(put)指令,與 d 和 y 配和使用。可將最後delete或yank的資
                料放置於游標所在位置之行列下。
        c       修改(change)指令,類似delete與insert的組和。刪除一個字組、句
                子等之資料,並插入新鍵資料。
        範圍:
        e       由游標所在位置至該字串的最後一個字元。
        w       由游標所在位置至下一個字串的第一個字元。
        b       由游標所在位置至前一個字串的第一個字元。
        $       由游標所在位置至該行的最後一個字元。
        0       由游標所在位置至該行的第一個字元。
        )       由游標所在位置至下一個句子的第一個字元。
        (       由游標所在位置至該句子的第一個字元。
        {       由游標所在位置至該段落的最後一個字元。
        }       由游標所在位置至該段落的第一個字元。
        整行動作
        dd      刪除整行。
        D       以行為單位,刪除游標後之所有字元。
        cc      修改整行的內容。
        yy      yank整行,使游標所在該行複製到記憶體緩衝區。
.刪除與修改
===========
        x       刪除游標所在該字元。
        X       刪除游標所在之前一字元。
        dd      刪除游標所在該行。
        r       用接於此指令之後的字元取代(replace)游標所在字元。
                如: ra 將游標所在字元以 a 取代之。
        R       進入取代狀態,直到《ESC》為止。
        s       刪除游標所在之字元,並進入輸入模式直到《ESC》。
        S       刪除游標所在之該行資料,並進入輸入模式直到《ESC》。
.搬移與複製
==========
        利用 delete 及 put 指令可完成資料搬移之目的。
        利用 yank 及 put 指令可完成資料複製之目的。
        yank 和 delete 可將指定的資料複製到記憶體緩衝區,而藉由 put 指令
        可將緩衝區內的資料複製到螢幕上。
        例:
        搬移一行        ‧在該行執行 dd
                        ‧游標移至目的地
                        ‧執行 p
        複製一行        ‧在該行執行 yy
                        ‧游標移至目的地
                        ‧執行 p
.指令重複
=========
        在指令模式中,可在指令前面加入一數字 n,則此指令動作會重複執行 n
        次。
        例:
        刪除10行                ‧10dd
        複製10行                ‧10yy
                                ‧游標移至目的地
                                ‧p
        指標往下移10行  ‧10j
.取消前一動作(Undo)
===================
        即復原執行上一指令前的內容。
        u       恢復最後一個指令之前的結果。
        U       恢復游標該行之所有改變。
.搜尋
=====
        在vi中可搜尋某一字串,使游標移至該處。
        /字串           往游標之後尋找該字串。
        ?字串           往游標之前尋找該字串。
        n               往下繼續尋找下一個相同的字串。
        N               往上繼續尋找下一個相同的字串。
.資料的連接
===========
        J       句子的連接。將游標所在之下一行連接至游標該行的後面。
        若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
        (可利用 a、i等指令)再按《Enter》即可。
.環境的設定
===========
        :set nu                設定資料的行號。
        :set nonu              取消行號設定。
        :set ai                自動內縮。
        :set noai              取消自動內縮。
        自動內縮(automatic indentation)
        在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
        動內縮的功能,用下例解釋之:
        ‧vi test
        ‧(進入編輯視窗後)
          this is the test for auto indent
          《Tab》start indent           ← :set ai (設自動內縮)
          《Tab》data
          《Tab》data
          《Tab》data                   ← :set noai (取消自動內縮)
        the end of auto indent.
        ‧註:<Ctrl><d> 可刪除《Tab》字元。
.ex指令
=======
        讀寫資料
        :w                     將緩衝區的資料寫入磁碟中。
        :10,20w test   將第10行至第20行的資料寫入test檔案。
        :10,20w>>test  將第10行至第20行的資料加在test檔案之後。
        :r test                將test檔案的資料讀入編輯緩衝區的最後。
        刪除、複製及搬移
        :10,20d                刪除第10行至第20行的資料。
        :10d                   刪除第10行的資料。
        :%d                    刪除整個編輯緩衝區。
        :10,20co30             將第10行至第20行的資料複製至第30行之後。
        :10,20mo30             將第10行至第20行的資料搬移至第30行之後。
        字串搜尋與取代
        s(substitute)指令可搜尋某行列範圍。
        g(global)指令則可搜尋整個編輯緩衝區的資料。
        s指令以第一個滿足該條件的字串為其取代的對象,若該行有數個滿足該條
        件的字串,也僅能取代第一個,若想取代所有的字串則需加上g參數。
        :1,$s/old/new/g                將檔案中所有的『old』改成『new』。
        :10,20s/^/   /         將第10行至第20行資料的最前面插入5個空白。
        :%s/old/new/g          將編輯緩衝區中所有的『old』改成『new』。
.恢復編輯時被中斷的檔案
=======================
        在編輯過程中,若系統當掉或連線中斷,而緩衝區的資料並還未
        被寫回磁碟時,當再度回到系統,執行下列指令即可回復中斷前
        的檔案內容。
        %vi -r filename
.編輯多個檔案
=============
        vi亦提供同時編輯多個檔案的功能,方法如下:
        %vi file1 file2 ..
        當第一個檔案編修完成後,可利用『:w』將該緩衝區存檔,而後
        再利用 『:n』載入下一個檔案。



Reference from: http://www2.nsysu.edu.tw/csmlab/unix/vi_command.htm 

2017年7月26日 星期三

【shell script】Makefile & Shell Script 取得當下路徑 的方法

在makefile呼叫shell script
 $(SHELL) test.sh

在makefile中抓取目前路徑
CURRENT_DIR  = $(shell pwd)

在shell script中抓取目前路徑
CURRENT_PATH=`pwd`

2017年7月25日 星期二

【Linux cmd】linux系統下,壓縮解壓縮指令

附檔名為 tar.xz 的檔案

壓縮:  tar Jcvf file.tar.zx DirName

解壓縮: tar Jxvf file.tar.zx
============================================

附檔名為 zip 的檔案

壓縮:  zip file.zip DirName
           zip -r file.zip DirName

解壓縮: unzip file.zip
解壓縮到特定資料夾(ex:5566): unzip file.zip -d 5566
==============================================

附檔名為 tgz 的檔案

壓縮:  tar -zcvf file.tgz DirName

解壓縮: tar -zxvf file.tgz
=============================================

附檔名為 tar.tgz 的檔案

壓縮:  tar -zcvf file.tar.tgz DirName

解壓縮: tar -zxvf file.tar.tgz
==============================================

附檔名為 gz 的檔案

壓縮:  gzip file.gz DirName

解壓縮: gunzip file.gz    or    gzip -d file.gz
=============================================



附檔名為 tar.gz 的檔案

壓縮:  tar -zcvf file.tar.tgz DirName

解壓縮: tar -zxvf file.tar.tgz
==============================================

附檔名為 bz 的檔案

解壓縮: bzip2 -d file.bz    or    bunzip2 file.bz
=============================================

附檔名為 bz2 的檔案

壓縮:  bzip2 -z file.bz2 DirName

解壓縮: bzip2 -d file.bz2
==============================================

附檔名為 7z 的檔案

壓縮: 7z a file.7z DirName

解壓縮: 7z x file.7z 
*Ubuntu 7z 的安裝方式:  apt-get install p7zip-full


2017年6月14日 星期三

【Linux cmd】Linux下使用top來監控cpu使用率或記憶體使用率

top可以顯示系統各進程 (process) 狀態的文字模式工具,top 可以列出消耗系統資源最多的十多個進程。

通常我們會用這樣的方式來啟動top,意思是啟動top並且每秒更新狀態
#top -d 1

當啟動 top 後會顯示Process的數目、CPU 和 記憶體使用量等系統資訊,並預設會列出 CPU 使用率 (%CPU) 最高的十多個Process。另外我們可以按不同的按鍵來改變 top 顯示系統方式,包括按【M】鍵列出佔用最多記憶體的Process,【R】排列出 CPU 使用率最高的Process。另外常用的 top 命令有:
     【? 】或 【h】 - 顯示說明畫面。
     【q】 - 離開 top。
     【Space】或【Enter】 - 更新並重新繪畫整個畫面。
     【M】 - 進程依記憶體使用率 (%MEM) 由大至小排列。
     【T】 - 進程依總 CPU 時間 (TIME+) 由大至小排列。
     【I 】- 在 Solaris 和 Irix 模式切換,改變 CPU 使用率的計算方法。預設一般為 Irix 模式,
     【k】 - 終止某個進程。
     【r】 - 改變進程 nice 值,影響進程的優先序。
       ***process priority nice值範圍 -20 ~ +19,越小優先權越高,一般userSpace程式為0


下圖是進入top後的畫面:












整個 top 畫面主要分成三個區域,由上至下分別為:
     概要區 (Summary Area) - 顯示整個系統的資訊
     訊息/提示列 (Message/Prompt Line) - 顯示各命令的結果訊息或讓使用者輸入命令的參數,平常為一列空行。
     任務區 (Task Area) - 顯示各個task/process的資料。


概要區 (Summary Area) - 系統運作時間及平均負載
第一列顯示現時時間、系統運作時間 (up time)、使用者數目 (users) 和平均負載 (load average)。可以按 【l】 鍵切換是否顯示。



平均負載的三個數值分別為在平均過去 1 分鐘、5 分鐘和 15 分鐘在可運行或不可中斷狀態的進程數目。平均負載為 1.0 表示一個 CPU 被佔用所有時間。如果電腦有多個 CPU,平均負載的參考值亦會倍數增長。例如一個雙處理器雙核的電腦,所有 CPU 所有時間被完全佔用時的平均負載應該為 1.0 x 2 x 2 = 4.0。

任務資訊
第二列顯示任務 (task) 資訊,包括任務總數、運行中 (running)、睡眠中 (sleeping)、停止了(stopped) 和不能運作 (zombie) 的process數目。可以按 【t】 鍵切換是否和下一列 CPU 狀態列一同顯示。



CPU 使用率
第三列顯示 CPU 狀態,包括以下資訊:
us (user): 使用者空間 (user space) 佔用 CPU 百分比。此數值主要受較少 I/O 等系統呼叫的進程所影響。
sy (system): 核心空間 (kernel space) 佔用 CPU 百分比。一般在系統要處理大量 IRQ 或任務排程時,此值會較高。
ni (nice): nice 值比一般值 0 大 (優先序較低) 的進程佔用 CPU 百分比
id (idle): CPU 閒置時間百分比
wa (iowait): CPU 等待輸入/輸出的百分比。當些值過高 (如超過 30%),表示系統的儲存或網路 I/O 效能有問題。
hi (H/W Interrupt): CPU 處理硬體中斷時間的百分比。除光碟機不斷檢查是否有光碟外,一般此值不會太高。
si (S/W Interrupt): CPU 處理軟體中斷時間的百分比,此值很少機會會太高。
st: (Steal): 在如 Xen 等虛擬環境下 CPU 運作虛擬機器時間的百分比。太高表示可能需要停止一些虛擬機器。





您可以按 【t】鍵切換不同顯示方式。在多處理器 (multi-processor) 或多核 (multi-core) 系統上,您亦可以按 數字【1】鍵切換使用一列顯示整體 CPU 使用狀態還是每個 CPU 使用一列顯示其狀態。

記憶體和置換空間使用率
接下來的兩列分別顯示記憶體和置換空間 (swap space) 使用率。可以按 【m】 鍵切換是否顯示。




buffers (緩衝區) 表示被用作磁碟寫入快取 (write cache) 的記憶體大小。當系統記憶體不夠時,自然會把 buffers上的資料清出 (flush) 至磁碟並釋放有關記憶體。過大 buffers (超過幾百 MB) 一般表示儲存子系統有問題,導至buffers上的資料無法清出。
cache (快取) 則表示被使用作檔案讀取快取 (read cache) 的記憶體大小。同樣在記憶體不夠時,部份 cache 使用的記憶體會被釋放。當系統正進行大量讀取工作,此值若高會是不錯的現象。但如果此值在有大量讀取工作時過低 (少於總記憶體大小的四成),這表示系統到了需要增加記憶體的時候。
對大部份伺服器工作,當置換空間 (swap) 被使用時,一般都會拖慢整個系統。除 Oracle 等本身會盡用置換空間的服務外,一般伺服器在開始使用超過幾 MB 的置換空間時,就表示需要進行一些微調工作。


任務區 (Task Area)
任務區會顯示Process耗用系統資源的資訊。每個Process預設會顯示以下資料:









PID (Process ID) - Process ID
USER (Effective user name) - 執行此Process的owner。
PR (priority) - Process的優先值,數值越小表示進程的優先順序越高。
NI (nice) - Process的 nice 值,會影響進程的優先順序 (priority),可以為 20 至 -19 任何一個整數,數值越小會令進程的優先序越高。
VIRT (Virtual memory) - Process使用的總虛擬記憶體 (virtual memory) 大小,包括Process的程式碼、資料和共用程式庫再加上被置換 (swap out) 的空間,單位為 KiB。VIRT = SWAP + RES.
RES (Resident size) - Process非Swap的實體記憶體大小,單位為 KiB。RES = CODE + DATA
SHR (Shared Mem size) - Process使用的共用記憶體大小,也就是可以和其他進程共用的記憶體空間,單位為 KiB。
S (Stats) - Process的狀態,可以為:
   D (uninterruptible sleep) - 在不可中斷的休眠中 (一般為正在進行輸入/輸出)
   R (running) - 在運行中或可以被運行 (即在運行序列 run queue)
   S (sleeping) - 在可以被中斷的休眠中 (一般是正在等待某事件完結)
   T (traced or stopped) - 已被停止。因工作控制訊號 (job control signal) 或Process在被追蹤中。
   Z (Zombie) - 不能運作的進程,即所謂殭屍進程。一般因為已終止但未能被其母進程成功接收的進程。
%CPU (CPU usage) - 由上次 top 畫面更新資料後Process的 CPU 使用率。為Process佔用的 CPU 時間除以實際時間 (CPU 時間 / 實際時間),以百分比顯示。顯示小數點後一個位。可以按 I 鍵切換 Irix 模式 (一般計算方法) 和 Solaris 模式 (一般的 CPU 使用率再除系統的處理器數目) 改變此欄顯示的數值。
%MEM (Memory usage) - Process佔用實體記憶體大小與系統總實體記憶體大小的比例,以百分比顯示。
TIME+ (CPU Time) - 由進程被啟動至今的總 CPU 時間。可以按 S 鍵切換是否開啟累計模式 (Cumulative mode) 改變此欄顯示的數值。
COMMAND (Command line or Program name) - 啟動Process的命令,可以按 c 鍵切換只顯示程式名稱或整個連參數的命令行。


主要命令:
  • ? 或 h - 顯示說明畫面。
  • q - 離開 top。
  • 【Space】【Enter】 - 更新並重新繪畫整個畫面。
  • d 或 s - 改變畫面更新時間。
  • z - 切換單色或彩色顯示模式。
  • B - 切換是否以粗體強調重要資料。
  • c - 切換進程命令欄只顯示命令本身還是連參數顯示整個命令。
  • f - 改變會顯示的進程資料欄目。
  • o - 改變顯示進程的排序方法。
  • M - 進程依記憶體使用率 (%MEM) 由大至小排列。
  • N - 進程依 PID 由大至小排序。
  • P - 進程依 CPU 使用率 (%CPU) 由大至小排列,預設一般使用此方法排列。
  • T - 進程依總 CPU 時間 (TIME+) 由大至小排列。
  • I - 在 Solaris 和 Irix 模式切換,改變 CPU 使用率的計算方法。預設一般為 Irix 模式,
  • u - 監察有效 UID (effective UID) 為個別使用者的進程。
  • U - 監察個真正/有效 UID 為別使用者的進程。
  • i - 切換只顯示活躍進程 (不顯示閒置進程 idle process) 或所有進程,預設一般顯示所有進程
  • n - 設定顯示最多進程數目,預設一般會盡用畫面的空間顯示最多的進程。
  • = - 解除如 u/U/i/n 等命令或 -p 選項監察進程的過濾,顯示所有進程。
  • x - 切換是否以粗體或反白強調排序的進程資料欄目。
  • y - 切換是否以粗體或反白強調正在運行的進程。
  • b - 切換 x/y 命令強調的資料以粗體還是反白顯示。
  • k - 終止某個進程。
  • r - 改變進程 nice 值,影響進程的優先序。
  • l - 切換是否顯示系統運作時間 (up time) 和平均負載 (load average)。預設會顯示。
  • m - 切換是否顯示記憶體和置換空間 (swap space) 使用率。預設會顯示。
  • t - 切換是否顯示進程 (task) 和 CPU 狀態。預設會顯示。
  • 1 - 切換以一列顯示所有 CPU 的平均狀態還是每一個 CPU 顯示一列狀態資訊。預設會只顯示一列平均狀態。

也可以直接下命令,例如: top -o %CPU

在 top 命令中,-o 是用來指定排序的選項。具體來說,-o 後面跟著您想要排序的欄位名稱,例如 %CPU 或 %MEM。

這表示您希望 top 根據 CPU 使用率(%CPU)進行排序,這樣 CPU 使用率最高的進程會顯示在最上面。


更詳細的內容請參考以下的鏈結:
http://wiki.linux.org.hk/w/Monitor_processes_with_top

實際使用到的一個範例,與解釋
top -bi -d 1 -n 1 -w 512

-b:以「批次模式」(batch mode) 輸出,適合用於腳本或將輸出導向檔案。
-i:只顯示有活動的進程(不顯示 idle 的進程)。
-d 1:每 1 秒更新一次(但因為 -n 1,其實只會執行一次)。
-n 1:只執行 1 次(顯示 1 次後就結束)。
-w 512:設定輸出寬度為 512 字元,避免資訊被截斷。

這個指令的用途:
這個指令會以批次模式顯示一次目前系統的活動進程資訊,只顯示有活動的進程,並且將每行寬度設為 512 字元,方便你在腳本或自動化工具中取得完整的系統狀態快照。