tar命令的介紹
saves many files together into a single tape or disk archive, and can restore individual files from the archive.(保存許多文件到一個磁帶或磁盤歸檔,并且可以從歸檔里恢復單個文件。)
tar命令可以為linux的文件和目錄創建檔案。利用tar,可以為某一特定目錄、文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對于備份文件或將幾個文件組合成為一個文件以便于網絡傳輸是非常有用的,特別是在網絡傳輸的時候,同樣大小的一個文件要多少文件傳輸的效率更高。
在這里我們先要區分兩個概念:打包和壓縮,在Linux下這是兩個不同的東西,打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件。在Linux下常用的打包命令就是tar,當然還有cpio命令,功能和tar相關不大,在這里我們就多做說明了。壓縮命令有gzip,bzip2等。gzip命令在我們后面學習數據庫使用mysqldump命令備份數據庫的時候會用到。
在linux下我們習慣的操作是先用tar命令打包,再然后再對打包文件進行壓縮。
tar命令的格式及常用參數
命令格式:tar參數 打包后的文件名 被打包的目錄或者文件
常用參數:-c建立新的歸檔文件
-t顯示歸檔文件的內容
-x從歸檔文件里提取文件
-r添加文件到已存在的歸檔文件中
-f指定歸檔文件,注意f后面要直接接歸檔的文件名,不能再添加其他參數。
-v顯示執行的過程
-z使用gzip方式壓縮或者解壓縮打包文件。
-j使用bzip2方式壓縮或者解壓縮打包文件。
-C解包到指定目錄,執行過程是先切換到指定的目錄,然后再執行解包操作。
--exclude排除某個文件或者目錄
-p保持屬性不變
-A合并兩個歸檔文件,如果有同名的文件,這兩個文件都保留。
-u選項,向歸檔中添加文件時,如果文件同名,則新文件如果比原文件更新才更新,否則不更新(同過時間戳來區分)。
-d比較歸檔中與文件系統中的同名文件是否相同。
--delete從給定的歸檔文件中刪除文件
-X排除指定文件里包含的文件。
tar命令使用實例
1、打包oldboy目錄下的所有目錄和文件(提示打包目錄的時候,最好是在目錄的上一級目錄進行打包)
[root@oldboy ~]#tar cvf oldboy.tar oldboy
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy ~]#ll oldboy.tar
-rw-r--r-- 1 root root10240 2016/03/10 14:54:52 oldboy.tar
[root@oldboy ~]#
2、查看oldboy.tar包中的內容
[root@oldboy ~]#tar -tf oldboy.tar
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy ~]#
3、移到oldboy.tar到/tmp目錄,并解包。
[root@oldboy ~]# mvoldboy.tar /tmp
[root@oldboy ~]# cd /tmp
[root@oldboy tmp]# lloldboy.tar
-rw-r--r-- 1 root root10240 2016/03/10 14:54:52 oldboy.tar
[root@oldboytmp]# tar -xvf oldboy.tar
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy tmp]# ll
總用量16
drwxr-xr-x7 root root4096 2016/03/08 15:55:24 oldboy
-rw-r--r--1 root root 10240 2016/03/10 14:54:52oldboy.tar
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboy tmp]# cdoldboy
[root@oldboy oldboy]# ll
總用量24
drwxr-xr-x 3 root root 40962016/03/08 14:30:15 ext
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 jeacen
-rw-r--r-- 1 root root111 2016/03/08 15:55:24 nginx.conf
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 oldboy
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 test
lrwxrwxrwx 1 root root4 2016/03/10 15:08:02 wd -> ext/
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 wodi.gz
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaodong
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaofan
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xingfujie
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 yingsui.gz
[root@oldboy oldboy]#
4、添加yum.log文件到oldboy.tar包。
[root@oldboy tmp]# ll
總用量16
drwxr-xr-x7 root root4096 2016/03/08 15:55:24 oldboy
-rw-r--r--1 root root 10240 2016/03/10 14:54:52oldboy.tar
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboytmp]# tar -rf oldboy.tar yum.log
[root@oldboytmp]# tar -tf oldboy.tar
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
yum.log
[root@oldboy tmp]#
5、打包oldboy目錄,并采用gzip格式壓縮,并查看壓縮包的內容,然后移動到/tmp目錄下解壓。
[root@oldboy ~]#tar -czvf oldboy.tar.gz oldboy
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy ~]#ll oldboy.tar.gz
-rw-r--r-- 1 root root 4062016/03/10 15:34:04 oldboy.tar.gz
[root@oldboy ~]#tar -tzf oldboy.tar.gz
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy ~]# mvoldboy.tar.gz /tmp
[root@oldboy ~]# cd /tmp
[root@oldboy tmp]# rmoldboy -rf
[root@oldboy tmp]# ll
總用量16
-rw-r--r--1 root root 10240 2016/03/10 15:11:30oldboy.tar
-rw-r--r--1 root root406 2016/03/10 15:34:04 oldboy.tar.gz
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboytmp]# tar xzvf oldboy.tar.gz
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy tmp]# ll
總用量20
drwxr-xr-x7 root root4096 2016/03/10 15:28:38 oldboy
-rw-r--r--1 root root 10240 2016/03/10 15:11:30oldboy.tar
-rw-r--r--1 root root406 2016/03/10 15:34:04 oldboy.tar.gz
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboy tmp]# lloldboy
總用量24
drwxr-xr-x 3 root root 40962016/03/08 14:30:15 ext
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 jeacen
-rw-r--r-- 1 root root111 2016/03/08 15:55:24 nginx.conf
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 oldboy
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 test
lrwxrwxrwx 1 root root4 2016/03/10 15:35:13 wd -> ext/
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 wodi.gz
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaodong
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaofan
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xingfujie
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 yingsui.gz
[root@oldboy tmp]#
6、打包oldboy目錄,并采用bzip2格式壓縮,并查看壓縮包的內容,然后移動到/tmp目錄下解壓
[root@oldboytmp]# tar -cjvf oldboy.tar.bz oldboy
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy tmp]# lloldboy.tar.bz
-rw-r--r-- 1 root root 3892016/03/10 16:03:09 oldboy.tar.bz
[root@oldboy tmp]# ll
總用量24
drwxr-xr-x7 root root4096 2016/03/10 15:28:38 oldboy
-rw-r--r--1 root root 10240 2016/03/10 15:11:30oldboy.tar
-rw-r--r--1 root root389 2016/03/10 16:03:09 oldboy.tar.bz
-rw-r--r--1 root root406 2016/03/10 15:34:04 oldboy.tar.gz
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboy tmp]# rmoldboy -rf
[root@oldboy tmp]# ll
總用量20
-rw-r--r--1 root root 10240 2016/03/10 15:11:30oldboy.tar
-rw-r--r--1 root root389 2016/03/10 16:03:09 oldboy.tar.bz
-rw-r--r--1 root root406 2016/03/10 15:34:04 oldboy.tar.gz
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboytmp]# tar tjf oldboy.tar.bz
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboytmp]# tar -xjvf oldboy.tar.bz
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/nginx.conf
oldboy/xiaofan/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy tmp]# ll
總用量24
drwxr-xr-x7 root root4096 2016/03/10 15:28:38 oldboy
-rw-r--r--1 root root 10240 2016/03/10 15:11:30oldboy.tar
-rw-r--r--1 root root389 2016/03/10 16:03:09 oldboy.tar.bz
-rw-r--r--1 root root406 2016/03/10 15:34:04 oldboy.tar.gz
-rw-------. 1 rootroot0 2016/03/06 16:21:46 yum.log
[root@oldboy tmp]# lloldboy
總用量24
drwxr-xr-x 3 root root 40962016/03/08 14:30:15 ext
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 jeacen
-rw-r--r-- 1 root root111 2016/03/08 15:55:24 nginx.conf
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 oldboy
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 test
lrwxrwxrwx 1 root root4 2016/03/10 16:04:56 wd -> ext/
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 wodi.gz
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaodong
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaofan
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xingfujie
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 yingsui.gz
[root@oldboy tmp]#
7、打包時排除目錄xiaofan、文件nginx.conf
[root@oldboy tmp]# lloldboy
總用量24
drwxr-xr-x 3 root root 40962016/03/08 14:30:15 ext
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 jeacen
-rw-r--r-- 1 root root111 2016/03/08 15:55:24 nginx.conf
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 oldboy
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 test
lrwxrwxrwx 1 root root4 2016/03/10 16:04:56 wd -> ext/
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 wodi.gz
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaodong
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaofan
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xingfujie
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 yingsui.gz
[root@oldboy tmp]#
[root@oldboytmp]# tar -czvf oldboy.tar.gz --exclude="xiaofan"--exclude=nginx.conf oldboy/
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboytmp]# tar -tzf oldboy.tar.gz
oldboy/
oldboy/ext/
oldboy/ext/oldboy/
oldboy/wd
oldboy/yingsui.gz
oldboy/jeacen
oldboy/test/
oldboy/oldboy
oldboy/xiaodong/
oldboy/xingfujie/
oldboy/wodi.gz
[root@oldboy tmp]#
8、從oldboy.tar解壓到/tmp目錄下
[root@oldboy ~]#tar -xf oldboy.tar -C "/tmp"
[root@oldboy ~]# cd /tmp
[root@oldboy tmp]# ll
總用量8
-rw-r--r-- 1 root root407 2016/03/10 16:16:27 --exclude
drwxr-xr-x 7 root root 40962016/03/08 15:55:24 oldboy
[root@oldboy tmp]# cdoldboy/
[root@oldboy oldboy]# ll
總用量24
drwxr-xr-x 3 root root 40962016/03/08 14:30:15 ext
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 jeacen
-rw-r--r-- 1 root root111 2016/03/08 15:55:24 nginx.conf
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 oldboy
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 test
lrwxrwxrwx 1 root root4 2016/03/10 16:55:40 wd -> ext/
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 wodi.gz
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaodong
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xiaofan
drwxr-xr-x 2 root root 40962016/03/08 14:30:15 xingfujie
-rw-r--r-- 1 root root0 2016/03/08 14:30:23 yingsui.gz
[root@oldboy oldboy]#
9、
Linux下常用的壓縮命令簡單介紹
1、gzip命令
gzip命令是Linux下常用的壓縮命令,但是他只能壓縮單個文件或數據流,不能對目錄和多個文檔進行歸檔,通常的做法是先用tar命令歸檔,然后使用-z參數同時進行壓縮。
[root@oldboy test]# ll
總用量48
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
使用gzip命令壓縮test.txt文件
[root@oldboytest]# gzip test.txt
[root@oldboy test]# ll
總用量24
-rw-r--r-- 1 root root22629 2016/03/10 17:08:53 test.txt.gz
使用-l參數列出壓縮文件的屬性信息。
[root@oldboy test]#gzip -l test.txt.gz
compresseduncompressedratio uncompressed_name
226294889453.8% test.txt
使用gunzip命令解壓test.txt.gz文件。
[root@oldboytest]# gunzip test.txt.gz
[root@oldboy test]# ll
總用量48
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
[root@oldboy test]#
2、bzip2命令
是另一種常用的壓縮工具,功能和語法同gzip非常類似,唯一不同的在于bzip2的壓縮效率比gzip更高,但花費的壓縮時間更長。
[root@oldboy test]# ll
總用量48
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
[root@oldboytest]# bzip2 test.txt
[root@oldboy test]# ll
總用量12
-rw-r--r-- 1 root root10443 2016/03/10 17:08:53 test.txt.bz2
[root@oldboytest]# bunzip2 test.txt.bz2
[root@oldboy test]# ll
總用量48
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
[root@oldboy test]#
3、zip命令
zip命令可以用來解壓縮文件,或者對文件進行打包操作。zip是個使用廣泛的壓縮程序,文件經它壓縮后會另外產生具有“.zip”擴展名的壓縮文件。
1)同時壓縮test1.txt
test3.txt test.txt三個文件,生成test.zip壓縮文件
[root@oldboytest]# zip test.zip test1.txt test3.txt test.txt
adding: test1.txt (deflated 54%)
adding: test3.txt (deflated 54%)
adding: test.txt (deflated 54%)
[root@oldboy test]#
[root@oldboy test]# ll
總用量212
-rw-r--r-- 1 root root48894 2016/03/10 17:18:30 test1.txt
-rw-r--r-- 1 root root48894 2016/03/10 17:18:34 test3.txt
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
-rw-r--r-- 1 root root68264 2016/03/10 17:19:03 test.zip
2)對oldboy目錄進行壓縮
[root@oldboytest]# zip -r oldboy.zip oldboy/
adding: oldboy/ (stored 0%)
adding: oldboy/test.txt (deflated 54%)
adding: oldboy/test3.txt (deflated 54%)
adding: oldboy/test1.txt (deflated 54%)
[root@oldboy test]# ll
總用量140
drwxr-xr-x 2 root root4096 2016/03/10 17:20:04 oldboy
-rw-r--r-- 1 root root68448 2016/03/10 17:22:43 oldboy.zip
-rw-r--r-- 1 root root68264 2016/03/10 17:19:03 test.zip
[root@oldboy test]#
3)使用unzip命令從oldboy.zip文件中提取內容
[root@oldboytest]# unzip oldboy.zip
Archive:oldboy.zip
creating: oldboy/
inflating: oldboy/test.txt
inflating: oldboy/test3.txt
inflating: oldboy/test1.txt
[root@oldboy test]# ll
總用量140
drwxr-xr-x 2 root root4096 2016/03/10 17:20:04 oldboy
-rw-r--r-- 1 root root68448 2016/03/10 17:22:43 oldboy.zip
-rw-r--r-- 1 root root68264 2016/03/10 17:19:03 test.zip
[root@oldboy test]# cdoldboy
[root@oldboy oldboy]# ll
總用量144
-rw-r--r-- 1 root root48894 2016/03/10 17:18:30 test1.txt
-rw-r--r-- 1 root root48894 2016/03/10 17:18:34 test3.txt
-rw-r--r-- 1 root root48894 2016/03/10 17:08:53 test.txt
[root@oldboy oldboy]# cd ..
[root@oldboy test]#
這里面有一點需要說明的就是unzip提取文件后不會刪除原來的壓縮文件,這一點上與gzip不同。
4、
課后作業題解答
12./etc/目錄為系統的默認配置文件及服務啟動命令目錄
a.請用tar打包/etc整個目錄(打包及壓縮整個目錄(打包及壓縮)
b.請用tar打包/etc整個目錄(打包及壓縮,但需要排除/etc/services文件)
c.請把a點命令的壓縮包,解到/tmp指定目錄下(最好只用tar命令實現)
解答
a、
tar -czvf etc.tar.gz etc/
b、
tar -czvf etc.tar.gz--exclude="services" etc/
[root@oldboy /]# tar -tvfetc.tar.gz|grep services
-rw-r--r-- root/root726 2013-11-23 21:52etc/init/readahead-disable-services.conf
[root@oldboy /]#
c、
tar -xzvf etc.tar.gz -C/tmp
[root@oldboy /]# ll /tmp
總用量12
drwxr-xr-x 82 root root4096 2016/03/10 13:41:43 etc
-rw-r--r--1 root root407 2016/03/10 16:16:27 --exclude
drwxr-xr-x7 root root 4096 2016/03/08 15:55:24 oldboy
[root@oldboy /]#