標籤:
tar是一個已移植到Linux中的經典UNIX命令。tar是Tape ARchive(磁帶歸檔)的縮寫,最初設計用於將檔案打包到磁帶上。
它是一個基於檔案的命令,它本質上是連續地、首尾相連地堆放檔案。
使用tar可以打包整個分類樹,這使得它特別適合用於備份。歸檔檔案可以全部還原,或從中展開單獨的檔案和目錄。
備份可以儲存到基於檔案的裝置或磁帶裝置上。檔案可以在還原時重新導向,以便將它們重新放到一個與最初儲存它們的目錄(或系統)不同的目錄(或系統)。
tar是與檔案系統無關的,它可以使用在ext2、ext3、jfs、Reiser和其他檔案系統上。
在Linux世界裡經常使用tar命令進行備份,此時將涉及tar命令的一些參數。 tar命令的完整格式是:
tar <operation> [options] <files_to_backup_or_restore>
其中:
- operation:用於指定tar要進行的操作
- options:用於指定一系列的選項
- files_to_backup_or_restore:用於給出要備份或要恢複的檔案或目錄名,在指定目錄時也包括了這個目錄下的子目錄。
下表給出了tar命令的操作說明。
| 操作 |
說明 |
| [-]A |
串連多個歸檔檔案為一個歸檔檔案。 |
| [-]c |
用於建立一個新的封存檔案。 |
| [-]x |
從歸檔檔案中恢複備份檔案。 |
| [-]t |
用於列出一個封存檔案中的檔案名稱。 |
| [-]u |
僅僅添加比封存檔案中更新的檔案。即,用新增的檔案取代原備份檔案, 如果在歸檔檔案中找不到要更新的檔案,則把它追加到備份檔案的最後。 |
| [-]d |
將歸檔檔案的內容與檔案系統上的當前檔案作比較。 |
| [-]r |
將檔案追加到指定的歸檔檔案中。 |
| --delete |
從歸檔檔案中刪除指定的檔案。 |
下表給出了tar命令的常用選項說明。
| 選項 |
說明 |
| -f name |
使用name指定封存檔案名或裝置名稱。 |
| -v |
列出處理的詳細資料。 |
| -z |
用GNU的gzip壓縮檔或解壓。 |
| -j |
用GNU的bzip2壓縮檔或解壓。 |
| -C |
directory 將目前的目錄切換到 directory。 |
| -M |
建立/列出/恢複多卷封存檔案,以便在幾個備份介質中存放。 |
| -N |
DATE 指定僅對那些比DATE新的檔案進行操作。 |
| -p |
表示希望保留檔案許可許可權。 |
| -P |
保留檔案的絕對路徑,即不去掉/。 |
| -w |
要求等待使用者確認每一個操作。 |
| -W |
表示在寫入備份內容到備份裝置以後再讀出來進行驗證以提高可靠性。 |
| -T |
filename 從指定的檔案中讀需要備份或恢複的檔案名稱。 |
| -X |
filename 不處理給定檔案中列出的檔案。 |
| --exclude=PATTERN |
不處理指定的檔案。 |
使用tar備份檔案
通常將備份檔案儲存在單獨的分區中,可以是系統本地硬碟中的一個分區,也可以是另外掛裝的行動裝置中的一個分區。因此,在備份之前,應該建立掛裝點目錄,並掛裝檔案系統。
# mkdir /backups# mount -t ext3 /dev/sdc1 /backups# mkdir /backups/logs /backups/last-full
指定要備份的檔案或目錄
1、使用如下的命令備份指定的一個或多個目錄到/backups目錄中的一個歸檔檔案
# tar -zcvpf /backups/full-backup.tar.gz /home# tar -zcvpf /backups/full-backup.tar.gz /home /etc
2、使用命令替換產生要備份的目錄
下面的命令備份整個/系統,除了mnt、media、dev、proc、backups目錄和lost+found目錄。
# tar -zcvpf /backups/full-backup.tar.gz -C / > $(ls /| egrep -v "backups|mnt|media|dev|lost+found|proc")
3、使用exclude選項剔除無需備份的檔案或目錄
1) 下面的命令備份整個/系統,除了mnt、media、dev、proc、backups目錄和lost+found目錄。
# tar -zcvpf /backups/full-backup.tar.gz -C / > --exclude=mnt --exclude=media --exclude=dev --exclude=proc > --exclude=backups --exclude=*/lost+found > --exclude=var/spool/squid> . # 此處的 “.” 表示要備份根目錄(因為前面的 “-C /” 將目前的目錄切換為根目錄)
2) 下面的命令備份etc、home、usr/local 和 var/spool(不包括 var/spool/squid) 目錄。
# tar -zcvpf /backups/full-backup.tar.gz -C / > --exclude=var/spool/squid > etc home usr/local var/spool
4、將要備份的檔案或目錄名放入文字檔
# cat whatsbackup.txt/home/etc/usr/local/root
# tar -zcvpf /backups/full-backup.tar.gz -T whatsbackup.txt
1. -T 參數後指定的檔案中,不能使用檔案萬用字元
2. 可以使用 ls 或 find 命令產生 whatsbackup.txt 檔案
增量備份
1、使用帶 N 選項的 tar 命令實現增量備份
下面的命令將備份/home 目錄自 2008-01-29 以來修改過的檔案
# tar -N 2008-01-29 -zcvpf /backups/inc-backup_$(date +%F).tar.gz /home
下面的命令將備份 /home 目錄昨天以來修改過的檔案
# tar -N $(date -d yesterday "+%F") > -zcvpf /backups/inc-backup_$(date +%F).tar.gz /home
以下兩種書寫方式均可,但含義有所不同:
- -N yesterday : 比昨天的目前時間新的檔案,例如:若當先時間為 2:31,則表示自昨天 2:31 以來的新檔案
- -N $(date -d yesterday ”+%F”) : 自昨天 0:00 以來的新檔案
下面的命令使用命令替換從文字檔中獲得日期
# tar -N $(cat /backups/last-full/full-backup-date) > -zcvpf /backups/inc-backup_$(date +%F).tar.gz /home
/backups/last-full/full-backup-date 是在建立完全備份的同時使用如下命令建立的檔案:
date +%F > /backups/last-full/full-backup-date
2、使用 find 命令擷取增量備份的檔案清單 使用如下命令找出 n 天(如:7天)內修改過的檔案,產生備份內容的檔案清單
# find /home /etc /root -mtime -7 -print > /backups/logs/inc-backup_$(date +%F).log
對指定檔案清單中的檔案實現增量備份
# tar -zcvpf /backups/inc-backup_$(date +%F).tar.gz > -T /backups/logs/inc-backup_$(date +%F).log
CentOS下使用tar備份