linux 打包指令,Linux打包指令tar

本文介绍了如何使用tar命令配合gzip, bzip2和xz进行目录压缩,包括打包、查看文件内容、解压缩的基本操作,以及选项如-v、-c、-t、-x和不同压缩格式的选择。还展示了使用tar命令的实例和常见应用场景,如排除文件、指定目标目录等。
摘要由CSDN通过智能技术生成

gzip, bzip2, xz 也能够针对目录来进行压缩,不过它们都是对目录下的文件逐个压缩的。而tar指令则可以将这些文件先打包成一个大文件,然后再进行压缩操作。

仅用tar命令打包不压缩的文件,称为tarfile,既打包又压缩的文件,如file.tar.gz则成为tarball。

tar指令的选项非常多,一般只是用几个常用的,基本语法如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16tar [-z|-j|-J] [cv] [-f 待建立的文件名] filename... <==打包与压缩

tar [-z|-j|-J] [tv] [-f 已有的tar格式文件名] <==查看文件名

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 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件

-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;

--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

一般来说,tar命令只要记住下面这个范例就行了:

压 缩:tar -jcv -f filename.tar.bz2要被压缩的文件或目录名称

查 询:tar -jtv -f filename.tar.bz2

解压缩:tar -jxv -f filename.tar.bz2 -C欲解压缩的目录

filename.tar.bz2 是我们自己取的文件名,tar 并不会自动帮我们生成打包压缩后的文件名。文件命名最好符合规范。示例:

使用tar命令打包/etc/目录,然后使用-z,-j,-J选项进行压缩,并观察结果与耗时1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29root@ubuntu:/temp# time tar -zpcv -f etc.tar.gz /etc

tar: Removing leading `/' from member names

/etc/

/etc/ucf.conf

/etc/selinux/

/etc/selinux/semanage.conf

...

real0m0.848s //耗时0.848秒

user0m0.456s

sys0m0.080s

root@ubuntu:/temp# time tar -jpcv -f etc.tar.bz2 /etc

tar: Removing leading `/' from member names

/etc/

/etc/ucf.conf

/etc/selinux/

/etc/selinux/semanage.conf

...

real0m1.781s //耗时1.781秒

user0m1.220s

sys0m0.060s

root@ubuntu:/temp# time tar -Jpcv -f etc.tar.xz /etc

real0m7.700s //耗时7.700秒

user0m5.428s

sys0m0.456s

查阅 tar 文件的数据内容1

2

3

4

5root@ubuntu:/temp# tar -ztv -f etc.tar.gz

drwxr-xr-x root/root 0 2017-04-13 09:31 etc/

-rw-r--r-- root/root 1260 2016-03-17 04:58 etc/ucf.conf

drwxr-xr-x root/root 0 2016-04-21 06:07 etc/selinux/

...

可发现,每个文件名都没了根目录。正如备份的时候出现的警告:tar: Removing leading `/‘ from member names那样。这种做法主要是为了防止解压缩的时候出现覆盖源文件的情况。

如果要保留文件的根目录/,则可以使用-P(大写)选项。

指定目录解压缩

如果直接在当前目录下执行命令:tar -jxv -f /root/etc.tar.bz2,则目录下会多出个etc的目录。如果要指定解压缩的目录,可以使用-C选项。如将/temp/etc.tar.gz解压到/tmp目录下1root@ubuntu:/temp# tar -zxv -f etc.tar.gz -C /tmp

指定解压某个文件

除了一次性全部解压,我们还可以指定解压某个文件。比如我要解压etc.tar.gz下的etc/shadow,可以使用如下命令:1

2root@ubuntu:/temp# tar -zxv -f etc.tar.gz etc/shadow

etc/shadow

打包某目录,但不含该目录下的某些文件

比如我想打包/etc目录,但是不想包含目录下的ppp和qqq文件:1root@ubuntu:/temp# tar -zcv -f etc.tar.gz --exclude=/etc/ppp --exclude=/etc/qqq /etc

或者:1root@ubuntu:/temp# vi exclude-file

里面输入1

2/etc/ppp

/etc/qqq

然后使用命令:1root@ubuntu:/temp# tar -zcvf etc.tar.gz --exclude-from exclude-file /etc

仅备份比某个时刻还要新的文件

比如,仅备份比/etc/passwd文件新的文件(mtime):1

2

3

4

5

6

7

8

9root@ubuntu:/temp# ls -l /etc/passwd

-rw-r--r-- 1 root root 2243 Apr 13 09:30 /etc/passwd

root@ubuntu:/temp# tar -zcv -f etc.newer.passwd.tar.gz --newer-mtime="2017/04/13 09:30" /etc/*

tar: Option --newer-mtime: Treating date '2017/04/13 09:30' as 2017-04-13 09:30:00

tar: Removing leading `/' from member names

/etc/acpi/

tar: /etc/acpi/asus-wireless.sh: file is unchanged; not dumped

tar: /etc/acpi/asus-keyboard-backlight.sh: file is unchanged; not dumped

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值