2009年12月22日 星期二

[Linux] Incremental Backup Shell Script

#!/bin/bash
#判斷下列目錄是否存在,如不存在則建立
[ -d /var/backup ] || mkdir /var/backup
[ -d /var/log/backup ] || mkdir /var/log/backup

#完全備份,先把該資料夾所有的acl寫入至一個檔案。檢查snapshot_file是否存在,
#如果存在則刪除,主要是不影響完全備份。tar 照相snapshot_file並
#建立且壓縮full-date.tar.gz的tarball,運用tee把過程寫入輸出至last-backup且
#輸入至backup-date.log。$?=0 為真
full (){ getfacl -R /home > /home/acls-`date +%F`
         [ -f /var/log/backup/snapshot_file ] && rm /var/log/backup/snapshot_file
         tar -cz -g /var/log/backup/snapshot_file -f /var/backup/full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
         x=`echo $?`
         touch /var/log/backup/last-backup
       }

#增量備份,先把該資料夾所有的acl寫入至一個檔案。
#tar 比對之前的照相snapshot_file,比對後且重新照張相,並將比對出不一樣的檔案
#建立且壓縮incremental-date.tar.gz的tarball,運用tee把過程寫入輸出至last-backup且
#輸入至backup-date.log。$?=0 為真
incr (){ getfacl -R /home > /home/acls-`date +%F`
         tar -cz -g /var/log/backup/snapshot_file -f /var/backup/incremental-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
         x=`echo $?`
       }

#取得今天是星期幾,存於DOW內
DOW=`date +%a`

#判斷DOW,只有星期一才要完全備份,其餘工作天都使用增量備份
case "$DOW" in
Mon) full ;;
Tue) incr ;;
Wed) incr ;;
Thu) incr ;;
Fri) incr ;;
esac

#用ssh連線遠端同步
rsync -a /var/backup -e ssh root@10.120.14.117:/root/

# x!=0 為偽。兩個函式執行完tar的$?的值
if [ $x -ne 0 ] ; then
echo "" | mail -s "Backup Failed!" root
fi

exit 0
#

2009年12月20日 星期日

[Linux] Apahce 整合到 syslog-ng

SLES 10

/etc/apache2/httpd.conf
--------------------------
|       ErrorLog  syslog:user
|       LogLevel  warn

上面那個LogLevel改不改無所謂  到最後會被覆蓋掉

/etc/sysconfig/apache2
---------------------------
|      APACHE_ACCESS_LOG="syslog:user  combined"
|      APACHE_LOGLEVEL="[自選]"

以上大綱  剩下看文件
syslog-ng設定檔的部分就跟老師上課的一樣



不過最後訊息不能全部整合,訊息如下
Dec 20 21:40:47 Linux gconfd (root-13560): Resolved address "xml:readwrite:/root/.gconf" to a writable configuration source at position 0


Dec 20 21:40:51 Linux kernel: ISO 9660 Extensions: Microsoft Joliet Level 3

Dec 20 21:40:51 Linux kernel: ISO 9660 Extensions: RRIP_1991A

Dec 20 21:40:51 Linux zmd: NetworkManagerModule (WARN): Failed to connect to NetworkManager

Dec 20 21:40:58 Linux zmd: Daemon (WARN): Not starting remote web server

Dec 20 21:41:50 Linux httpd2-prefork[12891]: [error] [client 192.168.150.1] File does not exist: /srv/www/htdocs/index


但是apache原始的access_log,如下
192.168.150.1 - - [20/Dec/2009:21:17:32 +0800] "GET / HTTP/1.1" 200 553 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)"


192.168.150.1 - - [20/Dec/2009:21:17:32 +0800] "GET /icons/folder.gif HTTP/1.1" 304 - "http://192.168.150.22/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)"

192.168.150.1 - - [20/Dec/2009:21:17:32 +0800] "GET /icons/blank.gif HTTP/1.1" 304 - "http://192.168.150.22/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)"

192.168.150.1 - - [20/Dec/2009:21:18:03 +0800] "GET /index.html HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)"

 
也就是說不能整合進來資訊太多了,整能簡簡單單的看到user連結錯誤的網頁會有個error紀
錄,但是apache內建的資訊卻是相當龐大的,有連線回應和連線錯誤都有紀錄,再來還有很
多很多,有興趣的請看apache的log文件,有格式教學。

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html
 

2009年12月19日 星期六

[Linux] Shell Script Homework2

2.設計一個名為manymaxmin的script,使其可以接收不固定的多個數字參數,顯示數字中最大的及最小的,如果都一樣大,則顯示都一樣大。
##########################################################
#!/bin/sh

for x in $@
do
  if [ -z "$max" ]
  then
    max=$x
    min=$x
  fi
  if [ $max -lt $x ]
  then
    max=$x
  elif [ $min -gt $x ]
  then
    min=$x
  else
    continue
  fi
done

if [ $min -eq $max ]
then
  echo "equal"
else
  echo "Max=$max"
  echo "Min=$min"
fi

exit 0
##########################################################

3.設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,檔名分別為myprog1.c,myprog2.c,...,myprog10.c。
##########################################################
#!/bin/sh

for ((i=1;i<=10;i++))
do
  touch myprog$i.c
done

exit 0
##########################################################

4.設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。
##########################################################

#!/bin/sh
ls -t | head -n $1

exit 0
##########################################################
5.設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,副檔名更名為.cpp,更名前後的副檔名均自命令列輸入。並將更名的結果顯示出來。
##########################################################

#!/bin/sh
for file in *$1
do
  mv $file `basename $file $1`$2
  echo renamed $file to `basename $file $1`$2
done

exit 0
#########################################################

2009年12月9日 星期三

[Linux] SLES 10 安裝 Joomla 所需套件

Apache2所需套件與模組
    apache2
    apache2-devel
    apache2-doc
    apache2-mod_auth_mysql
    apache2-mod_php5
    apache2-prefork
    libapr-util1
    libapr-util1-devel
    libapr1
    libapr-devel
PHP所需套件與模組
    apache2_mod_php5
    php5
    php5-bz2
    php5-devel
    php5-gd
    php5-mysql
    php5-zlib
MySql所需套件與模組
    apache2-mod_auth_mysql
    mysql
    mysql-client
    mysql-devel
    mysql-shared
    per1-DBD-mysql
    php5-mysql

有些不一定是必要的,只是習慣裝一裝,日後問題也少
啟動apache2、mysql、解壓縮joomla至apache2網頁空間內

mysql啟動時,請設定root密碼,啟動時會有相關訊息
joomla相關檔案的owner和group改成  u: wwwrun   g: www
configuration.conf資料夾內就有範例,補上Database的相關資訊及可


 

2009年12月3日 星期四

[Linux] Shell Script Homework1

Linux Shell Script Programming hw 1
----

1.設計一個名為showme的script,藉由環境變數及一些Linux指令,使其可以顯示資訊如下:
##########################################################
#!/bin/sh
echo "Login ID: $LOGNAME"
echo "My Home: $HOME"
echo "List My Home Directory"
ls -l /root
echo "My Shell: $SHELL"
echo "Hostname: $HOSTNAME"
pwd
ls -l

exit 0
##########################################################

2.設計一個名為verbvar的script,利用read輸入一個簡單的英文動詞,在其前加入一個to印出
原形,字尾加ing印出作為進行式,字尾加ed印出作為過去式
##########################################################
#!/bin/sh
echo -n "Please Enter The Verb:"
read word
echo "Present tense: to ${word}"
echo "Past tense: ${word}ed"
echo "Progressive tense: ${word}ing"

exit 0
##########################################################

3.設計一個名為addtwo的script,使其可以接收兩個數字參數,並將其相加後的結果顯示出來,
如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式必須給
兩個參數。
##########################################################
#!/bin/sh
if [ $# -eq 2 ]
then
  echo "sum = `expr $1 + $2`"
else
  echo "Usage: ./addtwo number1 number2"
fi

exit 0
##########################################################

4.設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字,第二
個參數為運算子(+-*/其中之一)以多層的if計算其結果,並將其結果顯示出來,如果參數個
數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式。如果中間的運
算子是/,而第三個參數是0,則顯示除數不可為0
##########################################################
#!/bin/sh
if [ $# -eq 3 ]
then
  if [ "$2" = "+" ]
  then
    echo "result = `expr $1 + $3`"
  elif [ "$2" = "-" ]
  then
    echo "result = `expr $1 - $3`"
  elif [ "$2" = "*" ]
  then
    echo "result = `expr $1 \* $3`"
  elif [ "$2" = "/" ]
  then
    echo "result = `expr $1 / $3`"
  else
    echo "you have worng format"
  fi
else
  echo "you have worng format"
fi

exit 0
##########################################################

5.設計一個名為getmax的script,使其可以接收兩個數字參數,將較大的數顯示出來,如果
都一樣大,則顯示都一樣大。
##########################################################
#!/bin/sh
if [ $1 -gt $2 ]
then
  echo "Max = $1"
fi
if [ $1 -eq $2 ]
then
  echo "Equals"
fi
if [ $1 -lt $2 ]
then
  echo "Max = $2"
fi

exit 0
##########################################################

6.設計一個名為checkfile的script,使其可以接收一個檔案名稱作為參數,若此名稱不是目
前工作目錄的檔案或目錄,則顯示此名稱不存在,如果是檔案,則顯示其檔案內容,如
果是一目錄則顯示此目錄內的清單。
##########################################################
#!/bin/sh
if [ -e "$1" ]
then
  if [ -f "$1" ]
  then
    cat $1
  elif [ -d "$1" ]
  then
    ls -l $1
  else
    echo "permission deny"
  fi
else
  echo "no file or directory"
fi

exit 0
##########################################################

7.設計一個名為newerfile的script,使其可以接收兩個檔案名稱作為參數,並將日期較新的
檔案名稱顯示出來。
##########################################################
#!/bin/sh
if [ $1 -nt $2 ]
then
  echo "$1 is newer"
else
  echo "$2 is newer"
fi

exit 0
##########################################################

8.設計一個名為avglen的script,使其可以接收一個檔案名稱(文字檔)作為參數,計算此檔
平均每一列有多少bytes。提示:使用wc -l < 檔名; 用man查一下wc的用法
##########################################################
#!/bin/sh
x=`wc -l < $1`
y=`wc -c < $1`

echo "$y $x"
echo "average bytes per line is `expr $y / $x`"

exit 0
##########################################################

9.設計一個名為createtodayfile的script,以touch指令產生一個檔案,檔名中含有今天的日
期,例如myfile20090706.txt。date +%Y...., 其餘date的日期格式, 請以man指令查詢
##########################################################
#!/bin/sh
x=`date +%Y%m%d`
touch myfile$x.txt

exit 0
##########################################################

10.設計一個名為addfiles的script,可自命令列讀取參數產生檔案allfile,如下,每加入一個
檔案,隔2秒,如果重覆執行,則覆蓋原檔案。
##########################################################

2009年12月1日 星期二

Linux的學習 常用指令與man

Linux常用指令就好比老婆的習慣
要記,不記就會不知所措,大眼瞪小眼
不過值得慶幸的是Linux最多就不理你;但老婆會生氣

Linux man查詢就像與老婆的對話
多多留心,方可以大事化小,水到渠成
不過Linux回應只有淡淡的一字done;但老婆笑容卻是無價的

Linux的學習

想想想了很久

Linux到底要不要整理個什麼東西出來呢
Linux不像微軟,有戴老師SOP和官方的照著做就會錯的文獻
Linux很特別,有的是 自己的雙手 和 可靠的log

Guru老師最喜歡的一句話: " 去追 "
雖然不是女朋友或者老婆但是還是要去追
戲劇性的有趣結果
就像追女朋友一樣,有心人總會抱得美人歸
但也有不少人在裡面跌得滿頭包,不知不覺中也為下一段感情鋪路

畢竟每一段感情的追求過程,每個人的處理的方式也都不同
錯過的,不行再錯。做對的,持之以恆。
當然有時候也必須詢問情場高手,但高手總是大概講個方向
然後叫你多試試多失敗,就會變成高手了
所以想想想了很久,還是一句老話
" Linux就像老婆一樣,要花時間去陪她的 "