現在開始上 Server 嚕!! 相信需要clone 機器的機會將會很多!!! 由於Linux 預設會認網卡,所以Clone出來的機器,網路卡都會無法運作。
這時 ,設定一個好的 base 環境,就可以省掉很多麻煩滴!!
這邊就大概簡單提一下,優化 vim 編輯的環境 及 Clone後 網路卡也能運作正常的方法。
2009年12月24日 星期四
Shell Script Programming
1.設計一個名為showme的script,藉由環境變數及一些Linux指令,使其可以顯示資訊如下:
$ showme
我是 <- login name
我的家在 <- home directory
我的家有下列這些東西:
<- ls home directory
我的殼是 <- shell name
這台電腦是 <- host name
我目前的工作目錄是 <- present woring directory
目前的工作目錄有下列這些東西:"
<- ls present woring directory
----
2.設計一個名為verbvar的script,利用read輸入一個簡單的英文動詞,在其前加入一個to印出原形,字尾加ing印出作為進行式,字尾加ed印出作為過去式。
$ verbvar
請輸一個動詞: work
原 形: to work
進行式: working
過去式: worked
----
3.設計一個名為addtwo的script,使其可以接收兩個數字參數,並將其相加後的結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式必須給兩個參數。
$ ./addtwo 12 6
sum = 18
$
$ ./addtwo 12
Usage: ./addtwo number1 number2
$
----
4.設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)以多層的if計算其結果,並將其結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式。如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0
$ ./mycal 12 + 3
result = 15
$
$ ./mycal 12 - 3
result = 9
$
$ ./mycal 12 \* 3 # 注意:*為特殊符號,需加一倒斜線輸入
result = 36
$
$ ./mycal 12 / 3
result = 4
$
$ ./mycal 12 / 0
無法計算:除數不可為0
$
----
1.
#!/bin/sh
echo "I am $LOGNAME"
echo "My home in the $HOME"
echo "My home have `ls -l $HOME`"
echo "My shell is $SHELL"
echo "Host Name is $HOSTNAME"
echo "Working Directory is `pwd`"
echo "Directory have `ls -l`"
2.
#!/bin/sh
echo -n "Please enter word : "
read word
echo "one --> $word"
echo "two --> ${word}ed"
echo "three-> ${word}ing"
3.
#!/bin/sh
if [ "$#" = "2" ]
then
echo "$1 + $2 = $(($1+$2))"
else
echo "Please enter Usage: ./addtwo number1 number2"
fi
exit 0
4.
#!/bin/sh
#if [ "$#" = "3" ] && [ "$2" = "+" ]
[ "$2" = "-"]
[ "$2" = "*" ]
[ "$2" = "/" ]
if [ "$#" = "3" ]
then
case "$2" in
"+")
echo "$1 + $3 = $(($1+$3))"
;;
"-")
echo "$1 - $3 = $(($1-$3))"
;;
"*")
echo "$1 * $3 = $(($1*$3))"
;;
"/")
if [ "$3" = "0" ]
then
echo "number2 can't be zero"
else
echo "$1 / $3 = $(($1/$3))"
fi
;;
esac
else
echo "Please enter Usage: ./mycal number1 +,-,\*,/ number2"
fi
exit 0
$ showme
我是 <- login name
我的家在 <- home directory
我的家有下列這些東西:
<- ls home directory
我的殼是 <- shell name
這台電腦是 <- host name
我目前的工作目錄是 <- present woring directory
目前的工作目錄有下列這些東西:"
<- ls present woring directory
----
2.設計一個名為verbvar的script,利用read輸入一個簡單的英文動詞,在其前加入一個to印出原形,字尾加ing印出作為進行式,字尾加ed印出作為過去式。
$ verbvar
請輸一個動詞: work
原 形: to work
進行式: working
過去式: worked
----
3.設計一個名為addtwo的script,使其可以接收兩個數字參數,並將其相加後的結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式必須給兩個參數。
$ ./addtwo 12 6
sum = 18
$
$ ./addtwo 12
Usage: ./addtwo number1 number2
$
----
4.設計一個名為mycal的script,使其可以接收三個數字參數,第一、三個參數為數字,第二個參數為運算子(+-*/其中之一)以多層的if計算其結果,並將其結果顯示出來,如果參數個數不夠或太多,就不執行運算,而顯示一段訊息,提示出正確的執行方式。如果中間的運算子是/,而第三個參數是0,則顯示除數不可為0
$ ./mycal 12 + 3
result = 15
$
$ ./mycal 12 - 3
result = 9
$
$ ./mycal 12 \* 3 # 注意:*為特殊符號,需加一倒斜線輸入
result = 36
$
$ ./mycal 12 / 3
result = 4
$
$ ./mycal 12 / 0
無法計算:除數不可為0
$
----
1.
#!/bin/sh
echo "I am $LOGNAME"
echo "My home in the $HOME"
echo "My home have `ls -l $HOME`"
echo "My shell is $SHELL"
echo "Host Name is $HOSTNAME"
echo "Working Directory is `pwd`"
echo "Directory have `ls -l`"
2.
#!/bin/sh
echo -n "Please enter word : "
read word
echo "one --> $word"
echo "two --> ${word}ed"
echo "three-> ${word}ing"
3.
#!/bin/sh
if [ "$#" = "2" ]
then
echo "$1 + $2 = $(($1+$2))"
else
echo "Please enter Usage: ./addtwo number1 number2"
fi
exit 0
4.
#!/bin/sh
#if [ "$#" = "3" ] && [ "$2" = "+" ]
[ "$2" = "-"]
[ "$2" = "*" ]
[ "$2" = "/" ]
if [ "$#" = "3" ]
then
case "$2" in
"+")
echo "$1 + $3 = $(($1+$3))"
;;
"-")
echo "$1 - $3 = $(($1-$3))"
;;
"*")
echo "$1 * $3 = $(($1*$3))"
;;
"/")
if [ "$3" = "0" ]
then
echo "number2 can't be zero"
else
echo "$1 / $3 = $(($1/$3))"
fi
;;
esac
else
echo "Please enter Usage: ./mycal number1 +,-,\*,/ number2"
fi
exit 0
2009年12月22日 星期二
Shell Script Programming II
5.設計一個名為getmax的script,使其可以接收兩個數字參數,將較大的數顯示出來,如果都一樣大,則顯示都一樣大。
$ ./maxmin 18 15
max = 18
$
$ ./maxmin 15 15
Equals
$
----
6.設計一個名為checkfile的script,使其可以接收一個檔案名稱作為參數,
若此名稱不是目前工作目錄的檔案或目錄,則顯示此名稱不存在,如果是檔案,則顯示其檔案內容,如果是一目錄則顯示此目錄內的清單。
$ checkfile 名稱
----
7.設計一個名為newerfile的script,使其可以接收兩個檔案名稱作為參數,並將日期較新的檔案名稱顯示出來。
$ newerfile file1.txt file2.txt
file2.txt 較新
----
8.設計一個名為avglen的script,使其可以接收一個檔案名稱(文字檔)作為參數,計算此檔平均每一列有多少bytes。
提示:使用wc -l < 檔名; 用man查一下wc的用法
$ avglen yang.txt
平均每列: 348 bytes
----
9.設計一個名為createtodayfile的script,以touch指令產生一個檔案,檔名中含有今天的日期,例如myfile20090706.txt。
date +%Y...., 其餘date的日期格式, 請以man指令查詢
----
10.設計一個名為addfiles的script,可自命令列讀取參數產生檔案allfile,如下,每加入一個檔案,隔2秒,如果重覆執行,則覆蓋原檔案。
原始檔案:
$ cat filea.txt
aaaaa
$ cat fileb.txt
bbbbb
$ cat filec.txt
ccccc
執行程式:
$ ./addfiles allfile.txt filea.txt fileb.txt filec.txt
結果:
$ cat allfile.txt
--2009-09-08 16:25:33
aaaaa
--2009-09-08 16:25:35
bbbbb
--2009-09-08 16:25:37
ccccc
5.
#!/bin/sh
if [ $1 -gt $2 ]
then
echo "$1 VS $2 -> Max is $1"
elif [ $1 -lt $2 ]
then
echo "$1 VS $2 -> Max is $2"
else
echo "$1 VS $2 -> Equals"
fi
exit 0
6.
#!/bin/sh
file=$1
if [ -f "$file" ]
then
echo "`cat $file`"
elif [ -d "$file" ]
then
echo "`ls -l $file`"
else
echo "No such file or directory"
fi
exit 0
7.
#!/bin/sh
if [ $1 -nt $2 ]
then
echo "$1 VS $2 = New file is $1"
elif [ $1 -ot $2 ]
then
echo "$1 VS $2 = New file is $2"
else
echo "No such file. Please check!"
fi
exit 0
8.
#!/bin/sh
x=`wc -c < $1`
y=`wc -l < $1`
echo total is "$x"bytes
echo line is "$y"
echo "average is $((x/y))bytes."
9.
#!/bin/sh
x=`date +%Y%m%d`
echo "creat a file ---> myfile$x".txt
`touch myfile"$x".txt`
10.
#!/bin/sh
echo 1.touch "$1"
touch $1
y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
echo --$y-$m-$d\ $t > $1
cat $2 >> $1
sleep 2
echo "run1"
t=`date +%T`
echo --$y-$m-$d\ $t >> $1
cat $3 >> $1
sleep 2
echo "run2"
t=`date +%T`
echo --$y-$m-$d\ $t >> $1
cat $4 >> $1
exit 0
$ ./maxmin 18 15
max = 18
$
$ ./maxmin 15 15
Equals
$
----
6.設計一個名為checkfile的script,使其可以接收一個檔案名稱作為參數,
若此名稱不是目前工作目錄的檔案或目錄,則顯示此名稱不存在,如果是檔案,則顯示其檔案內容,如果是一目錄則顯示此目錄內的清單。
$ checkfile 名稱
----
7.設計一個名為newerfile的script,使其可以接收兩個檔案名稱作為參數,並將日期較新的檔案名稱顯示出來。
$ newerfile file1.txt file2.txt
file2.txt 較新
----
8.設計一個名為avglen的script,使其可以接收一個檔案名稱(文字檔)作為參數,計算此檔平均每一列有多少bytes。
提示:使用wc -l < 檔名; 用man查一下wc的用法
$ avglen yang.txt
平均每列: 348 bytes
----
9.設計一個名為createtodayfile的script,以touch指令產生一個檔案,檔名中含有今天的日期,例如myfile20090706.txt。
date +%Y...., 其餘date的日期格式, 請以man指令查詢
----
10.設計一個名為addfiles的script,可自命令列讀取參數產生檔案allfile,如下,每加入一個檔案,隔2秒,如果重覆執行,則覆蓋原檔案。
原始檔案:
$ cat filea.txt
aaaaa
$ cat fileb.txt
bbbbb
$ cat filec.txt
ccccc
執行程式:
$ ./addfiles allfile.txt filea.txt fileb.txt filec.txt
結果:
$ cat allfile.txt
--2009-09-08 16:25:33
aaaaa
--2009-09-08 16:25:35
bbbbb
--2009-09-08 16:25:37
ccccc
5.
#!/bin/sh
if [ $1 -gt $2 ]
then
echo "$1 VS $2 -> Max is $1"
elif [ $1 -lt $2 ]
then
echo "$1 VS $2 -> Max is $2"
else
echo "$1 VS $2 -> Equals"
fi
exit 0
6.
#!/bin/sh
file=$1
if [ -f "$file" ]
then
echo "`cat $file`"
elif [ -d "$file" ]
then
echo "`ls -l $file`"
else
echo "No such file or directory"
fi
exit 0
7.
#!/bin/sh
if [ $1 -nt $2 ]
then
echo "$1 VS $2 = New file is $1"
elif [ $1 -ot $2 ]
then
echo "$1 VS $2 = New file is $2"
else
echo "No such file. Please check!"
fi
exit 0
8.
#!/bin/sh
x=`wc -c < $1`
y=`wc -l < $1`
echo total is "$x"bytes
echo line is "$y"
echo "average is $((x/y))bytes."
9.
#!/bin/sh
x=`date +%Y%m%d`
echo "creat a file ---> myfile$x".txt
`touch myfile"$x".txt`
10.
#!/bin/sh
echo 1.touch "$1"
touch $1
y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
echo --$y-$m-$d\ $t > $1
cat $2 >> $1
sleep 2
echo "run1"
t=`date +%T`
echo --$y-$m-$d\ $t >> $1
cat $3 >> $1
sleep 2
echo "run2"
t=`date +%T`
echo --$y-$m-$d\ $t >> $1
cat $4 >> $1
exit 0
2009年12月21日 星期一
Shell Script Programming III
2.設計一個名為manymaxmin的script,使其可以接收不固定的多個數字參數,顯示數字中最大的及最小的,如果都一樣大,則顯示都一樣大。
$ ./maxmin 12 18 9 32 24 13
max = 32
min = 9
$ ./maxmin 15 15 15 15 15 15
All Equal = 15
-----------------------------
#!/bin/sh
max=0
for x in $@
do
if [ $x -gt $max ]
then
max=$x
fi
done
min=9999999
for y in $@
do
if [ $y -lt $min ]
then
min=$y
fi
done
if [ $max -eq $min ]
then
echo All Equal = $max
else
echo Max = $max
echo Min = $min
fi
exit 0
--------------------------------
3.設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,檔名分別為myprog1.c,myprog2.c,...,myprog10.c。
#!/bin/sh
rm myprog*
for ((x=1;x<=10;x++))
do
touch myprog$x.c
done
exit 0
------------------------------
4.設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。
$ ./lastfiles 5
a1.txt
a3.txt
...共5個
#!/bin/sh
ls -t | head -$1
---------------------------------
5.設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,副檔名更名為.cpp,更名前後的副檔名均自命令列輸入。並將更名的結果顯示出來。
$ ./mvfiles .c .cpp
renamed myprog1.c to myprog1.cpp
....
#!/bin/sh
for file in *$1
do
mv $file `basename $file $1`$2
echo $file
done
exit 0
$ ./maxmin 12 18 9 32 24 13
max = 32
min = 9
$ ./maxmin 15 15 15 15 15 15
All Equal = 15
-----------------------------
#!/bin/sh
max=0
for x in $@
do
if [ $x -gt $max ]
then
max=$x
fi
done
min=9999999
for y in $@
do
if [ $y -lt $min ]
then
min=$y
fi
done
if [ $max -eq $min ]
then
echo All Equal = $max
else
echo Max = $max
echo Min = $min
fi
exit 0
--------------------------------
3.設計一個名為createmyfiles的script,以迴圈配合touch指令,產生十個檔案,檔名分別為myprog1.c,myprog2.c,...,myprog10.c。
#!/bin/sh
rm myprog*
for ((x=1;x<=10;x++))
do
touch myprog$x.c
done
exit 0
------------------------------
4.設計一個名為lastfiles的script,顯示目前目錄中最近被修改的n個檔案檔名。
$ ./lastfiles 5
a1.txt
a3.txt
...共5個
#!/bin/sh
ls -t | head -$1
---------------------------------
5.設計一個名為mvfiles的script,可以將所有副檔名為.c檔案,副檔名更名為.cpp,更名前後的副檔名均自命令列輸入。並將更名的結果顯示出來。
$ ./mvfiles .c .cpp
renamed myprog1.c to myprog1.cpp
....
#!/bin/sh
for file in *$1
do
mv $file `basename $file $1`$2
echo $file
done
exit 0
Ldap--Create Account
## 須先確認 uid Number 爾後創的檔案需放置於此shell script同目錄下。
## 僅提供輸入 帳戶、密碼、姓、名、uidNumber (會顯示最後的uidNumber作為參考)。
#!/bin/sh
echo -n "Please input UserName : "
read user
passwd=`slappasswd -crypt`
echo -n "Please input First Name : "
read first
echo -n "Please input Last Name : "
read last
lst=`ls -t | head -1` --->列出最後修改的一個檔案
echo $lst
leuid=`grep uidNumber < $lst` --->擷取 uidNumber資訊
echo $leuid
echo -n "Please input UID : "
read uidnumber
touch user.$user.ldif
F=user.$user.ldif
echo dn: uid=$user,ou=user,dc=rich,dc=com >> $F
echo uid: $user >> $F
echo cn: $user >> $F
echo objectClass: account >> $F
echo objectClass: posixAccount >>$F
echo objectClass: shadowAccount >>$F
echo userPassword: $passwd >>$F
echo shadowLastChange: 14089 >>$F
echo shadowMax: 99999 >>$F
echo shadowWarning: 7 >>$F
echo loginShell: /bin/bash >>$F
echo uidNumber: $uidnumber >>$F
echo gidNumber: 201 >>$F
echo homeDirectory: /home/$user >>$F
echo gecos: $first $last >>$F
service ldap stop
sleep 2
slapadd -v -l $F
sleep 2
service ldap start
exit 0
## 僅提供輸入 帳戶、密碼、姓、名、uidNumber (會顯示最後的uidNumber作為參考)。
#!/bin/sh
echo -n "Please input UserName : "
read user
passwd=`slappasswd -crypt`
echo -n "Please input First Name : "
read first
echo -n "Please input Last Name : "
read last
lst=`ls -t | head -1` --->列出最後修改的一個檔案
echo $lst
leuid=`grep uidNumber < $lst` --->擷取 uidNumber資訊
echo $leuid
echo -n "Please input UID : "
read uidnumber
touch user.$user.ldif
F=user.$user.ldif
echo dn: uid=$user,ou=user,dc=rich,dc=com >> $F
echo uid: $user >> $F
echo cn: $user >> $F
echo objectClass: account >> $F
echo objectClass: posixAccount >>$F
echo objectClass: shadowAccount >>$F
echo userPassword: $passwd >>$F
echo shadowLastChange: 14089 >>$F
echo shadowMax: 99999 >>$F
echo shadowWarning: 7 >>$F
echo loginShell: /bin/bash >>$F
echo uidNumber: $uidnumber >>$F
echo gidNumber: 201 >>$F
echo homeDirectory: /home/$user >>$F
echo gecos: $first $last >>$F
service ldap stop
sleep 2
slapadd -v -l $F
sleep 2
service ldap start
exit 0
自動及同歩化完成異地備份所有使用者家目錄
任務目標 : 自動及同歩化完成異地備份所有使用者家目錄.
於Host OS(OpenSUSE11), 建立一指令稿(使用bash) backup.sh 存放於/root/bin/內, 工作內容是對/home目錄進行增量備份(incremental backup), 且必須滿足以下需求:
a) 指令稿內必須使用tar 指令進行備份.
b) 指令稿內必須使用(定義及呼叫)函式(function)
c) 於每週一時, 指令稿必須進行完整備份(full backup).
d) 自每週二至週五, 指令稿必須進行增量備份(incremental backup), 只備份當日有異動的部份資料.
e) 指令稿內以date找出備份當日的星期名稱(如 Sun,Mon,Tue,...), 以便能判斷出必須採用的備份方法.
f) 使用一快照檔案(/var/log/backup/snapshot_file), 以便進行 backup 時的依據.
g) 對產生的備份檔須符合以下格式:
* Full backup: /var/backup/full-YYY-MM-DD.tar.gz
* Differential backup: /var/backup/incremental-YYYY-MM-DD.tar.gz (YYY-MM-DD 是備份當日的格式 (如. 2009-12-18).
h) 若進行備份失敗, 該指令稿必須能發出 email 給 root@localhost. 主旨為"Backup failed !", email內容可不需要指定.
i) 於指令稿內使用rsync進行同歩Host OS(OpenSUSE11)的/var/backup目錄, push 到 Guest OS(SLES10)的 ~/backup目錄內,以實現異地備份任務.
j) 使用例行式排程於週一至週五18:30執行backup.sh.
k) 注意事項 :
* 預於2009/12/24進行驗收
* 請盡可能自己編寫(勿抄襲他人的). 若有問題請於班版提出.
祝 大家順利完成. Guru
#!/bin/bash
DOW=`date +%a` ->將日期顯示改為 Mon、..作為變數
[ -d /var/log/backup ] || mkdir /var/log/backup ->判斷 是否有此directory
[ -d /var/backup ] || mkdir /var/backup
#full (){ getfacl -R /home > /home/acls-`date +%F`
# tar -czvf /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
# touch /var/log/backup/last-backup
# x=`echo $?`
# }
->每次皆會參考 snapshot 作為複製檔案的依據,故進行Full 之前,先刪除snapshot檔來進行完全備份。
full (){ getfacl -R /home > /home/acls-`date +%F`
rm -rf /var/backup/snapshot_file
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
touch /var/log/backup/last-backup
x=`echo $?`
}
->增量備份,參考snapshot_file檔,來備份最新的檔案。
incr (){ getfacl -R /home > /home/acls-`date +%F`
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-incremental-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
x=`echo $?`
}
#diff (){ getfacl -R /home > /home/acls-`date +%F`
# find /home -type f -newer /var/log/backup/last-backup -print0 | tar --null -cvf /tmp/backup-diff-`date +%F`.tar -T - > /var/log/backup/backup-`date +%F`.log
# x=`echo $?`
# }
->利用case 來判斷 執行 Full or Incremental backup!
case "$DOW" in
Mon) full ;;
Tue) incr ;;
Wed) incr ;;
Thu) incr ;;
Fri) incr ;;
esac
if [ $x -ne 0 ] ; then
echo "" | mail -s "Backup failed !" root
fi
#########-------------Remote rsync backup--------#############(以下須手動執行)
# 1. input --> ssh-keygen -t dsa -N "" ->產生金鑰
# 2. Remote computer need--> mkdir ~/backup ->建立遠端備份目錄
#########------------------------Run---------------------#############(以下註解拿掉即可執行)
echo -n "Please input Remote IP address : "
read IP
# echo Please wait....
# sleep 2
# scp /root/.ssh/id_dsa.pub root@$IP:/root/.ssh/authorized_keys
->將剛產生的金鑰複製傳送到遠端電腦。之後登入,自動信任此帳戶!
echo Please wait....
sleep 2
->判斷如果,備份 執行成功,則複製傳送到遠端電腦,進行異地備份。
if [ $x -eq 0 ] ; then
rsync -azv /var/backup -e ssh root@$IP:~/backup
echo "Test Only^^ " | mail -s "Backup Succeed" root
fi
###############################################################
# if [ $x -eq 0 ] ; then
# echo "Test Only " | mail -s "Backup Succeed" root
# fi
## result : nl /var/log/backup/last-backup = = tar -tvf /backup-full .. .tar | nl
## in other to have /var/log/backup/last-backup file, modify your date to friday first !!
##---------------------Create-Cron ----------------##
## 以下提供兩種方法!
## touch /etc/cron.d/incre-cron
## echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# touch incre-cron
# echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# crontab incre-cron
###################################
於Host OS(OpenSUSE11), 建立一指令稿(使用bash) backup.sh 存放於/root/bin/內, 工作內容是對/home目錄進行增量備份(incremental backup), 且必須滿足以下需求:
a) 指令稿內必須使用tar 指令進行備份.
b) 指令稿內必須使用(定義及呼叫)函式(function)
c) 於每週一時, 指令稿必須進行完整備份(full backup).
d) 自每週二至週五, 指令稿必須進行增量備份(incremental backup), 只備份當日有異動的部份資料.
e) 指令稿內以date找出備份當日的星期名稱(如 Sun,Mon,Tue,...), 以便能判斷出必須採用的備份方法.
f) 使用一快照檔案(/var/log/backup/snapshot_file), 以便進行 backup 時的依據.
g) 對產生的備份檔須符合以下格式:
* Full backup: /var/backup/full-YYY-MM-DD.tar.gz
* Differential backup: /var/backup/incremental-YYYY-MM-DD.tar.gz (YYY-MM-DD 是備份當日的格式 (如. 2009-12-18).
h) 若進行備份失敗, 該指令稿必須能發出 email 給 root@localhost. 主旨為"Backup failed !", email內容可不需要指定.
i) 於指令稿內使用rsync進行同歩Host OS(OpenSUSE11)的/var/backup目錄, push 到 Guest OS(SLES10)的 ~/backup目錄內,以實現異地備份任務.
j) 使用例行式排程於週一至週五18:30執行backup.sh.
k) 注意事項 :
* 預於2009/12/24進行驗收
* 請盡可能自己編寫(勿抄襲他人的). 若有問題請於班版提出.
祝 大家順利完成. Guru
#!/bin/bash
DOW=`date +%a` ->將日期顯示改為 Mon、..作為變數
[ -d /var/log/backup ] || mkdir /var/log/backup ->判斷 是否有此directory
[ -d /var/backup ] || mkdir /var/backup
#full (){ getfacl -R /home > /home/acls-`date +%F`
# tar -czvf /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
# touch /var/log/backup/last-backup
# x=`echo $?`
# }
->每次皆會參考 snapshot 作為複製檔案的依據,故進行Full 之前,先刪除snapshot檔來進行完全備份。
full (){ getfacl -R /home > /home/acls-`date +%F`
rm -rf /var/backup/snapshot_file
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-full-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
touch /var/log/backup/last-backup
x=`echo $?`
}
->增量備份,參考snapshot_file檔,來備份最新的檔案。
incr (){ getfacl -R /home > /home/acls-`date +%F`
tar -czv -g /var/backup/snapshot_file -f /var/backup/backup-incremental-`date +%F`.tar.gz /home | tee /var/log/backup/last-backup > /var/log/backup/backup-`date +%F`.log
x=`echo $?`
}
#diff (){ getfacl -R /home > /home/acls-`date +%F`
# find /home -type f -newer /var/log/backup/last-backup -print0 | tar --null -cvf /tmp/backup-diff-`date +%F`.tar -T - > /var/log/backup/backup-`date +%F`.log
# x=`echo $?`
# }
->利用case 來判斷 執行 Full or Incremental backup!
case "$DOW" in
Mon) full ;;
Tue) incr ;;
Wed) incr ;;
Thu) incr ;;
Fri) incr ;;
esac
if [ $x -ne 0 ] ; then
echo "" | mail -s "Backup failed !" root
fi
#########-------------Remote rsync backup--------#############(以下須手動執行)
# 1. input --> ssh-keygen -t dsa -N "" ->產生金鑰
# 2. Remote computer need--> mkdir ~/backup ->建立遠端備份目錄
#########------------------------Run---------------------#############(以下註解拿掉即可執行)
echo -n "Please input Remote IP address : "
read IP
# echo Please wait....
# sleep 2
# scp /root/.ssh/id_dsa.pub root@$IP:/root/.ssh/authorized_keys
->將剛產生的金鑰複製傳送到遠端電腦。之後登入,自動信任此帳戶!
echo Please wait....
sleep 2
->判斷如果,備份 執行成功,則複製傳送到遠端電腦,進行異地備份。
if [ $x -eq 0 ] ; then
rsync -azv /var/backup -e ssh root@$IP:~/backup
echo "Test Only^^ " | mail -s "Backup Succeed" root
fi
###############################################################
# if [ $x -eq 0 ] ; then
# echo "Test Only " | mail -s "Backup Succeed" root
# fi
## result : nl /var/log/backup/last-backup = = tar -tvf /backup-full .. .tar | nl
## in other to have /var/log/backup/last-backup file, modify your date to friday first !!
##---------------------Create-Cron ----------------##
## 以下提供兩種方法!
## touch /etc/cron.d/incre-cron
## echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# touch incre-cron
# echo '30 18 * * 1-5 root /root/bin/Incremental_backup.sh' >> incre-cron
# crontab incre-cron
###################################
2009年12月7日 星期一
設定工作排程(cron)將Quota狀態以E-mail寄送到管理者信箱
本次目標為:
- 設定一個工作排程(檔名為rep_quota),於禮拜一到禮拜五的晚上,12點30分將Quota的狀態輸出到/root/quota.log裡面和透過E-mail傳送到管理者的信箱(gd9qwq@gmail.com)。
- 需使用Shell Script執行此動作,並將程式存放於/root/bin底下,檔名為rep_quota.sh。
- 小提示:工作排程需放置於/etc/cron.d目錄底下。
利用 sudo 來賦予使用者管理權限
*利用/etc/pam.d/su組態檔來指定某使用者,切換使用者到Supper User(su)時, 不需輸入密碼。
使用時機:當要讓某使用者去更改系統內的設定時,不需知道root的密碼而切換到root帳戶去做更改。
缺點:由於root身分可以完全的更改系統內的設定,如果使用者變更了root的密碼,那麼會造成原本管理者無法登入。
在第二部分,將會以Supper User do來解決此缺點,這邊會利用賦予使用者管理apache2 Server的所有權限,而不需輸入密碼。
第一部分:
第二部分:利用sudo更安全的設定。
使用時機:當要讓某使用者去更改系統內的設定時,不需知道root的密碼而切換到root帳戶去做更改。
缺點:由於root身分可以完全的更改系統內的設定,如果使用者變更了root的密碼,那麼會造成原本管理者無法登入。
在第二部分,將會以Supper User do來解決此缺點,這邊會利用賦予使用者管理apache2 Server的所有權限,而不需輸入密碼。
第一部分:
由於第五行 auth include common-auth 用於檢查帳戶設定,故需要新增在此設定之上,在此設定之下的話,則無作用。
第二部分:利用sudo更安全的設定。
設定使用者於特定時間禁止登入系統
只允許使用root帳戶登入Linux系統
一、除了root以外,其餘使用者無法登入系統。
使用時機:通常用於管理者要新增/移除或者維修系統時。
第一步:編輯 etc/pam.d/login 這個檔案。
使用時機:通常用於管理者要新增/移除或者維修系統時。
第一步:編輯 etc/pam.d/login 這個檔案。
可以看到畫紅線的地方,表示在執行時會讀取這個pam_nologin.so組態檔
那這時只要在/etc/新增一個名為 nologin檔案即可產生作用。
2009年11月28日 星期六
2009年11月27日 星期五
在SuSE開機選單增加密碼&修改螢幕解析度
以下為 在開機選單增加密碼來保護系統跟設定開機相關參數,
首先,使用MD5程式來將要設定的密碼轉譯成亂數碼。
放心!這是一個很奇怪的設定..當您輸入完畢之後,只管繼續輸入您要設定的密碼
使用vi工具來編輯 menu.lst這個檔案
可以看到第25、26、27行多出了密碼設定,我們將27行資料複製(指令:yy)到第7行貼上(p),之後輸入:password --md5 $XXXXXXXXXXXXXXXXXXX
這樣一來,下次開機時,只要輸入您剛剛設定的密碼就可以嚕!(不是$1$0m46kxxxxxxx這一段喔- -)。
另外,如果只想要輸入單純的明碼來當作密碼的話,可以參考第14行的設定即可。
儲存離開! (:wq)、重新開機(reboot),看看效果如何吧~!
鍵入:p、輸入剛剛設定的密碼,進到編輯模式吧!
選擇預修改的系統並鍵入:e 進行編輯。
嘿嘿!剛設定明碼的密碼在這邊都被看光光拉!!
這邊我試著修改vga=0x333這個數值 這是解析度的設定!
這邊提供幾個 vga=0x317、0x332 試試看哪個合自己的size吧!
我這邊是設定:123456
如果剛剛沒有在各個系統底下再另外設定密碼的話,就不會有以上的畫面。
這樣子基本上就算完成了設定。
小插曲:
1、如果您設定完之後,密碼不小心忘記的話,您只要在安全模式下進入SuSE 使用root身分登入,編輯menu.lst密碼移除即可順利開機唷!!
2、剛以上設定vga的方法,屬於暫時性的設定唷! 以下提供永久修改的方法。
2、剛以上設定vga的方法,屬於暫時性的設定唷! 以下提供永久修改的方法。
訂閱:
文章 (Atom)
標籤
- 上課實作 (7)
- 高級實作 (3)
- 雜貨店 (6)
- Exchange Server (3)
- grub組態設定 (1)
- IIS架站 (1)
- Juniper_SSG (4)
- L2 switch (2)
- L3 switch (4)
- Server2003 (6)
- Server2008 (5)
- Shell Script Programming (3)
- TCP/IP (1)
- Wirless_Aruba (4)