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

2013年1月27日

screen與nohup原理

nohup是可以把一些類似抓取ftp image的指令在關掉ssh client後繼續執行的程式,而screen則是更強大的管理工具,當然一般管理員跟使用者根本不需要知道系統的作業原理,但是營養一下也無所謂,不是嗎
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

2013年1月25日

不可信的free指令!?

我之前就對於free與gnome的記憶體統計有出入感到疑惑??然則一直沒有去追究,最近稍微有點了解到了,其實free是統計各個process間的user space的空間大小,然則linux並不會完整配置實體記憶體給他,有時process申請的heap space也不會一下子釋放,所以導致兩者有出入,換句話說,free指令統計出來的記憶體空間,跟實際的使用空間很有出入

每個process都有各自4G的virtual memory,然則有使用到才會配置,最常動態配置的便是heap,而process會自行管理heap,當申請的時候便在剩下的heap space挖出一塊空間配置給程式,程式歸還的時候process未必馬上抹除,他會先留下來如果短期內程式又有要求,就可以直接給出
更有甚者是,process heap是對kernel做請求,kernel還拖到真的使用到的時候,才將physical memory置給process,不然process heap配置的再多,也只是在virtual space上面

所以啦,加總所有process使用到的空間,未必等於真的physical memory的消耗,也就是說,free指令的結果,看看就好啦:P

參考資料:
http://hi.baidu.com/zzcqh/item/fa4f8eaa410e70736cd4551e
http://www.perfgeeks.com/?p=723

2013年1月23日

IO redirection and pipline

Q1.1:cat file >file
Q1.2:cat file
Q1.3:cat >file


A1.1:命令報錯(cat: file: input file is output file),file變成空的
A1.2:命令成功運行($?=0),但是file變成空的
A1.3:無限loop! file的內容被無限循環的輸出到file本身


這三個問題,貌似好像沒啥了不起,可是仔細看好像不大對勁,首先file真的是指同一個file,一般來說,一般人不會把輸入跟輸出設定成一樣

cat < file就已經算是少人會使用的了,man cat,得到開頭


DESCRIPTION
       Concatenate FILE(s), or standard input, to standard output.

簡單的說,就是接受檔案或者stdin都可以,然後輸出到stdout,直白

那為何file會變成空的?內容都不見了!?
Q1.1 因為cat偵測到這件事情,所以直接跳出,當然輸出是空白(用echo $?檢查)
Q1.2 答案或許出乎意料的簡單,shell通常先處理output,再來處理input  :)~ 所以讀入空白,放到file,跟著讀進空白檔案
Q1.3 因為輸出後再讀入

小小一個簡單的IO redirection就可以把人搞死orz,雖然說好像沒有很重要,但是惡魔往往藏在細節內

2012年3月17日

bash shell script兩三事 (3)

$ operator的三種擴展模式
${variable_name}
$(command)
$((expression))

字串操作
${variable:start_position}
${variable:start:length}
${#variable}字串長度

算術運算
$((expression))
expr expression
$[expression]
declear -i var=expression
let expression

r=$((2+3))
r=`expr 3+2`
r=$[4+5]
declare -i r=5*5
let i=5+5

條件判斷
if test1; then
  statements
elif test2; then
  statements
...
else
  statements
fi
測試條件仿照c的邏輯,非null/0為真
if [-d /root/tmp]; then
  echo '/root/temp directory exists!'
else
  echo "/root/temp directory doesn't exist!"

2012年3月13日

linux所支援的檔案系統

使用
cat /proc/filesystems
就會列出支援的檔案類型,尤其在 嵌入式 系統,這應該特別有用,因為嵌入式常會因為占用記憶體空間的關係取消某些檔案類型的支援

2012年3月8日

使用wpa_supplicant指令上網

看名稱WPA請求(supplicant)似乎適合呼邏輯,雖然個人認為不大直覺
首先確定ifconfig wlan0 up有起來(用ifconfig確定即可)
wpa_passphrase essid password>wpa.conf
這裡是將essid跟password填寫入一個設定檔案,因為編碼過後的密碼長度不是一般人背得下來的(如果有本事背出超過30個字元的人應該可以不必XD)
wpa_supplicant -BDwext -iwlan0 -cwpa.conf
-BD表示driver的type,一般使用wext (linux wireless extension)就可以了-c後面接著設定檔案的參數
dhclient wlan0
一般就是執行DHCP的client端獲取IP

另外如果喜歡互動是的介面有wpa_cli直接用一些指令的方式來溝通

P.S.如果不知道essid,可以用iwlist wlan0 scanning,他會列出附近少描到的AP ID
參考資料:
http://zh.wikipedia.org/wiki/WPA
http://en.wikipedia.org/wiki/Wpa_supplicant
http://hostap.epitest.fi/wpa_supplicant/
http://www.joecen.com/2007/10/26/linux-wireless-setting/
http://mysuperbaby.iteye.com/blog/1405729
http://ninitsai0206.blogspot.com/2010/11/using-wpacli-setting-wifi.html

bash shell script兩三事 (2)

bash shell變數就是
varName=value
如果沒有特別指出,一律default為string,也就是說
varNum=1這裡會變成字串1而非數字1
提取的變數value的方式有兩種
$varName跟${varName}
字串建議使用" "或者' '包起來,兩者不一樣是前者會做變數替換,後者不會,比方說
varName="jacky"
str1="Hi! $varName"
str2='Hi! $varName'
其中str1會顯示Hi! jacky!,而str2則保持原來的樣子
printf則是類似C的使用方式,不一樣的是,printf會幫字串中特殊字元加上跳脫符號(\)
shopt -s -o nounset
表示必須在使用前必須有assign value的動作,可以避免寫錯變數
unset varName
則可以刪除變數,而
varName=
則可以刪除環境變數

變數可以輸出為環境變數,只用
export varName
其中有兩個特別的環境變數為LOGNAMEUSER,LOGNAME指的是登入時後的名稱,USER是只現在身分的名稱,假如你已jacky這個一般ID登入,然後使用su變成super user,這時候LOGNAME為jakcy,USER為root。因為LOGNAME的關係,你所使用的PATH還是jacky的,並不包含/sbin下的指令,所以在使用一些指令的時候會遭遇command not found的問題,只要用
su -
加上一個減號,就可以讓LOGNAME也改成root了

一些特殊的變數
$1~$9,表示shell command後面的參數,如果超過第十個開始要使用${10}這樣的形式
$*表示所有參數所形成的字串
$@表示將參數以振烈表示
$#表示參數的個數
$$表示執行該shell command的PID

readonly可以用來宣告唯讀變數
readonly varName
readonly -a arrayName
第一個宣告一變數為唯讀,第二個宣告唯讀陣列

decleare指令可以調整以及顯示變數的屬性
變成唯讀
declare -r varName
宣告陣列
declare -a varName
宣告為整數型態
declare -i varName
宣告為環境變數
declare -x PATH
顯示函數及其屬性
declare -F
顯示變數屬性
declare -p varName


幾個重要的檔案
使用者個人設定
~/.bash_profile,登入時候執行的shell script
~/.bashrc,執行一個新的shell script之前執行
~/.bash_logout,登出的時候執行
系統管理者維護設定
/etc/profile,一些預設的設定,對全體user有效,通常有umask、PATH、LC_*等等設定
/etc/bash.bashrc,一份全域性的profile
/etc/skel下的檔案,使用者帳號建立的時候依照這裡組裝出.bash_profile與.bashrc

2012年2月22日

tty下的游標(cursor)

選定tty,下面的指令
echo -n -e '\e[?17;14;119c'
游標將變成一個長方形的區塊
echo -n -e '\e[?17;14;24c'
使得游標消失
參考資訊:
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html

2012年2月21日

遠端拍照的小工具

一直在找一個可以遠端使用command line就可以把網頁抓下的方式,其實有些方法,不過遇到一些困難,網路上大有其他GUI方式,可是都不是我要的
GUI的方式可以參考這裡
http://www.binarytides.com/blog/take-webpage-screenshot-from-command-line-in-ubuntu-linux/
command line本來打算用khtml2png,看似最簡單,很可惜ubuntu下找不到,無法測試
跟著這裡有只用firefox的shell script,但是要用到vncserver
http://stackoverflow.com/questions/125951/command-line-program-to-create-website-screenshots-on-linux
我執行的時候怎樣都遇到.Xresources找不到的問題,印象中ubuntu好像改了很多X-win的設定,我也不知道怎樣recover這些設定檔了
最後的解決方案
這是cutycapt裁剪網頁的工具,編譯完畢丟到/usr/bin下就是了,其實跟khtml2png一樣的引擎,可問提示沒有xserver無法執行
http://cutycapt.sourceforge.net/
沒關係,還有xvfb-run可以幫忙,安裝一下xvfb套件
xvfb-run --server-args="-screen 0, 1024x768x24" CutyCapt --url=http://www.kimo.com --out=slide.png
結果還不壞,css大多保留了,不過flash


參考資料
http://ddbean.wordpress.com/category/linux/
http://www.binarytides.com/blog/take-webpage-screenshot-from-command-line-in-ubuntu-linux/

最後順便有個爬到的轉檔案指令,可以將pdf轉乘png
convert -size 640x300 fileName.pdf slide.png

2012年2月7日

剔除使用者

刪除某個pesudo tty
pkill -kill -t pts/1

2009年11月17日

process(程序)管理(3)

job control,何謂job,其實好像沒有太嚴格的定義XD,我一般把他當作process的同義詞,或者說一串執行的指令(就不只一個process了),比方說使用awk把/etc/passwd的前一個欄位抓出來並且排序,這樣是一件工作,但是至少就要有awk跟sort兩個processes
如果今天再執行一個要很長執行時間的工作,這時候又有一個比較重要的工作要做的時候,需要先把這個工作放到背景暫停起來,執行優先的動作。比方說你正在備份資料,可是老闆說要看今天的報表,那你只好先把備份的工作站停,然後先去弄報表。只要一個簡單的ctrl+z就可以把目前的工作變成暫停(stopped)的狀態放到背景去
另外一種狀況可能是你再執行一個很長的時間的搜尋,你總不希望他一直佔用的console畫面,讓你不能執行一些其他的工作,linux可是一個多工的作業系統,其實很簡單,只要在指令最後加上&就可以了,這時候工作並不會停止,他會在背景執行(running)
但是如果你使用了上面的方式,你就看不到輸出了,怎麼知道目前我放了哪些工作在背景呢?linux提供了jobs指令,他會給每個工作一個編號,後面fg指令用的到
jobs -l
列出所有背景工作
jobs -r
列出所有背景執行中(&/running)的工作
jobs -s
列出所有暫停(ctrl+z/stopped)在背景的工作

知道了之後當然會想要把他們拿出來用,那怎麼辦呢?fg指令就是把目前在背景的工作帶到前面的指令使用fg %#,比方說fg %3,就是把編號3的工作拿到前景來
如果說想要讓背景的工作由暫停變成執行,但卻不要帶到前景,那可以用bg %#,比方說bg %2是個備份指令,就讓他繼續在背景執行吧

如果不幸這工作因為某些原因,出了問題,想要直接終止他怎麼辦呢?就使用之前的kill指令kill -signal %#,比方說kill -9 %3這樣

2009年11月13日

process(程序)管理(2)

ps (process status)指令可以找出process的靜態資訊,通常是因為系統有些問題我們才會使用ps XD,有問題的process該如何是好?絕大多數是kill他,所以linux就有個kill指令
kill指令藉由傳送signal來達到該功能,linux的signal有幾十個要記住也不容易,所以
kill -l
可以列出目前系統上面支援的signal,雖然說很多,但是常用的就是那幾個
kill pid #我要把pid刪除,pid請趕緊善後
kill -9 pid #SIGKILL,你應該要掛點了,趕緊歸還自己的資源
kill -15 pid #SIGTERM,直接要刪除了,你也不用有啥遺言XD
上面參數一個比一個強勢,愈後面的指令愈可能造成資料的損失跟系統的問題,有些daemon可能會不斷的重新啟動,如果你刪除之後發現有相同名稱卻是不同就是這現象
如果只是要重新載入process讓他重新設定,可以嘗試
kill -HUP pid
來強迫他重新啟動

linux提供一個動態的資源顯示的指令,稱為top,他會顯示相當多的資訊,比方說cpu使用量、記憶體使用量、使用者id、process id...等等,也會統計目前系統的cpu跟記憶體的總體消耗程度
按下P他會依照cpu排序
按下M依照memory使用量排序
按下T則依照執行時間排序
按下u再輸入使用者id,則列出該使用者的相關process資訊
按下k再輸入pid則可以刪除該使用者狀況

top事實上相當耗費資源,因為他要無時無刻的監視系統狀況,可以用
top -d 10
表示每十秒更新一次資訊來調節

2009年11月11日

使用者管理(2)

passwd這個指令不只可以用來設定密碼還可以用來刪除密碼,當
passwd -d user_id
的時候,此時這個user登入的時候,系統就不會要求他輸入密碼
另外也有一功能是鎖定(lock)密碼,比方說
passwd -l user_id
這個使用者就暫時無法登入,當然有上鎖就有解鎖(unlock)
passwd -u user_id
那麼如果忘記了這個帳號的密碼設定,到底是上鎖呢?還是刪除呢?還是怎樣?可使用
passwd -S user_id
他會列出目前該使用的密碼狀況

在Fedora上有提供可以建立大量帳號的工具newusers跟pwunconv,不過說實話,他們的用法真的跟直接去修改/etc/passwd這個檔案好沒多少,不如去網路上尋找可用的shell script,有一大堆

2009年11月9日

使用者管理(1)

使用useradd指令
useradd指令格式為
useradd [-u uid [-o]] [-g group] [-G group,...] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] name
useradd可以用來新增使用者,有兩個跟設定相關的檔案,分別是/etc/default/useradd/etc/login.defs
在useradd檔案內容可能像是
GROUP=100
HOME=/home
INACTIE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

如果光打username,則相關的設定由上面兩者讀入

刪除使用者使用userdel
userdel username #只有刪除帳號,但是目錄還是保留
userdel -r username #連帳號的相關目錄一起刪除

跟帳號相關的檔案還有/etc/passwd/etc/shadow/etc/group
/etc/passwd的格式為
Username:Passowrd:UID:GID:Comments:Home Directory:Shell
其中password欄位其實是假的,真的資料放在shadow裡面且該檔案經過加密,可是shadow只有root可以讀取。其中在Shell如果指向一個空的檔案,比方touch /bin/nologin,則使用者就沒有shell,無法登入
/etc/group
Groupname:Password:GID:Users
其中使用者如果超過一個可以用逗號(,)分隔

新增群組使用groupadd groupname,相對的刪除群組為groupdel groupname
root有權力可以用passwd username來設定使用者的密碼,同樣有gpasswd groupname來設定群組的密碼。

2009年11月5日

系統資訊(2)

其實大多的系統資訊可以透過/proc這個目錄拿到,有趣的是,如果你仔細看檔案大小,大多是0 bytes而且是read only。其實這個目錄的檔案大多是核心的介面,大多可以用cat指令讀取上圖示一個ls的結果,可以看到一堆帶有號碼的目錄,其實他們都是process id,代表每個process的資訊,其他則是望文生義(不過要有些電腦底子)
之前已經看過了cpuinfo跟meminfo了,這次來看一些IO devices
cat /proc/devices
可以列出兩大類的IO File,就是character跟block

cat /proc/interrupts
他會列出相關的IRQ

cat /proc/ioports
列出相關io port的adress跟name

2009年11月3日

程序(process)管理與檔案(lsof)

最常用來觀察系統process的指令就是ps跟top
ps aux
A表示所有process皆列出,a表示不與terminal有關的
u表示有效user

列表的caption大多可以望文生義,其中比較特別的有
VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)
RSS :該 process 佔用的固定的記憶體量 (Kbytes)
STAT:表示狀態,process狀態有底下列出的幾種
  • R (Running):該程式正在運作中;
  • S (Sleep):開程式目前正在睡眠狀態(idle),但可以被喚醒(signal)。
  • D :不可被喚醒的睡眠狀態,通常這支程式可能在等待 I/O 的情況(ex>列印)
  • T :停止狀態(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態;
  • Z (Zombie):殭屍狀態,程序已經終止但卻無法被移除至記憶體外。
pstree可以使用樹狀列表的方式顯示process,可以看到由哪些process生出了哪些process
top則列出目前系統執行的時候,各個process佔用的資源比例

在unix/linux底下幾乎可以把所有東西看成FILE/檔案,包含socket、device...等等,所以有個可以觀察開啟檔案的指令叫做lsof (list open file),其實資訊是由/proc來的,可以觀察非常多東西,不過也非常難整理(如果不加參數),使用lsof時建議使用root權限,不然可能因為權限問題看不到資料

lsof -u user_id
觀察使用者開啟的檔案
lsof +p procces#
觀察process#所開啟的檔案
lsof -i:#
-i跟:間沒有空白,觀察某個port number所開啟的檔案
lsof `which apache2`
觀察哪個process在使用apache2程式
lsof /dev/hda6
觀察哪個process佔用這個device

SUID, SGID, SBIT

set uid是為了特殊狀況設計出來的,比方說使用passwd這個程式修改密碼的時候
鳥哥簡單列出set uid的四個特色
  • SUID 權限僅對二進位程式(binary program)有效;
  • 執行者對於該程式需要具有 x 的可執行權限;
  • 本權限僅在執行該程式的過程中有效 (run-time);
  • 執行者將具有該程式擁有者 (owner) 的權限。

以其中的例子來說,一般人修改自己的密碼需要修改/etc/password這個檔案,可是一般的使用者並沒有權限修改這檔案
當root所有的檔案權限為rwxr_xr_x的時候,一般人可以執行,可是執行程式的權限全都是個人權限,也就是說當這個程式想要讀取某個檔案的時候,會先檢視該執行人是否有權讀取
當一個程式有set uid就表示,這個程式執行期間,不再以執行的使用者來看待,反而是以owner的權限來看待
所以passwd這程式權限rwsr_xr_x

有set uid,同樣就有set gid,有這權限的程式的特色為
  • SGID 對二進位程式有用;
  • 程式執行者對於該程式來說,需具備 x 的權限;
  • 執行者在執行的過程中將會獲得該程式群組的支援!
  • 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
  • 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
  • 用途:若使用者在此目錄下具有 w 的權限(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。

stick bit則是另外一種特色
  • 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
  • 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案

設定的代號為
  • 4 為 SUID
  • 2 為 SGID
  • 1 為 SBIT

要設定SUID
chmod 4755 => rwsr_xr_x
chmod 6755 => rwsr_sr_x
chmod 1755 => rwxr_xr_t
chmod 7666=> rwSrwSrwT
最後一個要特別注意的是,明明連owner都沒有權限了,怎麼會把這權限授予其他人呢?所以旗標為特別的符號

2009年11月1日

系統資訊(1)

在我古老的記憶中(blog裡面有)有個圖形工具叫做sysinfo可以取得系統的各項資訊,可是如果今天只有console呢?那就只有用指令的方式囉

uname -a
查看核心版本
cat /proc/cpuinfo
取得cpu資訊
cat /proc/meminfo
取得記憶體資訊
free -m
觀察記憶體使用狀況
lspci
取得介面卡上的資訊,從顯示卡啦、網路卡啦、USB都有

2009年10月29日

網路相關指令複習

ifconfig
ifconfig eth0 up
啟動eth0
ifconfig eth0 down
關閉eth0
ifconfig eth0 192.168.100.100 netmask 255.255.255.0 mtu 800
設定ip
ifconfig eth0:0 192.168.200.2
增加一個邏輯上的網路介面

/etc/init.d/network restart將使用系統內在/etc/sysconfig/network-scripts的設定來設定網路卡
ifup eth0跟ifdown eth0是做類似的事情,但是如果已經使用ifconfig更改設定後,ifdown會無效

route
route -n
顯示routing table
route add default gw 192.168.10.30
設定default gateway
route add -net 167.254.0.0 netmask 255.255.0.0 dev eth0
增加一個routing path
route del -net 169.24.0.0 netmask 255.255.255.0 dev eth0
刪除一個routing path

netstate
netstate -rn
顯示出routing table
netstate -utlnp
u表示udp,t表示tcp,l表示listen,n表示不要進行dns,p表示port number

ip指令
功能強大的一個指令,可以完全取代ifconfig跟route,不過便利上來說不及。但是mac layer的資訊跟動作必須透過ip指令才能做細部的調整
ip adress show
幾乎等同ifconfig
ip link set eth0 down
等同ifdown eth0
ip link set eth0 up
等同ifup eth0
ip link set eth0 mtu 1000
同ifconfig eth0 mtu 1000,不過在設定的時候要先關閉eth0
ip route show
顯示routing table

ip link set eth0 address bb:bb:bb:bb:bb:bb
設定mac address
ip link set eth0 name hello
設定主機名稱

2009年10月27日

防火牆-iptables(1)

iptables相當複雜,所以這個文章我會慢慢寫
=============================
iptables不只能夠filter(過濾)packet的資料,甚至修改資料,也就是能夠做packet改寫達到NAT的功能
對於過濾的部分可以由一群群有次序的規則做判斷

Linux底下防火牆這功能幾乎由iptables一手包辦,其他儲存規則跟回覆規則的指令則是iptables-save跟iptables-restore
一開始如果系統沒有預設的規則,應該是等同全開、沒有限制,可借由
iptables -L -n

來觀察規則表,其中參數n的意思表示不要使用DNS反查,速度會快許多,結果如下圖表
iptables的語法大致上如同鳥哥網站提到的
iptables [-AI 鏈] [-io 網路介面] [-p 協定] \
> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP]
參數:
-AI 鏈:針對某的鏈進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。
例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範
-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;
-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式
主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
IP  :192.168.0.100
網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若規範為『不許』時,則加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受 (ACCEPT)、丟棄 (DROP) 及記錄 (LOG)
一般而言建議練習時先把INPUT的Policy設定為DROP,先全部擋住,在慢慢開啟允許進入的部分
iptables -P INPUT DROP

比方說允許SSH Server的port則開啟port # 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

不過我也很懷疑為何iptables不能進化一點,只有A跟I,只能把rule放在最前跟最後,何不妨讓人可以插入到某一條規則之後
使用如
iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT
就可以在規則2後加入一條規則

最後補上一條方便的規則,讓已經建立連線或者是由我們主機發出的封包引起對方回覆的封包進入,不然一些類似更新(apt/yum)可能無法正常運作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

當然還可以擋掉一些討厭的網域區段或者mac address,這樣就完成了基本的INPUT Chain的部分
初學者可能常會想問,我知道service的名字或者套件的名字,但我怎麼知道他用的是tcp或者udp,還有走的port number呢?要用google去查嗎?其實大多知名的服務都不假外求,只要察看/etc/services這個檔案裡面就有了

以Fedora而言,完成之後記得把檔案寫到/etc/sysconfig/iptables這個檔案內,這樣下次開機他就會自動啟動了