tar命令的功能是将一个或多个文件归档成一个文件,同时可结合gzip、bzip2和xz等压缩命令实现文件的压缩和解压缩。
tar 命令的语法格式如下:
tar [选项] 文件或目录
常用选项如下:
选项 | 作用/含义 |
-c | 建立归档文件 |
-x | 从归档文件中解出文件 |
-z | 通过gzip进行压缩/解压缩,建议文件名为*.tar.gz |
-j | 通过bzip2进行压缩/解压缩,建议文件名为*.tar.bz2 |
-J | 通过xz进行压缩/解压缩,建议文件名为*.tar.xz |
-v | 显示压缩/解压缩的处理过程 |
-f | 后接要处理的归档文件名 |
-t | 查看归档文件的内容包含有哪些文件 |
-C | 后接目录,指定将压缩包解压到该目录中 |
-p | 小写p,保留备份数据的原本权限和属性,常用于备份重要的配置文件 |
-P | 大写P,保留文件绝对路径,即要求备份文件中含有根目录 |
-N | 后接日期,只保存较指定日期更新的文件 |
-A | 追加tar文件至归档文件 |
-r | 追加文件至归档文件末尾 |
-u | 仅追加比归档中副本更新的文件 |
--exclude=PATTERN | 在打包压缩时,不将以 PATTERN 指定的文件归档压缩 |
--remove-files | 打包/压缩之后删除源文件 |
特别说明:-c和-x选项不能同时出现;-z、-j和-J等表示压缩技术的选项也不能同时出现。选项-f后面必须紧跟要处理归档文件。
打包/压缩实例演示:
1、使用gzip压缩格式打包/etc目录下所有扩展名为conf的文件,并显示打包压缩过程
[root@myEuler ~]# tar czvf etc_bak.tar.gz /etc/*.conf tar: 从成员名中删除开头的“/” /etc/chrony.conf /etc/dracut.conf /etc/e2scrub.conf /etc/fuse.conf ……此处省略部分输出……
2、使用bzip2压缩格式打包/tmp目录,并显示压缩过程
[root@myEuler ~]# tar -cjvf tmp_bak.tar.bz2 /tmp tar: 从成员名中删除开头的“/” /tmp/ /tmp/.X1-lock ……此处省略部分输出……
3、将当前工作目录内所有文件打包归档,但不压缩
[root@myEuler ~]# tar cvf bak.tar . ./ ./.bash_logout ./.vnc/ ……此处省略部分输出……
4、将当前工作目录内所有扩展名为cfg的文件打包,但不压缩,且删除原始文件
[root@myEuler dir1]# tar cvf back.tar *.cfg --remove-files file3.cfg
5、备份指定文件/目录,要求保留原文件的权限和属性
[root@myEuler ~]# tar cpzvf sshd_config.tar.gz /etc/ssh/sshd_config tar: 从成员名中删除开头的“/” /etc/ssh/sshd_config
6、备份文件/目录,要求保留根目录
从前面的示例可以看到,执行压缩时,都会提示【tar: 从成员名中删除开头的“/”】,若要消除该提示,要求保留根目录,则可使用选项-P。
[root@myEuler ~]# tar cPpzvf sshd_config_P.tar.gz /etc/ssh/sshd_config /etc/ssh/sshd_config #对比有选项-P和没有-P的区别 # sshd_config.tar.gz压缩包没有使用选项-P [root@myEuler ~]# tar tvf sshd_config.tar.gz tar: 从成员名中删除开头的“/” -rw------- root/root 5006 2022-11-22 16:51 /etc/ssh/sshd_config # sshd_config1.tar.gz压缩包有使用选项-P [root@myEuler ~]# tar tvf sshd_config_P.tar.gz -rw------- root/root 5006 2022-11-22 16:51 etc/ssh/sshd_config
7、打包压缩某个目录,但要求排除某些文件
在很多时候,我们要对某一个目录打包/压缩,这个目录下有几十个子目录和子文件,现需要排除其中某些目录或文件,这时就需要用到--exclude选项。
[root@myEuler ~]# ll /etc/ssh/sshd_config -rw-------. 1 root root 5006 11月 22 16:51 /etc/ssh/sshd_config #所有以config结尾的文件均被排除 [root@myEuler ~]# tar czvf ssh.tar.gz --exclude=*config /etc/ssh tar: 从成员名中删除开头的“/” /etc/ssh/ /etc/ssh/ssh_host_rsa_key.pub /etc/ssh/moduli /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_config.d/ /etc/ssh/ssh_config.d/05-redhat.conf /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_ecdsa_key
注:在openEuler中,--exclude选项必须在必选选项之后,本示例中就不能放在被打包目录/etc/ssh之后。
解包/解压缩实例演示:
8、解包某个归档文件到当前工作目录
[root@myEuler dir1]# tar xvf back.tar file3.cfg
9、解压缩某个压缩包至指定目录
注意,这个指定的目录必须事先已存在。
[root@myEuler ~]# mkdir /opt/temp [root@myEuler ~]# tar xjvf tmp_bak.tar.bz2 -C /opt/temp tmp/ tmp/.X1-lock ……此处省略部分输出……
10、查看某个压缩包内包含的文件,但要求不进行解包/解压缩
[root@myEuler ~]# tar tvf etc_bak.tar.gz -rw-r--r-- root/root 1307 2021-12-16 20:17 etc/chrony.conf -rw-r--r-- root/root 117 2022-07-28 08:00 etc/dracut.conf -rw-r--r-- root/root 685 2022-09-23 08:00 etc/e2scrub.conf