Linux系统中最常用的打包程序是tar。 使用tar程序创建的软件包通常称为tar软件包,tar软件包文件中的命令通常以. tar结尾。 生成tar包后,可以通过其他程序进行压缩。 此打包程序主要通过Linux的tar命令运行。
让我们分析一下Linux的tar命令。
1.tar命令定义
tar命令是类Unix和类Unix系统上的压缩打包工具,可以将多个文件组合为一个文件。 打包的文件名也是“tar”。 tar文件格式目前已成为POSIX标准,最初为POSIX.1-1988,现在为POSIX.1-2001。 因为本程序的最初目的是将文件备份到磁带(tape archive ),所以被命名为tar。
2、tar命令的一般格式
[root@RedHat_test ~]# man tar
-c创建新包文件,并使用与-v一起显示的包文件名
-v在压缩或解压缩过程中显示进程
-f要操作的文件名
-r表示添加文件,并将添加的文件添加到压缩文件的末尾
-t表示显示文件,并显示文件中文件的内容
-x文件解压缩
-z采用gzip方式压缩或解压缩,最后以. tar.gz为后缀
-j以bzip2方式压缩或解压缩,最后以. tar.br2为后缀。 压缩后的大小小于. tar.gz
-u更新压缩文件的内容
-p保持绝对路径。 也就是说,允许在备份数据中包含根目录
-保留p数据的原始权限和属性
3、压缩
#压缩方式1
[ root @ red hat _ te st01 ] # tar-jcvf log.tar.BZ2yunwei Mao
云圩茂
[root@RedHat_test 01]# ls
log.tar.bz2 yunweimao
#压缩方式2
[ root @ red hat _ te st01 ] # tar-zcvf log.tar.gzyunweimao
云圩茂
[root@RedHat_test 01]# ls
log.tar.gz yunweimao
4、解冻
#文件解压缩方式1
[root@RedHat_test 01]# ls
log.tar.bz2
[ root @ red hat _ te st01 ] # tar-jxvf log.tar.bz2
云圩茂
[root@RedHat_test 01]# ls
log.tar.bz2 yunweimao
#解压缩文件方式2
[root@RedHat_test 01]# ls
log.tar.gz
[ root @ red hat _ te st01 ] # tar-zxvf log.tar.gz
云圩茂
[root@RedHat_test 01]# ls
log.tar.gz yunweimao
5、咨询
#显示压缩文件名
[ root @ red hat _ te st01 ] # tar-TF log.tar.gz
云圩茂
#zip文件显示:所属权限、用户名用户组、日期等
[ root @ red hat _ te st01 ] # tar-tvf log.tar.gz
- rw-r---- r---root/root 462020-02-2517336047云威Mao
6、加密压缩
#语法: tar-czvf-file|OpenSSL des3- salt-k password-out/path/to/file.tar.gz
[root@RedHat_test 01]# ls
云圩茂
[ root @ red hat _ te st01 ] # tar-czvf-yunwei Mao|OpenSSL des3- salt-k 123456-outlog.tar.gz
[root@RedHat_test 01]# ls
log.tar.gz yunweimao
7、解密解压缩
#语法: OpenSSL des3- d-k密码多合一/path/to/file.tar.gz|tarxzf -
[root@RedHat_test 01]# ls
log.tar.gz
[ root @ red hat _ te st01 ] # OpenSSL des3- d-k 123456-salt-in log.tar.gz|tarxzf -
[root@RedHat_test 01]# ls
log.tar.gz yunweimao
8、查一下上面的tar包里有什么
文件[root@RedHat_test 01]# ls
log.tar.gz
[root@RedHat_test 01]# tar -ztvf log.tar.gz
-rw-r--r--root/root 02020-02-2517:58 lydfj
-rw-r--r--root/root 462020-02-2517:47 yunweimao
9、解压部分文件
[root@RedHat_test 02]# tar -czvf data.tar.gz *
log2010.log
log2012.log
log2013.log
log2014.log
log2015.log
log2016.log
log2017.log
log2018.log
log2019.log
log2021.log
[root@RedHat_test 02]# rm -rf log20*
[root@RedHat_test 02]# ls
data.tar.gz
[root@RedHat_test 02]# tar -zxvf data.tar.gz log2012.log
log2012.log
[root@RedHat_test 02]# ls
data.tar.gz log2012.log
10、文件备份下来,并且保存其权限
[root@RedHat_test 02]# ls -Zd *
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2012.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2018.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2020.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2021.log
[root@RedHat_test 02]# tar -zcvpf data.tar.gz *
log2012.log
log2018.log
log2020.log
log2021.log
[root@RedHat_test 02]# rm -rf log20*
[root@RedHat_test 02]# ls
data.tar.gz
[root@RedHat_test 02]# tar -zxvpf data.tar.gz
log2012.log
log2018.log
log2020.log
log2021.log
[root@RedHat_test 02]# ls -Zd *
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 data.tar.gz
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2012.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2018.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2020.log
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 log2021.log
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时
11、在文件夹当中,rrdfs个日期新的文件才备份
# 在 /home 当中,比 2020/02/27 新的文件才备份
[root@RedHat_test 02]# tar -N '2020/02/27' -zcvf home.tar.gz /home
12、备份的时候排除部分文件或目录
[root@RedHat_test 02]# ls
bin conf logs
[root@RedHat_test 02]# tar -czvf test.tar.gz * --exclude c.log --exclude logs
bin/
conf/
13、往tar包追加和删除内容
1)只能已归档的文件才能追加文件。
#如果tar.gz文件是如此生成。即tar.gz是压缩(-z)和归档(-c)文件,则无法给它追加文件。
[root@RedHat_test 02]# tar -zcvf data.tar.gz log*
2)生成可以追加的tar文件
[root@RedHat_test 02]# ls
log2018.log log2019.log log2020.log log2021.log
[root@RedHat_test 02]# tar -cvf data.tar.gz *
log2018.log
log2019.log
log2020.log
log2021.log
3)追加文件
[root@RedHat_test 02]# touch log2022.log
[root@RedHat_test 02]# tar -rvf data.tar.gz log2022.log
log2022.log
4)查看归档内容
[root@RedHat_test 02]# tar -tf data.tar.gz
log2018.log
log2019.log
log2020.log
log2021.log
log2022.log
5)删除tar包里的文件
[root@RedHat_test 02]# tar --delete -vf data.tar.gz log2018.log log2019.log
[root@RedHat_test 02]# tar -xvf data.tar.gz
log2020.log
log2021.log
log2022.log
Linux中tar命令只是众多的常用的Linux命令中专门用来控制打包工具的一个而已,在Linux中还有成千上万个命令需要我们去认识和掌握,我们不能一蹴而就,可以结合本站的Linux教程,通过不断的学习,积少成多,逐步掌握。