1. 建立 virtual.bat,內容如下
@ECHO OFF
"D:\Program Files\Sun\xVM VirtualBox\VirtualBox.exe" -startvm ubuntu
其中 ubuntu 是 VirtualBox 裡面 VM 的名稱
2. 將此 bat 檔放入 "程式集" 的 "啟動" 中
2009年12月23日
2009年12月21日
2009年12月14日
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
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
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
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 出來的結果有沒有亂碼
利用 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 組合鍵,文字就會自動換行了
如果想讓文字強迫換行,必須按 Shift+Enter 組合鍵
Excel
如果想讓文字在儲存格中強迫分行,需在要換行的文字前,按 Alt+Enter 組合鍵,文字就會自動換行了
2009年8月29日
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 中,就可以每日更新最新資料製備份主機上了
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日
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;
}
#!/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;
}
標籤:
正規表示法 regexp,
判斷MAC,
mac address,
Perl
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
mergecap 語法 (將三個檔案合併成一個)
mergecap -w outfile.cap dhcp_200907231502.cap.gz dhcp_200907231510.cap.gz dhcp_200907231516.cap.gz
2009年6月26日
Solaris 如何進入Single User Mode
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),以上是本人親身慘痛經驗供各位網友參考
結論:
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 的連接,這樣就可以自動通過認證去後端做事情囉~
此時就可利用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日
備份及刪除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
這樣就可以刪掉了~
先進入該目錄
法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多年前的掌上型電玩復歸!
2009年6月5日
[日劇] 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 ,重開機後即可生效!
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";
}
#!/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%
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
存檔即可
在設定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
存檔即可
2009年4月7日
jQuery + AJAX + PHP 應用範例
ajax有很多技術,早先我是用xajax,但最近看了jQuery之後,覺得用法還蠻直接的,只要把jQuery的js檔案在HTML裡面include進來就可以直接使用語法,此外jQuery還支援很多Plugins及UI (User Interface)的操作,以下是一個很簡單的範例。
實際流程是:整個網頁載入後,會出現一個輸入姓名的欄位
此時可隨便輸入一個名字
按下Send按鈕,驅動ajax,並有loading效果
等待5秒後,下方將出現剛剛輸入的名字
程式流程:透過jQuery的ajax功能與後端Server的PHP程式溝通(此範例使用GET方法)之後,再把結果(echo 指令的output)丟回給前端的瀏覽器,只要這個範例能夠看懂,就等於打通任督二脈(前後端資料能溝通),之後想在後端查詢資料庫還是做運算等動作,就都沒有問題了~
前端:hello.htm 內容如下
後端 hello.php 的程式碼如下
<?php
$myname = $_GET['name'];
sleep(5); //為了製造 ajax loading效果,所以延遲5秒
echo "You input name is $myname <br>";
?>
至於ajax loading 時的BAR或小花旋轉等圖示,網路上有一個ajaxload圖示庫可以來製作
實際流程是:整個網頁載入後,會出現一個輸入姓名的欄位
此時可隨便輸入一個名字
按下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圖示庫可以來製作
標籤:
AJAX,
ajax loading,
jQuery,
jQuery ajax範例,
PHP
利用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即可進行還原或備份
備份成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即可進行還原或備份
標籤:
遠端備份ISO,
dd,
dd on the fly,
Linux,
Solaris 硬碟備份,
Unix
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
去看完成的狀態,即可復原
查看是硬碟的 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 改成你想要的指令就可以了
find /oracle/tmp/*.log -mtime +30 -exec rm -rf {} \;
再把此行放在 crontab 裡面,這樣就不用常收到硬碟空間不足的告警了~
P.S 可先用 find /oracle/tmp/*.log -mtime +30 -exec ls -al {} \;
來列出要處理的檔案,再把 ls -al 改成你想要的指令就可以了
標籤:
自動刪除 log,
網管自動化,
crontab,
find 找出30天前,
shell script
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 *`
舊的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日
如何使idle的連線不會被斷線
最近公司換firewall,結果導致我們用Putty的一些SSH連線老是被斷線,原因應該是防火牆會計算連線的idle時間,超過一定的時間沒動作就會中斷,好在Putty有提供 keep alive功能,設定方法如下圖
我是設180秒,每3分鐘Putty就會送訊號跟 Server 來Keep Alive,這樣就可以保持連線不中斷了!
我是設180秒,每3分鐘Putty就會送訊號跟 Server 來Keep Alive,這樣就可以保持連線不中斷了!
標籤:
斷線,
connection timeout,
firewall,
keep alive,
putty
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了
-----我是分隔線-----
@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 就可測試了
步驟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 就可測試了
標籤:
/etc/passwd,
/sbin/nologin,
能ftp不能ssh,
deny ssh,
proftpd
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 就可以連到你的網站了!
作業系統: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日
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 權限才能使用
法1: 使用 Wireshark的文字版 tshark
語法 tshark -i
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 權限才能使用
標籤:
抓封包,
linux 網路分析,
packet filter,
tcpdump,
tshark,
wireshark
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
就用 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日
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 去砍囉~
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日
查看 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 => 查看硬碟詳細資訊及型號
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對應的所以也可以打domainlocalip mylab.dyndns.org
#這是你要發給User的虛擬IP, 這裡的意思是從11開始發到20,
總共可以有十個User同時上線
remoteip 192.168.2.11-20
--新增PPTP帳密
/etc/ppp/chap-secrets
vim
# Secrets for authentication using CHAP
# 以下是新增使用者 taiwanwolf 密碼為 1234
taiwanwolf pptpd 1234 *
--設定 run level
chkconfig --level 35 pptpd on
--可以啟動服務囉
service pptpd start
--為了讓使用者的封包可以出得去, 還需改一下
vim /etc/sysctl.confnet.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 指令觀看,應該已經正常囉~
把正確的時區檔案複寫到 /etc/localtime
cp -rf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
編輯時間檔案
vim /etc/sysconfig/clock
內容如下
ZONE='Asia/Taipei'
UTC=false
ARC=false
存檔之後再下一次 date 指令觀看,應該已經正常囉~
標籤:
/etc/localtime,
colinux,
cst,
est,
Linux 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 , 恭喜你可在手機上看影片了~
文章參考網站
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 , 恭喜你可在手機上看影片了~
文章參考網站
標籤:
免驗簽,
受保護的UID,
coreplayer,
installserver,
se g900,
uiq3
訂閱:
文章 (Atom)