tar可以為 Linux 文件和目錄創(chuàng)建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上創(chuàng)建檔案,現(xiàn)在用戶可以在任何設(shè)備上創(chuàng)建檔案。利用tar命令,可以把一堆文件和目錄全部打包成一個文件,這對于備份文件或?qū)讉€文件組合成為一個文件以便于網(wǎng)絡(luò)傳輸是非常有用的。
首先要弄清兩個概念:打包和壓縮。打包是指將一堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。
為什么要區(qū)分這兩個概念呢?這源于 Linux 中很多壓縮程序只能針對一個文件進(jìn)行壓縮,這樣當(dāng)你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包,然后再用壓縮程序進(jìn)行壓縮。
1、常用選項(xiàng):
| 選項(xiàng) | 幫助 |
|---|---|
--help |
查看幫助 |
-c, --create |
創(chuàng)建一個新的歸檔,也就是備份文件 |
-f, --file |
指定歸檔文件名 |
-p |
保留原文件的文件權(quán)限 |
-t |
列出歸檔文件中的全部內(nèi)容 |
-v |
顯示命令的執(zhí)行過程,詳細(xì)地列出處理的文件 |
-x |
從歸檔中解出文件,即反歸檔 |
-z |
對歸檔文件使用 gzip 進(jìn)行壓縮 |
--exclude |
指定歸檔時需要排除的文件 |
-g |
增量歸檔 |
2、舉例:
-cvf 打包當(dāng)前目錄中的所有文件,默認(rèn)遞歸全部目錄:
mcdx@ubuntu:~/clipboard$ tar -cvf haha.tar *
b.txt
conf/
conf/gitconfig.txt
conf/sources.list
conf/python.gitignore
conf/vimrc.txt
conf/requirements.txt
README.md
test
-czvf 打包當(dāng)前目錄中的所有文件,并壓縮:
# 排除前面創(chuàng)建的歸檔文件 haha.tar
mcdx@ubuntu:~/clipboard$ tar -czvf haha.tar.gz * --exclude haha.tar
b.txt
conf/
conf/gitconfig.txt
conf/sources.list
conf/python.gitignore
conf/vimrc.txt
conf/requirements.txt
README.md
test
# 在 Mac 系統(tǒng)中要用下面的格式
tar -czv --exclude haha.tar -f haha.tar.gz *
查看兩個歸檔文件的大?。?/h6>
mcdx@ubuntu:~/clipboard$ ls
b.txt conf haha.tar haha.tar.gz README.md test
mcdx@ubuntu:~/clipboard$ du -h haha*
20K haha.tar
4.0K haha.tar.gz
-tvf 查看歸檔文件里包含哪些文件:
mcdx@ubuntu:~/clipboard$ tar -ztvf haha.tar.gz
-rw-rw-r-- mcdx/mcdx 172 2018-07-22 10:34 b.txt
drwxrwxr-x mcdx/mcdx 0 2018-07-22 10:34 conf/
-rw-rw-r-- mcdx/mcdx 360 2018-07-22 10:34 conf/gitconfig.txt
-rw-rw-r-- mcdx/mcdx 923 2018-07-22 10:34 conf/sources.list
-rw-rw-r-- mcdx/mcdx 1202 2018-07-22 10:34 conf/python.gitignore
-rw-rw-r-- mcdx/mcdx 799 2018-07-22 10:34 conf/vimrc.txt
-rw-rw-r-- mcdx/mcdx 260 2018-07-22 10:34 conf/requirements.txt
-rw-rw-r-- mcdx/mcdx 11 2018-07-22 10:34 README.md
-rw-rw-r-- mcdx/mcdx 219 2018-07-22 10:34 test
-xzvf 到某個目錄下,將歸檔文件進(jìn)行解檔:
mcdx@ubuntu:~$ mkdir test
mcdx@ubuntu:~$ cd test/
mcdx@ubuntu:~/test$ tar -zxvf ../clipboard/*gz
b.txt
conf/
conf/gitconfig.txt
conf/sources.list
conf/python.gitignore
conf/vimrc.txt
conf/requirements.txt
README.md
test
mcdx@ubuntu:~/test$ tree
.
├── b.txt
├── conf
│ ├── gitconfig.txt
│ ├── python.gitignore
│ ├── requirements.txt
│ ├── sources.list
│ └── vimrc.txt
├── README.md
└── test
1 directory, 8 files
-g 增量歸檔,舉例如下
mcdx@ubuntu:~/clipboard$ ls
b.txt conf haha.tar haha.tar.gz README.md test
mcdx@ubuntu:~/clipboard$ du -h haha*
20K haha.tar
4.0K haha.tar.gz
-tvf 查看歸檔文件里包含哪些文件:mcdx@ubuntu:~/clipboard$ tar -ztvf haha.tar.gz
-rw-rw-r-- mcdx/mcdx 172 2018-07-22 10:34 b.txt
drwxrwxr-x mcdx/mcdx 0 2018-07-22 10:34 conf/
-rw-rw-r-- mcdx/mcdx 360 2018-07-22 10:34 conf/gitconfig.txt
-rw-rw-r-- mcdx/mcdx 923 2018-07-22 10:34 conf/sources.list
-rw-rw-r-- mcdx/mcdx 1202 2018-07-22 10:34 conf/python.gitignore
-rw-rw-r-- mcdx/mcdx 799 2018-07-22 10:34 conf/vimrc.txt
-rw-rw-r-- mcdx/mcdx 260 2018-07-22 10:34 conf/requirements.txt
-rw-rw-r-- mcdx/mcdx 11 2018-07-22 10:34 README.md
-rw-rw-r-- mcdx/mcdx 219 2018-07-22 10:34 test
-xzvf 到某個目錄下,將歸檔文件進(jìn)行解檔:mcdx@ubuntu:~$ mkdir test
mcdx@ubuntu:~$ cd test/
mcdx@ubuntu:~/test$ tar -zxvf ../clipboard/*gz
b.txt
conf/
conf/gitconfig.txt
conf/sources.list
conf/python.gitignore
conf/vimrc.txt
conf/requirements.txt
README.md
test
mcdx@ubuntu:~/test$ tree
.
├── b.txt
├── conf
│ ├── gitconfig.txt
│ ├── python.gitignore
│ ├── requirements.txt
│ ├── sources.list
│ └── vimrc.txt
├── README.md
└── test
1 directory, 8 files
-g 增量歸檔,舉例如下backinfo 是一個自定義的自動生成的文件,在哪里執(zhí)行此命令,就在哪里生成。吶比如說本次歸檔和下次歸檔之間的時間內(nèi),/var/log 目錄沒變化,那么下次歸檔,就是一個空目錄結(jié)構(gòu);如果此目錄下增加了文件,下次歸檔就會只歸檔增加的文件。
sudo tar -g backinfo -czf $(date +\%H-\%M-\%S).tar.gz /var/log