星期四, 5月 08, 2008

點(dot) (.)對目錄及shell scirpt的意義

###目錄中###
cd . 代表進入"目前這目錄"

###script file中###
. /etc/init.d/functions 代表在"同一個shell"中執行
這意思是, 原本
shell                                                                                           --> shell
           --> sub shell --> functions --> kill sub shell
變為
shell --> functions --> shell
差別在於所有執行後的變數及結果都會留在原本的shell中
在functions檔案中有一些函式, 像pidofproc() (系統原本只有pidof程式)
原本無法執行, 經過". /etc/init.d/functions"就變為區域變數, 就可以執行了
可以用"setgrep pidofproc", 看到所有functions留在shell中的資訊
當然在登出後或其他shell中是沒有的

socket與協定的觀念 - 以nc與http為例

port這東西有時候好像很難解釋, 但如果透過實際的操作就很好理解
先在該台主機上要產生一個192.1.1.1:1111的門,也就是socket, 讓大家可以連線
nc -l 192.1.1.1 1111
可以在另一台主機上使用
telnet 192.1.1.1 1111
這樣就可以雙方進行對話

因此協定的目的, 就在讓雙方可以透過socket進行"對話", 對話的規範就叫協定
像Web Server, 其實是可以透過telnet的方式將網頁抓回來
只是要知道HTTP協定的對話模式, 以及對方應有的網頁檔名
簡單的可以用下面的範例
telnet 192.1.1.1 80
進入後再輸入
GET /index.html
就可以看到index.html的內容

星期一, 5月 05, 2008

一些shell script的小技巧

Shell script真的是蠻好用的, 一行字就可以做很多的事情, 這邊舉一些常用的當例子:

1.
for i in filename*; do echo "123" > $i;done
假設要修改的是stu開頭的檔案, 這樣每一個檔案的內容都會變成123

2.
while [ 1 ]; do echo "1" ; done
會不間斷的列印"1"這字串, 這方式可以將single core的CPU操到100%的使用率, 若是multi core的, 就多跑幾個吧.

3.
萬用字元與正規表示法的差異
grep ^[^#] filename
代表要尋找 "非" # "開頭" 的內容

^ 開頭
$ 尾巴
[^#] 非#開頭的
[] 裡面代表的只有一個字元

所以在使用grep時要注意, 因為grep所接的字串是使用正規表示法
grep a..ther filename
正規表示法和萬用字元的差異
.代表單一字元....
*代表a或多個a
.*代表0或多個任意字元