tar命令
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