#!/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月22日 星期二
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
/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
#########################################################
##########################################################
#!/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的相關資訊及可
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秒,如果重覆執行,則覆蓋原檔案。
##########################################################
----
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 man查詢就像與老婆的對話
多多留心,方可以大事化小,水到渠成
不過Linux回應只有淡淡的一字done;但老婆笑容卻是無價的
Linux的學習
想想想了很久
Linux到底要不要整理個什麼東西出來呢
Linux不像微軟,有戴老師SOP和官方的照著做就會錯的文獻
Linux很特別,有的是 自己的雙手 和 可靠的log
Guru老師最喜歡的一句話: " 去追 "
雖然不是女朋友或者老婆但是還是要去追
戲劇性的有趣結果
就像追女朋友一樣,有心人總會抱得美人歸
但也有不少人在裡面跌得滿頭包,不知不覺中也為下一段感情鋪路
畢竟每一段感情的追求過程,每個人的處理的方式也都不同
錯過的,不行再錯。做對的,持之以恆。
當然有時候也必須詢問情場高手,但高手總是大概講個方向
然後叫你多試試多失敗,就會變成高手了
所以想想想了很久,還是一句老話
" Linux就像老婆一樣,要花時間去陪她的 "
Linux到底要不要整理個什麼東西出來呢
Linux不像微軟,有戴老師SOP和官方的照著做就會錯的文獻
Linux很特別,有的是 自己的雙手 和 可靠的log
Guru老師最喜歡的一句話: " 去追 "
雖然不是女朋友或者老婆但是還是要去追
戲劇性的有趣結果
就像追女朋友一樣,有心人總會抱得美人歸
但也有不少人在裡面跌得滿頭包,不知不覺中也為下一段感情鋪路
畢竟每一段感情的追求過程,每個人的處理的方式也都不同
錯過的,不行再錯。做對的,持之以恆。
當然有時候也必須詢問情場高手,但高手總是大概講個方向
然後叫你多試試多失敗,就會變成高手了
所以想想想了很久,還是一句老話
" Linux就像老婆一樣,要花時間去陪她的 "
訂閱:
文章 (Atom)