5.打包与压缩
5.2打包指令: tar
5.2.1 tar语法
[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename...<==打包与压缩
[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔名] <==察看檔名
[dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar檔名] [-C 目录] <==解压缩
选项与参数:
-c :建立打包档案,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包档案的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z :透过gzip的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过xz的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
5.2.2 tar打包与压缩
1.直接打包(不压缩)
[root@localhost tmp]# tar -cvf dir.tar dir/
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
#如果不带v,则不会有上面4行的输出。
2.用gzip压缩
[root@localhost tmp]# tar -zcv -f dir.tar.gz dir/
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
dir/dir.tar.gz
3.用bzip2压缩
[root@localhost tmp]# tar -jvc -f dir.tar.bz dir/
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
dir/dir.tar.gz
4.用xz压缩
[root@localhost tmp]# tar -Jcv -f dir.tar.xz dir/
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
dir/dir.tar.gz
5.三种压缩对比
[root@localhost tmp]# ll
total 36
drwxrwxrwx. 2 root root 70 Mar 30 22:05 dir
-rw-r--r--. 1 root root 10240 Mar 30 22:01 dir.tar
-rw-r--r--. 1 root root 2541 Mar 30 22:07 dir.tar.bz
-rw-r--r--. 1 root root 2093 Mar 30 22:05 dir.tar.gz
-rw-r--r--. 1 root root 1956 Mar 30 22:08 dir.tar.xz
#tar包比原文件大属于正常情况
5.2.3查看打包内容
1.查看gzip压缩的tar包
[root@localhost tmp]# tar -ztv -f dir.tar.gz
drwxrwxrwx root/root 0 2020-03-30 22:05 dir/
-rw-r--r-- root/root 2003 2020-03-30 21:05 dir/passwd
-rw-r--r-- root/root 864 2020-03-30 21:05 dir/passwd.xz
-rw-r--r-- root/root 864 2020-03-30 21:46 dir/passwd.9.xz
-rw-r--r-- root/root 45 2020-03-30 22:05 dir/dir.tar.gz
2.查看bzip2压缩的tar包
[root@localhost tmp]# tar -jtv -f dir.tar.bz
drwxrwxrwx root/root 0 2020-03-30 22:05 dir/
-rw-r--r-- root/root 2003 2020-03-30 21:05 dir/passwd
-rw-r--r-- root/root 864 2020-03-30 21:05 dir/passwd.xz
-rw-r--r-- root/root 864 2020-03-30 21:46 dir/passwd.9.xz
-rw-r--r-- root/root 45 2020-03-30 22:05 dir/dir.tar.gz
3.查看xz压缩的tar包
[root@localhost tmp]# tar -Jtv -f dir.tar.xz
drwxrwxrwx root/root 0 2020-03-30 22:05 dir/
-rw-r--r-- root/root 2003 2020-03-30 21:05 dir/passwd
-rw-r--r-- root/root 864 2020-03-30 21:05 dir/passwd.xz
-rw-r--r-- root/root 864 2020-03-30 21:46 dir/passwd.9.xz
-rw-r--r-- root/root 45 2020-03-30 22:05 dir/dir.tar.gz
4.查看未压缩的tar包
[root@localhost tmp]# tar -tv -f dir.tar
drwxrwxrwx root/root 0 2020-03-30 21:46 dir/
-rw-r--r-- root/root 2003 2020-03-30 21:05 dir/passwd
-rw-r--r-- root/root 864 2020-03-30 21:05 dir/passwd.xz
-rw-r--r-- root/root 864 2020-03-30 21:46 dir/passwd.9.xz
5.2.4解压
1.解压tar包到当前目录
[root@localhost tmp]# tar -xv -f dir.tar
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
2.解压tar包到指定目录
[root@localhost tmp]# tar -xv -f dir.tar -C /root
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
3.解压gzip压缩的tar包
[root@localhost tmp]# tar -zvx -f dir.tar.gz #解压到当前目录
[root@localhost tmp]# tar -zvx -f dir.tar.gz -C /root #解压到/root
4.解压bzip2压缩的tar包
[root@localhost tmp]# tar -jvx -f dir.tar.bz #解压到当前目录
[root@localhost tmp]# tar -jvx -f dir.tar.bz -C /root #解压到/root
5.解压xz压缩的tar包
[root@localhost tmp]# tar -Jvx -f dir.tar.xz#解压到当前目录
[root@localhost tmp]# tar -Jvx -f dir.tar.xz -C /root#解压到/root
5.2.5特殊用法
1.解压部分文件
[root@localhost tmp]# tar -t -f dir.tar #查看压缩文件
dir/
dir/passwd
dir/passwd.xz
dir/passwd.9.xz
[root@localhost tmp]# ll dir #查看dir源目录里的内容(用于验证实验)
total 12
-rw-r--r--. 1 root root 45 Mar 30 22:05 dir.tar.gz
-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz
-rw-r--r--. 1 root root 864 Mar 30 21:05 passwd.xz
[root@localhost tmp]# tar -xv -f dir.tar dir/passwd #解压指定文件
dir/passwd
[root@localhost tmp]# ll dir #再次查看dir源目录里的内容
total 16
-rw-r--r--. 1 root root 45 Mar 30 22:05 dir.tar.gz
-rw-r--r--. 1 root root 2003 Mar 30 21:05 passwd
-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz
-rw-r--r--. 1 root root 864 Mar 30 21:05 passwd.xz
#注:如果tar包是被压缩的,需要带对应的选项z/j/J。
2.打包某目录,但不含该目录下的某些档案
[root@localhost tmp]# ll dir
total 12
-rw-r--r--. 1 root root 45 Mar 30 22:05 dir.tar.gz
-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz
-rw-r--r--. 1 root root 864 Mar 30 21:05 passwd.xz
[root@localhost tmp]# tar -Jcv -f dir.tar.xz --exclude=dir/passwd.xz dir/
dir/
dir/dir.tar.gz
dir/passwd.9.xz
[root@localhost tmp]# tar -Jtv -f dir.tar.xz
drwxrwxrwx root/root 0 2020-03-30 22:34 dir/
-rw-r--r-- root/root 45 2020-03-30 22:05 dir/dir.tar.gz
-rw-r--r-- root/root 864 2020-03-30 21:46 dir/passwd.9.xz
3.只打包比某个时间更近的文件
[root@localhost tmp]# touch -m -d "20200501" dir/passwd.xz
#修改passwd.xz的时间戳
[root@localhost tmp]# ll dir
total 12
-rw-r--r--. 1 root root 45 Mar 30 22:05 dir.tar.gz
-rw-r--r--. 1 root root 864 Mar 30 21:46 passwd.9.xz
-rw-r--r--. 1 root root 864 May 1 2020 passwd.xz
[root@localhost tmp]# tar -jcv -f dir.tar.bz2 --newer-mtime="20200404" dir
#只备份2020-4-4以后的文件
tar: Option --newer-mtime: Treating date `20200404' as 2020-04-04 00:00:00
dir/ #备份
tar: dir/dir.tar.gz: file is unchanged; not dumped #未备份
dir/passwd.xz #备份
tar: dir/passwd.9.xz: file is unchanged; not dumped #未备份
[root@localhost tmp]# ll
total 16
drwxrwxrwx. 2 root root 57 Mar 30 22:50 dir
-rw-r--r--. 1 root root 1296 Mar 30 22:52 dir.tar.bz2 #备份文件
-rw-r--r--. 1 root root 1144 Mar 30 22:36 dir.tar.xz
-rwxrw----. 1 root root 6 Mar 19 10:24 root
-rw-r--r--. 1 root root 65 Mar 12 11:04 test
[root@localhost tmp]# tar -jtv -f dir.tar.bz2 #查看备份文件的内容
drwxrwxrwx root/root 0 2020-03-30 22:50 dir/
-rw-r--r-- root/root 864 2020-05-01 00:00 dir/passwd.xz