Shell Script(bash)--用於自動備份的Shell Script(轉)
Shell Script(bash)--用於自動備份的Shell Script(轉)[@more@]一個用於自動備份的Shell Script
我們先前提到,可利用Shell Script搭配crond來作定期的工作。要作定期性的工作,在UNIX上,就是與crond的搭配運用。
--------------------------------------------------------------------------------
首先我們先來研究如何對系統進行備份。
要對系統進行備份,不外乎便是利用一些壓縮工具。在許多UNIX系統上,tar及gzip是de facto的資料交換標準。我們經常可以看見一些tar.gz或tgz檔,這些檔案,被稱為tarball。當然了,您也可以用bzip2、zip等等壓縮工具來進行壓縮,不必限定於gzip。但tar配合gzip是最普遍的,也是最方便的方式。
要將我們想要的資料壓縮起來,進行備份,可以結合tar及gzip一起進行。方式有很多種,最常用的指令是以下這一種:
tar -c file/dir ... | gzip -9 > xxxx.tar.gz
您也可以分開來做:
tar -r file/dir ... -f xxxx.tar
gzip -9 xxxx.tar
或
tar -r file/dir ... -f xxxx.tar
gzip -9 < xxxx.tar > xxxx.tar.gz
--------------------------------------------------------------------------------
在解過Linux下檔案備份的基本知識後,我們來寫一個將檔案備份的Script。
#!/bin/sh
# Filename : backup
DIRS="/etc /var /your_directories_or_files"
BACKUP="/tmp/backup.tgz"
tar -c $DIRS | gzip -9 > $BACKUP
其中DIRS放的是您要備份的檔案及目錄,BACKUP是您的備份檔。可不要將/tmp放進DIRS中,那樣做,您是在做備份的備份,可能將您的硬碟塞爆。
--------------------------------------------------------------------------------
接下來測試
[foxman@foxman bash]# chmod 755 backup
[foxman@foxman bash]# ./backup
執行完成後在/tmp就會有一個backup.tgz,裡面儲存了您重要的資料。您可用
gzip -dc /tmp/backup.tgz | tar -vt
或
tar vtfz /tmp/backup.tgz
來看看裡面的檔案列表。
要解開時,可用以下指令來完成復原:
gzip -dc /tmp/backup.tgz | tar -xv
或
tar xvfz /tmp/backup.tgz
備份通常是僅備份系統通常最重要的部份,/etc可說是不可缺少的一部份。另外,看您系統中有那些重要的資料需要備份。通常來說,您沒有必要備份/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等這些執行檔目錄。只要備份您重要的檔案即可,別把整個硬碟備份,那是蠻呆的動作。
--------------------------------------------------------------------------------
如果您有許多臺機器,可利用其中一臺任務較輕的內部網路主機,做為主要備份主機。將所有機器都自動執行備份,然後利用NFS/Coda/Samba等網路檔案系統,將備份的資料放到該備份機器中,該機器則定時收取備份資料,然後您再由該機器中進行一次備份。
這裡是整個系統備份方案的圖示。
在您進行之前,先解一下,系統中那些是要備份的,那些是不需要的。
--------------------------------------------------------------------------------
新的backup
#!/bin/sh
HOSTNAME=`hostname`
DIRS="/etc /var /your_important_directory"
BACKUP="/tmp/$HOSTNAME.tgz"
NFS="/mnt/nfs"
tar -c $DIRS | gzip -9 > $BACKUP
mv -f $BACKUP $NFS
--------------------------------------------------------------------------------
備份主機內的Script : collect_backup
#!/bin/sh
NFS="/mnt/nfs"
BACKUP="/backup"
mv -f $NFS/*.tgz $BACKUP
在此,您不能夠將所有備份都直接放在/mnt/nfs,這是危險的。萬一任一臺機器不小心將/mnt/nfs所有內容刪除,那麼備份就會消失。因此,您需要將/mnt/nfs移到一個只有該備份主機可存取的目錄中。
--------------------------------------------------------------------------------
當這些個別的Script都測試好以後,接下來我們將他們放到crontab裡面。找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root。
在crontab中選擇以下之一加入(看您定期的時間):
Slackware : /var/spool/cron/crontabs/root
01 * * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每小時(太過火一點)
30 16 * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每日16:30,下班前備份
30 16 * * 0 /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每週一16:30
0 5 1 * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每月一號5:0
RedHat/Debian : /etc/crontab
RedHat可直接將backup放入/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly。或採用如上加入/etc/crontab的方式:
有關crontab的用法,可查"man 5 crontab",在此不詳述。
備份主機的設定類同。
注意: 所有機器不要同時進行備份,否則網路會大塞車。備份主機收取備份的時間要設為最後,否則會收不到備份資料。您可以在實作後,將時間間隔調整一下。
--------------------------------------------------------------------------------
看看,兩個小小不到三行的Shell Script,配合cron這個定時工具。可以讓原本需要耗時多個小時的人工備份工作,簡化到不到十分鐘。善用您的想像力,多加一點變化,可你讓您的生活變得輕鬆異常,快樂悠哉。
我們先前提到,可利用Shell Script搭配crond來作定期的工作。要作定期性的工作,在UNIX上,就是與crond的搭配運用。
--------------------------------------------------------------------------------
首先我們先來研究如何對系統進行備份。
要對系統進行備份,不外乎便是利用一些壓縮工具。在許多UNIX系統上,tar及gzip是de facto的資料交換標準。我們經常可以看見一些tar.gz或tgz檔,這些檔案,被稱為tarball。當然了,您也可以用bzip2、zip等等壓縮工具來進行壓縮,不必限定於gzip。但tar配合gzip是最普遍的,也是最方便的方式。
要將我們想要的資料壓縮起來,進行備份,可以結合tar及gzip一起進行。方式有很多種,最常用的指令是以下這一種:
tar -c file/dir ... | gzip -9 > xxxx.tar.gz
您也可以分開來做:
tar -r file/dir ... -f xxxx.tar
gzip -9 xxxx.tar
或
tar -r file/dir ... -f xxxx.tar
gzip -9 < xxxx.tar > xxxx.tar.gz
--------------------------------------------------------------------------------
在解過Linux下檔案備份的基本知識後,我們來寫一個將檔案備份的Script。
#!/bin/sh
# Filename : backup
DIRS="/etc /var /your_directories_or_files"
BACKUP="/tmp/backup.tgz"
tar -c $DIRS | gzip -9 > $BACKUP
其中DIRS放的是您要備份的檔案及目錄,BACKUP是您的備份檔。可不要將/tmp放進DIRS中,那樣做,您是在做備份的備份,可能將您的硬碟塞爆。
--------------------------------------------------------------------------------
接下來測試
[foxman@foxman bash]# chmod 755 backup
[foxman@foxman bash]# ./backup
執行完成後在/tmp就會有一個backup.tgz,裡面儲存了您重要的資料。您可用
gzip -dc /tmp/backup.tgz | tar -vt
或
tar vtfz /tmp/backup.tgz
來看看裡面的檔案列表。
要解開時,可用以下指令來完成復原:
gzip -dc /tmp/backup.tgz | tar -xv
或
tar xvfz /tmp/backup.tgz
備份通常是僅備份系統通常最重要的部份,/etc可說是不可缺少的一部份。另外,看您系統中有那些重要的資料需要備份。通常來說,您沒有必要備份/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等這些執行檔目錄。只要備份您重要的檔案即可,別把整個硬碟備份,那是蠻呆的動作。
--------------------------------------------------------------------------------
如果您有許多臺機器,可利用其中一臺任務較輕的內部網路主機,做為主要備份主機。將所有機器都自動執行備份,然後利用NFS/Coda/Samba等網路檔案系統,將備份的資料放到該備份機器中,該機器則定時收取備份資料,然後您再由該機器中進行一次備份。
這裡是整個系統備份方案的圖示。
在您進行之前,先解一下,系統中那些是要備份的,那些是不需要的。
--------------------------------------------------------------------------------
新的backup
#!/bin/sh
HOSTNAME=`hostname`
DIRS="/etc /var /your_important_directory"
BACKUP="/tmp/$HOSTNAME.tgz"
NFS="/mnt/nfs"
tar -c $DIRS | gzip -9 > $BACKUP
mv -f $BACKUP $NFS
--------------------------------------------------------------------------------
備份主機內的Script : collect_backup
#!/bin/sh
NFS="/mnt/nfs"
BACKUP="/backup"
mv -f $NFS/*.tgz $BACKUP
在此,您不能夠將所有備份都直接放在/mnt/nfs,這是危險的。萬一任一臺機器不小心將/mnt/nfs所有內容刪除,那麼備份就會消失。因此,您需要將/mnt/nfs移到一個只有該備份主機可存取的目錄中。
--------------------------------------------------------------------------------
當這些個別的Script都測試好以後,接下來我們將他們放到crontab裡面。找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root。
在crontab中選擇以下之一加入(看您定期的時間):
Slackware : /var/spool/cron/crontabs/root
01 * * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每小時(太過火一點)
30 16 * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每日16:30,下班前備份
30 16 * * 0 /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每週一16:30
0 5 1 * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每月一號5:0
RedHat/Debian : /etc/crontab
RedHat可直接將backup放入/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly。或採用如上加入/etc/crontab的方式:
有關crontab的用法,可查"man 5 crontab",在此不詳述。
備份主機的設定類同。
注意: 所有機器不要同時進行備份,否則網路會大塞車。備份主機收取備份的時間要設為最後,否則會收不到備份資料。您可以在實作後,將時間間隔調整一下。
--------------------------------------------------------------------------------
看看,兩個小小不到三行的Shell Script,配合cron這個定時工具。可以讓原本需要耗時多個小時的人工備份工作,簡化到不到十分鐘。善用您的想像力,多加一點變化,可你讓您的生活變得輕鬆異常,快樂悠哉。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-947535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux程式設計-11.Shell Script(bash)--(3)用於自動備份的Shell Script(轉)Linux程式設計
- Shell Script(bash)--教學例(轉)
- Shell Script(轉)
- Shell Script
- shell script
- 20天學會bash shell script (二)
- 20天會學bash shell script(一)
- 20 天學會bash shell script (三)
- shell script to rename directory
- Linux程式設計-11.Shell Script(bash)--(1)簡介(轉)Linux程式設計
- shell script的簡單使用
- Linux程式設計-11.Shell Script(bash)--(2)教學例(轉)Linux程式設計
- Bourne shell script中的quoting
- PHP也可以當成Shell Script使用(轉)PHP
- execute shell script from stored procedure
- ORACLE自動備份shell指令碼Oracle指令碼
- rman 0.1.2 備份 script
- 小的shell script進不同系統的
- [shell] execute remote Script自動生成oracle awr report並mail出來REMOracleAI
- Shell Script to Calculate Values Recommended Linux HugePagesLinux
- shell 備份檔案指令碼+自動清理指令碼
- LINUX 自動備份程式日誌(shell)Linux
- RMAN Backup Shell Script Example (Doc ID 137181.1)
- shell中date使用總結-基於自動定期備份mysql實踐MySql
- shell script程式設計小結——附帶例項程式設計
- 自動啟動ORACLE Script ServiceOracle
- Unix程式設計/應用問答中文版 ---20.shell script問題(轉)程式設計
- 【博文推薦】用shell指令碼自動化備份資料庫指令碼資料庫
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- DB中備份每一張table script
- Oracle 11g EXPDP、RMAN自動備份SHELL指令碼Oracle指令碼
- BASH shell set命令詳解(轉)
- Rman備份的shell指令碼指令碼
- BASH Shell的指令碼程式設計(轉)指令碼程式設計
- shell指令碼:自動記憶體監控及日誌備份指令碼記憶體
- shell Bash變數變數
- bash shell tips
- BASH SHELL 程式設計簡介(轉)程式設計