網絡技術日誌
關於 PHP, Linux, Open Source 及個人生活記載的網誌。-
MySQL 的流程控制
Posted on December 8th, 2011 No commentsMySQL 有幾個流程控制的 functions,以下是它們的用法簡介:
1. CASE
它就如同其他程式語言的 switch:// Below will return zero
SELECT CASE 0 WHEN 0 THEN ‘zero’ WHEN 1 THEN ‘one’ ELSE ‘no one’ END;// Below will return true
SELECT CASE WHEN 5>2 THEN ‘true’ ELSE ‘false’ END;2. IF
SELECT IF(expr1,expr2,expr3);// return yes
SELECT IF(1<5,'yes','no');3. IFNULL
SELECT IFNULL(expr1, expr2);// Return 5
SELECT IFNULL(5,0);// Return 10
SELECT IFNULL(NULL,10);4. NULLIF
SELECT NULLIF(expr1,expr2);// Return NULL
SELECT NULLIF(5,5);// Return 10
SELECT NULLIF(10,4);
-
MySQL 的 Safe Update Mode
Posted on December 6th, 2011 No comments最近要更新 MySQL 資料表內其中一個欄位的所有資料,只是用以下這個 SQL 指令:
UPDATE table_name SET field_name=0;
個 MySQL 回傳的錯誤訊息為:
“You are using safe update mode and you tried to update a table without a WHERE clause that uses a KEY column.”
查看一些資料後,原來 MySQL 在沒有 WHERE 或 LIMIT 條件下會拒絕執行 UPDATE 或 DELETE querey,即使是沒有 KEY column 的 WHERE 條件也會拒絕執行。
要解決就是將 MySQL 的 Safe Update Mode 關閉:
SET SQL_SAFE_UPDATES=0;
UPDATE table_name SET field_name=0;如果要重新啟用 Safe Update Mode,只要執行:
SET SQL_SAFE_UPDATES=1;
-
刪除 tarball 內的檔案
Posted on December 5th, 2011 No comments如果想刪除 tarball 內的個別檔案,可以用 tar 指令實現,首先用以下指令查看 tarball 內的檔案內容:
# tar -tvf test.tar
然後就可以用以下指令刪除檔案,以下會假設刪除 del_file.txt 檔案:
# tar –delete -f test.tar del_file.txt
如果想一次過刪除多個檔案,也可以用 * 符號配合 –wildcards 選項:
# tar –wildcards –delete -f test.tar ‘del_file.*’
請注意,以上方法只支援 tarball 檔案,而並不支援 tar.gz 或 tar.bz2。
-
免費省電軟件 — Granola
Posted on December 2nd, 2011 No commentsGranola 是一套智能省電軟件,它可以在不影響電腦正常使用的情況下節省用電,原理就是當電腦閒置時使用較少的 CPU 資源,而且 Granola 支援 Windows 及 Linux 平台。
-
取消 Firefox 安裝插件時倒數計時
Posted on December 1st, 2011 No comments在 Firefox 安裝插件時,預設會倒數幾秒鐘才可以安裝,如果覺得麻煩可以這樣取消:
1. 在網址列輸入 “about:config”,再按 “我發誓,我一定會小心的!”。
2. 找出 “security.dialog_enable_delay”。
3. 將數值條改為 “0″ 再按確定就完成了。
-
ScanGauge 讀取 ATF 溫度
Posted on November 10th, 2011 No comments之前買到的 ScanGauge 有編程功能,只要車上的 ECU 有這個數據,又知道查詢的 PID,可以自行寫入指令,以下是查詢 ATF 波箱油溫度的指令,在我的 NZE 121 上可以正常顯示:
TXD: 686AF101B4
RXF: 044105B40000
RXD: 2808
MTH: 00010001FFD8
NAME: ATF上面會顯示攝氏溫溫,如果想顯示華氏溫度,只要將 MTH 一行改成: 00090005FFD8
-
淘寶買的 ScanGauge Plus 及 MaxiScan MS509
Posted on September 1st, 2011 No comments今次是第一次在淘寶購物,原來除了用信用咭付款後,到 OK 便利店也可以給支付寶充值,但匯率好貴,每 1 人民幣對 1.26 港元。付款後當天店家便出貨,在香港第二天就收到貨了,但順豐速遞會對偏遠地區收取 $30 的附加費。
今次買的兩件產品也與汽車有關,分別是 ScanGauge Plus 及 MaxiScan MS509,兩件貨品連同匯率及送到香港的運費大概 $900。
這個是 ScanGauge Plus

ScanGauge Plus 的功能很多,包括實時油耗、水溫、進氣溫度、轉數、節氣門開啟角度等等….. 還可以讀取固障碼及清除固障碼,在我的 NZE 121 安裝後操作正常。
另一個是 MaxiScan MS509

這個沒什麼特別,用作讀取固障碼及清除固障碼,測試後操作正常。
-
Shell Script 輸出顏色文字
Posted on August 24th, 2011 No commentsShell Script 可以控制輸出文字的顏色,做法與 html 相似,只是使用 ANSI escape codes 控制顏色輸出。顯示顏色文字的格式如下:
\33[ 樣式 ; 文字顏色 ; 背景顏色 m
輸出文字
\33[0m以下是樣色、顏色及背景顏色的可供選項:
文字樣式:
0 一般樣式
1 粗體
4 加底線
5 灰底
7 文字及背景顏色對調文字顏色:
30 黑色
31 紅色
32 綠色
33 黃色
34 藍色
35 紫色
36 青綠
37 白色背景顏色:
40 黑色
41 紅色
42 綠色
43 黃色
44 藍色
45 紫色
46 青綠
47 白色以下是在 shell script 的使用方法:
PHP:-
#!/bin/bash
-
# This script echoes colors and codes
-
-
echo -e "\n\033[4;31mLight Colors\033[0m \t\t\033[1;4;31mDark Colors\033[0m"
-
-
echo -e "\e[0;30;47m Black \e[0m 0;30m \t\e[1;30;40m Dark Gray \e[0m 1;30m"
-
echo -e "\e[0;31;47m Red \e[0m 0;31m \t\e[1;31;40m Dark Red \e[0m 1;31m"
-
echo -e "\e[0;32;47m Green \e[0m 0;32m \t\e[1;32;40m Dark Green \e[0m 1;32m"
-
echo -e "\e[0;33;47m Brown \e[0m 0;33m \t\e[1;33;40m Yellow \e[0m 1;33m"
-
echo -e "\e[0;34;47m Blue \e[0m 0;34m \t\e[1;34;40m Dark Blue \e[0m 1;34m"
-
echo -e "\e[0;35;47m Magenta \e[0m 0;35m \t\e[1;35;40m DarkMagenta\e[0m 1;35m"
-
echo -e "\e[0;36;47m Cyan \e[0m 0;36m \t\e[1;36;40m Dark Cyan \e[0m 1;36m"
-
echo -e "\e[0;37;47m LightGray\e[0m 0;37m \t\e[1;37;40m White \e[0m 1;37m"
-
-
Unix 及 Windows 文字檔案轉換
Posted on August 23rd, 2011 No comments在 Unix 及 Windows 裡面所儲存的文字檔案,最大分別是換新一行的顯示。Unix 會使用 EOL 作為跳行;而 Windows 則會使用 Ctrl-m (^M)。在 Linux 下可以用 dos2unix 及 unix2dos 將 Unix 及 Windows 的文字檔轉換:
$ unix2dos unix_text.txt win_text.txt
以上指令就會將 unix_text.txt 轉換成 windows 格式,並儲存到 win_text.txt,如果要將 windows 文字檔轉成 unix 文字檔,只要這樣:
$ dos2unix win_text.txt unix_text.txt
-
Linux — 檢視 kernel module (驅動程式) 版本
Posted on August 22nd, 2011 No comments要檢視 Linux 下 kernel module (驅動程式) 的版本,可以透過 modinfo 指令實現。首先要知道要查詢的 kernel module 名稱,輸入 lsmod 指令使會列出所有載入的 modules。
例如要找出 mptscsih 所使用的版本,只要輸入:
# modinfo mptscsih
然後系統便會列出關於 mptscsih 所資訊,其中 Version 就是 module 的版本。
-
Linux — 列出一個進程正在使用的檔案
Posted on August 19th, 2011 No comments要找出一個進程正在使用的檔案,首先要知道檔案的 process ID,可以用 ps 指令實現:
# ps aux | grep mysql
記下進程的 process ID 後,可以透過 /proc 檔案系統或 lsof 指令查詢,它們的使用方法如下:
/proc
假如 process ID 為 4252,只要用 ls 指令查視 /proc/4252/fd 目錄:# ls -l /proc/4252/fd
lsof 指令
# lsof -a -p 4252
-
阻檔嘗試入侵的 IP — Fail2Ban
Posted on August 17th, 2011 No commentsFail2Ban 是一套用 Python 寫成的系統安全工具,它會監察伺服器的紀錄檔,當出現多次登入錯誤後,便會觸發一些安全動作,例如將 IP 封鎖或用 Email 通知系統管理員等。Fail2Ban 相當具彈性,可以針對自己的需求設定不同的過濾規則,而 Fail2Ban 已經內建多個過濾規則,包含一些熱門伺服器軟件的過濾規則,支援 sshd, web server, ftp server, dns server 等。
安裝方法:
1. Fail2Ban 是以 Python 寫成,所以要先確定系統有安裝 Python,在 Redhat 安裝 Python 的方法是:
# yum install python python-devel gamin-python2. 然後安裝 EPEL Repos 及 Fail2Ban
Centos 5 x86_64:
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpmCentOS 5 i386:
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpmCentOS 4:
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-10.noarch.rpm安裝 fail2ban:
# yum install fail2ban設定方法:
安裝 Fail2Ban 後,可以開啟 /etc/fail2ban/jail.conf 進行設定,主要的幾個設定為:ignoreip = 127.0.0.1 ( 忽略的 ip )
bantime = 86400 ( 封鎖 ip 的時間, 以秒為單位, 這裡是 1 天 )
findtime = 600 ( 錯誤登入的時間 )
maxretry = 3 ( 在 findtime 時間內發生的錯誤發入次數 )設定 SSHD
在 /etc/fail2ban/jail.conf 內找到 [ssh-iptables] 段落,將 enabled 設定成 true,例如:[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=SSH, protocol=tcp]
logpath = /var/log/secure
maxretry = 3修改檔案後,要重新啟動 Fail2Ban:
# /etc/rc.d/init.d/fail2ban restart要觀察 Fail2Ban 的狀態,可以查看紀錄檔 /var/log/fail2ban.log,或者用 iptables 查看:
# iptables -nvL
-
透過 htaccess 設定 Character Set
Posted on August 15th, 2011 No comments要設定網站的 Character Set,除了在 httpd.conf 設定外,還可以在 .htaccess 對個別網站設定,格式如下:
AddDefaultCharset utf-8
以上這行便會設定網站預設使用 utf-8 編碼,如果只想對特定檔案設定 Character Set,可以這樣做:
AddCharset utf-8 .html .htm .css .js .xml .json .rss
這樣就可以設定 .html, .htm, .css, .js, .xml, .json 及 .rss 的預設 Character Set 使用 utf-8.
-
MySQL 效能優化工具 — MySQLTuner
Posted on August 9th, 2011 No commentsMySQLTuner 是一個針對 MySQL 效能的分析 Perl script,它會根據採集到的數據,給予修改 my.cnf 的設定值建議,從而改善 MySQL 的執行效率。
要執行 MySQLTuner 十分簡單,只要下載後並給予執行權限便可直接執行:
wget http://mysqltuner.com/mysqltuner.pl
chmod +x mysqltuner.pl
然後便可以直接執行 mysqltuner.pl:./mysqltuner.pl
這時 MySQLTuner 會詢問 mysql 的管理員用戶名稱及密碼,然後便會採集數據並產生報告。而報告的最後是 Recommendations 部份,是可以在 my.cnf 的 [mysqld] 調整的設定值,修改的設定值後需要重新啟動 mysql 才會生效。
-
變更 MySQL client 的提示符號
Posted on August 8th, 2011 No comments在預設的情況下,在 command line 連接 MySQL 資料庫時,會使用以下的提示符號:
mysql>如果將以上提示符號變更,可以顯示更多資訊的話,操作起來會相當方便。要變更這個提示符號首先開啟 my.cnf 檔案(Windows 用戶是 my.ini),然後在 [mysql] 區間加入以下語句:
prompt=\u@\h:[\d]>\_
上面語句的 "\u" 及 "\h" 分別會顯示用戶名稱及主機名稱,"\d" 會顯示所選擇的資料庫,以下是上面設定的提示符號:
samtang@localhost:[hkcode]>以下是 MySQL 提示符號可用的參數:
\c A counter that increments for each statement you issue
\D The full current date
\d The default database
\h The server host
\l The current delimiter (new in 5.0.25)
\m Minutes of the current time
\n A newline character
\O The current month in three-letter format (Jan, Feb, …)
\o The current month in numeric format
\P am/pm
\p The current TCP/IP port or socket file
\R The current time, in 24-hour military time (0–23)
\r The current time, standard 12-hour time (1–12)
\S Semicolon
\s Seconds of the current time
\t A tab character
\U Your full user_name@host_name account name
\u Your user name
\v The server version
\w The current day of the week in three-letter format (Mon, Tue, …)
\Y The current year, four digits
\y The current year, two digits
\_ A space
\ A space (a space follows the backslash)
\' Single quote
\" Double quote
\\ A literal “\” backslash character
\x x, for any ‘x’ not listed above
