2009年12月23日

在 Windows 開機完畢後,自動執行 VirtualBox 並開啟 VM

1. 建立 virtual.bat,內容如下
@ECHO OFF
"D:\Program Files\Sun\xVM VirtualBox\VirtualBox.exe" -startvm ubuntu

其中 ubuntu 是 VirtualBox 裡面 VM 的名稱

2. 將此 bat 檔放入 "程式集" 的 "啟動" 中

2009年10月19日

讓 vim 支援 uif-8 編碼並存檔成 utf-8 格式

在自己用戶目錄下新增 .vimrc 設定檔,內容如下
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,big5,latin1
set fileencoding=big5
set termencoding=big5


vim 存檔時可強制存成 utf-8
set fenc=utf-8
w

tar 只解壓縮單一檔案

只要解壓 abc.tgz 壓縮檔中的 20091019.txt 出來:
tar xvf abc.tgz 20091019.txt

2009年10月12日

Linux 指令應用

AWK 印出 ' 字元要使用 x27 (要 parse 出資料庫 select 條件時會用到)
awk '{print "select * from tmp where name = \x27" $1 "\x27;"}'

去除空白列使用 sed /^$/d
cat 123.txt | sed /^$/d

2009年10月9日

MySQL 相關指令彙整

備份相關
利用 select 指令備份資料庫的 table
CREATE TABLE 備份目的_table_name AS SELECT * FROM 備份來源_table_name;

利用 mysqldump 備份單一資料庫
mysqldump --lock-all-tables -u root -p 資料庫名稱 > /backup/example.sql

利用 mysqldump 備份全部的DB
mysqldump --lock-all-tables -u root -p --all-databases > /backup/alldb.sql

復原則是用 mysql 指令即可
mysql -u root -p 資料庫名稱 < /backup/example.sql

新增使用者
grant all privileges on *.* to taiwanwolf@localhost IDENTIFIED BY '123aaa';

P.S
1. .sql 檔案裡面會有 create table... 的敘述, 關於 CHARSET= 的部分要確定是要用 big5 or utf8
2. 備份跟復原都可再加上 -default-character-set=big5 or utf8
3. 登入 mysql 後可以使用 set names big5 or utf8 測試 select 出來的結果有沒有亂碼

2009年9月21日

Word & Excel 強迫換行

Word
如果想讓文字強迫換行,必須按 Shift+Enter 組合鍵

Excel
如果想讓文字在儲存格中強迫分行,需在要換行的文字前,按 Alt+Enter 組合鍵,文字就會自動換行了

2009年8月29日

將目錄下的檔案名稱改為小寫

perl -e 'rename($_, lc) || warn "$_: $!\n" for @ARGV' *

2009年8月28日

遠端 mirror site 使用 rsync

由於公司的Sun主機超舊,中間經過好幾手,故已無法重建一台,所以只能說把另一台機型相同的機器建好 parition, file system後,利用 rsync 把檔案複製過來

rsync是一個可以完整複製檔案的工具,Linux上面很常使用的工具

我的是使用簡易作法,做法如下:

來源端 (原本的舊主機)
執行 /usr/local/bin/rsync --daemon
=> 啟動 rsync server

目的端 (備份主機上面)執行
su -
=> 先su 成 root
/usr/local/bin/rsync -vzrtopg --progress -e /usr/local/bin/ssh 來源主機IP:/data1 /

=> 把來源主機上的/data1目錄裡面的資料,複製到目的端主機的 / 下面,並顯示進度,此時需輸入來源主機的 root 密碼

P.S 如果加入 --delete 參數的話,會把來源主機刪除的檔案,在備份主機也同步刪除

可把此指令加入 crontab 中,就可以每日更新最新資料製備份主機上了

2009年8月12日

一般使用者無法使用crontab,回應權限不足

作業系統:CentOS 5
症狀:一般使用者無法使用crontab,回應權限不足,但root可以,查看/etc/cron.deny裡面並無user

可先切換成 root, 然後執行
chmod 4775 /usr/bin/crontab

再試試看應該就可以了~

來源資料

2009年7月29日

利用Perl判斷是不是正確的MAC Address

這個做法要利用正規表示法了~ 程式如下

#!/usr/bin/perl

#利用參數列輸入MAC Address
$mac = $ARGV[0];

#判斷假如MAC Address 是空的 或不是 ^ 任一出現 []在 a到f,A到F,0到9的字元內容 或是字串長度不是12個字元
if ($mac == '' or $mac =~ /[^a-fA-F0-9]/ or length($mac)!=12) {
print "Invalid Mac address\n";
} else {
do something you want;
}

2009年7月24日

將多個封包合併成一個完整封包

客戶在測試WiMAX的SIP IAD,常常需要調某一段時間的封包,由於封包都是分割成很多小檔,所以半小時的區間,就約有十個約2M的cap.gz檔案,此時如果有明確需求,可以使用 tshark 先過濾所需要的資訊,然後再用 mergecap 合併即可,語法如下

mergecap 語法 (將三個檔案合併成一個)
mergecap -w outfile.cap dhcp_200907231502.cap.gz dhcp_200907231510.cap.gz dhcp_200907231516.cap.gz

2009年6月26日

Solaris 如何進入Single User Mode

一般用法是開機時按 Solaris 鍵盤的 STOP 鈕 + a 鍵
如果只有Windows鍵盤,那也沒關係,可以使用 console 連入用 Putty 的 special command 功能在開機時送出 break即可, 有圖有真相

Heran 液晶電視本人慘痛經驗,品質不佳,故障率高!

在2007年約近年底時,由於家中電視故障,故去大買場看看有沒有液晶電視,由於是鎖定32吋的機種,看了幾個日系品牌價格頗高,故轉向國產品牌,當時店員強力推薦一個沒聽過的牌子 Heran,看了看實機,看起來是還可以接受,加上約20000元的售價,沒有詳加考慮就把它帶回家了,結果回家後剛開始還正常,除了切換畫面比例的速度頗慢,但在使用約9個月時,有一天開機忽然整個螢幕沒有畫面只有聲音,叫修結果為面板故障,當時由於還不到一年,可以免費換新的面板 (但心中已有品質不佳的陰影,但還是說服自己後續有修好就好了),結果在今年六月,也就是修理完的11個月後,這次開機後,電視都是殘影,顏色變成超級濃,看不清楚畫面中的人物跟字,我是個上班族,也只有下班之後,看看電視跟運動節目 (週一~週五一天約看2小時,有時根本沒開機),沒想到居然那麼快電視又壞了!!! 此次叫修又說是面板的問題,由於過了一年的保固期,需收NT$9500,我跟工程師說去年七月才換過,還不到一年吧,工程師回我說修理過的面板只保固三個月 (問題是你們東西不好,才會不到一年就壞掉阿,我也想好好用就好了),當下就立即覺悟,當初支持國產的Heran品牌是一個相當錯誤的決定,隨即告知工程師不修了,馬上開啟網頁尋找Sony或Toshiba等日本廠牌,當作我的下一台液晶電視~

結論:
1. 聯碩光電的液晶電視買不到兩年,就壞了兩次,且都是壞面板。
2. 第一次故障面板換過後,只有三個月保固,且當時維修好,工程師也未告知,此次有問題居然又說面板故障,要換的話需要NT$9500,乾脆整台丟掉不修理了! (心中OS,現在外面一台國產32吋液晶也才一萬出頭,你換面板要跟我收NT$9500~ )。
3. 花了兩萬的電視,看不到兩年,換算起來一年要花一萬多元的費用,當時Sony BRAVIA 32"最便宜機型約NT$30000,就算他可以看個四年就好,一年也只需七千五百元,而且還是知名品牌啊!


P.S 此機的型號是聯碩光電 (Heran) HD-32 (61VD),以上是本人親身慘痛經驗供各位網友參考

2009年6月19日

自動化通過https認證,登入到後端網頁並查詢資料

有時候會遇到這種情形,MIS提供網頁給你查詢,但是要通過前端的認證,這個情境對於人類來使用的話,是不會有問題,但如果要叫程式利用這個網頁來查詢用戶狀態,就變成不可行

此時就可利用linux下的 cURL 工具,此工具可當做文字模式的瀏覽器,可以分割抓檔、傳遞網頁參數獲得回傳結果,支援https等,瀏覽器做得到的,他都作得到~

由於前端認證網頁 (https://auth.xxx.com.tw/login.php) 是利用 POST 方法來做網頁間參數的傳遞:
cURL要做POST傳遞需加 -d 參數,此例會傳送id與pwd兩個參數,中間用&連接
curl -d "id=taiwanwolf&pwd=1234" https://auth.xxx.com.tw/login.php

至於我怎麼知道網頁是用什麼參數在傳遞的呢?
由於我是用 Firefox 瀏覽器,所以有很多好用的 Extension 可以來做,可參考這個 Live HTTP Headers 0.14,安裝完後工具列就會出現 Live HTTP Headers 選項,點選後就會出現監視的視窗,之後你在網路上任何存取的動作,有用到的連結都會出現在此視窗中~

認證通過後,就可以做後續查詢的動作,但這只有一次性,也就是這個session存在的期間才有效,所以我們必須用 cookie 把現在的狀態存起來:
儲存 cookie 要利用 -D 參數,再加上先前的POST傳遞登入資訊,合而為一
curl -d "id=taiwanwolf&pwd=1234" -D auth.txt https://auth.xxx.com.tw/login.php

最後就可以利用已經登入存檔的cookie,來進行後端網頁的查詢囉,讀入cookie要利用-b參數
curl -d "NUM=0912345678&DATE=20090618" -b auth.txt http://eip.xxx.com.tw/code/queryMobile.jsp

這樣再把儲存 cookie 的部份用 crontab 固定每幾個小時跑一次,保持 session 的連接,這樣就可以自動通過認證去後端做事情囉~

2009年6月12日

防止 yum 更新 kernel的作法

因為使用 Oracle DB 的關係,所以CentOS的Kernel版本不能有所變動,但又需要用 yum 來更新軟體的版本,此時要避免更新 kernel 的話,可在 /etc/yum.conf 加入這一行存檔

exclude=kernel*

這樣再下

yum -y update

就可以放心更新而不會變動的 kernel 了

備份及刪除log時,出現 Argument list too long

在壓縮備份log的時候,使用 ls -al 200905*.log來看檔案,居然出現Argument list too long的錯誤,此時可用 find 來解決:

先進入該目錄

法1
# 產生 file list
find . -name '200905*.log' > fileList.txt

# 執行 tar 指令來壓縮並指定來源
tar zcvf 200905.tgz --files-from fileList.txt

法2
# 利用 pipe
find . -name '200905*.log' -print | tar zcvf 200905.tgz --files-from -

刪除時也出現相同訊息 Argument list too long 無法刪除,此時可利用 xargs 指令
find . -name '200905*' | xargs rm

這樣就可以刪掉了~

2009年6月6日

[電玩] NDSL遜掉了,20多年前的掌上型電玩復歸!

最近媽媽在整理房間時,翻出了一台我小時候在玩的小電動玩具,是任天堂的大金剛,這個類型的遊戲在任天堂的紅白機上出了許多遊戲,還記得以前的卡帶還有分128K、256K之類的,越多K的畫面就愈棒~ 多K的遊戲還記得有柯拿米大冒險,裡面有一堆卡通角色~,好,不離題了,直接來看圖吧~



NDSL遜,這台才酷! 任天堂的大金剛掌上型電玩單色版



在民國70年代當時也還沒有紅白機的遊樂器,只有單色的掌上型電玩,這在當時來說可是相當奢侈的逸品! 且此機也正常運作中喔,可見當時日本的品質就很棒了!

2009年6月5日

[日劇] CHANGE 嘉言錄!

昨天看了CHANGE,也就是木村拓哉主演的日劇,內容是關於日本的政治與選舉,其中看到幾句對白,實在是太熱血了,摘錄起來,在工作、生活遇到不如意或看到馬冏賣台時,可以抵勵自我!

* 即使很清楚肯定會出局,也要全力以赴! (適用於不如意之各種情況)
* [選舉]就如同馬拉松比賽,癱倒只能在跑到終點以後,在此之前,必須全力[跑]到底! (選舉跟跑可以替換為其他動詞,例如:搬家、寫程式、追女朋友之類)

我實在是非常尊敬日本人這種一期一會一生懸命的精神阿!

2009年6月1日

Unix 的 vi 編輯器無法使用

有台機器的log滿了,想說寫個 script 去自動砍,輸入vi之後出現

I don't know what kind of terminal you are on - all I have is 'screen'.

解法如下

bash-2.02$ echo $TERM
screen
bash-2.02$ export TERM=vt100

把terminal指定為vt100,這樣就ok啦~

P.S. 如需要永遠修改的話,請修改 /etc/profile 檔案
在最後一行加入 export EDITOR=vim ,重開機後即可生效!

2009年5月20日

[Perl] 網管程式 - 自動檢查log檔並備份

Perl 程式如下,把程式加到 crontab 內,即可自動檢查 log 檔,大於一定程度後,執行備份壓縮並把log清空

#!/usr/bin/perl

$now = `date +%Y%m%d_%H%M`;
chomp($now);
$logname = "$now".".tgz";

#User Define
#50MB
$logsize = "51200k";
#monitor log path or file
$logpath = "/oracle/admin/IMSBKDB/bdump/alert_IMSBKDB.log";
$found = `/usr/bin/find $logpath -size +$logsize -print`;
chomp($found);
if ($found) {
print "$found => tar\n";
#alert_IMSBKDB.log bigger than 50MB, backup and cp /dev/null for it
`/usr/bin/find $logpath -size +$logsize -exec /bin/tar zcvf /oracle/admin/IMSBKDB/bdump/backup/$logname {} \\;`;
sleep 1;
`cp /dev/null $logpath`;
} else {
print "do nothing\n";
}

2009年5月11日

tar on the fly & compress

tar cvf - directory_name | gzip -9 -c | ssh taiwanwolf@file_server_IP "cat > /home/taiwanwolf/CDR_200905.tgz"

2009年5月6日

利用SNMP查詢監控遠端主機硬碟空間

在遠端主機的 /etc/snmp/snmpd.conf 加入
disk / 100000
disk /boot 100000
等等要監控的mount point,存檔離開

service snmpd restart

在網管主機下
snmpdf -v 2c -c public -Cu remote_IP

即可出現下列資訊,配合 grep, awk等表示法,就可做成監控程式了
Description size (kB) Used Available Used%
/ 472474368 284001024 188473344 60%
/boot 101086 23836 77250 23%

2009年4月24日

Linux裝機後hostname設定 - CentOS

裝機後主要要做的事情,目前想到的是設定防火牆還有hostname以及DNS

在設定hostname部分:

Linux 及 FreeBSD 修改主機名稱同樣使用 hostname 指令即可

例如:hostname taiwanwolf
這樣重新連線後,提示符號下就會變成
[root@taiwanwolf ~]

但這樣重開機後,還是會變回
[root@localhost ~]

為了系統下次啟動時也能自動使用新 hostname,需要作以下修改

vi /etc/sysconfig/network

把 hostname 部分改成新的名稱

P.S
Debian 為 /etc/hostname
FreeBSD 為 /etc/rc.conf

在設定DNS部分:
編輯 vim /etc/resolv.conf
內容如下
nameserver 139.175.252.16
nameserver 139.175.55.244
存檔即可

看你最常下的前10名指令~

FreeBSD或Linux等都適用
history | awk '{print $2}' | awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c | sort -rn | head -10

head -10 就是前10名,可自行修改數字

2009年4月7日

jQuery + AJAX + PHP 應用範例

ajax有很多技術,早先我是用xajax,但最近看了jQuery之後,覺得用法還蠻直接的,只要把jQuery的js檔案在HTML裡面include進來就可以直接使用語法,此外jQuery還支援很多PluginsUI (User Interface)的操作,以下是一個很簡單的範例。
實際流程是:整個網頁載入後,會出現一個輸入姓名的欄位

此時可隨便輸入一個名字

按下Send按鈕,驅動ajax,並有loading效果

等待5秒後,下方將出現剛剛輸入的名字


程式流程:透過jQuery的ajax功能與後端Server的PHP程式溝通(此範例使用GET方法)之後,再把結果(echo 指令的output)丟回給前端的瀏覽器,只要這個範例能夠看懂,就等於打通任督二脈(前後端資料能溝通),之後想在後端查詢資料庫還是做運算等動作,就都沒有問題了~

前端:hello.htm 內容如下

<HTML>
<HEAD>
<style type="text/css">
#loadingImg{
position:absolute;
width:300px;
top:0px;
left:50%;
margin-left:-120px;
text-align:center;
padding:7px 0 0 0;
font:bold 11px Arial, Helvetica, sans-serif;
}
</style>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
<script type="text/javascript">
$(document).ready(function () {
  $('#btn').click(function (){
         $.ajax({
         url: 'hello.php',
         cache: false,
         dataType: 'html',
             type:'GET',
         data: { name: $('#name').val()},
         error: function(xhr) {
           alert('Ajax request 發生錯誤');
         },
         success: function(response) {
                   $('#msg').html(response);
           $('#msg').fadeIn();
         }
     });
  });
 $('#clean').click(function(){
    $('#msg').html("");
    // document.getElementById('msg').innerHTML = "";
 });
$("#loadingImg").ajaxStart(function(){
   $(this).show();
});
$("#loadingImg").ajaxStop(function(){
   $(this).hide();
});
})
</script>
</HEAD>
<BODY>
<div id="loadingImg" style="display:none"><img src="loading.gif"> loading...</div>
<br><br><br>
<div align="center">
Enter your name <br>
<input type="text" id="name"> <br>
<input type="button" value="send" id="btn">
<input type="button" value="reset" id="clean">
<br><br><br>
<div id="msg"> </div>
</div>
</BODY>
</HTML>


後端 hello.php 的程式碼如下
<?php
$myname = $_GET['name'];
sleep(5); //為了製造 ajax loading效果,所以延遲5秒
echo "You input name is $myname <br>";
?>


至於ajax loading 時的BAR或小花旋轉等圖示,網路上有一個ajaxload圖示庫可以來製作

利用dd指令遠端備份為ISO檔及還原成硬碟 (Linux, Unix, Solaris等適用)

遠端備份A(主機)的硬碟為ISO檔並儲存到B(File Server)的/backup目錄下

備份成ISO檔並丟到File Server:
Step1:SSH進入到欲備份的A主機下指令 (Linux)
Step2:dd if=/dev/hda | gzip -9 -c | ssh taiwanwolf@fileserver_ip dd of=/backup/hda.img.gz

Solaris 大概像以下的語法
/usr/local/bin/dd if=/dev/dsk/c1t0d0s2 | /usr/local/bin/gzip -9 -c | /usr/local/bin/ssh taiwanwolf@fileserver_ip /bin/dd of=/backup/c1t0d0s2.img.gz

從遠端File Server的ISO檔還原到本機硬碟
Step1:從一台裝上硬碟的Server, SSH進入到B(File Server)
Step2:ssh taiwanwolf@fileserver_ip zcat /backup/hda.img.gz | dd of=/dev/hda


如果該還原主機沒有作業系統,可採用 knoppix 之類的LiveCD來開機, 再綁上IP即可進行還原或備份

2009年4月6日

Solaris SoftRAID 的meta資訊重建

由於平時監控 /var/adm/messages 的程式發出錯誤 (表示又有事了 @_@)
查看是硬碟的 write error如下, 進主機下 metastat, 發現 meta 資料有錯, 所以需要重新去resync

# metastat

d0: Mirror
Submirror 0: d10
State: Needs maintenance
Submirror 1: d20
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 10491456 blocks

d10: Submirror of d0
State: Needs maintenance
Invoke: metareplace d0 c1t0d0s0
Size: 10491456 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s0 0 No Maintenance


d20: Submirror of d0
State: Okay
Size: 10491456 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s0 0 No Okay


d1: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d21
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8476608 blocks

d11: Submirror of d1
State: Okay
Size: 8476608 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s1 0 No Okay


d21: Submirror of d1
State: Okay
Size: 8476608 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s1 0 No Okay


d4: Mirror
Submirror 0: d14
State: Needs maintenance
Submirror 1: d24
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 16780224 blocks

d14: Submirror of d4
State: Needs maintenance
Invoke: metareplace d4 c1t0d0s4
Size: 16780224 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s4 0 No Maintenance


d24: Submirror of d4
State: Okay
Size: 16780224 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s4 0 No Okay


d5: Mirror
Submirror 0: d15
State: Needs maintenance
Submirror 1: d25
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 6298944 blocks

d15: Submirror of d5
State: Needs maintenance
Invoke: metareplace d5 c1t0d0s5
Size: 6298944 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s5 0 No Maintenance


d25: Submirror of d5
State: Okay
Size: 6298944 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s5 0 No Okay


d6: Mirror
Submirror 0: d16
State: Okay
Submirror 1: d26
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 82842816 blocks

d16: Submirror of d6
State: Okay
Size: 82842816 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s6 0 No Okay


d26: Submirror of d6
State: Okay
Size: 82842816 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s6 0 No Okay


d7: Mirror
Submirror 0: d17
State: Needs maintenance
Submirror 1: d27
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 16780224 blocks

d17: Submirror of d7
State: Needs maintenance
Invoke: metareplace d7 c1t0d0s7
Size: 16780224 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t0d0s7 0 No Maintenance


d27: Submirror of d7
State: Okay
Size: 16780224 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c1t1d0s7 0 No Okay

做法很簡單, Solaris 已經幫我們列出來了
以最後一筆 d7 為例,表示為第七個Virtual的分割區, d17是第1顆硬碟, d27是第2顆硬碟
d17: Submirror of d7
State: Needs maintenance <-- Solaris 跟你說需要維護了
Invoke: metareplace d7 c1t0d0s7 <-- 指令就在這裡

所以我們就下
# metareplace -e d7 c1t0d0s7
表示要重新 resync 第1顆的第七個分割區,然後依序把 Needs maintenance 的分割區都下完,可同時執行,然後再下
# metastat | grep sync
去看完成的狀態,即可復原

2009年3月26日

自動刪除一個月前的 LOG

自動刪除30天前的放在 /oracle/tmp下全部副檔名為log的檔案
find /oracle/tmp/*.log -mtime +30 -exec rm -rf {} \;
再把此行放在 crontab 裡面,這樣就不用常收到硬碟空間不足的告警了~

P.S 可先用 find /oracle/tmp/*.log -mtime +30 -exec ls -al {} \;
來列出要處理的檔案,再把 ls -al 改成你想要的指令就可以了

2009年3月18日

Perl 一行程式解決Email置換問題

由於公司被合併了~ 所以原本程式中發告警或報表都是採用mail的方式,所以程式中mail address也要改成新的郵件帳號,由於大家的程式一大堆,又雜在不同目錄裡,所以一定要用程式來自動修改才比較理想,在Unix下處理字串最強的程式那就是Perl了,希望能達到下一行指令就能全部搞定的目標~

舊的mail為: taiwanwolf@abc.com.tw
新的mail為: taiwanwolf@def.com.tw

大家的程式都放在 /home/個人目錄下

Perl 的一行程式簡介,當然要來個 Hello World示範~

#perl -e 'print "hello World\n"'
這樣就會印出 hello World

至於自動置換email的作法如下:

進入要改的目錄,其目錄下的檔案為修改的目標
#cd /home
執行此指令,將檔案中有 @abc.com.tw 的字串置換成 @def.com.tw
#perl -i.bak -pe 's/\@abc.com.tw/\@def.com.tw/g' *

參數說明:
-i.bak
將會修改的檔案,自動備份為 *.bak,不加.bak的話就會直接替換掉,不會備份
-e
執行 command line 一定要加
-p
loops 會不斷重複執行

終極版:如果要 /home 與裡面所有子目錄內的檔案都要改到的話,就要再加上 grep 的加持
#perl -i.bak -pe 's/\@abc.com.tw/\@def.com.tw/g' `grep -ril @abc.com.tw *`

2009年3月13日

Windows 開機自動登入

[開始] -> [執行] 然後輸入 control userpasswords2
接著會出現使用者帳戶的視窗



把打勾取消,按套用


輸入要自動登入的帳號的密碼,然後按下確定


搞定!

如何使idle的連線不會被斷線

最近公司換firewall,結果導致我們用Putty的一些SSH連線老是被斷線,原因應該是防火牆會計算連線的idle時間,超過一定的時間沒動作就會中斷,好在Putty有提供 keep alive功能,設定方法如下圖


我是設180秒,每3分鐘Putty就會送訊號跟 Server 來Keep Alive,這樣就可以保持連線不中斷了!

2009年3月12日

Windows 下用Sun VirtualBox 開機自動開啟Host OS

我是把VirtualBox灌在D槽,然後HostOS安裝時取名叫 ubuntu,所以語法如下~

-----我是分隔線-----
@ECHO OFF
"D:\Program Files\Sun\xVM VirtualBox\VirtualBox.exe" -startvm ubuntu
-----我是分隔線-----

把此檔用編輯器存成bat檔,放入程式集的[啟動]中,下次開機就會自動開啟HostOS了

2009年3月10日

讓使用者可以使用FTP,但不能SSH進來

前陣子在CentOS上灌了Proftpd這個FTP Server,已可正常運作,但他的使用者是直接採用Server上的使用者,所以如果要建FTP帳號等於就要建系統帳號,所以就有安全性上的顧慮,找了一下可以修改 /etc/passwd 裡面的內容把使用者的 shell 指定為 /sbin/nologin,範例如下:
步驟1:
vim /etc/passwd
步驟2: (例如要讓net這個使用者能夠進ftp但不能SSH進來,就把
原來
ntp:x:38:38::/etc/ntp:/sbin/nologin
net:x:503:504::/home/net:/bin/bash
改變後
ntp:x:38:38::/etc/ntp:/sbin/nologin
net:x:503:504::/home/net:/sbin/nologin
存檔之後無需 reload 就可測試了

2009年2月26日

[Linux] 沒有固定IP的人,如何利用動態域名架站

本文適用於有浮動IP的使用者,例如一般的ADSL用戶應該都有很多組的浮動IP,利用動態 DNS 的對應,讓你可以像具有固定IP一樣的效果,卻不用花半毛錢~

作業系統:Linux 或 FreeBSD均適用
DDNS提供者:

首先請先上 dyndns 網站去申請一組免費的 Domain name

然後安裝 dyndns 的dns client在網頁伺服器上
yum -y install ddclient

安裝完畢後,編輯設定檔如下 vim /etc/ddclient/ddclient.conf
(假設申請的 domain name是 taiwanwolf.dyndns.com)


daemon=600
cache=/tmp/ddclient.cache
pid=/var/run/ddclient.pid
use=web, web=checkip.dyndns.com/, web-skip='IP Address'
login=您申請 dyndns 的登入帳號
password=您申請 dyndns 的登入密碼
protocol=dyndns2
server=members.dyndns.org
mx=taiwanwolf.dyndns.com
wildcard=YES
taiwanwolf.dyndns.com

之後再去 vim /etc/rc.local,加上下面這行把它設成開機啟動
/usr/sbin/ddclient

這樣就每隔600秒就會把你伺服器的IP,跟你的Domain name作同步,之後使用者只要在瀏覽器上打 http://taiwanwolf.dyndns.com 就可以連到你的網站了!

2009年2月18日

[艋舺] 2009 龍山寺元宵節花燈 & 鑽燈腳

星期六陪爸媽去龍山寺拜拜祈求身體健康,剛好碰到新曆2/14 西洋情人節,所以龍山寺的前方是傳統的信眾在排隊在觀世音菩薩的燈籠下拜拜祈福,後殿是許多年輕的男女在月下老人前面祈求好姻緣~

龍山寺正門

觀世音菩薩的平安總燈,大家在這邊排隊,要站在燈下祈福

鑽燈腳由來,有提到LP等 XD

牛神正面

牛神背面

池塘旁的魚跟仙女

後殿也是人潮洶湧

後殿真的有擺放月下老人在外面


希望藉由部落格上的照片,祝大家2009年都能身體健康,事事如意!

Linux 環境下,利用Wireshark或Tcpdump擷取封包

在這邊我們利用 Wireshark 跟 Tcpdump 兩種方式來抓封包,觀看問題

法1: 使用 Wireshark的文字版 tshark

語法 tshark -i -f
Ex. 抓預設 eth0 的 80 Port 的封包
# tshark -i eth0 -f "tcp port 80"

Ex. 看 eth1 並標準化時間,然後只抓有關於 203.67.21.33 並儲存在 /tmp/test.pcap ,同時也即時show在螢幕上
# tshark -i eth1 -t ad host 203.67.21.33 -w /tmp/test.cap -S

Ex. 讀取封包
#tshark -r /tmp/test.cap

Ex. 讀取並過濾封包,只要看 sip 號碼是 070123456 的並存檔為 070123456.cap
tshark -r dhcp_0120_1737_1807.cap.gz -R "sip contains 070123456" -w 070123456.cap


此外wireshark有內建許多統計功能,只要使用 -z 選項配合相關的參數使用,例如要看packet summary,只要使用 tshark -z io,stat,1 -q -n -i eth0,然後再搭配shell與RRD等,就可以畫出統計圖表。

法2: 使用 Tcpdump

Ex.抓封包
# tcpdump -i eth0 -w abc.cap

Ex. 抓封包,分割每個儲存的封包(size 1500bytes)
# tcpdump -i eth0 -s 1500 -w a.cap

Ex. 讀封包
# tcpdump -r abc.cap

P.S 大部分抓封包都需切換成 Root 權限才能使用

2009年2月13日

找出缺少的檔案,在什麼套件中

日前要安裝 C 的Header檔案 stdio.h,可是不知道在什麼套件裡面,於是
就用 yum provides '*/stdio.h',結果發現是在 glibc-headers
再用 yum install glibc-headers,就搞定了~

P.S 以上是 Fedora / CentOS等的用法,Debian跟Ubuntu是 sudo apt-get install libc6-dev

2009年2月11日

yum 發生錯誤訊息

今天使用 yum 安裝軟體,發生一個錯誤
Existing lock /var/run/yum.pid: another copy is running. Aborting.
此時不用擔心,只要
rm -rf /var/run/yum.pid
再試試看應該就可以了~

2009年2月3日

一行刪除程式所有的 Process

前幾天裝了 X windows, 所以要遠端用 VNC 連進來用 X11,由於設定的一些問題,所以建了一個設定檔,要自動開啟VNC,並把舊的VNC Session刪除,由於刪除需要用到找出VNC的PID,語法如下

ps aux | grep vnc | grep -v grep | awk '{print $2}'

但是這樣只會列出PID數字,還無法達成一行刪除,問了同事發現有個 xargs的好東西,所以要刪掉某個程式的所有 Process (這裡以VNC為例) 的語法如下

ps aux | grep vnc | grep -v grep | awk '{print $2}' | xargs -L1 kill

這樣就會把前面 stdout 出來的 PID 數字,再倒給 kill 去砍囉~

2009年2月2日

CentOS 安裝完的中文顯示亂碼

由於資料庫的關係,所以必須安裝較舊版本的Centos v4.7,安裝完後用 vim 編輯檔案卻出現提示的說明都亂碼,查了一下發現只要改設定就好了

step1: vi /etc/sysconfig/i18n (修改i18n檔案)
step2: 將原本內容去除,改為改為如下
LANG="zh_TW.Big5"
SUPPORTED="zh_TW.Big5:zh_TW:zh"

存檔之後,重新連線一次,應該就搞定!

查看 Linux 系統資訊常用指令

lspci -v => 檢查系統 PCI 介面的各項裝置
lsusb => 檢查系統USB介面的裝置
lsscsi => 檢查系統SCSI介面的裝置
cat /proc/cpuinfo => 顯示CPU的資訊
cat /proc/meminfo => 顯示記憶體的資訊
free => 顯示記憶體的相關資訊
dmidecode => 查看硬體的相關資訊
hdparm -i /dev/hda => 硬碟的各項資訊
dmesg => Linux Kernel 運作過程當中所顯示的各項訊息記錄
uname -a => 顯示Linux系統資訊
cat /proc/version => 查看 Linux 核心
cat /etc/issue => 查看 Linux 系統版本
smartctl -a /dev/sda => 查看硬碟詳細資訊及型號

2009年1月22日

CentOS v5.2 安裝 PPTP Server



--先檢查系統 MPPE, 基本上CentOS預設都有, 看到ok就可繼續往下
modprobe ppp-compress-18 && echo ok

--下載套件, 我們用的是 poptop 的套件
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-1.rhel5.1.i386.rpm
wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-9.0.rhel5.i386.rpm

--安裝
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
rpm -ivh ppp-2.4.4-9.0.rhel5.i386.rpm

--設定Server基本資料
vim /etc/pptpd.conf

option /etc/ppp/options.pptpd
logwtmp
#這個是你Server的IP, 我是用ddns對應的所以也可以打domain
localip mylab.dyndns.org
#
這是你要發給User的虛擬IP, 這裡的意思是從11開始發到20,總共可以有十個User同時上線
remoteip 192.168.2.11-20

--新增PPTP帳密
vim
/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# 以下是新增使用者 taiwanwolf 密碼為 1234
taiwanwolf pptpd 1234 *

--設定 run level
chkconfig --level 35 pptpd on

--可以啟動服務囉
service pptpd start

--為了讓使用者的封包可以出得去, 還需改一下
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

--讓設定生效
sysctl -p

--在iptables要增加以下設定
#PPTP
/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 47 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT

--如果User撥上後出不去, 可在iptables加上以下設定
/sbin/iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

2009年1月14日

Linux CST / EST 時區問題

灌完 coLinux 的 Fedora 之後, 去看 date 時間發現是用 EST 的時區, 利用NTP去校時 /usr/sbin/ntpdate -s time.stdtime.gov.tw,時間也不對,爬文一下發現用下面的方法就可以變回正確的時區

把正確的時區檔案複寫到 /etc/localtime
cp -rf /usr/share/zoneinfo/Asia/Taipei /etc/localtime

編輯時間檔案
vim /etc/sysconfig/clock

內容如下
ZONE='Asia/Taipei'
UTC=false
ARC=false

存檔之後再下一次 date 指令觀看,應該已經正常囉~

2009年1月10日

[SE G900] 解決UIQ軟體簽章問題 -- Symbian UIQ3 適用

為了觀看影片, 爬文了一下, 發現一個軟體 coreplayer 功能很強大, 可讓手機觀看 H.264 (AVC), AVCHD, MKV, MPEG-1, MPEG-4 part 2 (ASP), DivX, XviD, WMV*, Theora*, Dirac*, MJPEG, MSVIDEO1 等格式的檔案, 所以就抓下來試試, 但在安裝在 G900 的時候, 卻顯示 受保護的UID 無法安裝, 為此又去爬文發現軟體需要驗簽, 下面的方法可把驗簽的步驟略過, 往後安裝軟體皆可暢行無阻了~

step1 : 先安裝 CapsSwitch , 安裝完後選開啟, 開啟程式後, 看到 Capabilities are switched 預設是 On 點選Switch 改為 Off , 解除鎖定隱藏的C槽目錄

step2 : 安裝 Swiss Manager , 以便能瀏覽手機C槽的目錄

step3 : 下載 installserver v1.1 , 將 installserver.exe 複製到手機的 c:\sys\bin 目錄下

step4 : 再安裝一次 coreplayer.sis , 恭喜你可在手機上看影片了~

文章參考網站
這個小工具發生錯誤