夕口技術錄

專業上的小常識,備而用之~

Monthly Archives: 十二月 2009

[MySQL][SUBSTRING_INDEX]

SUBSTRING_INDEX(str,delim,count)
傳回字串 str 中在第 count 個出現的分隔符 delim 之前的幾串。如果 count 是一個正數,傳回從最後的(從左邊開始計數)分隔符到左邊所有字元。如果 count 是負數,傳回從最後的(從右邊開始計數)分隔符到右邊所有字元:

mysql> SELECT SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, 2);
-> ‘http://www.mysql
mysql> SELECT SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, -2);
-> ‘mysql.com

[Linux] – 查詢已開啟檔案或已執行程序開啟之檔案

fuser:藉由檔案(或檔案系統)找出正在使用該檔案的程序
[root@www ~]# fuser [-umv] [-k [i] [-signal]] file/dir
選項與參數:
-u  :除了程序的 PID 之外,同時列出該程序的擁有者;
-m  :後面接的那個檔名會主動的上提到該檔案系統的最頂層,對 umount 不成功很有效!
-v  :可以列出每個檔案與程序還有指令的完整相關性!
-k  :找出使用該檔案/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID;
-i  :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願!
-signal:例如 -1 -15 等等,若不加的話,預設是 SIGKILL (-9) 囉!

範例一:找出目前所在目錄的使用 PID/所屬帳號/權限 為何?
[root@www ~]# fuser -uv .
                     USER        PID ACCESS COMMAND
.:                   root      20639 ..c.. (root)bash

範例:
直接將 /usr/local/server/bin/httpd 依找出的PID kill -9
[root@serverX64 data]# fuser -k /usr/local/server/bin/httpd
/usr/local/server/bin/httpd: 17717e 17796e 17797e 17798e 17852e
將 /usr/local/server/bin/httpd 找出PID 經由詢問後才 kill -9
[root@seerverX64 data]# fuser -ki /usr/local/server/bin/httpd
/usr/local/server/bin/httpd: 13397e 13399e 13400e 13402e 13404e 13406e
Kill process 13397 ? (y/N) n
Kill process 13399 ? (y/N) n
Kill process 13400 ? (y/N) n
Kill process 13402 ? (y/N) n
Kill process 13404 ? (y/N) n
Kill process 13406 ? (y/N) n

lsof :列出被程序所開啟的檔案檔名
相對於 fuser 是由檔案或者裝置去找出使用該檔案或裝置的程序,反過來說, 如何查出某個程序開啟或者使用的檔案與裝置呢?就是使用 lsof

[root@www ~]# lsof [-aUu] [+d]
選項與參數:
-a  :多項資料需要『同時成立』才顯示出結果時!
-U  :僅列出 Unix like 系統的 socket 檔案類型;
-u  :後面接 username,列出該使用者相關程序所開啟的檔案;
+d  :後面接目錄,亦即找出某個目錄底下已經被開啟的檔案!

範例一:列出目前系統上面所有已經被開啟的檔案與裝置:
[root@www ~]# lsof
COMMAND PID  USER   FD  TYPE  DEVICE   SIZE     NODE NAME
init      1  root  cwd   DIR     3,2   4096        2 /
init      1  root  rtd   DIR     3,2   4096        2 /
init      1  root  txt   REG     3,2  38620  1426405 /sbin/init
....(底下省略)....
# 注意到了嗎?是的,在預設的情況下, lsof 會將目前系統上面已經開啟的
# 檔案全部列出來~所以,畫面多的嚇人啊!您可以注意到,第一個檔案 init 執行的
# 地方就在根目錄,而根目錄,嘿嘿!所在的 inode 也有顯示出來喔!

範例二:僅列出關於 root 的所有程序開啟的 socket 檔案
[root@www ~]# lsof -u root -a -U
COMMAND     PID USER   FD   TYPE     DEVICE SIZE   NODE NAME
udevd       400 root    3u  unix 0xedd4cd40        1445 socket
auditd     4256 root    7u  unix 0xedd4c380        9081 socket
audispd    4258 root    0u  unix 0xedd4c1e0        9080 socket
# 注意到那個 -a 吧!如果你分別輸入 lsof -u root 及 lsof -U ,會有啥資訊?
# 使用 lsof -u root -U 及 lsof -u root -a -U ,呵呵!都不同啦!
# -a 的用途就是在解決同時需要兩個項目都成立時啊! ^_^

範例三:請列出目前系統上面所有的被啟動的周邊裝置
[root@www ~]# lsof +d /dev
COMMAND     PID      USER   FD   TYPE     DEVICE SIZE  NODE NAME
init          1      root   10u  FIFO       0,16       1147 /dev/initctl
udevd       400      root    0u   CHR        1,3       1420 /dev/null
udevd       400      root    1u   CHR        1,3       1420 /dev/null
udevd       400      root    2u   CHR        1,3       1420 /dev/null
# 看吧!因為裝置都在 /dev 裡面嘛!所以囉,使用搜尋目錄即可啊!

範例四:秀出屬於 root 的 bash 這支程式所開啟的檔案
[root@www ~]# lsof -u root | grep bash
bash   20639 root  cwd    DIR    3,2    4096    648321 /root
bash   20639 root  rtd    DIR    3,2    4096         2 /
bash   20639 root  txt    REG    3,2  735004   1199424 /bin/bash
bash   20639 root  mem    REG    3,2   46680     64873 /lib/libnss_files-2.5.so
....(底下省略)....

pidof :找出某支正在執行的程式的 PID

[root@www ~]# pidof [-sx] program_name
選項與參數:
-s  :僅列出一個 PID 而不列出所有的 PID
-x  :同時列出該 program name 可能的 PPID 那個程序的 PID

範例一:列出目前系統上面 init 以及 syslogd 這兩個程式的 PID
[root@www ~]# pidof init syslogd
1 4286
# 理論上,應該會有兩個 PID 才對。上面的顯示也是出現了兩個 PID 喔。
# 分別是 init 及 syslogd 這兩支程式的 PID 啦。

[switch][clear] – clear ip arp command

Clear 單 ip
C3550#clear ip arp 10.1.21.7

Clear All ARP
C3550#clear arp-cache

指令search

C3550#clear ip arp ?
A.B.C.D     IP address of dynamic ARP entry
inspection  Clear State of ARP Inspection
poll        IP ARP host polling

[Linux][shell][grep][[xargs]][sed] – 多檔案一次置換取代字元指令

基本找尋 txt-02 字串指令
[root@X64 smarty]# grep -rl “txt-02″ *
snort/view.htm
snort/add.htm
adgroup/view.htm

找尋 txt-02 字串 + 多檔案一次置換取代字元指令
# grep -rl “txt-06″ * | xargs sed -i ‘s/txt-06/txt-02/g’

sed -i 使用充補 :直接修改檔案內容(危險動作)

sed 可以直接修改檔案的內容!
而不必使用管線命令或資料流重導向!
不過,由於這個動作會直接修改到原始的檔案,
所以請你千萬不要隨便拿系統設定檔來測試喔!

範例六:利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
# 上頭的 -i 選項可以讓你的 sed 直接去修改後面接的檔案內容而不是由螢幕輸出喔!
# 這個範例是用在取代!請您自行 cat 該檔案去查閱結果囉!

範例七:利用 sed 直接在 regular_express.txt 最後一行加入『# This is a test』
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
# 由於 $ 代表的是最後一行,而 a 的動作是新增,因此該檔案最後新增囉!

sed 的『 -i 』選項可以直接修改檔案內容
舉例來說,如有一個 100 萬行的檔案,要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為檔案太大了!這時就可利用 sed 透過 sed 直接修改/取代的功能!

參考資料:鳥哥 – sed 工具

[HTML][CSS] – span與div的差異

<div> 是一個塊級(block-level),它包圍的元素和包圍之外的元素會自動換行

<span> 僅是一個行內元素(inline elements),在它的前後皆不會自動換行的效果。

ex.

<div>
a
</div>
<div>
b
</div>
c

<span>
a
</span>
<span>
b
</span>

結果:

a
b
c
a b

[HTML][CSS] – span與div的差異

<div> 是一個塊級(block-level),它包圍的元素和包圍之外的元素會自動換行

<span> 僅是一個行內元素(inline elements),在它的前後皆不會自動換行的效果。

ex.

<div>
a
</div>
<div>
b
</div>
c

<span>
a
</span>
<span>
b
</span>

結果:

a
b
c
a b

[Linux][while] – shell while loop commend

# while :; do free -m; sleep 1; done

紫色:要 查看 的指令集

ex.

  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘apache’; sleep 1; done # 看 Aaache
  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘mysql’; sleep 1; done # 看 MySQL

[Linux][while] – shell while loop commend

# while :; do free -m; sleep 1; done

紫色:要 查看 的指令集

ex.

  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘apache’; sleep 1; done # 看 Aaache
  • while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep ‘mysql’; sleep 1; done # 看 MySQL

[Apache] – 設定伺服器所能接受之最大連續請求量

為了要防止不法人士,
使用某方式對網站在極短時間內,
進行大量的存取動作,
因此針對 http.conf 進行參數上的調。

TimeOut
語法:TimeOut <數字>
預設:TimeOut 300

TimeOut 用來設定伺服器接收一個請求以及完成一個請求最長的等待時間〈以秒為單位〉,如果在此時間內沒有回應則終止服務。所以當接收或傳送一個資料時所花的時間超過 TimeOut 所規定的時間時,伺服器便將會中斷該連線。如果網路速度較慢,則此 Timeout 時間可以設長一些。

例:TimeOut 500
-> 指定 apache 接收或傳送的等待時間

KeepAlive
語法:KeepAlive <(On/Off)>
預設:KeepAlive On

KeepAlive 用於設定伺服器要不要開啟連續請求的功能,On 是開啟,Off 是關閉。

例:KeepAlive On
-> 指定 apache 開啟連續請求功能

MaxKeepAliveRequests
語法:MaxKeepAliveRequests <個數>
預設:MaxKeepAliveRequests 100

MaxKeepAliveRequests 用於設定伺服器所能接受之最大連續請求量,如果連續請求超過這個此數限制則 Server 會自動拒絕請求連線。若設定為 0 則表示不做限制。

例:MaxKeepAliveRequests 0
-> 指定 apache 不限制所能接收之連線數量

KeepAliveTimeout
語法:KeepAliveTimeout <秒數>
預設:KeepAliveTimeout 15

KeepAliveTimeout 用於設定使用者 ‘連續’ 請求等待的時間上限,如果使用者連續請求的時間超過此數,則終止此請求服務。

例:KeepAliveTimeou 15
-> 指定 apache 等待使用者連續請求的時間,在接到使用者請求開始,15 秒內若沒收到新請求訊息,即中斷該連線

[Apache] – 設定伺服器所能接受之最大連續請求量

為了要防止不法人士,
使用某方式對網站在極短時間內,
進行大量的存取動作,
因此針對 http.conf 進行參數上的調。

TimeOut
語法:TimeOut <數字>
預設:TimeOut 300

TimeOut 用來設定伺服器接收一個請求以及完成一個請求最長的等待時間〈以秒為單位〉,如果在此時間內沒有回應則終止服務。所以當接收或傳送一個資料時所花的時間超過 TimeOut 所規定的時間時,伺服器便將會中斷該連線。如果網路速度較慢,則此 Timeout 時間可以設長一些。

例:TimeOut 500
-> 指定 apache 接收或傳送的等待時間

KeepAlive
語法:KeepAlive <(On/Off)>
預設:KeepAlive On

KeepAlive 用於設定伺服器要不要開啟連續請求的功能,On 是開啟,Off 是關閉。

例:KeepAlive On
-> 指定 apache 開啟連續請求功能

MaxKeepAliveRequests
語法:MaxKeepAliveRequests <個數>
預設:MaxKeepAliveRequests 100

MaxKeepAliveRequests 用於設定伺服器所能接受之最大連續請求量,如果連續請求超過這個此數限制則 Server 會自動拒絕請求連線。若設定為 0 則表示不做限制。

例:MaxKeepAliveRequests 0
-> 指定 apache 不限制所能接收之連線數量

KeepAliveTimeout
語法:KeepAliveTimeout <秒數>
預設:KeepAliveTimeout 15

KeepAliveTimeout 用於設定使用者 ‘連續’ 請求等待的時間上限,如果使用者連續請求的時間超過此數,則終止此請求服務。

例:KeepAliveTimeou 15
-> 指定 apache 等待使用者連續請求的時間,在接到使用者請求開始,15 秒內若沒收到新請求訊息,即中斷該連線