2011-01-25

[Shell] backup mysql data by day (note)

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

DATE=$(date +%Y%m%d)
TARGET=/root/my_backup
OPT="--opt -c -n -t --skip-triggers"
ID="root"
PW="1234"
DB="mydb"

TMP=$TARGET/$DB.$DATE.bak.sql"
BAK=$TARGET/$DB.$DATE.bak.tgz"

#==( Backup MySQL )=======================================
mysqldump -u$ID -P$PW $OPT $DB > $TMP
tar -zcf $BAK $TMP
rm $TMP

exit 0

[Shell] 依據遠端清單進行目錄同步

這個任務的狀況是:
有些新的檔案會被加入,而舊的檔案會被移除,檔案的內容基本上是不會變動的,所以可透過檔名來進行同步。


檔案下載與錯誤處理:
這裡用 curl 來處理下載的問題,並且當發生錯誤時重試三次。
#!/bin/bash
# download_file.sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

LIMIT=3 # retry 3 times
LOCAL_PATH=$1
REMOTE_URL=$2
FILE_NAME=$3

while [ $LIMIT \> 0 ] ; do
    #echo $REMOTE_URL/$FILE_NAME
    rm -f $LOCAL_PATH/$FILE_NAME.tmp
    curl -f -o $LOCAL_PATH/$FILE_NAME.tmp $REMOTE_URL/$FILE_NAME  > /dev/null
    if [ "$?" == "0" ]; then
        mv -f $LOCAL_PATH/$FILE_NAME.tmp $LOCAL_PATH/$FILE_NAME
        exit 0;
    fi
    LIMIT=$(($LIMIT-1))
done      

exit 1;


清單比較:
從遠端下載檔案清單與本地端的目錄進行比對,並處理刪除跟下載的動作。
#!/bin/bash
# folder_sync.sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

REMOTE_URL=http://remote_site/pics
REMOTE_LIST_URL=http://remote_site/pics/file.list
LOCAL_PATH=/var/www/pics

# get remote list
REMOTE_LIST=$(curl -f $REMOTE_LIST_URL |tr -d '\r')
if [ "$?" != "0" ]; then  exit 1; fi

# get local list
cd $LOCAL_PATH
LOCAL_LIST=$(ls -1)
if [ "$?" != "0" ]; then
    LOCAL_LIST=""
fi    


# Check loacl file exists in the list
for ITEM in  $LOCAL_LIST ; do
    echo "$REMOTE_LIST" |grep "^$ITEM\$"  > /dev/null
    if [ "$?" != "0" ]; then
        # delete old file
        rm -f $ITEM  &> /dev/null
    fi
done

# Check remote file exists in the list
for ITEM in  $REMOTE_LIST ; do
    echo "$LOCAL_LIST" |grep "^$ITEM\$"  > /dev/null
    if [ "$?" != "0" ]; then
        # download new file
        download_file.sh $LOCAL_PATH $REMOTE_URL $ITEM &> /dev/null
    fi
done

exit 0;

2011-01-24

[Shell] 透過版本編號與遠端的 package 同步

有一個的任務是要將一個用 tar 封裝的目錄從 server 端同步到 client 上,然後有機個考量點:
  • 必須確保 client 永遠都讀得到資料
  • 最小的資料中斷
  • 最小的硬碟存取
  • 必要的錯誤處理


建立 server 端的 package
#!/bin/bash
# package_build.sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

PROJECT_NAME=metadata
SOURCE_PATH=/var/projects
PORTING_PATH=/var/www

PACKAGE_NAME=$PROJECT_NAME.$(/bin/date +%s)
OLD_PACKAGE=$(find $PORTING_PATH -name "$PROJECT_NAME.*.tgz")

# Create Package
cd $SOURCE_PATH/$PROJECT_NAME
tar -zcf $PORTING_PATH/$PACKAGE_NAME.tgz ./*

# Update version number to release
echo $PACKAGE_NAME > $PORTING_PATH/$PROJECT_NAME.latest

# remove old version
#rm -f $OLD_PACKAGE

echo -e "<< $PACKAGE_NAME package complete >>"
exit 0


client 端的同步處理
#!/bin/bash
# package_sync.sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

REMOTE_URL=http://remote_site/
TARGET_PATH=/var/www
PROJECT_NAME=metadata
PROJECT_PATH=$TARGET_PATH/$PROJECT_NAME


# get now version
NOW_VERSION=$PROJECT_NAME.0000000000
if [ -h "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
    NOW_VERSION=$(readlink $PROJECT_PATH)
fi
echo -e 'NOW_VERSION' $NOW_VERSION


# get remote version 
REMOTE_VERSION=$(curl -f $REMOTE_URL/$PROJECT_NAME.latest |tr -d '\r')
if [ "j$?" != "j0" ]; then  exit 1; fi
echo -e 'REMOTE_VERSION' $REMOTE_VERSION


# deff version, not deff goto exit.
if [ ! "$NOW_VERSION" \< "$REMOTE_VERSION" ]; then  exit 0; fi



echo -e "Update package"

# create now version folder
mkdir -p $TARGET_PATH/$REMOTE_VERSION
if [ "$?" != "0" ]; then  exit 1; fi

# Download Package
cd $TARGET_PATH/$REMOTE_VERSION
curl -o $PROJECT_NAME.tgz $REMOTE_URL/$REMOTE_VERSION.tgz
if [ "$?" != "0" ]; then  exit 1; fi

# Decompression Package
tar -zxf $PROJECT_NAME.tgz
rm -f $PROJECT_NAME.tgz

# Update version link
cd $TARGET_PATH
ln -sfn $REMOTE_VERSION $PROJECT_NAME

# remove old version
rm -rf $NOW_VERSION

exit 0;

[Shell] 等待所有子程序結束

當在用 shell 開其他子程序時,通常會希望在所有程序結束時做一些處理,最簡單的方式就是用一支迴圈去等待其他子程序的結束,這裡用到 jobs 這個指令去檢查子程序是不是還在執行。

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

# job msg log temp file
MSG_LOG=/tmp/job_log
rm -f $MSG_LOG

# background job function
bg_job(){
    JOB=$1
    sleep $JOB
    echo $JOB "End" >> $MSG_LOG
}


JOB_LIST=(
    "5"
    "6"
    "3"
    "4"
)
# run all job
for FLASH in "${JOB_LIST[@]}" ; do 
    bg_job $FLASH &
done


# Waiting for the end of all the job
while [ "j$(jobs -r)" != "j" ] ; do
    sleep 1
done

# show job msg
cat $MSG_LOG
echo "<< bg_job all complete >>"

exit 0;

2011-01-20

[Windows 群組原則]中的設定

Windows 群組原則中的設定,雖然大部分都看不懂或者沒多大幫助,但是有些設定還蠻有用的。

開啟[群組原則]

開始/執行 -> gpedit.msc

電腦設定/系統管理範本/系統 -> 關閉自動播放
啟用這個設定可以讓隨身碟或光碟停用自動播放,避免被 autorun.inf 病毒攻擊,當然也關閉了那煩人的對話匡
電腦設定/系統管理範本/系統/指令碼 -> 非同步執行啟動指令碼
啟用這個設定可以讓開機載入軟體時稍微快一點,不用一個等一個的。

2011-01-19

[Regedit] Oracle 日期格式及語言編碼設定

上次用到時沒有記下來,結果忘記了,這次先把他記下來。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ALL_HOMES\ID0]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

使用批次檔開關 Oracle 服務

因為在 NB 上灌了 Oracle 做開發用,可是每次開機都變得很慢,而且不是每天都會用到 Oracle,但常常開開關關服務真的很麻煩,索性找了一下批次檔開關服務的方法,寫了一個簡單的小工具,至少在處理這瑣碎的事可以快樂一點。

@echo off

set /p STATUS=Oracle Service status to [start/stop] : 

net %STATUS% "OracleMTSRecoveryService"
net %STATUS% "OracleOraHome92Agent"
net %STATUS% "OracleOraHome92TNSListener"
net %STATUS% "OracleServiceMYDB"

pause

[Regedit] 在『我的電腦』右鍵加入系統功能選項

將下面的登錄碼複製到筆記本,檔名存成 options.reg 然後再執行檔案就可以了,如果有不要的功能將 "HKEY_LOCAL_MACHINE" 換成 "-HKEY_LOCAL_MACHINE" 就可以了。

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Control]
@="控制台(&C)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Control\command]
@="rundll32.exe shell32.dll,Control_RunDLL"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\DevMgr]
@="裝置管理員(&D)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\DevMgr\command]
@="mmc.exe devmgmt.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\DiskMgmt]
@="磁碟管理"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\DiskMgmt\command]
@="mmc.exe DiskMgmt.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\EventVwr]
@="事件檢視器"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\EventVwr\command]
@="mmc.exe EventVwr.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\FsMgmt]
@="共用資料夾"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\FsMgmt\command]
@="mmc.exe FsMgmt.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\GroupEdit]
@="群組原則"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\GroupEdit\command]
@="mmc.exe gpedit.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\LusrMgr]
@="本機使用者和群組"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\LusrMgr\command]
@="mmc.exe LusrMgr.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PerfMon]
@="效能"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PerfMon\command]
@="mmc.exe PerfMon.msc"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Regedit]
@="登錄檔編輯器"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Regedit\command]
@="regedit"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Service]
@="服務(&F)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Service\command]
@="mmc.exe services.msc"

[MySQL] mysqldump & mysql command for UTF-8 database

最近在 windows 上匯出/匯入資料庫時遇到 UTF-8 編碼問題,奇怪之前在 linux 上執行從未遇到的說,原來 default-character-set 是 latin1,所以在匯出/匯入時要指定成 UTF-8 就沒問題了。

匯出資料庫
PATH=C:\wamp\bin\mysql\mysql5.5.8\bin

REM export 'dbname' database
mysqldump -uroot -p1234 --default-character-set=utf8 dbname > dbname.sql

REM other dbname ...
pause

匯入資料庫
PATH=C:\wamp\bin\mysql\mysql5.5.8\bin

REM import 'dbname' database
mysql -uroot -p1234 -e "DROP DATABASE IF EXISTS `dbname`;"
mysql -uroot -p1234 -e "CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
mysql -uroot -p1234 --default-character-set=utf8 dbname < dbname.sql

REM other dbname ...
pause

[Shell] 使用 sfdisk 分割硬碟

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

# disk path
DEVICE=/dev/sdb

# use sfdisk create device partition,size by Megabyte
sfdisk -uM $DEVICE <<EOF
,512
,512
EOF

# format to ext2
mke2fs $DEVICE"1"
mke2fs $DEVICE"2"

exit 0;

[C語言] 比對兩個檔案中的 list

這是用很簡單的方式比對兩個檔案中的 list
並不是很有效率就是了,只是希望比 shell 快一點

當 diffPath 檔案中的項目不在 basePath 的檔案裡,就會 print 出來。

#include <stdio.h>
#include <errno.h>
#include <string.h>

#define BUFFER_SIZE     300    /*char buffer size*/

int main(int argc, char *argv[]) {
    if(argc !=3 ){
        fprintf(stderr,"%s [diffPath] [basePath]\n",argv[0]); return 1;
    }

    FILE *diffFile, *baseFile;
    char diffChars[BUFFER_SIZE], baseChars[BUFFER_SIZE];

    if((diffFile=fopen(argv[1], "r")) == NULL){
        fprintf(stderr,"can't open diff file\n"); return 1;
    }
    if((baseFile=fopen(argv[2], "r")) == NULL){
        fprintf(stderr,"can't open base file\n"); return 1;
    }

    while(!feof(diffFile)){
        /* read diff item */
        fscanf(diffFile,"%s\n",diffChars);
    
        int isFind=0;
        /* find item exist */
        rewind(baseFile);
        while(!feof(baseFile)){
            fscanf(baseFile,"%s\n",baseChars);
            if(strcmp(diffChars,baseChars) == 0){ isFind=1; break; }
        }

        /* not find itme */
        if(!isFind){
            printf("%s\n",diffChars);
        }
    }

    fclose(diffFile);
    fclose(baseFile);

    return 0;
}

2011-01-18

CSS 常用命名表

版面類

欄目column
容器container
內容content
頁尾footer
頁首header
版型佈局layout
首頁index
頁面主體main
側欄sidebar

導航類

主導航main_nav
全域導航global_nav
導航nav
領行列navbar
左導航left_sidebar
右導航right_sidebar
子導航subnav
頂導航topnav
工具條toolbar

菜單類

菜單menu
子菜單submenu
菜單內容menu_content
菜單容器menu_container

樣式類

箭頭arrow
橫幅廣告banner
分界線boundary
按鈕btn
按鈕button
轉角/圓角corner
文字font
標題title
圖示icon
項目item
列表list
主要的master
頁面page
標示mark
分段section
邊導航圖標sidebar_icon
標籤頁tab
樣式/主題theme
閃爍twinkle
小部件widget
包裝器 wrapper
頁面外圍控制整體佈局寬度
區域zone

功能類

檢舉abuse
點擊這裡click_here
收藏coffin
塌陷collapse
完成的,結束的complete
改變,轉變conversion
當前的current
預設default
下載download
下拉drop
編輯edit
相等equals
例外exception
完成,結束finalize
折疊fold
雜湊hash
局部的localized
管理manager
方法method
即時通訊messenger
提示信息msg
註釋note
通知,告知;報告notify
語法分析parse
語法分析器parser
傳送pass
位置place
投票poll
發表文章post
預覽preview
列印print
發布publish
查詢query
收到,接到receive
重填reset
滾動scroll
搜索search
搜索框search_box
進階搜尋search_further
搜尋結果search_results
統計statistics
狀態status
串流stream
訂閱subscribe
送出submit
查詢訂閱subscriptions
小技巧tips
追蹤清單track
指導tutorial
上傳upload
驗證碼verification_code
觀看view
投票vote

內容類

檔案/文件archive
文章article
所有文章article_all
文章分類article_folder
招呼語blast
部落格blog
部落格資料blog_info
麵包屑bread_crumb
頁面所處位置導航提示
行事曆calendar
徵才careers
社群家族club
評論、評鑑comment
社群家族community
位置導航crumb
娛樂entertainment
電子報epaper
活動event
常見問題faq
回覆意見feedback
論壇forum
友情鏈接friend_link
強力搜尋gd_search_tech
留言板guestbook
指南guide
公會guild
熱門hot
熱門連結hot_link
學習learning
介紹introduce
徵才job
知識knowledge
新聞news
記事本notepad
即時訊息online_news
作品portfolio
活動比賽promo
排行rank
景點scenic
服務service
招呼語set_blast
即時留言板shoutbox
網頁導覽sitemap
技術支援support
旅遊travels
視訊video

網站類

關於about
關於我們about_us
公司company
公司簡介company_profile
聯絡contact
聯絡我們contact_us
版權資訊copyright
資訊info
網站標誌logo
商標label
組織organization
合作夥伴partner
薪資福利remuneration
摘要summary
系統system
網頁快訊web_slices

購物類

atmatm
現折活動allowance
配件appendix
紅利折抵bank_bonus
競標bid
取消訂單cancel
刷卡card
換貨change
推薦commend
優惠卷coupon
顧客customer
顧客服務customer_service
運送deliver
折扣discount
快速到貨express
購物流程flow
贈品gift
集殺group
詢價inquire
服務中心help
訂購單order
訂單查詢order_check
包裝packing
付費payment
集購payshop_flow
價格price
產品名稱product_name
產品products
嚴選保證promise
估價quotes
維修repair
退貨return
交易安全safety
購物shop
商店store
超商取貨付款store
補貨通知supply_info
信用卡線上分期time
統一編號unified business no.

會員類

通訊錄abook
帳務account
地址address
相簿album
申請apply
審核approval
黑名單black_list
信箱email
忘記密碼forgot_password
忘記帳號forgot_username
服務條款legal
登入login
登出logout
登入條login_bar
邀請朋友invite
加入join_us
會員member
會員登入member_login
個人personal
個人資訊personal_information
照片photo
隱私權政策privacy
個人簡介profile
個人相片profile_photo
註冊register
轉寄好友send_friend
註冊sign_up
登入sign_in
登出sign_out


參考來源:
CSS 常用命名参考 - PHP新手博客(phpabc‘s blog)
css常用命名
div+css命名规则 (注重SEO的朋友注意了)
Jane’s Blog: CSS 命名規則