顯示具有 command 標籤的文章。 顯示所有文章
顯示具有 command 標籤的文章。 顯示所有文章

2014年1月7日 星期二

[Linux] shell

shell (殼程式)
  • 只要能夠操作應用程式的介面都能夠稱為殼程式。
  • 狹義的殼程式指的是指令列方面的軟體,ex: bash 等。 
  • 廣義的殼程式則包括圖形介面的軟體!因為圖形介面其實也能夠操作各種應用程式來呼叫核心工作。


shell 依據發展者的不同有許多的版本:
  • Bourne shell (sh)
    • 第一個流行的 shell 是由 Steven Bourne 發展出來的,所以稱為 Bourne shell (sh)。
  • C SHell (csh)
    • 預設在 Sun 裡頭的
    • 是由柏克萊大學的 Bill Joy 設計依附於 BSD 版的 Unix 系統中的 shell ,這個 shell 的語法有點類似 C 語言,所以才得名。
    • 由於在學術界 Sun 主機勢力相當的龐大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一個很重要而且流傳很廣的 shell 之一 。
  • Linux 使用的這一種版本就稱為『 Bourne Again SHell (簡稱 bash) 』
    • Bourne Shell 的增強版本。
    • 基準於 GNU 的架構下發展出來的。
    • 另外還有商業上常用的 K SHell、TCSH 等等。


shell script (程式化腳本)
  • 是利用 shell 的功能所寫的一個『程式 (program)』。
  • 這個程式是使用純文字檔,將一些 shell 的語法與指令(含外部指令)寫在裡面, 搭配正規表示法、管線命令與資料流重導向等功能,以達到我們所想要的處理目的。


#!/bin/bash
  • 在宣告這個 script 使用的 shell 名稱
    • 其他還如: 
      • #!/bin/sh
      • #!/bin/ksh
      • #!/usr/bin/php
  • 宣告這個檔案內的語法使用 bash 的語法!那麼當這個程式被執行時,他就能夠載入 bash 的相關環境設定檔 (一般來說就是 non-login shell 的 ~/.bashrc)


shell script 的預設變數 $0, $1, $2...
ex:
/path/to/scriptname opt1 opt2 opt3...
             $0               $1    $2    $3

$# :代表後接的參數『個數』,以上表為例這裡顯示為『 4 』;
$@ :代表『 "$1" "$2" "$3" "$4" 』之意,每個變數是獨立的(用雙引號括起來);
$* :代表『 "$1c$2c$3c$4" 』,其中 c 為分隔字元,預設為空白鍵, 所以本例中代表『 "$1 $2 $3 $4" 』之意。


* Reference
- 第十三章、學習 Shell Scripts

2013年1月31日 星期四

[Android] Errors when sign projecct

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

重新 sign 前 沒有刪掉以下檔案 安裝時便會發生此錯誤。

\META-INF\CERT.RSA
\META-INF\CERT.SF


jarsigner: unable to open jar file: test.apk

沒有找到 test.apk。


jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 483 but got 480 bytes)

要 sign 的檔案已經 sign 過。

2011年9月19日 星期一

[Linux] crontab

* Definition
  • Linux/Unix 系統中用來讓系統各使用者自行設定在需要的時間 ,做需要的事的程式。
  • crontab 這個指令所設定的工作將會循環的一直進行下去! 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支援。
  • 讓 crontab 可以生效的服務則是 crond 這個服務。
  • 若只需處理僅執行一次就結束排程的指令,可用 at

* 一般 Linux 在開機時會自動載入,如果發現無 crond 在跑,可以到 /etc/rc.d/ 目錄下看看是否有將執行crond 程式的指令加入開機自動執行檔裡面。


* User Name -> crontab file name
  • 當使用者使用 crontab 這個指令來建立工作排程之後,該項工作就會被紀錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的。
  • 所有使用者的 crontab 檔都會存檔 /usr/spool/cron/crontab/ 下,每個人都只有一個檔案存在,檔名就是該帳號的名字。ex:
    • dmtsai 使用 crontab 後, 他的工作會被紀錄到 /var/spool/cron/dmtsai

[Note] 不要使用 vi 直接編輯該檔案, 因為可能由於輸入語法錯誤,會導致無法執行 cron 。

* cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中。

* Re-start /etc/init.d/crond restar
在 Linux 底下的 crontab 會自動的幫我們每分鐘重新讀取一次 /etc/crontab 的例行工作事項,但是某些原因或者是其他的 Unix 系統中,由於 crontab 是讀到記憶體當中的,所以在你修改完 /etc/crontab 之後,可能並不會馬上執行, 這個時候請重新啟動 crond 這個服務吧!『/etc/init.d/crond restart』。


* syntax:
#crontab [-u username] [-l|-e|-r]

/*
選項與參數:
-u : 只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab 工作排程;
-e : 編輯 crontab 的工作內容
-l  : 查閱 crontab 的工作內容
-r : 移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯。
*/


[Note]
  • 如果只是要刪除某個 crontab 的工作項目,那麼請使用 crontab -e 來重新編輯即可!』如果使用 -r 的參數,是會將所有的 crontab 資料內容都刪掉的。
  • 使用者可以用 crontab -e 指令來編寫需要做的工作或者將要執行的工作,或寫在一個 file 裡,再執行 crontab filename 就可以了。
  • 注意必須使用 絕對路徑。

ex:
// 此時會進入 vi 的編輯畫面讓您編輯工作,然後以一個工作一行來編輯,
// 編輯完畢之後輸入『 :wq 』儲存後離開 vi 就可以了。
#crontab -e


* 每項工作 (每行) 的格式都是具有六個欄位,如下:
(minute) (hour) (day of month) (month) (day of week) (job)

* 每欄位可填入的值如下:

  • minute: 0-59
  • hour: 0-23
  • day of month: 1-31
  • month: 1-12 (or names, see below)
  • day of week: 0-7 (0 or 7 is Sun, or use names),週的數字為 0 或 7 時,都代表『星期天』的意思。


ex:
# 每小時的 5,15,25,35,45,55 分
5,15,25,35,45,55 * * * * (job)

# 每個小時 10 分
1 * * * *  (job)

 # 每天早上三點整
0 3 * * * (job)

# 每個月一號早上 3:50
50 3 1 * * (job)

# 每週日早上 4:30
30 4 * * 0 (job)

# 每週六早上 5:30
30 5 * * 6 (job)



* 特殊符號
  • 星號(*)
    • 代表任何時刻都接受。
    • ex: 0 12 * * * (job)
      • 日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思。
  • 逗號(,)
    • 代表分隔時段的意思。
    • ex: 0 3,6 * * * command
      • 要下達的工作是 3:00 與 6:00,第二欄是 3,6 ,代表 3 與 6 都適用 。
  • 減號(-)
    • 代表一段時間範圍內。
    • ex: 20 8-12 * * * command
      • 8 點到 12 點之間的每小時的 20 分都進行一項工作,第二欄變成 8-12 ,代表 8,9,10,11,12 都適用的意思。
  • 斜線(/n)
    • n 代表數字,亦即是『每隔 n 單位間隔』。
    • ex: */5 * * * * command
      • 每五分鐘進行一次,也可以寫成 0-59/5 ,相同意思。


[Note]
週與日月不可同時並存,
30 12 11 9 5 root echo "just test" <==這是錯誤的寫法


* 進行登錄檔的輪替 (log rotate):
  • Linux 會主動的將系統所發生的各種資訊都記錄下來,這就是登錄檔。 
  • 由於系統會一直記錄登錄資訊,所以登錄檔將會越來越大。
  • 我們知道大型檔案不但佔容量還會造成讀寫效能的困擾, 因此適時的將登錄檔資料挪一挪,讓舊的資料與新的資料分別存放,則比較可以有效的記錄登錄資訊。這就是 log rotate 的任務!這也是系統必要的例行任務。



* Reference
- 鳥哥的 Linux 私房菜 -- 例行性工作排程的建立 ***
- Crontab 的寫法(@reboot, @yearly...) | Tsung's Blog
- crontab 使用格式說明 **

2011年9月12日 星期一

[maven] build command

  • mvn [clean] package
  • mvn -o [clean] package
    • Offline Build.
  • mvn -Dbuild.stage=staging clean package
  • mvn -Dmaven.test.skip=false package
    • enable the unit testing.
  • mvn -Dmaven.test.skip=false test
    • testing only.
  • mvn -Dmaven.test.skip=true -Dbuild.stage=staging clean package

2011年8月13日 星期六

2011年4月10日 星期日

2011年2月12日 星期六

DOS 指令

* 切換目錄:
# cd \d {directory path}

* 列出目錄下檔案, 找檔案
# dir {directory path}
# dir/w: 橫列結果
# dir/p: 分頁結果
# dir/a: 列出所有檔案
# dir/s {file name}: 在此路徑下尋找此檔案

* 建立資料夾
# md {folder name}

* 移除資料夾
# rd {folder name}



* Reference:

DOS基本指令

2011年1月23日 星期日

[Linux] 以 iptables 架設 SME 防火牆

由於 Internet 的普及和連接的成本下降, 很多企業都已經把辦公室網絡接上 Internet 去了。 而當各企業正享受著 Internet 所帶來的商機和方便的同時, 亦為企業本身帶來各種的危機。 從一些貪玩小孩的入侵, 到大規模的網蟲 (NetWorm) 爆發。 企業的系統無時無刻面對著各種挑戰。 一但系統被入侵, 所損失的往往多於能從 Internet 中所得到的。 所以我們必需要有一個防禦的機制來保護企業內的資料和財產, 免受外來的種種攻擊。 而當中最為普及的技術便是『防火牆』(Firewall)。
什麼是防火牆
『防火牆』只是一個統稱, 或者可以說是一個概念。 其實, 任何一種能成功防止外來入侵的網絡裝置或軟件, 都可以稱為『防火牆』。
從網絡保安而言, 防火牆通常會用作內部網絡對外連接的唯一通道。 如此一來, 防火牆便成為了一個網絡關卡, 所有進出內部網絡的交通都必先經過防火牆的檢查和過濾, 防止入侵者接近內部的資源。
而防火牆是根據網絡管理員預先定下的規則 (Rules) 來過濾網絡交通。 而這些規則便是整個防火牆的靈魂、內部網絡的守衛。 在制定這些規則時, 大都是圍繞著以下幾個範籌而定:
* 誰〔不〕能進出網絡
* 什麼〔不〕可以進出網絡
* 資料〔不〕可以傳到那裡去
* 用什麼方法才〔不〕可進出網絡

防火牆的種類
現時所流行的防火牆大致可分為以下兩類:
1 封包過濾 (Packet Filters)
封包過濾是透過檢測網絡封包的標頭 (Header) 資料是否符合管理員所定下的規則, 而決定是否讓其通過。 這些標頭資料包括了:
* 來源/目的地的位址 (Address)
* 來源/目的地的通訊埠 (Port)
* 通訊協定 (Protocol)
使用封包過濾的好處是其系統和應用程式中立性 (Operating Sytem & Application-neutral), 對於在內部網絡的客端程式不須作任可更改便可提供保謢。 而本文將會介紹的 防火牆亦是封包過濾式的。
2 應用層閘道 (Application Gateway)
應用層閘道式的防火牆, 主要是在客端和伺服器之間加上『代理伺服器』(Proxy Server) 而達成。 如此一來, 網絡間的連線得變成兩個部驟: 首先是客端和代理伺服器連線, 然後經過過濾後才由代理伺服器和真實的伺服器連線。
但是使用應用層閘道式的防火牆, 往往須要更改客端程式的設定來佩合。 這對於一般的用家 (End-user) 來說, 並不如封包過濾般方便。
Linux 與 封包過濾
Linux 核心自版本 1.1 開始已提供了封包過濾的功能。 到了現時的 2.4 版本內建的 Netfilter 模組, 功能更臻完善。 這個模組利用了一致被資訊保安界好評的 『狀態性』(Stateful) 機制, 記下各網絡連線的狀態並檢查往後的封包是否屬於同一連線。 狀態性機制能使防火牆能過濾一些以往不能偵測的連線狀態, 加強了內部網絡安全。

iptables
Netfilter 是在 Linux 核心 (Kernel) 的模組, 我們不能和它直接溝通。 它只會依著管理員定下的規則, 對封包進行檢測。 至於把怎樣才能把規則告知 Netfilter, 就得靠一個名為 iptables 的用戶端的程式。
要把 iptables 運用得當, 就先要理解 Netfilter 處理封包的機制。
之前提及過防火牆是透過一系列的規則而建成, 而每個規則都包含了一個對封包的描述 (Match) 和 一個處置動作 (Target)。 每當封包符合規則中的描述時, 核心便會對封包進行相應的處置動作。 而在 Netfilter 的角度中, 這些規則是記錄在不同的鏈 (Chain) 中, 而鏈又會被歸納到不同的規則表 (Table) 中。
封包會根據它在核心中不同的層次和狀態, 被送到一個或多個規則表和鏈中, 並和當中的每個規則作對比並執行相應的動作。 iptables 的功用就是讓管理員管理各個規則表和鏈中的規則。

核心中的規則表
在核心中有三個規則表:

filter
這個規則表是最常用的規則表, 也是 iptables 的預設的規則表。 所有對封包進行過濾的規則都是加進這個規則表的鏈中。 這個規則表中有三個預設的鏈, 分別是: INPUT (給目的地是本機的封包), FORWORD (給途經本機的封包), OUTPUT (給由本機所發出的封包)
nat
這個規則表主要是給予系統 網路位址轉換 (Network Address Translation) 的功能。顧名思義, 網路位址轉換就是把封包標頭的位址和通訊埠的資料更改。 這個功能主要的用處是:
Internet 連線分享。 即使只得一個可用的 Internet 位址, 也可把整個內部網絡的電腦接上 Internet。
隱蔽內部網絡的存在。 縱然有足夠的 Internet 位址可用, 但基於保安的理由我們有時會不希望其他人知到企業內部網絡的存在。 運用網路位址轉換就可把所有內部網絡對外的通訊轉換成看似是同一位址所發出的封包一樣。
服務轉向 (Forwording )。 當有伺服器置於防火牆後, 但又須要對外提供時, 便可以把目的地位址是防火牆的封包轉向到真實的伺服器。這個規則表中有三個預設的鏈, 分別是: PREROUTING (給所有進入本機而未經路由處理 (Routing Decision)的封包), POSTROUTING (給所有經過路由處理而目的地不是本機的封包), OUTPUT (給由本機所發出的封包)

mangle
這個規則表用來更改封包的一些屬性 (Properties), 這個規則表中有四個預設的鏈, 分別是: PREROUTEING, INPUT, FORWARD , OUTPUT 和 POSTROUTING。

Iptables 的基本語法
iptables -t Table -Operation Chain Match -j Target
Table 是所用的是個規則表
Chain 指明是用規則表中的哪一個鏈
Operation 是對鏈中的規則所進行的動作, 例如:增加,移除,清空 等
Match 是一個對封包的描述, 例如:來源地址及通訊埠
Target 是處置動作, 例如:ACCEPT, DROP, LOG等

常用的描述語法
語法 用途 
-p [!] protocol 指定所針對的通訊協定, 例如:tcp, udp, icmp 
-s [!] address[/mask] 指定所針對的來源位址。 這可以是一個IP位址, 主機名稱, 或加上網絡遮罩以表示一群 IP 位址。 
-d [!] address[/mask] 指定所針對的目的地位址。 這可以是一個IP位址, 主機名稱, 或加上網絡遮罩以表示一群IP位址。 
-i [!] name 指定從那個網絡介面進入的封包。 例如:eth0, ppp0 
-o [!] name 指定從那個網絡介面送出的封包。 例如:eth0, ppp0 
--sport [!] port[:port] 指定來源通訊埠。 這可以指明是那一個或那一組埠 
--dport [!] port[:port] 指定目的地通訊埠。 這可以指明是那一個或那一組埠 
[!] --syn 只限 TCP 協定所用, 這指定封包須為 TCP 連線要求封包

防火牆架設範例
有了基本的認識後, 我們便開始架設防火牆。 我們假設企業A 有一個 Internet 連線和足夠的合法 Internet 位址給所有電腦使用。 而企業A 只希望員工使用 WWW 和 FTP。
我們可以跟著以下的步驟制作一個 Shell Script, 來架設防火牆。
設定網絡參數和載入相關的核心模組
$INTERNAL_NET=X.X.X.X/24 # Local LAN Subnet
$INTERNAL_NIC=eth0 # Local LAN interface
$EXTERNAL_NET=Y.Y.Y.Y/8 # Internet Subnet
$EXTERNAL_NIC=eth1 # Internet interface
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ipt_state

清除現有的規則
-F 動作會清除所指定的鏈中的所有規則, 如果沒有指明鏈則規則表中所有的鏈都會被清空。
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
-X 動作會移除指定規則表中所有由用者增加的鏈
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X

設定預設政策
-P 動作會設定所指定的鏈的預設政策。 當一個封包進入鏈後, 但沒有規則能符合這個封包的資料和狀態時, 核心會以鏈的預設政策去處理該個封包。
每一個良好的防火牆的預設政策都應設為 DROP。 正所謂寧枉無縱, 預設拒絕所有封包, 然後才讓真正有用封包通過。 能使防火牆更為堅固。
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P OUTPUT DROP
/sbin/iptables -t filter -P FORWARD DROP

不回應 ICMP 封包
如要查看一部主機是否在線, 最簡單的方法是使用 ping 指令。 如果不想被 ping, 可以設定 Netfilter 不回應 ICMP 封包
/sbin/iptables -t filter -A INPUT -p icmp --icmp-type echo-requested -j DROP
/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
/sbin/iptables -t filter -A FORWARD -p icmp --icmp-type echo-requested -j DROP
/sbin/iptables -t filter -A FORWARD -p icmp --icmp-type echo-reply -j DROP

防止 IP Spoofing
IP Spoofing 是把外來的封包假裝成是內部網絡所發出的, 試途讓防火牆誤認而允許其進入內部網絡。 而要防止 IP Spoofing, 我們只須要過濾那些從 Internet 進入而聲稱來源地址是內部網絡的封包便可。
/sbin/iptables -t filter -A INPUT -i $EXTERNAL_NIC -s $INTERNAL_NET -j DROP
/sbin/iptables -t filter -A FORWARD -i $EXTERNAL_NIC -s $INTERNAL_NET -j DROP

防止網絡掃描
網絡掃描是利用一些不正常而又合法的封包去檢測伺服器所提供的服務和取得一些系統資訊。 亦有入侵者用這些封包企途繞過防火牆去入侵內部網絡, 所以必需過濾。
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

允許內部網絡使用者瀏覽 Internet 網頁
要允許瀏覽 Internet 網頁, 我們須要允許封包從內部網絡傳送到 Web Server 去, 並同時要允許封包從 Web Server返回內部網絡。
/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 80 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 443 -j ACCEPT
要允許封包從 Web Server返回內部網絡, 有兩個方法設定。 其一是利用狀態性機制去自動判斷相關的封包:
/sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
其次是加上相應的規則:
/sbin/iptables -t filter -A FORWARD -p tcp -d $INTERNAL_NET -s 0/0 --sport 80 ! --syn -j ACCEPT
/sbin/iptables -t filter -A FORWARD -p tcp -d $INTERNAL_NET -s 0/0 --sport 443 ! --syn -j ACCEPT
利用狀態性機制去自動判斷的好處是, 只須設定一次就能和其他規則分享使用 (象以下的 DNS 和 FTP), 能減少規則的數量,方便管理。

允許內部網絡查詢 DNS
DNS 是主機名稱和 IP 位址互換的服務, 如果過濾了 DNS 查詢, 用戶便不能用主機名稱 (如:http://www.linuxpilot.net ) 來瀏覽網頁, 而是要直接用 IP 位址 (如:http://203.194.196.187)。
/sbin/iptables -t filter -A FORWARD -p udp -s $INTERNAL_NET -d 0/0 --dport 53 -j ACCEPT
如果已有固定的 DNS 伺服器, 可以以下規則去限制只可以查詢指定的 DNS 伺服器:
$DNSSRV=202.181.230.106 # IP Address of the DNS Server
/sbin/iptables -t filter -A FORWARD -p udp -s $INTERNAL_NET -d $DNSSRV --dport 53 -j ACCEPT

允許內部網絡使用者使用 FTP
大部份的 Internet 服務的設定基本上和之前的大同小異, 讀者可以嚐試自行設定。 但可惜的是 FTP 不只用一個通訊埠來進行資料傳送, 而是要用兩個。 更甚的是其中一個通訊埠是次次不同的, 根本不可能預先在防火牆中設定。
有幸的是 Netfilter 所提供的狀態性機制能解決這個問題。 由於 FTP 的第二個通訊埠的連線, 是透過在埠21已建立的連線來建立, 所以可以利用狀態性機制去允許所有由已建立的連線所衍生出來的連線。
/sbin/iptables -t filter -A FORWARD -p tcp -s $INTERNAL_NET -d 0/0 --dport 21 -j ACCEPT

允許管理員以 SSH 連線到防火牆修改設定
最後, 開設一個通道給管理員以 SSH 連線到防火牆修改設定。 不然的話, 每當有設定要修改時, 管理員便要親身登入防火牆修改了。
/sbin/iptables -t filter -A INPUT -i $INTERNAL_NIC -s $INTERNAL_NET --dport 22 -j ACCEPT

最後的步驟
當設計好所有的規則和相應的 Script 後, 把所有的 Script 集合起來製成一個 Shell Script, 然後於 /etc/rc.d/rc.local 中加入執行該 Script 的命令。 這樣每次系統啟動時便會自動啟動防火牆。

Internet 連線分享
雖然以上的防火牆是基於有足夠的合法位址而設計, 但只須多加一規則便可以讓內部網絡以一個合法位址分享Internet 連線。
如果獲得一個固定的合法位址, 可以用:
$FIREWALL_IP=y.y.y.z # IP Address that can connect to Internet
/sbin/iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -s $INTERNAL_NET -j SNAT –to $FIREWALL_IP
如果位址是動態分佩的話, 則用:
/sbin/iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -s $INTERNAL_NET -j MASQUERADE
其實以上兩個規則,都是叫核心把由內部網絡所發出的封包內的來源位址, 先轉成防火牆的合法位址再送出 Internet。 只不過用 MASQUERADE 方法時, 因為要顧及動態位址分佩, 所以會比 SNAT 多用一點 CPU 資源。

總結
Linux 加上 Netfilter 的強大功能, 給予中小企一個低成本的防火牆的解決方案。 以保障企業的資源。 以上的範例雖已包含了一般防火牆的功能, 但單靠 Netfilter 是未能杜絕所有的入侵 (例如: 電郵病毒)的。 所以系統管理員仍是要綜合各種網絡保安的工具一起, 發揮最大的效能。
作者Isaac Chau
原文在 LinuxPilot 第 15 期刊登

[Linux] DNS

.在網路管理與設定中最常使用:-- netstat: 主要用於網路運作狀態監視
-- 
ifconfig: 用於網路界面的設定與管理

.網路卡名稱,此一”名稱”與網路卡廠牌無關,而是與UNIX的種類有關。

.在linux下第一張乙太網路卡名稱為eth0(Solaris 為be0,Ultrix為le0),loopback網路介面名稱則為lo。

.指令”netstat –in” 告訴你系統目前存在(偵測到)網路介面的名稱。 
.ifconfig  if_name  inet  x.x.x.x  netmask  a.b.c.d  broadcast  e.f.g.h
-- 使用ifdown停用網路介面, 用ifup啟用網路界面。


.UNIX
作業系統透過TCP/IP網路對外連線時,routing table選擇路徑的依據,正確的routing 設定方能確保機器能上網。
-- 指令格式: route add–net target_net
  gw gateway

-- 如果你想使用Naming service,你必須正確的指定Domain Name Server

-- Linux中指定Domain Name Server的步驟相當簡單,你只需編輯/etc/resolv.conf這個組態檔案即可,並將更改過的檔案內容存檔,所設定之內容即立刻生效,無須重新開機。
-- 
/etc/hosts是另一個可自行設定IP Address與hostname對應的檔案,你可以在此定義local host 與一些重要電腦的名稱。 

.ping – 
測試網路上某台機器是否在線上,是否開機,或是否可以跟你的機器連線
netstat - 查看網路狀態有些套件﹐會將所有的網路設定寫在 /etc/rc.d/rc.inet1 和 /etc/rc.d/rc.inet2 這兩個檔案裡面。

.而 RedHat 的產品中設定多集中在 
/etc/sysconfig 目錄中。

.168.95.192.1 是中華電信的DNS主機,如果你是使用HINET網路的話,通常都會設定168.95.1.1  跟 168.95.192.1 兩台DNS伺服器,這個設定是正常上網必備的。 

.Reference: 1

[Linux] 打包/壓縮

.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(註:tar是打包,不是壓縮!)
---------------------------------------------
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName.tar.gz

解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
---------------------------------------------
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName.tar.bz2

解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
---------------------------------------------
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知.tar.bz

解壓:tar jxvf FileName.tar.bz
壓縮:未知
---------------------------------------------
.Z
解壓:uncompress FileName.Z
壓縮:compress FileName.tar.Z

解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
---------------------------------------------
.tgz
解壓:tar zxvf FileName.tgz
壓縮:未知.tar.tgz

解壓:tar zxvf FileName.tar.tgz
壓縮:tar zcvf FileName.tar.tgz FileName
---------------------------------------------
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
---------------------------------------------
.rar
解壓:rar a FileName.rar
壓縮:r ar e FileName.rar



文章出處:
http://www.21ds.net/article/31/369

常用指令

在Linux中最常使用到的指令,和最常用到的參數。

※ ls 列出目錄
  • -a 連隱藏檔都列出
  • -l 列出詳細資訊
  • -d 只顯示目錄訊息而非目錄下的檔案
  • -R 遞迴列出檔案及子目錄其下的所有子目錄和檔案


※ pwd 顯示使用者目前的目錄
  • -p 則將結徑目錄顯示出來 (專門用在連結目錄)


※ mkdir 建立目錄
  • -m 直接設定目錄屬性 (mkdir -m 700 test)
  • -p 建立目錄中的子目錄 (mkdir -p test1/test2)


※ mv 移動檔案或改檔名
  • -f 強制移動
  • -i 已存在目的檔,會詢問是否over wirte 


※ cp 檔案複製
  • -i 若已存在則會詢問要否over write
  • -f 強制複製或取代
  • -a 完全複裂含使用人,屬性一樣的複制過來 (用在root)
  • -r 用於目錄copy (重要)
  • -d 若來源檔為連結檔的屬性,則複製連結檔而非檔案本身
  • -s 複製成符號連結檔
  • -l 複製成硬式連結檔


※ rm 移除檔案
  • -f 強制移除
  • -r 用於移除目錄
  • -i 會詢問使用者是否真的要移除


※ cat 看檔
  • -n 印出行號
  • -A 可列出一些特殊字元


※ more 分頁顯示檔案內容
  • enter 下翻一行
  • space 下翻一頁
  • :f 顯示目前行數和檔名
  • q 離開
  • / 尋找字串
  • n 符合字串下一筆
  • N 反向尋找符合字串下一筆


※ less 分頁顯示檔案內容 (可上翻)
  • enter 下翻一行 
  • space 下翻一頁
  • page up 上翻一頁
  • page down 下翻一頁
  • q 離開
  • / 尋找字串
  • n 符合字串下一筆
  • N 反向尋找符合字串下一筆


※ chmod, chown 改變檔案屬性, 改變檔案所有人
  • -R 連同子目錄都更新為同屬性

※  file 顯示某個檔案的基本資料
※ which 尋找某指令在那裡 (依所脫定的環境path去找)
※ whereis 尋找某指令
  • -b 只找binary檔
  • -m 只找man檔
  • -s 只找source檔
  • -u 找沒有說明的文件


※ locate 尋找檔案 (找資料庫)
  • 使用前先updatedb


※ find 尋找檔案 (找檔案系統)
  • -name 尋找檔名
  • ex: find / -name test1.c


※ df 檢查磁碟使用量
  • -a 列出所有使用量
  • -h 容量以k, m, g顯示
  • -T 連fs name都顯示出來
  • -i 使用掉的i-node數量


※ du 檢查資料夾用量
  • -a 列出目錄下所有子目錄檔案的所有用量
  • -h 容量以k, m, g顯示
  • -s 只顯示目錄總量 (和-a不能共用)


※ ln 製做符號連結和硬式連結
  • -s 符號連結
  • -f 目標檔有在的話移除再建立
  • 不加參數則是建立硬式連結
  • ex: ln -s test s_test


※ gzip 建立gun zip壓縮檔 (只能對單一檔案)
  • -c 壓縮後輸出到銀目,配合資料流重導向
  • -d 解壓縮
  • -t 檢查有沒有錯誤
  • -1~9 壓縮比
  • ex:(壓) gzip test
  • ex:(解) gzip -d test


※ tar   打包加壓縮 (重要)
  • -j 使用bzip壓縮
  • -z 使用gzip壓縮
  • -c 建立打包
  • -x 解開打
  • -v 看檔案打包過程
  • -f 輸出檔案的檔名
  • -p 包留原來屬性
  • ex:(包) tar -zcvf test.tar.gz test/
  • ex:(解) tar -zxvf test.tar.gz



。各式查詢功能

  • man 瀏覽參考手冊,查看指令用法與說明。
  • info 也是瀏覽手冊GNU模式,從沒用過這個指令,用man足矣。
  • whatis 顯示某個指令的極簡短(單行)功能描述。
  • whoami 目前的使用者名稱,命令輸入提示字元的前面,不見得要會有使用者名稱,這時就會有用了。
  • who 目前線上的使用者,顯示使用終端機的使用者。
  • pwd 當前工作目錄。
  • file 關於檔案的資訊與類型,不是用副檔名判斷,而是會進行內容解析。
  • type 關於某個指令的位置。你還可以試著鍵入type type,會發現一點有趣的事情,選項-p會使。

。檔案與資料夾操作
  • ls 列出目錄的檔案。ls -al是列出所有的檔案與其屬性,包括隱藏檔(.開頭的檔案)。
  • cd 進入某個資料夾。..是指上一個資料夾。.是指目前的資料夾。-是指上一個工作的資料夾。~是指家目錄資料夾。
  • mv 移動檔案與資料夾。往往拿來當做"重新命名"使用。因為rename與想像的用法不相同,試著使用whatis rename或man rename。
  • cp 複製檔案與資料夾。
  • rm 刪除檔案。選項-r,可以刪除資料夾與子資料夾。選項-f,不顯示提示強制刪除。-rf合起來很威,但是下錯指令可能刪除所有的檔案系統。
  • touch 建立一個空的檔案。
  • rmdir 刪除資料夾。
  • mkdir 建立資料夾。
  • find -name 實際尋找檔案或資料夾,可以尋到新的檔案,但是速度較慢。
  • locate -d 從資料庫(?)尋找檔案,速度較快但是新的檔案不會在裡面。

使用者與檔案權限操作
  • chmod 改變檔案的屬性,可以用8進位數字,EX:777、644,或是+-rxw,來設定權限,我個人常用的是+x與-x,因為程式要執行時需要x屬性,也就是executable,和Windows用副檔名.exe判斷不一樣。
  • chown 改變檔案的擁有者。改擁有者的時候可順便改群組,EX:chown root:root filename,群組與使用者都改成root。
  • chgrp 改變檔案的群組,我都用上面的chown指令多。


From  http://justfor1221.pixnet.net/blog/post/7121794       和網路上資料