这一节主要介绍tar指令
- linux打包指令tar
前一节介绍了gzip、bzip2、xz压缩指令,这些压缩指令只能对单个文件或者对目录下所有文件分别压缩,不像windows中的WinRAR那样可以“随意压缩”,此节介绍的tar指令可以实现“随意压缩”
tar指令
root@DESKTOP-I95TUI1:~# tar -cvp -f my_tar.tar filename
选项与参数:
-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 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!
其实我们常用到的打包命令只需要记住一条即可,假设我们需要给/etc/下面的文件打包:
打包文件指令
root@DESKTOP-I95TUI1:~# tar -zcvp -f my_etc.tar.gz /etc/ 使用gzip软件压缩打包(最常用)
root@DESKTOP-I95TUI1:~# tar -jcvp -f my_etc.tar.bz2 /etc/ 使用bzip2软件压缩打包
root@DESKTOP-I95TUI1:~# tar -Jcvp -f my_etc.tar.xz /etc/ 使用xz软件压缩打包
root@DESKTOP-I95TUI1:~# tar -cvp -f my_etc.tar /etc/ (不进行压缩仅打包)
解压打包文件指令:
root@DESKTOP-I95TUI1:~# tar -zxvp -f my_etc.tar.gz 使用gzip软件解压打包文件(最常用)
root@DESKTOP-I95TUI1:~# tar -jxvp -f my_etc.tar.bz2 使用bzip2软件解压打包文件
root@DESKTOP-I95TUI1:~# tar -Jxvp -f my_etc.tar.xz 使用xz软件解压打包文件
root@DESKTOP-I95TUI1:~# tar -xvp -f my_etc.tar 解压打包文件
详细参数介绍见上面选项参数,-f是指定打包文件,至于文件扩展名是自定义的,为了以后解压做个标记,-f选项也可以与前面和在一起(但需要把-f放在最后 例如:-jcvpf正确、-jfcvp错误,所以一般把-f单独拿出来,思考一下为什么?还是不明白的可以评论区讨论哦),对gzip、bzip2、xz不了解的参见上一节:
示例一、
tar打包压缩文件
上面的指令是使用bzip2软件(-j)对目录/etc/下的文件进行压缩打包,朋友们测试的时候可以加上-v参数,这样会输出打包的文件名,使用time命令是为了计算次打包指令一共花费了多少时间(只需要看real),-p是把需要打包的文件原本权限与属性一并打包,意义非凡哦。另外tar: Removing leading `/' from member names 这句话的意思是在打包压缩时,去除根目录(你知道为什么吗?猜一下?)上一节介绍过,gzip、bzip2、xz压缩比例与压缩时间的问题,我们来对比一下三种打包压缩所需要的时间与压缩比例
gzip、bzip2、xz打包压缩对比
由上图可知,/etc/目录未压缩打包之前是2.5M,分别使用三种压缩软件之后压缩文件大小可以通过对比了解到,在时间上gzip<bzip2<xz,在压缩比例上gzip<bzip2<xz,也就是说,gzip压缩时间最快,但是压缩比例相对较小
示例二、
解包文件
上图是对gzip类型的打包压缩文件解包操作,默认是解压到当前目录,也可以指定目录(-C)
指定目录解包
细心的朋友们可能发现了,解包操所是对/etc/文件解压到当前目录,还记得上面说过的打包时有一句提示信息:tar: Removing leading `/' from member names(移除根目录),现在明白了吧,如果打包时不移除根目录,那么解包时会发生什么?会替换到原目录。所以一定要注意哦。
打包指令还有很多其他强大的功能:
打包某目录,但不含该目录下的某些文件之作法
例如,我要打包/etc/下的文件但是不想打包/etc/acpi/目录怎么办呢?使用--exclude
可以在指令后面加多个--exclude
仅备份比某个时刻以后的文件
这个功能可以说是相当重要的,举个例子:如果一个网站需要每月备份一次,总不能每次都从开始时间备份吧,当然是以时间段为单位备份咯。
转自https://www.toutiao.com/i6555066284092949006/