Linux压缩打包tar命令总结
命令简介
在Linux系统的维护、管理中,tar命令是⼀个使⽤频率很⾼的命令,tar命令的功能主要是将众多⽂件打包成⼀个tar⽂件并压缩,并且能保持⽂件的权限属性。tar其实最开始是⽤来做磁带备份存盘的,tar是tape archive的简称。后⾯扩展到不仅仅局限于磁带备份存盘。也能存放到⽂件系统中。tar命令版本众多,下⾯整理了⼀些常⽤的参数,具体以实际版本为准。
命令参数
参数参数描述
-c创建新的档案⽂件
-C指定到要解压到的⽬录。注意:该⽬录必须存在
-f指定打包的⽂件名。在f之后要⽴即接打包⽂件名!不要再加参数!
电脑单机游戏排行榜-x解压
-
O将⽂件解压到标准输出
-p使⽤原⽂件的原来属性
-P创建归档⽂件,使⽤绝对路径
-t列出档案⽂件中的内容
-r向压缩归档⽂件末尾追加⽂件
-u更新原压缩包中的⽂件
-v显⽰详细过程
-z使⽤gzip压缩,⼀般格式为或xx. tgz
-Z有compress
-j使⽤bzip2压缩,⼀般格式为xxx.tar.bz2
--exclude在压缩过程中,排除某个⽂件
-
-remove-files在完成打包后,删除原⽂件夹
注意事项:
1:在上⾯的参数中, c/x/t 仅能存在⼀个!不可同时存在!例如,不可能同时压缩与解压缩。
2:-f: 指定打包的⽂件名,切记,这个参数是最后⼀个参数(不能再接其它参数),后⾯只能接打包⽂件名。
3:参数可以合并在⼀起,也可以单独分开。如下所⽰:
#tar -jcvf 2018-10-14.tar.bz2 ./2018-10-11
#tar -j -c -v -f 2018-10-14.tar.bz2 ./2018-10-11
孙越的师傅
使⽤⽰例
--打包当前⽬录下所有后缀为log类型的⽂件
[root@DB-Server logs]# tar -cvf backup_log.tar ./*.log
盛唐夜唱 歌词
--查看打包了那些⽂件
[root@DB-Server logs]# tar -tf backup_log.ta
记住:如果⽂件是压缩格式,如何查看打包了那些⽂件呢?是否需要参数z或f呢?其实是不需要参数z或j也是能查看的。
[root@DB-Server logs]# tar -jcvf  backup.tar.bz2  ./*.log
[root@DB-Server logs]# tar -tvf backup.tar.bz2
[root@DB-Server logs]# tar -tjvf backup.tar.bz2尹恩惠男友
[root@DB-Server full]# tar -tjvf full_2018-10-21_00_00_01.tar.bz2
加上参数z或j也没有错,暂时不清楚区别。猜测有可能是⾃动进⾏了解压.
注意:加上参数
--查看是否打包了⽂件incr_2018-10-16_12_00_01.log
[root@DB-Server mysql]# tar -tvf logs.tar.bz2  | grep incr_2018-10-16_12_00_01.log
-
rw-r--r-- root/root    118944 2018-10-21 10:16:01 home/mysqlbackup/logs/incr_2018-10-16_12_00_01.log --解压打包的backup_log.tar⽂件
[root@DB-Server logs]# tar -xvf backup_log.tar
--打包压缩为bz2格式的⽂件
[root@DB-Server mysqlbackup]#tar -jcvf 2018-10-20.tar.bz2 ./2018-10-20
注意:使⽤bz2压缩的打包⽂件,后缀可以为filename.tar.bz2 或 filenam.tbz两种格式,视个⼈喜好、习惯⽽定。
--打包压缩为gz格式的⽂件
[root@DB-Server mysqlbackup]#tar -zcvf ./2018-10-20
注意:使⽤gzip压缩的打包⽂件,后缀可以为 或两种格式,视个⼈喜好、习惯⽽定。
--打包压缩后删除原⽂件夹或原⽂件
[root@DB-Server mysqlbackup]tar -zcvf /mysql_backup/2018-10-13 --remove-files #参数remove-files会在/mysql_backup/2018-10-13⽬录打包压缩后,删除这个原⽂件夹。
--解压压缩格式为gz格式的打包⽂件
[root@DB-Server mysqlbackup]# tar -xjvf 2018-10-20.tar.bz2
[root@DB-Server mysqlbackup]# tar -xzvf
--解压压缩⽂件中的某⼀个⽂件
#只要解压打包压缩⽂件中⼀个⽂件xtrabackup_checkpoints(绝对路径打包压缩)
[root@DB-Server full]# tar -jxvf full_2018-10-21_00_00_01.tar.bz2 \
/mysqlbackup/db_backup/2018-10-22/full/full_2018-10-22_00_00_01/xtrabackup_checkpoints #相对路径的打包压缩⽂件解压单个⽂件
[root@DB-Server mysqlbackup]# tar -xjvf logs.tar.bz2  ./logs/incr_2018-10-13_16_10_01.log
./logs/incr_2018-10-13_16_10_01.log
--打包分⽚压缩
# tar -zcvp -f - 2018-10-18/ | split -b 2M -d -a 1 -
root@DB-Server mysql_db_backup]# tar -zcvpf - 2018-10-18/ | split -b 2M -d -a 1 -
2018-10-18/
2018-10-18/last_lsn
2018-10-18/incr/
2018-10-18/incr/incr_2018-10-18_23_02_29.tar.bz2
2018-10-18/incr/incr_2018-10-18_23_02_01.tar.bz2
2018-10-18/full/
2018-10-18/full/full_2018-10-17_23_01_33.tar.bz2
[root@DB-Server mysql_db_backup]# ls -lrt
total 15220
drwxr-xr-x. 4 root root    4096 Oct 18 23:01 2018-10-18
drwxr-xr-x. 4 root root    4096 Oct 19 09:16 2018-10-19
-rw-r--r--. 1 root root  35275 Oct 25 10:41 2008.tar.bz2
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 0
女演员名单-rw-r--r--. 1 root root 2097152 Oct 25 11:03 1
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 2
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 3
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 4
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 5
-rw-r--r--. 1 root root 2097152 Oct 25 11:03 6
-
rw-r--r--. 1 root root  856929 Oct 25 11:03 7
# tar -zcvpf - ./2018-10-18 | split -b 2M -
--绝对路径打包压缩的相关案例
打包相对路径⽂件演⽰
[root@DB-Server db_backup]# ls -lrt
total 16
drwxr-xr-x 2 root root 4096 Oct 21 22:39 2018-10-20
drwxr-xr-x 3 root root 4096 Oct 21 22:39 2018-10-21
[root@DB-Server db_backup]#
#相对路径压缩,解压的时候没有任何问题
[root@DB-Server db_backup]# tar -jcvf 2018-10-21.tar.bz2 ./2018-10-21
#在当前路径下⾯解压
[root@DB-Server db_backup]# tar -xjvf 2018-10-21.tar.bz2
#解压到某个路径下⾯
[root@DB-Server db_backup]# tar -xjvf 2018-10-21.tar.bz2  -C /mysql/
如果是打包压缩时使⽤绝对路径,这个就相对⽽⾔⽐较⿇烦,尤其是将打包⽂件在异机(其它服务器)解压.例如,下⾯full_2018-10-20_00_00_02.tar.bz2⽂件是将/mysql/mysql_backup/db_backup/2018-10-21这个⽬录下⾯的所有⽂件按绝对路径打包,然后将⽂件拷贝到这台服务解压。输出信息有“tar: Removing leading `/' from member names”,它是tar删除了绝对路径最开始 / ⽽进⾏的提⽰。使⽤tar对⽂件打包时,⼀般不建议使⽤绝对路径.
[root@DB-Server mysqlbackup]# ls -lrt
total 683016周杰伦鼓励林书豪
-rw-r--r-- 1 root root 698691092 Oct 21 10:13 full_2018-10-20_00_00_02.tar.bz2
drwxr-xr-x 2 root root    12288 Oct 21 21:14 logs
drwxr-xr-x 4 root root      4096 Oct 21 23:07 db_backup
[root@DB-Server mysqlbackup]# pwd
/home/mysqlbackup
[root@DB-Server mysqlbackup]# tar -xjvf full_2018-10-20_00_00_02.tar.bz2
/mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/
tar: Removing leading `/' from member names
/mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/xtrabackup_logfile
/mysql/mysql_backup/db_backup/2018-10-21/full/full_2018-10-21_00_00_02/ibdata1 ............................................................
此时就会在当前⽬录下/home/mysqlbackup 下⾯⽣成mysql/mysql_backup/db_backup/2018-10-21等⽬录。这个往往不是我们想要的,能否直接将2018-10-21这个⽂件夹解压到当前⽬录呢?答案是不⾏。即使使⽤参数-C,也依然⽣成不了我们想要的。
[root@DB-Server mysqlbackup]# tar -xjvf full_2018-10-20_00_00_02.tar.bz2 -C /home/mysqlbackup/
当然,如果使⽤-P参数打包绝对路径⽂件,那么解压的时候,也会按原绝对路径⽣成。⽽不是在当前⽬录或指定⽬录,⽣成很深的路径。
#这样会按原绝对路径的⽅式解压
[root@DB-Server mysqlbackup]# tar -xjvPf full_2018-10-20_00_00_02.tar.bz2
参考资料: